How I learned to code
I started to learn programming on a Commodore VIC-20 (great online emulator at http://mdawson.net/vic20chrome/vic20.php), then on the Unisys ICON computers (also BASIC) when I was about 10. It was interesting, but I don’t feel like I was really ready for a lot of the concepts involved. Maybe things would be different today…
I dabbled in this and that (learned a tiny bit of assembler, more BASIC, some C) until Grade 10, when I took Computer Science with Mr. Boston at White Pines C&VS. That’s when I really started to take an interest. We worked in Turing, a procedural programming language, and I learned the basics pretty well there. In particular, I remember writing a program to draw a Mandelbrot set on the screen in black and magenta. Eventually I rewrote the program to make a more colourful version, but I can’t remember whether that was in Turing or something else.
Ahead to the University of Waterloo, where I started as a Pure Math student planning to get a minor in Computer Science. My first CS course used Turbo Pascal, a procedural programming language. This was not a course for CS majors (so I qualified).
Partway through my second year of school I was looking for a job for my Coop term. There were positions advertised for the Instructional Support Group (ISG) for tutors. I needed to stay in the Waterloo area (my wife was in North Bay at school and we couldn’t afford to keep up three apartments), but I wasn’t really qualified for any of the serious CS jobs at RIM or Sybase or anything. When I interviewed to be a tutor for CS120, a Turbo Pascal course, the interviewer informed me that they really had a need for Java tutors. I had no Java experience at all, but they hired me anyway (must have been my exceptional charm) and I had a couple of weeks to learn the language well enough to stay ahead of the students.
I started by trying to complete the first few assignments that students were going to have to complete. I started out okay, but then I found that whenever I tried to compile and run my programs I was getting errors like
Non-static method doSomething(int) cannot be referenced from static context
I didn’t know what that meant, really, and I wasn’t Googling then, so I just “fixed” it: I made everything static.
I didn’t understand how object-oriented programming (OOP) worked, and it wasn’t until I’d asked for help, fixed my programs, and saw the power of objects that I really understood what it was about.
I learned a lot about Java in several terms with the ISG, including some interesting work with JKarel, a virtual robot (based on Karel) used to teach OOP. I also learned some shell script (evidence here), bridge, and 5-handed bid euchre (thanks Phil).
I’ve since been disappointed in the security issues that Java has had in the past few years, and had thought my days of Java programming were possibly over.
But now…
This September I’m planning to return to classroom teaching, so I’m starting to think about what I’d like to do. My teachable subjects are Math and Computer Science, and I’ll be the Subject Area Head for Math. I’m expecting that CS won’t be on my timetable for the 2014-15 school year, but I think it would be nice. I haven’t had a chance to teach programming and programming concepts since I left the ISG 2003, and although I’ve dabbled on my own I’d like to jump in again with both feet.
About a week and a half ago I stumbled across and bought “Programming Android: Java Programming for the New Generation of Mobile Devices” on Kindle for $7.51 (I see that today it’s $19.66, which makes me feel unreasonably clever). I haven’t even cracked the virtual cover yet, apart from skimming the Table of Contents before buying it, but I’m kind of excited to revisit the world of software design. I didn’t realize that Android programming was based in Java (using a non-Oracle VM called Dalvik), and so hope rekindled. I don’t even have an Android device, but I’ll be able to code for free using the Android SDK and software emulators, as well as actually loading onto a device down the road.
I’m kind of excited
Programming in Turing helped to develop some useful, basic skills (like understanding loop structures, program logic, data types, etc.) but didn’t really leave me working in a “practical” language (one that is used in real life). Java is a language used in industry, and the prospect of writing Android apps has to be a least a little engaging for students, I hope. This seems like a good starting point for grade 10-12 students who want to learn something fun that will also be useful for them when they leave us. I hope I get the chance; I’m certainly going to ask for it.