The "Datalogi" Computer Science course at Copenhagen University is split into two parts. After three years you get a bachelor degree, and then after another two years you get a master degree. I plan on getting both, but have not decided where to go from there. My primary interest is programming language theory, but I also enjoy game development, tool and library development.
This is a short overview of my studies as an undergraduate, covering the first three years.
All of the courses this year were obligatory, but also rather interesting. Coming from years of imperative programming, learning a functional language was eye-opening. Actually getting taught object oriented programming (as opposed to messing around with it on my own) was wildly effective. All courses passed.
Summer 2005 |
Fall 2005 |
Winter 2006 |
Spring 2006 |
Functional Programming (SML ) |
Object Oriented Programming & Design (Java ) |
Algorithms & Data Structures (O(n) ) |
Databases (SQL ) |
Mathematics & Computation |
Operating Systems (C ) |
First Year Project (Java ) |
For some reason, the university required us to pick four courses (filling up half a year) that could not have anything to do with Computer Science. Like many others, I chose to take three math courses, since had the most potential to be useful in my later studies. I also considered chemistry, since I used to love that in high school, but I figured I wouldn't learn anything useful there in just half a year. All courses passed.
Summer 2006 |
Fall 2006 |
Winter 2007 |
Spring 2007 |
Introduction to Mathematics (Maple ) |
Linear Algebra (Maple ) |
Introduction to Discrete Mathematics & Algebra |
|
Multimedia Compression (Matlab ) |
Logic in Computer Science |
Computer Networks (C ) |
Introduction to Compilers (SML ) |
Still lacking one of the obligatory non-Computer Science related courses, a friend of mine and I decided to take a business course: we wrote about a business idea involving parking lots and the internet. It seemed like it could be profitable, but I really didn't want to start a company back then.
Optimizing Compilers was not at all what I had expected. It was basically a ton of algorithms presented in messy pseudo code. At least I discovered that I find type theory and language constructs much more interesting than optimization. It did cover garbage collection well though.
We got permission to write a custom project, a language we called Incognitus. It was a functional, object-based language without any syntax for explicit types, but still statically typed via global type inference. We decided to see if we could implement the compiler using what we had already learned, but found ourselves failing miserably halfway through the project. Then we got a recommendation for the book Types and Programming Languages by B. C. Pierce - a book which turned out to be absolutely excellent. Reading it we got through the implementation, save for a few (ok, a lot of) warts in the compiler - but we ran out of time and decided not to hand it in.
Our final bachelor project was a practical one where we implemented a quality control system for dental treatments that Tandlægeforeningen needed. It consists of two desktop applications: the administration module, in which to create new treatment types, and the client module, in which to fill out diagnoses and treatments. Behind them is a server and a database that manages the data, and the communication is through RMI (locally) and SOAP (for the client web service).
Despite of the custom project that never were handed in, I actually had 7.5 ECTS-points too much due to the bachelor project counting double, totaling 4 * 7.5 ETCS (which in retrospect was probably a poor choice, but oh well, at least the grade wasn't too bad).
Summer 2007 |
Fall 2007 |
Winter 2008 |
Spring 2008 |
Advanced Algorithms (P/NP ) |
(continued) |
||
Optimizing Compilers (GC ) |
Knowledgebased Entrepreneurship |
The Theory of Science |
Non-PLT courses that look interesting:
Advanced Databases (Summer) - well, you can't live without them. Edit: unfortunally we will have to, since it has been cut due to lack of funding.
Extreme Multiprogramming (Winter) - creating a language that doesn't support lots of processors is useless these days, and I must know what makes them tick
Generic Programming (Spring) - covers C++ templates and teaches you to evaluate the quality of a library - I hope to better understand what a language can do to better support libraries
For me, there were no interesting courses to follow in the summer. I contemplated doing a project in the TOPPS group, but didn't quite feel ready yet. I ended up enrolling in two courses that were taught on the same days, at the same days, effectively making myself choose between them. I chose physics based animation, which turned out to be a mistake; there were far too much emphasis on blackboard derivation of equations for my taste, so I decided not to see it through early. Semantics & Types and Program Inversion & Reversible Computation were kickass courses (if you don't mind a lot of theory). Extreme Multiprogramming covered enough CSP to make it exciting, but the lectures and programming assignments weren't that great.
Summer 2008 |
Fall 2008 |
Winter 2009 |
Spring 2009 |
Physics Based Animation (canceled) |
Semantics & Types |
Extreme Multiprogramming (CSP ) |
CSP Project (Ocaml library) |
(naught) |
Program Inversion & Reversible Computation |
CUDA Project (the vector scan model) |
Advanced Programming |
Alright, canceling Advanced Programming (it turned out it was too similar to the old AP course), I was lacking half a year of courses. I did reclaim 5 ECTS from a great summer course called Types At Work though, and 1.5 ECTS from an intensive 3-day course on Kleene algebra with Dexter Kozen.
Summer 2009 |
Fall 2009 |
Winter 2010 |
Spring 2010 |
(naught) |
Computability and Complexity |
Proactive Computer Security |
Fritz' course on regular languages |
Project (template language) |
(continued + XMP) |
Cluster Computing |
Scientific Visualization |
I am going to spend the last month of my vacation taking the POETS course, which seems to be about implementing 3gERP stuff in Haskell (and optionally Java on Android, but I get plenty of Java on my job). I think it's going to be fun, and I need the much sought after "special report based ECTS points". I will spend (hopefully) the first half year after that on writing my master thesis, and then I'm done! Woo hoo! ... Damn, I'm going to miss it.