This is not just programming or software development problem, it is an educational problem. In physics, kids are still taught that electrons orbit atomic nuclei like planets orbit a star. They don't, and have great difficulties understanding quantum wavefunctions and delocalization later on. Yet, the true explanation (that electrons are delocalized, like a cloud, with a specific density distribution, with these distributions having physical properties that are analogous to orbits –– orbitals ––, spin direction, angular momentum, and so on) isn't that much more complex, and with a bit of help from child psychologists with lots of experience, can be taught to any schoolkid of average intelligence or better. The end result? Well, as adults, they hear all this woo-woo about quantum physics and spooky action at a distance, and decide that either they were lied to as kids, or this newfangled quantum stuff is bunk, and therefore the Earth is flat. Only the smartest understand why simplifications and approximations are useful, and how they work, and are not caught by that.
I don’t think that’s true at all. Simplifications and abstractions are a necessary part of learning, because it’s impossible to learn all at once every detail needed to fully understand a complex system. So you abstract away parts of it and teach the big concepts, and then later go back and little by little replace each abstraction with a more complex one until you’ve gotten to the details.
I'm not talking about going into small details, I'm talking about approaches that yield an intuitively correct picture.
Simplifications and abstractions work, if the learner understands and acknowledges they are a simplification and abstraction. In the visual programming environments, there is none of that; quite the contrary, many try hard to show that everything that is possible, is possible in that environment.
In software development, you need to understand the underlying approach, before you can reliably create new things. Without understanding, people will just copy and repeat already existing stuff, without creating anything new.
The rise of anti-intellectualism has precious little to do with that. People don’t become flat earthers because they weren’t taught quantum physics in elementary school. There are far more complex issues at play, and education is just one (small) part of it.
That – teaching quantum physics in elementary school – wasn't what I suggested. The problem occurs when in elementary school the teacher states that the approximate model is
fact, when it isn't. In software development, we have multiple paradigms (from imperative to event-based to functional programming) and multiple levels of complexity, and unless the learner understands that early on, they will be later locked to the
unlearn-before-you-can-learn-new-stuff antipattern.
Furthermore, I
do believe that anti-intellectualism –– or rather antirationalism –– is, in fact, learned in or during elementary school.
One big cause is teachers who pose themselves as the gatekeepers of facts and knowledge, instead of tutors and mentors in learning.
So yeah, these fast and easy development environments are very nice entertainment and making even impressive-looking stuff with little effort, but they do not work as an educational tool. There is nothing there that pushes anyone to create anything better, just more of the same, but cheaper and with less effort. I do not believe that direction is sustainable for the field of software development as a whole; we need better educational tools.
Fact is, most people aren’t innately gifted programmers, and I don’t really think that talent can be taught.
I agree, but that has nothing to do with what I wrote.
These environments are perfectly okay for the purpose of creating more of the same, yes. There is nothing wrong in using them, even using them to create commercial projects.
The point is, these environments generate an intuitive picture that is completely incorrect, and
hampers understanding and learning when moving outside the environment. They do not help with learning anything outside that particular environment; quite contrary, they actively try to keep their users within that environment.
That’s why I am so in favor of Arduino: the instant gratification “hook” that keeps you interested in learning more. They struck just the right balance of easy, reliable first steps, but leaving enough complexity and unpolished areas that you quickly have to start learning more “serious” programming, MCU, and electronics skills.
Sure, I like Arduino too. But, consider what happens at the point when a learner wants to step from Arduino into proper freestanding C/C++ environment. (Including why I used C/C++, and not just C++? Because of avr-libc/newlibc, depending on the microcontroller. There is most of standard C library available, but only a tiny subset of C++.)
What I suggest, in practice, is to start with these environments, but explicitly describe their limitations and approaches. For example, that Arduino is a freestanding C/C++ environment (meaning only a subset of the C++ features and C standard library are available), and that it handles several things (like declarations) automatically for you. No details, but a mention, so that if they are some day ready to break out, they remember the initial mention, and have a working approach, instead of having to tear down their earlier understanding or assumptions before they can rebuild new ones in their place.
Really, it is the same with elementary physics. It is perfectly okay to use the approximation, and start with the approximations and simplified models. You do not teach quantum physics to elementary schoolkids; but you do not claim that Newtonian mechanics are "incontrovertible facts that exactly describe the universe", either. It suffices to mention that when one gets to really small scales, quantum phenomena are observed; and at very high masses, energies, and/or velocities, relativistic phenomena are observed. It suffices to list the terms without going into any details, as the important bit is to have the correct intuitive understanding: Newtonian physics describe human-scale stuff extremely precisely, but there is more when you change scales.