Midterms argh
I’ve got a midterm tomorrow so instead of studying I’ve decided to post on my neglected blog. So without further ado:
I try to avoid taking a strong stance on programming languages because depending on one’s need there are plenty of acceptable languages for any project.
Java or C#? Whatever.
Python or Ruby? Meh.
Scala, Erlang or perhaps Haskell? *shrug*
However, the University of Waterloo, in its wisdom has decided that CS 246: Software Abstraction and Specification is to be taught in C++. C++ is the absolute last OO language that should be used to teach CS 246. We spent way too long learning about copy constructors, operator overloading, memory management, pointers, references, friend functions, and forward declarations instead of the proper principles of effective OOP. CS 246 should be about design patterns, agile development, UML, unit testing and the like. We are getting to that, but half the semester was wasted learning the intricacies of C++.
Don’t get me wrong, a strong background in C++ is an asset for any programmer, but it’s just a terrible teaching language. Not to mention it’s not portable. For the last homework project, we had to implement the game of Euchre. The specification provided was incomplete, so the only way to determine the correct output was by copying logic and output from the provided reference implementation. Not a bid deal. Except…
The only provided binary was compiled for 64 bit Linux. Turns out my Ubuntu VM is 32 bit. Crap. I was forced to SSH into the slow Waterloo machines to test the code (I’m too lazy to install another VM). If only the provided code was Java byte code, a Python .pyc file, or even Microsoft Intermediate Language (yes, MIL is portable thanks to Mono).
TL;DR: I finally understand why CS departments don’t teach CS using C++ anymore (except Waterloo, that is).
