I've been toying with the idea of running a few classes to help early and mid-career adults learn to program. Although it's been so long since I first learned that I worry I'd struggle to get the basics across.
Does anyone have a recommendation for a good, up to date, open source, introduction to programming? Ideally something that uses an experienced programmer (i.e. me) to guide.
My kids never showed much interest in program despite my encouragement, but this year our high school changed its programming curriculum to follow Harvard's CS50 model:
The first half of the course is mostly in C and then switches to Python, and I really think it is a very well designed course that get students doing some interesting stuff very quickly while building a solid foundation for future learning. There is an online version of the course and students can watch all of the videos and lectures. I believe there is also a teacher training program for the curriculum.
I was surprised when my son came home and started asking me questions about malloc and free, but he has learned a lot in a very short period of time.
In my experience, it's close to impossible (or maybe even totally impossible) to get the basics across. I have been trying with many non-programmers for years and I have followed many people who tried to become programmers.
At this point I think it's probably a matter of "you either have it, or you don't". All of the people who succeeded "already knew" how to program, before I even showed them, or they never managed to learn.
And my experience is even with people who actually did manage to secure a programming job. In my opinion they still don't know the basics - they blindly follow "procedures" and mostly do copy/paste programming, without being able to grok the idea and why these things work the way they do..
The truth is what many of us consider to be basics - big O notation, b-trees, so on are not really needed by the average programmer. They might be useful (I get use from them) but they're not necessary.
Likewise, getting into intimate discussions on file encoding or strings in memory just isn't going to be retained by someone whose major interaction with a computer is facebook.
Focus on practical tasks, but take time to explain what code is doing in plain english. If you've done rubber duck debugging, you're aiming for that level of simplicity in your explanation. Avoid technical words, use simple metaphors and generally avoid the history lessons. Once you establish a baseline of skill in the developing programmer, swap the roles - have them explain their code to you.
I'm not even talking about big O or algorithms & data structures.
I'm talking about the basic concepts of function, iteration, abstraction, indirection etc.
Yeah those are definitely things that new programmers need to learn, but they usually need to learn them by doing things the hard way a few times first.
"yeah, that's a lot of copy and pasting isn't it? Want a neat trick to save yourself some effort?"
I have as well, I'm happy to report out of the last 5 non-programmers or very-new programmers I've trained, 3 are senior engineers and 2 are on-level engineers and I'd gladly work with any of them.
I like the "X by Example" books from O'Reilly in whatever your desired language is. Not exactly open source but quick to learn practical programming which is probably what you're after with adults.
Does anyone have a recommendation for a good, up to date, open source, introduction to programming? Ideally something that uses an experienced programmer (i.e. me) to guide.