Friday, July 06, 2007

The Geek Gap

Almost a year ago, David Brin wrote an article in Salon.com explaining Why Johnny can't code. Though I didn't read the article until today, it reflects feelings I have had for several years.

Way back in 1984, I had a High School Chemistry teacher named Rodney Land. There is not much from High School chemistry that survives in my brain to this day, except the importance of units.

Mr. Land used to make it a point, usually a humorous point, of driving into us the importance of units. "If you don't talk about units, you're not talking about anything." He'd ask the class about the forecast high for today. Someone would call out an answer, "85." His response would be, "85 what? ... sheep?" Then he'd ask about the speed limit on the road in front of the school. Though we had a drivers' license, and most of us drove to school by then, only a few would know the answer and call out, "25." To this he would say something like, "25 what? ... cows?" This importance of units has served me well, but not, perhaps, the way Mr. Land intended.

In 1981, I began at high school. Through a fortunate chance, the county where we lived had a program called "Program Challenge." Those students who scored high enough on certain tests were allowed to take extra courses, not required for the general attendance. It was in "Program Challenge" that I was personally introduced to computers. A friend of my mother was taking a programming course at a local college and I had assisted her with the punch cards on which her FORTRAN code was stored, but I was not personally involved with the computer until I sat down in front of the high school's only Commodore PET.

The PET was officially a business computer. When you turned it on, it came up in BASIC and said "READY." A cassette tape drive was the only storage method available to this computer and it sported a monochrome green monitor. After an hour or two using the computer, I would have afterimages of the letters and numbers in my eyes for hours. I spent a year learning to program in BASIC on that computer, and I was hooked.

In college, I took programming - FORTRAN, PASCAL, ASSEMBLER - all on the mainframe. After changing colleges, I was introduced to TurboPascal and didn't take to it, so I returned to BASIC or it's newer incarnation - QuickBasic. It was during college that PCs for the home and many businesses became affordable. I was in the middle of that wave as well and sold, assembled, repaired, and installed many PCs. I, finally, veered from the path of pure Computer Science, because the degree holders may have been fine coders, but they could not conceive of the hardware on which their programs ran, they could not swap out a floppy drive or format a hard drive - they were too removed from the units.

One of my first jobs after college was as a Computer Technician for a local testing lab. It was there, Mr Land's "units" teaching returned to me. While trying to explain computer conditions, problems, and solutions to the people I worked with, we kept tripping over the terminology or the "units." To assist the people in become more computer conversant, I designed and conducted several training sessions with the staff to make them aware of what a computer was - on the inside, the parts, how they interconnected and worked as a unit. To this day, when conversations get confused and we trip over terminology or concepts, I return to a more basic level and we establish common units from which we can build understanding.

My time in school, plus a couple of years either way, was the high time for coding. Don't misunderstand me, people make good livings coding today, but kids in school do not, for the most part, ever touch code. The basics of the Internet, eMail, Web Browsers, Business Collaboration applications and our Operating Systems (Windows, OS X, Linux, etc.) would not exist today were it not for these coders and their skills.

Within a year of graduating college, Windows for Workgroups was released and within 3 years, Windows 95 was out. Once DOS has become the "dark side" instead of the place where everything begins, coding became less of a place to start and more of the last resort.

Today, kids in school, and this is very apparent in the Middle and High school where my kids attend, the concentration is on using tools instead of creating your own. Programming is relegated to college, whereas most other Math and Science topics are moving the other way with the Middle School introducing Chemistry, Biology, and Algebra.

These kids are whizzes at using the applications they have been taught in technology class. They can make the best presentations and pretty documents, but I think that it is wrong to have to wait until college to start programming. However, as all computers in the 1980's came with BASIC installed, none of the computers today come with anything that could be used by an interested student to easily get into programming. The current and upcoming generations of computing students are being guided into the "computer consumer" role - not giving the option of becoming "computer creators" if they desire. This Geek Gap is along the same lines our fathers knowing all about engines, their tuning and repair, and the generation gap of many of my fellows being barely able to change the oil or change a flat tire.

I have tried to pass along my knowledge by tutoring individual students in computer hardware, but now it is time to help more. Now it is time to take my many years of breaking the tasks down to explain them to business people and teach a new generation the logic and basic skills of programming. Whether they continue in programming or not, the skill of breaking a job into smaller tasks and ordering the tasks logically will benefit them for many years.

At The Capitol School, students have had technology class in addition to their normal classes for a few years (my wife having taught them 2 years ago). Now, I am constructing an Introduction to Computer Programming curriculum as an elective addition to their technology classes. I plan to utilize a version of ChipmunkBASIC (that runs on Mac and Windows), Squeak, Scheme, and Python.

No comments: