I spent Saturday teaching my two C# classes at Byte Back. Byte Back is a great organization in North East Washington DC that provides computer skills training at little or no cost. I was involved with Byte Back in the very early days (1997); I taught some of Byte Back's first Computer Basics courses at the Gospel Rescue Mission's computer school.
Byte Back is always looking for volunteers to teach computer skills. If you understand PCs and want to help others, they are a great group!
It's been a very interesting challenge teaching programming to non-programmers. I think I've learned as much as my students - certainly I would do a number of things differently next time. The biggest mistake was forming a class with a very wide range of abilities, ranging from folks who already do Cold Fusion or VB to folks who had never seen code. We've since divided the class into two groups, and that's allowed us to move each group at a more appropriate pace. I still have problems pacing appropriately, so I'm encouraging my top students to go to other classes as well. A couple of them are participating in the Rockville ASP.NET Study Group.
In the slower moving stream, which consists of people who had never done any kind of programming, the biggest issue is getting people past the “empty editor” syndrome. I've got people who can read a simple C# program and understand it, but can't code anything when I ask them to write a program of equivalent difficulty. They literally stare at the blank page and don't know where to start. They don't have the mindset that allows them to break the problem down into “statement-sized” pieces. I would welcome anyone's thoughts on ways to help people start coding for themselves. Perhaps next week, I'll try to get folks to write pseudo-code on the whiteboard and see if that helps.
Another decision I made that I'm not sure about is to start people out by writing console apps. When I got them to build simple Windows forms apps, they got very excited about what they built. Windows forms are just more visually interesting than console apps. On the other hand, I think it's easier to see the complete flow through a console app, and until someone has a good grasp on how if statements and simple loops work, it's hard to imagine them building any real programs.
One thing I did that was definitely wrong was to start by using the .NET Framework command line tools. I was concerned that Visual Studio was going to be confusing. I thought typing "CSC" into a command line would be easier. In fact, most of my students are too young to remember MS-DOS and had never seen command line applications. Because of this, they found anything command line related to be a large obstacle.
I would love to hear from other folks who teach programming to people who have never seen code before, so I can benefit from your experience.