Since I wrote Software Craftsmanship: The New Imperative, many people have asked me how can they learn how to be a software developer. I'm very dubious about the effectiveness of "sheep dip" courses, and it's hard to find an appropriate introductory book that explains how to become a software developer. Overall, I still think that Ted Nelson had the best idea when he wrote this in Computer Lib/Dream Machines (Aperture, 1974):
The best way to start programming is to have a terminal running an interactive language, and a friend sitting nearby who already knows the language, and has something else to do but can be interrupted with questions. And you just try stuff. Till more and more you get the feel of it. And you find yourself writing programs that work.
Having someone right there with you who can instantly answer your questions makes learning much, much easier. Indeed, I'm often tempted to speculate that the "terminal rooms" of the 1970s and early 1980s made it much easier for developers of that era to learn from each other, compared to the modern practice of isolating each developer in his or her own cubicle.
For most people, it's difficult to create Ted Nelson's kind of learning environment. Luckily, however, it is possible to create a much better technical environment than Nelson had. We can use the power of modern scripting languages to create a much better interpretive environment, and while it might be hard to find an experienced friend to sit with, learning alongside another beginner can help ease the frustrations that come with writing software.