Tuesday, July 19, 2011

10, 9, 8, 7, 6, 5, 4, 3, 2, 1

I started writing code in 1970 when I joined a grade 8 computer mathematics class. This was the first time the school had tried this because we had a very innovative mathematics teacher, Mr. Schellenburg. He somehow felt that if students learned to write programs their math skills would improve. As it turned out, I was pretty much the only one who lived up to this expectation. He had a rule that we could do our home work the normal way, or write a program to do it. I was the only one who chose to actually write code to solve the math assignments - it turns out you really have to understand your math well to write code to do it.


The Vancouver School Board had three Hewlett Packard 2115 minicomputers, located at different high-schools, unfortunately not mine. We wrote our programs in the BASIC programming language on optical mark cards, optimized for BASIC. Still, it was laborious and error prone. Every day a deliver person would show up at the school and retrieve the decks of cards with our programs on them, and take them to one of the schools with a computer. The people there would run our deck through the card reader, and wrap the deck with the output from the line printer and send it back to use. Typical turn-around was 3 days, 2 if you got lucky. Proofreading your code was exceptionally important to avoid disappointment!





Once a week, in the evenings, we could go to one of the schools with a computer. They had the computer, card reader, line printer, and a teletype with a paper tape punch/reader. It was significantly more productive to work on your programs there - especially if no-one else showed up and you could have the teletype to yourself - making it a 'personal computer'

That same year I actually went to the launch of the Digital Equipment Corporation PDP-11, at the Blue Boy Hotel in Vancouver. I don't know what all these adults thought of having a 12 year old kid in the room, but most of them were polite and answered my questions without watering it down or treating me like a kid. It was not until many years later I learned to appreciate the significance of the PDP-11.

Before the end of the year, the high schools did not have enough resources to help me learn more, and my math teacher had reached the limits of what he knew about computers and programming. Fortunately the bus service in Vancouver was very good in those days. Eventually I showed up at the University of British Columbia where they had this place called the Student Terminal. It was a room filled with card/key punch machines (some could even do lower case), a card reader, and a line printer. You could go buy tickets at the book store for 50 cents apiece, and one ticket gave you one run of your program. This was great for me because no-one cared if I used the facility as long as I had my blue tickets.

UBC had and IBM 360/67 running the Michigan Terminal System. Looking back on MTS I can honestly say it was the first computer operating system that was specifically designed with a relatively easy to use user interface, and was way ahead of its time in that regard.

I was finally able to learn Fortran, WATFIV actually. Fortran did not seem to have any particular advantage over BASIC, in fact it was significantly more awkward to code in. As a child it was just a challenge and I had no wisdom to evaluate language design.

My next challenge was assembler - IBM 360 assembler in fact. I found a nice gentleman in the UBC Computing Center to to show me assembler, but I could not seem to get the hang of it. One day on the weekend I went to the 'front desk' to ask for help and they had one of the computer operators help me. He showed me how much more easy assembler was if you used the predefined macros for the Operating Systems API and I quickly go the hang of it. It was way more work than BASIC or Fortran, but it revealed what the computer was actually doing. When I was in grade 12 I audited a 3rd year course in assembler at UBC and received a 98% grade - all the previous experience paid off.

Over the course of high school I learned various other programming languages - Focal (sort of like BASIC), APL (truly weird), etc. How to design logic circuits with NAND and NOR gates and to create JK-Flip-Flops and create a binary counter. According to DEC, it was less expensive to implement logic with NAND and NOR gates than AND an OR gates.

By the time I graduate high-school when I started as an undergraduate at UBC I went straight in to 3 year Computing Science courses. My original goal was to get a PhD, but by the time I finished my BSc I was really sick of school. I eventually completed my MSc at Simon Fraser University in 1995. My faculty adviser tried to get me to do a PhD, but again I was sick of school because I was also working full time.

As it stand today, I have over 30 years of computer experience. In the beginning I found computers truly fascinating and they inspired me to learn as much as I could. As of today, I still find computers fascinating, but I also find them horribly exasperating and dehumanizing. It is not that computers as a technology are particularly exasperating and dehumanizing, it is really how people have chosen to use this technology that reveals the best and worst of us as people.