1. 44

  2. 17

    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.

    They notice people write descriptions of the problem and solution then must code them. The coding style has same pattern. They notice people have a hard time managing formal specs, the specifics of computation, error handling, etc. So, they change the style to eliminate as much of that as possible while keeping rest high-level. They noticed declarative, data-oriented stuff like SQL or systems for business records were simple enough that laypeople picked it up and used it daily without huge problems. They built language primitives that were similarly declarative, simple, and composable. They noticed people like What You See Is What You Get so did that. Getting code/data for something onscreen, being able to instantly go to it, modify with computer doing bookkeeping of effects throughout program, and seeing results onscreen is something developers consistently love. Makes iterations & maintenance easier. They added it. Their video illustrated that changes on simple apps are painless and intuitive compared to text-based environments with limited GUI support. Their last piece of evidence was writing their toolchain in Eve with it being a few thousand lines of code. Shows great size vs functionality delivered ratio with the quip about JavaScript libraries being bigger illustrating it further.

    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.

    1. 3

      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.

      1. 7

        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:

        1. Jane Street Capital has a month long boot camp for traders to learn Emacs, Unix and OCaml.
        2. Standard Chartered has traders and quantitative analysts learn Mu, a strict version of Haskell.

        It sounds like both companies have been extremely successful in teaching functional programming to traders.

        1. 5

          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.

          1. 4

            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.

        2. 5

          FWIW I’m super happy this project exists, and that they’re exploring something with the potential of being so much better

          1. 2

            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!

            1. 2

              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

              1. 5

                They have suggested use cases where Eve shines here: http://programming.witheve.com/deepdives/whateveis.html

                1. 2

                  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.

                2. 1

                  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.