I am under no illusions that my unfinished PhD (dissertation pending) gives me any special insight into how to teach fundamental programming concepts. These are topics that thousands of students are introduced to every day in high school and college courses, coding boot camps, or through self-study. I know how I learned this stuff, but that doesn't mean the same approach will be effective for everyone else.
The bulk of my preparation is in developing the content of my classroom lectures (about 24 sessions, 80 mins each). My goal is for the lectures to be sufficiently engaging that all my students choose to attend, even if I don't grade them on attendance. Anyone can go watch the Harvard CS50 lectures on edX if they want to learn programming; the only advantage I have is that I'm doing it live in front of my students and, if I prepare well, can pull them into the subject with an interactive personal experience.
So, I'm asking the HN community for advice. I'd like to hear about the best experiences you have had as a student, not just limited to learning CS topics. I'd also like to hear about any particularly memorable or effective approaches to learning fundamental programming concepts that you've encountered which I might be able to employ in my own course.
Thanks!
Probably one of decent ideas is to implement a version control system early, so the student is going to have a working one before the code becomes too hard for one person without even a version control system. In my studentship we used to write text editors and we used to learn a lot about bits and bytes and some big old computers but what matters more IMO is all kinds of free and open-source tooling for text.
C is a great language, especially for teaching CS (python is too but C allow to get into memory allocation and all the fun part of what make computing and compiling fun.)
I have learn C with code writing on a black board and pen and paper... that was good too but not sure if young people would have enough patience for such an approach