Now think about something like HyperCard. That's an IDE. It's eminently usable and learnable (even friendly), and yet still does all the things an IDE does.
"IDE" doesn't have to be Visual Studio. There have been friendly IDEs in the past, and there's no reason they couldn't be built today except nobody's doing it. There's actually a nasty trend in software development right now that can be summarized as "they're programmers; they don't need usability or discoverability". Look at Git for an example. Ugh. This trend can not die quickly enough for me.
Every hidden thing is a thing that, when it goes wrong, I can't fix. Something "goes wrong" when it's either not working as designed, or it's broken as designed and needs to be reconfigured or otherwise changed: The IDE handles the wrong language, for example, and needs to use a different compiler and have different highlighting and formatting rules.
IDEs that only handle one language are beneath contempt.
The 4GL's like WINDEV made this more the case. We saw it on the command line side with COBOL. That and what happened with 4GL's in general should be a lesson that whatever we build for new users better (a) be consistent with more powerful stuff, (b) easily integrate third-party code, (c) be easy to port, and (d) do good practices by design in case we're stuck with it for 50 years. :O
I liked the debugging features of IDEs when I had to maintain a gigantic PHP codebase. The hours I stepped through code after one click :D
But after I started with JavaScript, which brought graphical debuggers inside the runtime (Browser) I didn't need this feature anymore...
Also IDE get features slower, Atom and Sublime often have more up to date plugins, which allows the use of more alternative languages like LiveScript.
The 'complexity of IDE' is overrated. Once you've memorized the hot keys, it makes a world of difference, running grep to find a piece of code you don't remember hidden under layers of inheritence. You are setting up for failure if you act like a luddite.
Professional programming like professional dancing is simply taking that same idea several steps further.
Most of all in spreadsheets, which the author invented!
I like Jerry Weinberg's phrase for this: oblivious programming.
"[...] this is not to say that many people can't get immersed in systems that require such understanding. They do in many parts of their lives. For example, lawyers and tax accountants routinely work with such complexity in their contracts and planning. Doctors work with an untold number of variables. Someone planning a big party has to work out the food, matching paper goods, favors, invitation list, entertainment, etc. Yet, all of these people rarely program computers in addition. It's just that people who aren't professional or hobbyist programmers usually don't want to get so immersed in something that is infrequently done and not part of the rest of their lives. The question really isn't "Why Johnny can't program" but rather "Why Johnny won't or doesn't choose to program"."
There are exceptions like people in India that get a free college education and take up programming to get a good paying job in the West somewhere.
Whiteboards are often a better solution than computer systems when it comes to patent care, because they simply have fewer ways to fail.
So? Many people solve specific crosswords, but that doesn't mean they can write a generic crossword-solver. The underlying skills are very different.
On a side-note, the questions the author asked were partly solved with efforts like Scratch. That project made a form of programming as easy as playing with Legos. What kids did from there was amazing. Might be lessons to apply in the adult tools.
Makes me think there's a very grey area between declarative programming languages and just plain data. If writing HTML is considered programming, does that make a draftsman drawing up building plans a programmer?
Text based tools are easier to keep modular and advance the process. Without someone doing it, the visual environments seem to stagnate (anecdotally).
An example..in android programming I spend some time marking up my classes with annotations telling the compiler which way I mean some java method or statement to be treated by the compiler which improves the management of the software dev process by reducing the error count down significantly