The following question has been eating at me for the last couple months. After witnessing the quality of the replies here, I'm hopeful that I'll get some great responses here.
I'm TAing a course in the ECE department entitled "Exploring Digital Information Technology", intended for non-majors to get their feet wet with the whole "how computers work" thing. Being a grad student in computer architecture, not only is my background in the subject matter much different from the students (many of them are freshmen with no computer experience beyond Word and YouTube), but my entire mode of thinking seems to be fundamentally different. I've had a large degree of success TAing more technical courses before, where the students didnt necessarily have any background in the exact material, but they were detail-oriented, technical-minded folks that grok'ed things like variables, arrays, indexing, indirection, functions, etc. I've had an extroardinarily difficult time with the first unit of the course, which essentially covers HTML, JavaScript, and the Internet (network topologies, IP addresses, etc.)
My questions to the SO community are many, but I'll start with a few:
At the highest level, if you were trying to teach someone how to think like a programmer (break down human-level algorithms into simple steps that can be translated into functions, procedural statements, if-then-else statements, and loops), would HTML and JavaScript be your approach? This gives results that are relatable (e.g. a webpage that does useful things) more quickly than other approaches, but the separation and integration of HTML and JavaScript, and the whole "declarative HTML talking to procedural JavaScript" thing seems to be cramming in too many abstract concepts too soon.
If you did want to teach HTML and JS to a total beginner (somebody who has difficulty thinking algorithmically), what resources would you use, what projects would you assign, etc.? I'm finding that even when I break down concepts like a
for
loop as far as I think I can, it's still a little much. Is there someplace out there that starts from first principles and can really help a true beginner grok why parentheses and semicolons are necessary, what arguments to a function are, etc?
I honestly have many more questions, but I think this is a good place to start. I'm looking forward to compiling your results into something that can be used not only for future iterations of this course, but also in my personal "tech evangelism" pursuits. I did read through the other "How to Teach a Beginner to Do X" questions on here, but they seem to be targeting an entirely different class of 'beginner': folks who are mathematically-minded and very interested in learning about programming, but don't know where to start. I feel like the answers for that group will be substantially different than for those with a different mindset, and perhaps less intrinsic motivation to learn.