Mr. Jay is the assistant curriculum leader and teacher of computer science at Marc Garneau.
Q: How long have you been teaching at Garneau?
A: This is my 26th year.
Q: What courses are you teaching this year?
A: Computer Science Grade 12, Grade 10 TOPS Computer Science last semester, Grade 12 Robotics, and Grade 10 (Computer) Engineering.
In Computer Science we teach what we like to call problem solving, which every course likes to profess that they do. So we try to solve problems by developing software solutions to various simple mathematical problems. Now, at the low level it’s fairly simple, input process and output, decisions, looping…etc. When we get to Grade 12, then they’re actually creating Windows-based GUI (Graphical User Interface) programs, doing simulations and games; so it’s a little bit more involved.
On the Robotics side, we call it “Robotics and Control Systems”…I don’t want to just say it is a marketing thing, but it kind of is. It’s Grade 12 Computer Engineering with a focus on microcontrollers, so we use an Arduino microcontroller as our primary source of…well everything really. This semester I’m getting my students to do conventional programming problems using the Arduino as the ‘computer brain’, so the output and input comes from the screen, but all the hard work is done by the Arduino; just to get them used to the programming environment for the Arduino, so later on they can do the hardware stuff more easily.
Q: Since you are teaching both programming and its hardware application, do you have a preference?
A: I prefer computer science, because for me it is a more mature course. I know it better, I can tweak it every semester and I’m more comfortable with the coding end of things.
I’m not a hardware guy. Well, I’m not bluffing my way entirely through the (robotics) course [laughs], but I have to rely on looking things up and experimenting. In that way it’s more of an adventure, so I get to make larger changes, and I’m always looking to add things to that course. Because we could always bring in a new sensor, for example this semester I’m trying to perfect Bluetooth control for our robots…which I haven’t done yet, but I have some of the modules to do that. It’s more of an adventure, keeps me interested. But I’m a little more comfortable with the software end of it.
Q: How did you first get into computer science and programming?
A: I took Computer Science in Grade 10, 11, and 12, back in the early 80s. In Grade 10 we had five Commodore PET computers in our lab and pencil marked cards, so the first programs I ever wrote were on pencil marked cards. You had to make a stack of them and then they would get shipped off somewhere to be read, and would come back with a printout of your code and whatever your output was. Then you would just fix the pencil marked cards, and send it back the next day. That was my first course.
In Grade 11 and 12, we had a full lab of Commodore PETs, 8K of RAM, 16K of RAM, no hard drive but a floppy drive, and we could make great things with that, the graphics were chunky but you could still do pretty amazing things.
When I went to university, I didn’t go for Computer Science. I was in Actuarial Science and then I switched to Statistics, so Computer Science was just my second teachable. I always thought I would be a math teacher, but I got hired for this job and I’ve done math over the years, but for the most part I’ve been teaching Computer Science.
Q: Did you do anything else before becoming a teacher?
A: No. I like to tell kids that I’m in ‘Grade 43’, because I’ve been in school continuously since I was 5 years old.
Q: What is your most memorable experience with computers? Any favourite projects or programs you have done in the past?
A: Early on when I was experimenting with graphics, I made myself a Spiderman game. So I just imported graphics, had Spiderman walking or running, climbing walls, spinning webs, swinging, and I’d bring in different villains for him to fight, where you would hit space bar and a new villain would come in and attack him. It was never a complete game, I’ve never been a gamer, but just the idea of doing that was always fun for me, and I think when you’re learning how to program, it’s nice to have the motivation of a project you want to do, something you want to create, and then you go through and learn the things you need to make that happen. That’s probably the best way to learn.
Q: Computer science is a tricky course to teach, do you have any specific philosophies or lesson approaches?
A: I like to throw you into the deep end first, get you into it right away, and not give you every little bit and piece, so just kind of the ‘broad-strokes’ start. Let you play around a little bit see what works and doesn’t work, then sort of pull you back and talk more about the details after that.
But as far as learning Computer Science goes, I think the most important thing is, probably like any other course, you have to actually be able to do it on your own. When I am helping someone who is having trouble with Computer Science, I would show them how to do it first, and then I would get them to reproduce the effect with another question and some help, just like I would do in math. And then they do it again without any help. Until they can do it without help, they’re not done, they’re not ready to move onto the next stage; that’s kind of my philosophy for extra help. It doesn’t quite translate into the whole class because a lot of people will get it right away and a lot will struggle with it, but that is what I would say is my philosophy.
Q: In your opinion, what makes a successful programmer?
A: As a student, if you have passion for it, if you have interest in it, then you will probably dedicate more time to it; you would look stuff up more, be less dependent on your teacher, less dependent on your friends, less dependent on the book. If you just try things and fail… I tell my daughter all the time that the best way to learn is to make mistakes, but she doesn’t accept that and she wants to be perfect all the time… but that’s just not going to happen. I think having a passion for it really makes a difference.
Q: What do you hope students to take away from your courses?
A: I think they need to understand that you can’t do a course by cramming the night before for a test and learning the whole unit in a few hours or pulling an all-nighter. Especially in mathematics and certainly in computer science, if you just do the work on a daily basis and pace yourself… and if you’re, you know, at the bottom of the class then you need to work harder and spend more time. But if you pace yourself and really do your own work, the testing would not become a big issue, because you would already know everything, it would all be internalized.
I didn’t learn that lesson until second year university. I was a good student in high school, but my first year was a real wake-up call because I got kind of beaten back by the first semester. In second year I was doing more of my own regular work and I found when it came time for exams, I only needed to study for a few hours.
Q: Now for the more controversial questions: Which programming language do you think is best?
A: Well I can’t really answer that question because… I mean I have used FORTRAN, Cobol, C, C++, Basic, Pascal, Java…I haven’t used Python, but I’ve seen Python a fair bit. I guess my preferred language is Java, but that’s the one I have the most experience in, so that would be my favourite. But I can see how people might like other languages because of their brevity, their simpler syntax, and I know Python is popular for that reason. I don’t think there is any ‘best’ language, it depends on the nature of the project you’re doing. Different languages lend themselves to different applications.
Q: Do you have any pet peeves, in terms of coding?
A: (Deep in thought)…Quite often a compiler will not be able to tell you what your problem is, it will tell you what it thinks the problem is. I tell students, that if there’s no problem in the line where the compiler is telling you, it’s probably the previous line where you have made a mistake and it’s carrying over. So compliers are obviously not always as helpful as you like them to be, you would like them to just come out, tell you what you did wrong, and fix it. Certainly debugging is a difficult part of programming.
That’s why I tell my students when I code, I don’t type out twenty or thirty lines of code and then you know close my eyes and hope for the best, I do two, three lines, save it, compile it, and make sure it works or is formatted the way I want it to. Then, I just keep adding lines of code. I tell students that, but I don’t think they always listen, because students will have fifty lines of code and I’ll look at them and say “this is all wrong, why didn’t you do like two or three lines?”
I guess my pet peeve is that the computer isn’t as helpful as it could be.
Q: So going off of this, what was your most painful debugging experience?
A: I can’t remember the details clearly, but I remember in first year university, I had a Computer Science assignment that was due at midnight, and I went into the lab at 8:00 pm and didn’t come out until 3:00 in the morning. I didn’t even finish that assignment successfully! But I had a friend who was a Computer Science major; he went in at one time and came out later the next day, so more than twenty-four hours of coding with just bathroom and food breaks.
Q: Students code their own programs and create their own projects in your courses. What are the most impressive or interesting ones you have seen so far?
A: I had students last year, or maybe it was the year before, do a cube solver robot using Lego parts. Plastic, wobbly Lego parts. It wasn’t the best mechanically; metal parts would’ve been lot better. They wanted to have a camera that looked at all sides of the Rubik’s cube and then figure it out, but they ended up having to actually enter in the colours and their different coordinates. Then it was able to solve it in about 45 minutes, which you know, a real cube solver can do it really fast but we’re limited by our hardware.
On the software side, I have had people create programs across a network. I had someone who did Risk with severs and clients, and last semester, the card game Hearts across a network, again with a client server. I haven’t learned how to do it myself, and couple people have already done it. I could crack open their code and figure it out, but it’s difficult in Java to know enough. There will always be a student who knows tons of stuff that I don’t know, and I accept that. I’ve accepted a long time ago that some of these kids will know more than me in a lot of areas, and they’ll be smarter than me, so I just try to lend them my experience and hopefully be useful.
Q: Windows or Mac?
A: I’ve only used a Mac once, in university to write an essay, so I’m going to have to say Windows. Although I’m sure Mac is very good for certain applications, I know it’s loved in graphics and video editing, and it’s probably more user friendly for the masses. But for me and my job it makes more sense to go with Windows. Actually, I’ve even played around with Linux a little bit and I’m fine with it too.
Q: Any favourite computer jokes?
A: I don’t tell jokes, I make cracks. I don’t have a list of jokes that I tell, I don’t have them rehearsed. I had a Biology teacher in high school that was hilarious the first time I had him, he had all these very funny jokes, then I had him again in Grade 13 and he told the same jokes. He had his own routine, but I don’t, I just made my cracks during class.
Q: What activities do you enjoy in your spare time?
A: For school, this is my busy time right now. We have a Computer Science club here and I run the Waterloo contest and also an Ontario team contest; I also do badminton. We just had our first match yesterday and we kicked the pants off Leaside.
Other than that, my time is basically spent with my family. I have a wife and two kids and they’re involved in various programs so I don’t really have much time for anything else.
Q: Would you rather: Master every programming language or become fluent in every spoken language?
A: Spoken, for sure. Once you’ve learned one (programming language) well, learning a new one isn’t that hard. For example, if you know Java then you pretty much know C, you just have to learn a few little bits on input and output and some of the specialized libraries. It’s like if you know Italian, learning Spanish is not that hard because the Romantic languages, French, Italian, Spanish, Portuguese, they’re all kind of related. But I mean, how are you going to go learn Mandarin or Russian? Knowing all the spoken languages, that would be awesome.
Q: Any advice for aspiring programmers or students in general?
A: Take lots of courses so I stay employed (laughs), not like it matters that much now.
I guess my advice is to do things on your own, on the side. There are some kids who don’t do programming in their spare time and still get good marks, but most of the people who are really successful do it in their spare time. It’s a fun thing for them. So rather than just playing video games you can make video games, maybe making android or iOS apps as a hobby.
I remember I had a student years ago who made a website similar to Google Classroom and Moodle, called Classtell. He made this in the summer after Grade 8, and I guess around grade 9 or 10 he started marketing it and had clients from around the world. He ended up selling it to an educational software company, but I don’t think he made a lot of money off of it. I think it still exists, and when you go onto the site, it’s his voice in the overview video. So he did that when he was 13, 14 years old. That guy was seriously talented, but I think if you just do it in your spare time and make it a passion, you’ll get better at it.