Will I teach computer programming again?

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.

10 thoughts on “Will I teach computer programming again?

  1. You’ve got to love Turbo Pascal! How about Delphi?

    I hope that you do get a chance to teacher Computer Science if that’s what you want. Perhaps with a couple of experts teaching it, you’ll be able to grow the number of sections.

    p.s. I still think at least one section should be compulsory. I’ve always felt that way and daily I’m convinced that it’s more and more important.

    • I never did learn Delphi…. I think Lorenzo did, though.

      I don’t know that I’ll be an expert, but I’ll be enthusiastic! :)

      PS. I don’t know enough about where to start with everyone. I think that programming logic is really valuable for everyone as an approach to problem solving, and a high-level understanding of how computers function would make my life much easier too. I don’t know that everyone needs to know the difference between a char and an int though. Using a spreadsheet effectively is a form of programming I’d like more people to learn.

      I definitely haven’t thought about this enough. I feel another blog post coming on ;)

  2. Here’s an article to read, Brandon. http://codeorg.tumblr.com/ As for char and int, I think you’re pulling an example out of context. Going to your example of spreadsheets, isn’t it important to know how to round or truncate? How will we survive if we decide to get rid of the penny? Oh, wait. The entire curriculum is full of examples that could be identified in isolation and are pretty difficult to justify. For example, why do I need to learn to do a layup in basketball? After phys ed class, I’ll never use it again! I really do see the application of the concepts of programming and computer studies appearing over and over in real life.

    • I don’t mean to imply that taking computer science is just about learning tiny details like data types, but rather that I’m not sure yet that teaching programming in the traditional way (that is, the way I learned programming) is the best approach.

      When I think about teaching math, I know that 95% of the “knowledge” in a high school course is stuff most students will never use again, but that the skills and perspective developed are the real goals.

      Likewise I see that learning to program a computer is valuable as a way to develop thinking and problem solving skills, and to learn helpful (maybe essential) details about how computers work. It’s not about learning TP syntax, but rather about the coding structures that make computers powerful problem solvers for us.

      I mention Excel/spreadsheet formulae as a pseudolanguage because I help a ridiculous number of people with what I see as essential skills. To me, using Excel to concatenate strings, speed calculations, perform lookups, etc., only makes sense when you have lots of lists. But most people (even those who use Excel every day!) don’t know how to perform these relatively simple tasks.

      Okay, maybe I’ve just talked myself into your point of view. Perhaps if those folks had some rudimentary computer programming under their belts they’d be able to recognize solutions in Excel to their data-sorting problems. I wonder if the visual (“block”) coding languages/approaches are the way to go here…. Those are high on my “to-explore” list.

      I think this comment is as long as some of my blog posts. Maybe we should immortalize this discussion in a fresh post :)

      • I think you’ve nailed it, Brandon. In my opinion, I don’t really put much weight in the choice of language. Pick one and there will be those with you and others that will spit nails at you! I’ve taught a number of languages and I don’t think that the choice is an absolute. I think that understanding the concepts behind programming and what you can make that device in front of you do is crucial. Teach concatenation in whatever language would give the understanding of what’s possible for the Excel user.

  3. Thanks for your blog post and for the interesting comments that followed. I flip flop between 1 and 0 on whether programming should be taught.

    Yes! Program or be programmed.

    No! It’s akin to learning Latin a generation ago.

    Yes! The Internet of things is increasingly present. Your oven will soon be connected to the web. Anything that is networked can be hacked both in good ways and not so good ways. (Restate: program or be programmed).

    No! Increasingly you can do powerful things in the bit world without C+ to Ruby to Python and whatever program language you want to teach. Which raises the next issue: which programming language does one teach?

    Yes, and . . {.where I think I really stand on this issue} . . .yes, we should be teaching/learning programming, *and* there should be an interplay between the bits and the atoms. In a word, MAKE. I think programming that is contextualized in making and the maker movement stands a better chance at democratizing the tools of creation, production, invention and general goodness. I think programming that blends on screen and face2face-in-my-hand creations satisfies our love for 1 and 0 and the reality of our flesh and bone atomic life.

    So, why stop at programming? What you really need is a Fablab.

    Yes! There are 10 kinds of people in this world. Those that understand binary and those who do not.

    • That’s some really great thinking, Michelle… we used to have a Lego Mindstorms robot that went along with the JKarel program interface, and it was awesome to see the students’ programs come to life in physical space. I wonder how the development of 3D printing and other technologies will impact what we see as essential learning in this area… Thanks again!

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Google photo

You are commenting using your Google account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s