Monday, July 08, 2013

Computer Science 101

I would like to think that I adjusted to college life right after college as though it were the day right after my “A” levels. That’s not quite right. Maybe I did slot back into studies remembering my “A” levels stuff, but it didn’t really mean that I slotted right into college life rightaway.

The first two school terms, I’ve had to make some serious adjustments, and I was only partially successful. In fact my second school term was so disastrous to my GPA that it never really recovered. But in another way it was pretty liberating because when I didn’t care about my GPA I just felt even more free to just pursue my degree in many different directions. This was both bad and good: I felt more free to study what I felt like studying, and I covered more breadth. But maybe forcing myself to do something more focused, like a research project, or maybe more engineering modules, would have been of much benefit to me. Sometimes I wonder if I did spend a little too much time on modules like anthropology or literature which I didn’t really pursue later on in the end. And sometimes I wonder if I would have regretted it more if I didn’t do it.

What was special about that first term, and a little like the shock of stepping out of a building and feeling the cold winter wind on your face (a sensation that will be familiar to all Snowy Hill students) was my first computer science module. I maybe did not have a lot of respect for the level of academic standards that were expected of me. I knew that the mathematics course would be difficult and I gave it a good level of respect. But I didn’t respect the astronomy course (big mistake – astronomy is nothing to fuck around with). I didn’t respect the writing course, I could have gotten a better grade but didn’t. The easiest course, ironically, was operations research, and it was taught by a professor who I later learnt was one of the more prominent computer scientists in Snowy Hill.

The most dramatic story was my first computer science course. I was being taught Java, and at that time it was a new technology. It didn’t go that well at all. That course was infamous for being really tough, even though it was an introductory level course. I had just bought a refurbished computer from Dell and for some reason, the integrated development environment that I was supposed to work with didn’t install properly on my computer. I was never able to solve that problem, and back then there was no Google to help you solve all your problems by googling the answers.

In the end, my partner did a lot of the programming assignments. He told me that he was alright with it but in the end, I couldn’t rely on him forever. He was right. In the end, for the final programming assignment, I had to do something fairly complex: build a computer game that could solve a puzzle all by itself. Everybody was flipping out over it. With my current levels of programming skills, and the help that I have from current IDEs like Eclipse, and with Stack Overflow and Google and whatnot, it was probably something that I could easily achieve in one week. As it is, it was pretty painful for me. I didn’t know what static meant, I had no clue about garbage collection. (But don’t worry about garbage collection. It would be one of the biggest pain in the ass when I started work.) Maybe some vague idea about pointers and stuff.

As I was wont to do, I sat on my ass a little too much. Finally I got a kick start when a good Samaritan kindly passed me the code that he used to program one module. Now this isn’t allowed, and if it wasn’t for the fact that it took place more than 10 years ago, or if it wasn’t that it was the last time I violated the academic code of integrity, I wouldn’t be telling you this.

The rest of the project, and it was more than half of the project, was my own work. I remembered one frantic stretch where I had four hours to make one major portion of the project work, and miraculously, against all odds, I managed to do it. Then I showed the project to the professor. I answered all his questions well, except one: “how do I change the dimensions of the game if I wanted to” I couldn’t do that because I had hard coded all the parameters, something that was bad practice in programming. Eventually he told me: “you’re getting somewhere between a X+ and an X. So what’s it going to be?“ I muttered under my breath “go flip a coin, I guess”. He heard me and then he laughed, and said, “OK, we’ll do that.” He made a show of flipping that coin and then said, “you lost. It’s X for you.” I was stunned for a few seconds, before he said, “just kidding. I’ll give you an X+”.

Well that was my first encounter with that professor. The second encounter was not a happy one.

Well I suppose in the sense that it was supposed to have taught me programming, that course was pretty influential. Actually it didn’t. That professor wasn’t that great at teaching programming. His lessons were disorganized, he was just scribbling random stuff on an overhead projector (yes, that would be one of the last times that I would ever see an OHP being used). I couldn’t really learn anything from him, and he was a vain guy, more interested in being a showman than doing actual teaching. But obviously object oriented programming is such a powerful paradigm and a powerful set of ideas that anybody who’s been through that course would undoubtedly learn something from that experience.

More important than that, it was the first time that I had to do a project that counted for a real grade. Yes, there were projects in my grade school days, but they were all pass/fail. Singapore education at that point in time was mainly centered on exams. It was an interesting experience for me, to say the least.