I have two daughters, 14 and 10 years old. For the past few years I have wondered if either of them has any interest in the software world. I remember as a kid I made a bold statement to my dad (who was in the IT field also) that I wanted nothing to do with the software business. Look at me now. Besides, both my wife and I have computer-related degrees, so there must be some genes in those two girls that would make them a natural, right?
I found early on in college that the logic of a software program made perfect sense to me. There was one and only one right answer (unlike the English classes I had to take) and the software did exactly what you told it to do. It resonated with me. However, in today's "short attention span" digital world that my kids are growing up in, the concept of learning to program using today's development environments and books doesn't look appealing even to me. In my early days of exploring what code can do, the challenge of learning the syntax and achieving successful compilations was the major challenge. Learning a programming language from a book was not the best way to learn and it took lots of trial and error. The compiler got a workout.
So I started looking around (i.e. Google) for some creative solutions. I landed on the Alice project which was even more intriguing after learning Randy Pausch was one of the creators (if you haven't watched his last lecture, it is well worth it). Alice provides a 3D programming environment that allows you to create and manipulate a 3D scenario using programming techniques. You create objects and make them move and control the scene all via programming techniques. It takes advantage of today's video craze; they can create their own movie! Being an Eclipse person today, I eagerly awaited an Eclipse version of Alice. As Alice is driven by the university community, the release cycle was very long and frankly I grew impatient. I have yet to install it and even try it. I wish the project well, but haven't had the energy to try it out.
Within the last year or two, I became aware of the Khan Academy. I found myself watching some of the Calculus lessons and getting my college Calc book out (geek). I just discovered that they now have a computer science category. Very cool. I checked it out. I was really expecting to see some whiteboard-type lectures on programming fundamentals; for loops, variables, functions, etc. Well to my surprise they took a very different approach. They use an online environment to learn to program. The code is right there in a text box. You can change it and run it and immediately see your results. A video gives you the basics and you can then play to your heart's content. I spent about a half an hour playing with their Pascal's Triangle program. Very very cool. I was impressed. Khan Academy gives credit for inspiring this type of learning to Bret Victor. He has thought a lot about how to learn programming and it makes a ton of sense. You can read all about his ideas here. Again, well worth the read.
As an IBMer, this obviously brings me to the type of development environments we provide. I am an avid Rational Application Developer and Rational Software Architect user. These products really represent the other end of the spectrum when it comes to development environments, and rightly so. Enterprise level software development environments are not catering to those learning the program language. Go out and learn java first before you build your first EJB-based web service. However, I do believe there are some lessons that can be learned from these new learning techniques. One area that resonates with me is UML modeling. For my first two years at Rational Software, I taught an Object-oriented Analysis & Design class once a month. This was back in the good old days where OOA&D and modeling were relatively new to the masses. Most organizations had "the guy" that was dabbling in this space and convinced someone to bring Rational in to teach a larger group. Rational Software Architect is a great UML modeling tool and I have had much success with it. But I believe that to this day, in order to learn to be a successful architect using UML, you are stuck with grabbing a fully featured modeling tool and a book and slugging through it. There is no way that I know of (please let me know) to grasp the concepts of UML in a way like Bret Victor's vision for learning to program. I am not sure what that looks like in my head, but someone way smarter than me I am sure can think of something.
I am going to show the Kahn Academy computer science lessons to my 10 year-old first. She is the creative one. Hopefully I can trigger her interest in programming that I know is in her DNA, unless it has skipped a generation.