Just the other day I was talking to Seth, my 15-year old, about registering for the next semester in high school, and he made the comment "I wish they taugh programming at my school". I guess as a developer evangelist for Microsoft, if I don't react to that invitation I should look for another job. When I mentioned this opportunity to teach programming to my son to my manager Martin Schray, he suggested that I should document my adventures with my son on my blog, since this is the age that we at Microsoft believe is critical for recruiting students to technical college majors. So with that in mind, I will document my successes and failures in teaching Seth the basics of computer programming, with the hopes that it will offer insights that might be valuable to others.
First, some background on Seth. Seth grew up in a house where there has always been a computer, and he started using it at about age 5. I bought our first desktop PC in 1991, and Seth was born in 1992. He is a proficient keyboarder, and IMs, e-mails, texts & facebooks regularly. Unlike most of my six children who are very verbal/liguistic, Seth was actually born with the "math gene". Seth is sophomore in high school, and in the second semester of Trigonometry/Pre-calculus, and has gotten "A"s in math since middle school. I have always liked science, and most of my children has picked up that interest in varying degrees with science fair projects, etc. Seth also enjoys all kinds of science as well, although I wouldn't say that we have lots of science projects ongoing in the house. We have a simple telescope and an ancient 1930's vintage brass microscope that works. We've made model rockets, electric generators, and other simple stuff. Seth also had the advantage of growing up during the time when I was a college professor (Cal Poly Pomona - CIS Department) so I had a flexible work schedule and I often walked him to elementary school. This was the foundation of a close relationship that we continue to enjoy today.
To start out, I introduced Seth to basic HTML. I showed him the Web Monkey website so he could get some basic help, and then we opened Notepad and started with the very basic tags. I then had Seth view his page using a web browser. So far we are just using local files; nothing has been uploaded to a server yet. Seth was intrigued to discover that the tags don't show up when viewed in a browser. We made simple hyperlinks, and then Seth embedded linked pictures. He then experimented with font colors and background colors. After about an hour and a half of experimenting, he had figured out how to put a table in (I had to explain the relationship of the different parts). I then showed him Expression Web so he wouldn't despair of having to write native HTML his entire life, but happily, when I went downstairs a while later he was back on the computer working on his "web page" and he was still using Notepad 🙂 .
Next I explained that what he was looking at was the page on our family computer, but if he wanted others to see his page, he would have to put it on a website somewhere. We then went to GoDaddy to learn about domain names. Seth was surprised and a bit taken aback when I told him I was willing to get him his own domain name right then and there. I suggested a few but Seth didn't want to decide right then. He immediately e-mailed his circle of friends asking for suggestions, and I think he eventually went upstairs to his room to brainstorm about potential names. He knew he'd be stuck with the name for at least a year or two, and wanted to be thoughtful about it. Good for him!
So in summary here is what worked:
- Starting with the idea of a page being a document, but with a different file extension than .doc
- Having immediate experience with having to get file names and path names exactly correct
- Letting Seth decide what he wanted to the page to look like and then asking me how to do it
- Having a cheat sheet with basic HTML tags
- Starting very simple on the local computer and not worrying about FTPing
What we need for next time:
- HTML book with detailed explanations about tags and their available parameters