I remember when I got started in computing. For the morbidly curious it was officially "a long time ago" and I'm afraid that's all I'm going to say other than to note that a major source of inspiration for me was the movie TRON, or more specifically the computer graphics in that movie (naturally I'm looking forward to the release of the new TRON movie!).
Computers have come a long way since then and what they've gained in power, they've also lost in simplicity. To draw an analogy, the kids of my father's generation, who spent a lot of time in the garage tinkering with cars, would have to make a big technological leap before they could monkey with the guts of today's newfangled automobiles. In a similar fashion the computers of my era, with built in Integer BASIC and simple graphics modes, have given way to mouse-driven, fully graphical user interfaces of today. Where I started programming by entering a few lines of text at a prompt and watching my code spit out streams of text in return, these days an aspiring programmer has to create a significant chunk of code to put up a window into which they can display their results, before they can write the code that generates those results.
In short, there's a bit more of a learning curve to get started. While kids are a bit farther along when they start out, it doesn't hurt to give them a push where you can.
Several months ago, the counselor at the local elementary school called to invite my daughter to join a newly-formed Engineering Club for the girls in the fifth grade. My daughter had scored well in her math and science tests and they wanted her to be a part of a pilot program to help foster an interest in science and engineering. For various reasons (most having to do with bureaucracy) the school was unable to get the program off the ground. My wife, not wanting the girls to miss out on an opportunity, took the program off-campus and created an informal club, divorced from the school, and driven by the parents. The Girls Engineering Club was born.
The club has a dozen or so young ladies as members and since they're not tied to the school calendar, they have meet once or twice a month through the summer. In the club they explore applications of science, mathematics, and technology with a particular focus on experimentation. For example, the club formed shortly after the recent oil spill in the Gulf of Mexico. The girls spent their first meeting talking about what the professional engineers were doing at the time, and then trying to find ways to separate motor oil from water using things like sand, soap, coffee filters and dish soap. When I got home that day, I saw the aftermath. I hope the girls learned a lot... it was certainly clear that they had made a big mess and had a lot of fun.
It became my turn to help when the club took up the subject of Software Engineering. I'd like to say that the club leadership took me on because I have degrees in Computer Science and I'm a professional Software Engineer by trade. In truth, however, I think it was just my wife who thought I needed something better to do with my weekend than play video games. For whatever reason, however, I was pressed into service to teach the girls about Software Engineering.
Naturally I wanted to teach the girls a little bit about how engineering principles apply to the creation of software. But I imagine that a group of pre-teen women would find an hour and a half exposition on the subject at best half as exciting as that last sentence makes it sound. Moreover, these girls were used to hands-on engineering club meetings. If the girls didn't "get their hands dirty" with at least a little bit of programming, the meeting would be a bust. The problem was... How do you teach a dozen pre-teen girls about programming; and on a shoestring budget?
When I was taking computer science classes in school we had very expensive labs with carefully controlled software environments. For the club, each girl probably has a computer at their house, but I wasn't anxious to ask parents to pull them out of place, drag them somewhere that we could set them up, and then slog through the nightmare of trying to get a semi-uniform environment on them.
Instead, I gathered up my veritable museum of computer hardware. Using those that were only a few years old, and still capable of running Mac OS X, I pulled together three that could be wirelessly networked together and have their screens shared. It was a bit of an ad-hoc arrangement, but functional.
Next came the question of subject matter. In my daily life I work with a programming language called Objective-C. Objective-C is a really fun language, but it requires a pretty hefty tool chain to use effectively. I didn't want to burn a lot of my hour and a half with the girls teaching them about development tools... I wanted them writing code. Clearly Objective-C wasn't the answer.
A while back I read about a book called Learn to Program by Chris Pine. Mr. Pine had created a web site dedicated helping people who had never programmed before learn enough to get started. After the web site had been around a while, and after a bunch of folks had offered their comments and suggestions to improve it, he collected the information from the web site into the book.
I wanted to get a copy of the book for the girls. The Pragmatic Programmers offers many of their books, including this one, in electronic formats (PDF and eBook). I contacted them about a volume or educational discount on a PDF copy of the book. A company representative was kind enough to donate the book for the girls in our club!! You could have knocked me over with a feather. That gift put the train on the track and the wheels in motion.
(In appreciation, let me mention that Learn To Program is available in its Second Edition from The Pragmatic Bookshelf today. This is not an official endorsement by SoftLayer, but it is an enthusiastic recommendation from your humble author who is very grateful for their generous gift).
In the end, the club meeting was on a very rainy day. We struggled to keep the computer equipment dry as we hauled it to the home of one of the club members. Their poor kitchen table became a tangle of cords carrying power and video signals. Using shared screens, and my iPad as a presentation controller, I walked the girls through a Keynote presentation about some of the of the basic concepts of Software Engineering. Then we fired up Ruby in IRB and I showed the girls how to work with numbers, variables, and simple control structures in Ruby. They had to sit three to a computer, but that also let them help one another out. They learned to use loops to print out silly things about me (for example, I had my computer print out "Mr. Thompson rocks!", the girls felt that they absolutely must get their computer to print "Mr. Thompson most certainly does not rock!" 1000 times). There was an awful lot of giggling, but as the teacher I was proud to see them pick up the basic concepts and apply them to their own goals. My favorite exclamation was "Wow! I could use this to help me with my homework."
As a Software Engineer, I spend an awful lot of my time sitting in front of a screen watching text scroll by. My colleges and I have meetings where we work together on hard problems and come up with creative solutions, but just as the computing environments of the day have become more complex, I've become a bit jaded to the discovery and wonder I enjoyed when I poked away at my computer keyboard all those years ago. One of the benefits of volunteering is not what you do for others, but what they can do for you. With the Girls Engineering Club, I got to experience a little of that joy of discovery once again. The price was a little elbow grease, some careful thought, and a bit of my time. It was absolutely a bargain.