Many will read this wondering “what is designing for humans and aren’t programming languages already designed for humans?”
Many weren’t designed at all so much as hacked together for context they were originally used in with terrible consequences for learning or effective use by average person. C and early PHP probably lead that. Many others were affected by committee thinking, backward compatibility, preference of their designer, or the biases of people who previously used hacked-together languages. There’s few languages where someone or a group sat down to carefully engineer them to meet specific objectives with proven success in the field at doing those. Examples include ALGOL, COBOL, Ada, Smalltalk, ML for theorem proving, BASIC/Pascal for learning imperative, and some LISP’s.
So, if we’re designing for humans, what does that mean? It means it should easily map to how humans solve problems so they can think like humans instead of bit movers (aka machines). BASIC, some 4GL’s and COBOL were early attempts at this that largely succeeded even with laypeople because they looked like pseudo code users started with. Eve appears to take it further in a few ways.
So, there’s your meat. Years of doing it the common way, which wasn’t empirically justified to begin with, showed that people just don’t get it without too much effort. Then they keep spending too much effort maintaining stuff. Languages like COBOL, BASIC, and Python showed changes to syntax & structure could dramatically improve learning or maintenance by even laypersons. Visual programming systems, even for kids like with Scratch, did even better at rapidly getting people productive. The closer it matched the human mind the easier it is for humans to work with. (shocker) So, they’re just doing similar stuff with a mix of old and new techniques to potentially get even better results in terms of effective use of the tool with least, mental effort possible by many people as possible with better results in maintenance phase due to literate programming.
That’s my take as a skeptic about their method who just read the article, watched the video, and saw the comment by one of project’s people on HN.
I think the basic premise that is at least questionable is that it assumes that “laypeople” actually want to program.
If there is any lesson learned from the last few decades it is that these business people are very effective of writing programming out of their own job description.
Just have a look at all those fin tech companies … they hire programmers who can learn the business aspects, not business people who can learn how to code.
I think there’s a few examples of companies doing that:
It sounds like both companies have been extremely successful in teaching functional programming to traders.
I hope you’re not extrapolating from “business people avoid doing X” to “X is unimportant to normal people”. Business people use chauffeurs and taxis, but normal people benefit from knowing how to drive. Business people order takeaway and go to restaurants, but normal people benefit from knowing how to cook.
In a world where data processing is increasingly important (because you need to do it for your job, or because it’s being done to you by your government/insurance company/social media platform), being able to program is a super-power, and it seems irresponsible to assume that normal people don’t want that before they’ve even made an informed choice.
Most laypeople dont want to do about anything they do for money. It’s just a job. You’ll find they did spreadsheets, RPG, COBOL, R, etc when they saw value in it and could comprehend it. They then wrote a ton of code. We saw MySpace do something similar with HTML.
FWIW I’m super happy this project exists, and that they’re exploring something with the potential of being so much better
Making programming more human-centric is a very noble goal, but the authors seem to be very confused about very basic concepts:
Eve is designed for “literate programming” - instead of comments embedded in code, code is embedded in a document.
Describing what code does and/or is meant to do in natural language is very inefficient in time and space. Mathematical notation is more information-dense than even the most information-dense programming language, and isn’t limited by the awkwardness of deeply nested dependent clauses in natural language. So I want to use mathematical notation instead.
An IDE like Medium, not Vim
This is very bad advertising - Medium’s UI infuriates me like few other things do. Because of my poor eyesight, I need to select text to keep track of my current position in the paragraph I’m reading. When I select text on a Medium post, I end up accidentally clicking on one of the links on the black pop-up that appears - often the one for tweeting the selected text. Which is something I never want to do.
Eve is based on a single unifying principle: everything is a record - a set of attribute/value pairs associated to an ID.
Oh, object identities for everything? Bye-bye, equational reasoning!
Because literally everything is a record, we have a completely transparent view into our system.
Oh, everything has access to everything? Bye-bye, modularity and separation of concerns!
When something isn’t working, you press the inspect button and Eve will help you figure out why.
I’d much rather get help writing programs that aren’t broken, than get help fixing programs that are.
invariants can be enforced globally by producing error records. Doing this through normal Eve blocks gives us the full power of the language to express arbitrarily complex invariants.
This is just a different way to do assertions, and has absolutely nothing to do with “enforcing invariants”. Enforcing an invariant means making invariant violations impossible, and the only way it can be done is using static analysis.
Why can’t we ask “Computer, why is this malfunctioning?” like they do in Star Trek?
Why can’t the computer warn me before things will malfunction? Oh, wait, it can!
Maybe I’m wrong, but this environment looks too much basic to allow to solve the main part of the whole problem solved with a traditionnal programming environment. It looks that it would help for a very small subset of it
They have suggested use cases where Eve shines here: http://programming.witheve.com/deepdives/whateveis.html
Basically the weakness of most 4GL’s and visual tools. A lesson to always remember. Solutions are to make sure your language can handle anything or just keep it niche.
A big problem is that not only does the data sources you want to prod need APIs, they also need Eve-compatible representations as well. Many services are API hostile, especially ones people want to use.