Earlier this year, I posted a short entry about having accepted a job offer from Defence Research & Development Canada (DRDC). Over the past four months, I've had a great supervisor, a relaxed workplace, and challenging work. As you might imagine, working at a defence research lab is quite different from anything I'd done previously. I knew that was going to be the case, but I was still surprised at how little of my prior knowledge applied to The Real World Of Real Work. But first, what awesome, classified, doomsday devices did I get to work on? Well...
Canada's plans for world domination are ramping up, but I didn't get to work on that project. Instead, I joined one of the Maritime Command and Control Concept Development group's projects: virtual VICTORIA. This is a life-size replica of a VICTORIA-class submarine control room that'll be used as a laboratory to do human factors studies, and develop interaction systems to better support the work the crew is doing. The first planned experiment is a dashboard to provide the commander with better situational awareness. It'll have all the data they need in one place, allowing them a quick overview, plus the ability to drill down to whatever level of detail they need.
It's an ambitious project, and just slowly getting off the ground. The system is huge, and I only worked on a small portion of it - but even just the exposure to designing a large system like that was fun and hugely instructive. I doubt if I'll get a chance to learn about this scale of system in university, much less work on it. I used a slew of new technologies like CORBA and ActiveMQ, and managed to build a small but complete system within the larger project.
Passive sonar is very important on submarines, and is used extensively in real life. The virtual VICTORIA needs to provide simulated capabilities comparable to what's available on a real VICTORIA-class submarine. Sonar operators can listen to high-quality audio direct from the sonar system, so in our simulated version, we need to have a simulated sonar system that the operators can listen to. Luckily, the simulated sonar already exists in-house, and all that's needed is to hook it up, and provide audio out to headphones.
It's done, and it works.
Let me re-frame what I said at the beginning; it was what I'd learned in university that didn't line up with what I needed at DRDC. The broad range of skills I'd developed on my own were essential: using source control, some inkling of what constitutes good software design, knowing how to teach myself, and flexibility in the face of change were what got me through successfully. Yes, I needed to know how to write some Java code - but that was almost never the hard part. Java may be frustrating and verbose, but it is a fine programming language. It isn't my first choice, but that's what we used on this project, and that's totally fine. The real challenges were understanding large systems and how my subsystem fits into that; designing my components well; and writing good documentation for the team (as a co-op student, you're scheduled to be run over by a bus 4 months after you start work, so leaving behind good docs is crucial).
I sort of understood that studying computer science at university teaches you about computer science and not about computer programming, but I was still surprised. This makes the co-op program all the more valuable - I don't know why more CS students don't take advantage of it. It isn't even hard to get in - you basically need to have enough grey matter to avoid failing out. Unfortunately, there is a startling amount of bureaucracy, and CS students have a notoriously low tolerance for BS... the co-op office might take that into consideration when thinking about why enrolment in the co-op program is so low.
It's often said that one should never let their schooling interfere with their education. I won't be dropping out of university, but the sentiment is true. I've done lots of self-directed learning, and it has almost always turned out to be the most valuable kind. Learning to learn is, without a doubt, the best skill I have, and I got it by working on open-source software. I mean this will no sentimentality - it's just a brute fact. You learn to do by doing, and you learn to learn by learning - and working on open-source software involves both. The rewards from that have proved to be more useful on this project than my schooling thus far. I urge CS students to take this to heart - even (no, especially!) if you're not doing co-op get out of the classroom and go work on some cool projects. It'll be well worth your while.
If you're a CS student, programmer in the workforce, a professor, or a hiring manager, let me know what you think. What are the relative values of a CS degree versus experience (whether volunteer open-source work, or "real" work)? Is the Github portfolio replacing the resume?
These four months have been a unique and rewarding experience. I wonder what my next co-op work term (another 4 months; begins Jan 2012) has in store!