Programming Considered as a Human Activity (1965)
fermatslibrary.com
fermatslibrary.com
This was with ALGOL though; Haskell uses lambdas and is shorter still. I feel like Scheme / callcc might be even shorter. And the difference between callcc and goto is not at all clear.
To be fair, though, he does mention the human-computer interface. Unfortunately this has still not really been explored in the context of programming. There are toy environments like Light Table etc., and the more developed languages come with IDEs, but nobody seems to use them in practice, preferring vim or emacs or whatever.
My guess for this is that writing GUIs in an extensible, modular, and discoverable/usable way is still an open problem. There are style guidelines, e.g. https://www.smashingmagazine.com/2016/06/designing-modular-u..., but those aren't code and don't fit into an Agile-style incremental development model. The only thing that seems usable are constraint layouts, e.g. http://ieeexplore.ieee.org/document/4483218/. But those don't account for all the little UI things, like the efficiency of the interface or which actions are most commonly used. IMO there needs to be some library to just take a bunch of actions/verbs (e.g. Copy to clipboard) and nouns (displayable data stuctures: images, documents, etc.) and turn that into an optimized user interface design, with keybindings, menus, toolbars, dialogs, widgets, etc. And then of course there's the issue that picking a GUI pretty much fixes your choice of programming language, away from any of the functional PL's.
As to GUI builders their are a lot of them however people tend to design for the screen they use which creates almost as many problems as it fixes. Further, that's rarely the 'hard' part of the design even when you have them using a good text based abstraction is often more productive especially in terms of diff tools and version control.
Modern codebases are thousands or millions lines of code. Nobody has the time, inclination, or ability to read/learn all of it. So a lot of coding ends up being revisiting old design decisions and searching for the relevant parts of the code. See e.g. https://air.mozilla.org/the-joy-of-coding-episode-93/, he has 10 tabs open and spends a significant fraction of time just switching between them.
> GUI builders
Pretty much all GUI builders are WYSIWYG or markup languages. As I mentioned, I want something declarative: define the verbs and the nouns, guesstimate a usage frequency of the various parts, and generate a UI, without specifying minor details like combobox vs text field. Something like https://blog.mozilla.org/ux/2013/04/firefox-next-evolving-th... (Note April 1 date)