(b) this is totally anecdotal, but as someone who has been teaching computer programming to adults for ~20yrs or so, the biggest obstacle that students face is not that the material is difficult (even when it *is* difficult), but that students are *culturally predisposed to a belief that they're not smart enough to program*, which acts as a permission structure for giving up. (this is peculiar, because no one having trouble in a knitting class thinks "i guess i'm not smart enough to knit")
(c) programmers are predisposed to convincing others that programming is too complicated for "normal people" as a means of job security and achieving social status; computer manufacturers and their software-making friends are predisposed to a marketing message that states: computers are too difficult for normal people, so buy this new machine/software, which is finally the computer/software that normal people can use! together both sides form a kind of mutual ratchet imo
@aparrish agreed, although I would also analyze the teaching of programming. I always use compare with symbolic differentiation and integration of mathematical functions.
I learned symbolic differentiation easily; it's mostly a straightforward process. However, I struggle with integration as it seems like learning to identify so many patterns that are much more complex.
As they are "opposite" processes I feel they compare well with understanding execution and programming.
@aparrish I think understanding how most programs execute is relatively easy to learn, yet just like with integration, I feel we don't know well enough how to teach how to put the pieces in the right order so that when your program executes it will do the right thing.
This might be just another manifestation of gatekeeping; maybe we just haven't invested enough in figuring out how to teach programming, although there are many visible efforts to do so.