I’m not particularly sure how to start a post like this, so let’s just get right into it. Over the past little while, I’ve been wondering a lot about why I am studying both computer science and pure mathematics. The conclusion I came to is one that most will probably consider quite bad.
After my first year of university (in mathematical physics), I realized that I really, really wanted to study pure mathematics. I also fell in love with theoretical CS. Particularly, stuff like formal languages and automata theory (often simply called the “theory of computing”). There is a course offered at Waterloo called CS 365 which I mentioned in one of my earlier posts. It is an enriched version of CS 360 (the standard course on theory of computation): 365 takes a very mathematical approach. It is the kind of course that the vast majority of CS majors here wouldn’t even consider taking; even for BMath/CS students, the normal route is to take CS 360. This course, and similar courses which are usually saved for fourth year, is my ideal of what computer science is, and it is the reason I want to study CS.
The other reason I’m studying CS is because until now, it seemed like something I could always excel in without any concerns. Pure math may well get exponentially harder from here on out, and I may find myself struggling to stay on the surface, unlike most of my peers who seem to not only be significantly talented, but also have more experience than myself. So, my reasoning was as follows: if it turns out that I’m not good enough to be a mathematician, I could still get a good job through my CS major and keep myself comfortably alive.
I will point out that by the reactions and opinions of more senior students, it seems that the School of Computer Science here leaves quite a bit to be desired. In particular, I read something about incompetent professors and badly-organized second-year classes. Now that I’m taking the bulk of second year CS (namely, 240+241+251), I’m in a position to state my own opinion.
First off, CS 241 is an excellent course, being taught by an excellent instructor, who really knows what he’s doing. I respect that. I’m not yet sure about CS 251, but this course as well is not that bad: with some effort, it is still manageable. CS 240, on the other hand… something needs to be said about the logistics of the course. Considering the mark I got in CS 145, I figured I was pretty well-prepared for upper-year CS courses. So why is this course posing such a problem to me? Here are some of the aspects I’ve noted:
- Many of the algorithms presented in class are quite subtle, with a variety of special cases. I don’t think they are being presented in enough detail. I’m often left guessing: “what should I do now?” when I try to simulate the algorithms as part of assignment questions. Often I run into cases that seem to not have been treated in any example, or even discussed.
- The assignments are long. Extremely long. They often require you to significantly extend ideas presented in class, but it feels like there is no effort made at all to guide the students through this. Instead, the problems make you struggle for hours while making very little progress. This is horribly discouraging and has caused me to just give up on many of the problems. Assignment 1 was reasonable. The next two were a swift kick in the face, and the class average shows it. And guess what? They’re worth 25% of your overall mark. Moreover, if you don’t pass the assignments portion, you fail the whole course. Man, this just keeps getting better, doesn’t it?
- The data structures defined in class are nonstandard. That is, the definitions we use in class differ from those in the literature. This pretty much screws over any student’s efforts to learn the material from another source, be it a textbook, or an online resource.
So now, I’m faced with a very difficult decision. I have one of three choices:
- Ignore my better judgment and stay in the course, despite having already lost over 5% of my overall mark due to catastrophic performance on assignments.
- Drop CS 240 and take it next term in the hopes that things will be different (they probably won’t). This causes a nauseating avalanche in my course sequencing, potentially delaying graduation.
- Drop CS 240 and stop studying computer science altogether. If I take this approach, it could either be the best, or the worst, decision I ever make in my life.
I will perhaps write another post on these issues. They have been plaguing my thoughts for at least two weeks now.