I’ve just come to the end of my first year studying for my bachelor’s degree in Computing at Imperial College London. It was only a year or so ago that I was discussing CS degrees with various friends, and giving my thoughts and justifications at the time for the relevance and benefit in my choice of studying such a degree. My views now are largely unaltered, and if anything I’m more satisfied with my choice now than I was then.
Here are some of my thoughts on why studying a CS degree was the right choice for me:
‘Invest Regularly in Your Knowledge Portfolio’1
For me the biggest advantage of my degree so far has been the plethora of topics that I’ve covered that I simply wouldn’t have had the time or inclination to explore otherwise.
My favourite class from this year was Haskell, which – never having used a functional programming language before – was both eye-opening2 and pretty fun. It was so different to my normal Objective-C/Cocoa environment and made me think about programming in a completely different way, and it was gratifying to craft beautiful one-line solutions that took advantage of language-level features like lazy-evaluation or little tricks which would never be suitable in any vaguely maintainable shipping codebase. Although I can’t see them being directly applicable to my career, courses such as the Haskell one broadened my experiences and have definitely made me think differently about programming in other languages.
Having had programming and general computer nerdery as hobbies of mine for the last decade or so, I’ve picked up a fair amount of information and it’s pretty much all been self-taught. But learning is a continual process and a large part of why I went into studying a degree was to fill the gaps in my knowledge. I can build a complex Objective-C application or a website with ease, but I know less about areas such as networking and hardware. Being largely self-taught, having formal teaching was also an interesting experience, especially for something like programming which is often quite an isolated activity.
Inspiration from like-minded people
One of the things that slightly intimidated me at the beginning of the year was how incredibly intelligent the other people in my class are. There are people who can knock up AIs and complex mathematical algorithms with apparent ease (things which aren’t my strongest points). The department at Imperial is one of the best in the world3, and it is definitely reflected in the people that are in my year.
However, working alongside other intelligent, like-minded people has been hugely beneficial and a driving force for side-projects and other ideas. It’s also led to many an interesting discussion (often over some form of alcohol) about new ideas and thoughts about the current state, progression and future of the industry. Talking to others with experience with other languages and environments has also been useful and insightful, and I’ve been introduced to languages such as CoffeeScript (and the associated CoffeeScript-SASS-Jade stack) through others in my classes.
Being taught by and chatting to academic staff who have years of experience and often are researchers in their field also makes a great resource, and the quality of teaching is excellent. Seeing some of the projects that PhD students are working on is also interesting, and a personal favourite of mine is game-generating AI ANGELINA, by Michael Cook.
Studying at university also – funnily enough – leads to quite a lot of free time. My average day is usually something from about 10 or 11am until about 4 or 5pm, but this is not filled with back-to-back classes and lectures. We have a fair amount of free time between lectures or during weekends and evenings and this year I’ve done some freelance work on a fairly significant update to Fontcase and written the blog engine for this site, both of which were interesting and fun projects.
Working on projects part-time, as opposed to full-time, can also be quite beneficial, and a degree gives you more time for side-projects than a full-time job would. As you have limited time to work on projects you often make more productive use of the time you’ve got, and coming back to a project after a break with fresh eyes can be really useful in spotting any previous mistakes and bad choices and deciding where and how to proceed.
One of the other things I hadn’t really had any experience with before was working on coding projects in a group. This is something which Imperial seems to be particularly keen on pushing, and we had two fairly large group projects this year: one, a research project which we had to develop an accompanying website for, and the other an assembler and emulator written in C for a fictitious computer architecture.
The projects were led very well – we were taught about and made to use git for version control. It was my first exposure to activities such as pair programming, and working with others will be a useful skill to develop gradually for work once I graduate.
The bad points
Of course, there are some disadvantages to a CS degree, which include:
- Some first year material can be simplistic if you have prior experience, especially with programming, although this is to be expected as the first year is all about getting everyone on the same page. (Also, lectures aren’t mandatory 😜).
- University is still fairly expensive. However, our year is lucky as we’re the last to have our tuition fees capped at ~£3,000 which remains for the 3 or 4 years we’re here, unlike students starting from Autumn 2012 who will have to pay anywhere up to around £9,000 a year in tuition alone.
- There is, of course, the argument that the 3-4 years spent at university could be spent working somewhere gaining practical experience. However I’m fine with spending these few years getting a formal education first.
With the huge amount of resources available online for self-learning, it might be tempting for people who already have programming and other related experience to skip a CS degree, and go straight into work.
But no matter how good you are or how much experience you have there’s always more to learn, and a degree offers lots of ways to explore subject areas you’ve never touched before, that you simply wouldn’t otherwise. Self-taught programming can also lead you into developing bad habits (I’m sure I’ve developed several), and it can be useful to see how peers and those with more experience around you do things to get some perspective and critique your own ways of working.
I’m sure it’s not for everyone, but my experience so far has been fantastic, and I’m looking forward to the next 2 or 3 years ahead of me.
When going back to imperative programming, the spaghetti splurge was like a smack in the face. ↩
I’m not a huge fan of education league tables, but according to Times Higher Education, Imperial ranks at #10 in the world for Engineering and Technology courses, and Imperial CS graduates have the second highest starting salary after graduation in the UK (only beaten by Cambridge Economics graduates). ↩