Jul 30, 2008

Computer Science Programs in Canadian vs. American Schools

I was reading blog entries today and stumbled across this article. Basically it talks about universities and Java and how programmers nowadays are sucking. It's been a fairly repeated argument over the last little while it seems.

The difference is this: I've been reading that stuff and wondering, "Hmm, are Canadian schools the same?" Up until I read this article, I've been thinking that it is true, Canadian schools pretty much are the same.

Now I'm not so sure. Yes, I did learn Java in my first year (I had done C++ in high school, so it was a breeze learning Java) instead of C or Pascal or Scheme or what else. It also seemed like the math requirements were a little skimpy.

However this article says that many of the students had never seen assembly language or things like that. We were required to take a class on assembly (more specifically, MIPS assembly with some Intel x86 stuff at the end). We also used some C, which the students were required to figure out a bit on their own having not being taught it in any class, although the extent of C that we did wasn't very much. There was one project where we had to take the assembly output of gcc and make some tweaks.
We were required to take a course on programming languages (I think all universities do, don't they?), where the coursework was heavy in Scheme. There was some stuff in Prolog and SmallTalk, although I don't recall there being any major assignment using them.
Finally, many of the upper level classes required coursework to be done in C or C++, two that come to mind immediately were called "Computer Graphics" (that's a no-brainer what it's about) and "Microcomputer Interfacing", which involved programming a mini-computer embedded on a robot with wheels and sensors and what-not.
There was math requirements, of course. Basic calculus, like derivatives and integrals. The honours program that I was1 in required two advanced calculus courses, which looked at calculus using higher dimensions and vectors to name a few things. Other required courses included a course on linear algebra, and one on logical proofs and things like that.

Are these not things that are taught at all universities? I looked at some others and the curriculum seemed somewhat similar. Some of them had maybe one or two required classes that I didn't have to take, or I had to take one or two courses that they didn't have to take, but for the most part it was the same.
I've never looked at the American universities though. Is it similar to what I wrote above?

1That's a big "was", I dropped the honours program later in my degree in favour of taking more economics courses.

10 comments:

Guillaume Theoret said...

Sounds pretty much like what I did. It'll be interesting if some Americans show up to corroborate or not.

Anonymous said...

I graduated a couple years ago from Texas Tech University with a BS in Computer Science, and had a very similar curriculum to you, from what you describe. We never got to program any embedded stuff, but we did have a class on circuit design.

Anonymous said...

opps...actually, c++ was mandatory for the first couple programming courses, we didn't use java at all.

Anonymous said...

Certainly not all American CS programs are "Java schools", just a lot of them. I'm sure you'll find Canadian Java schools as well. Any Canadians want to admit it?

My school (USC, for the record) started CS101 with C, then used C++ for the data structures course, Java for a software engineering course, C for the OS course, etc. The one big thing the program lacked was a course (or two) that used a functional language (we did a little Lisp in AI but not much). I also think a compilers course should be required, but I digress...

I don't think Java is a bad thing to learn, but it certianly shouldn't be the only language (or even the main language) you learn.

Jessta said...

here in Australia(RMIT uni) First year was m68k asm, php, sql and Java.
Second year is mostly C, microcontroller asm and a bit of Java.

Rob Britton said...

@tlrobinson: Not sure if there are Canadian Java schools, at least not in the same sense that people like Joel Spolsky talk about it. Of course, I'm not an expert on every Canadian university, so don't take my word as gospel.
My guess is that since there are a lot less Canadian schools, the "JavaSchools" among them get much less publicity as they are much less common.

@jessta: Cool to hear about Australian schools too. A friend of mine was an exchange student from Queensland Tech, and gave me a similar description of his degree.

I'm glad some people responded, most of my info is from blog entries and articles talking about how American CS students are going down the toilet (blame Joel or the guy who wrote the article I quoted above), or by American bloggers (like Jeff Atwood or Zed Shaw) who were at CUSEC, a conference up here for university students.

I wrote this article with hopes that American students would respond: some of us foreigners are getting the impression that American CS kids are getting the shaft, and I was wondering if that impression was true or not. Seems the answer is "some of them".

Michael Mrozek said...

Your school sounds almost exactly like mine (American). Our early CS classes were Java, but we had a course on MIPS, a course on programming language concepts that used Scheme, and an OS course that used C. Some upper-level courses also require C. I'm not sure how common this is though; like you mentioned I hear often about schools that are exclusively Java-based

Guillaume Theoret said...

The Concordia Software Engineering program is almost exclusively Java. There's 1 perl course (Software Systems comp-sci does in C whereas SOEN does it in perl) but pretty much everything is is java. Java GUI, Java Web, Java data structures, Java everything. The only other language I can think of that they see is PHP in databases.

abhik said...

I have a CS degree from an American school but I graduated back in 2000 so things may be different now. The department was part of the engineering school so we had to take past Calculus 4, linear algebra, discrete math and a course on theoretical CS. We had a some introduction to assembly (MIPS and later PowerPC), logic circuits, computer architecture and so on. The main language taught was C++ and all upper level classes (Computer Graphics, Networking, Databases, Compilers, etc) used either C or C++. Java was offered as a 2 credit optional course that wasn't very popular. I was never introduced to functional languages and I can't remember if there was an optional course on programming languages or not. All in all, it was pretty rigorous and we were trained to think about concepts, data structures and algorithms rather than using libraries (in fact, most classes forbid the use of common libraries which I thought was stupid then but now consider a good step towards learning).

So, at least in the late 90s, there were American CS programs with a rigorous curriculum.. I have no idea about today..

Rob Britton said...

Cool, even more insight!
Concordia is a university in Montreal, Canada in case anybody was wondering. I didn't know that almost everything was in Java there! A lot of our courses weren't necessarily in Java, rather the professors gave the option of "anything that can run on the computers in the Linux lab" which doesn't really limit your choices much.

Speaking of Linux, did people get much exposure to that in their degrees? The CS lab at my school ran (and still runs) using Linux, so we did need to get familiar with it if we wanted to use the lab for anything.

@michael: Maybe our professors all went to the same schools... The year before I took our OS course it was done in C, but when I took it they gave an option to write the assignments in whatever you want.

@abhik: Thanks for the info, I guess now we can see how things have changed over time! Although I think libraries still aren't given much emphasis. For computer graphics we did use OpenGL, but we were very limited in which functions we were allowed to use (lots of the work had to be done using one function, which took an array of bytes and mapped it to the screen).

I am somewhat amused that myself and many of my fellow graduates spent years studying stuff like assembly language and Turing machines and now are developing web sites in PHP. Seems like a bit of a waste to me.