Guiding Novice Programmers
keefe: I think one key is to have a solid understand of the fundamentals - I think programming is like martial arts that way. As usual, it doesn't have to be exact, just a useful abstraction. What is a computer program, anyway? A set of instructions for manipulating data and devices attached to the computer. The CPU can only manipulate data in RAM, so you have to load data from storage, network and other devices. If you want it to live on past the program running, it needs to be sent out of ram. At the low level, all computer programs boil down to machine codes - sequences of simple operations. There's no need to learn them. Higher level languages stand between human language and instruction primitives. A compiler does the translation. Higher level languages all share certain fundamental concepts : functions, loops, variables and in some cases, classes and objects. An object is a bunch of data grouped together with a name and classes define common characteristics of objects. Once they understand these basics, they should explore them in some safe environment. There's plenty of ways to do that. I really think you need to get this kind of basic literacy down first and it doesn't matter what language it happens in. Once they get over this hurdle, focus on data and use cases. What is your application about? What are people trying to do with it, why did someone build this thing in the first place? What are the fundamental types of data involved and how are they transformed? I think all programs tend to be broken down into input, processing and output. Where can you see these things in your application? That gives the lowest level building blocks and the highest level overview. From there, it depends on their interests but however you slice it, a good place to start is to explain version control and give them a bug to fix. Once they get frustrated, do pair programming.