My fantastic job as a Lead Developer at Fivium (where I have now been for 8 years) has involved a lot of interviewing, training and working with graduates and students. During this time, I've noticed several things that universities just don't teach, or at least, don't teach well enough to serve developers in the "real world" (by which I mean the world outside of academia).
For a long time I've wanted to write about a collection of things I've learned outside of university that could (and should) be incorporated into the way that computing courses are delivered. This will be a mini-series of posts of things university doesn't teach you about software development.
Why write these blog posts?
As an industry, we should recognise what universities do well, and not so well. I personally see this every year in the candidates that we interview and employ for graduate and student placement positions - there's a consistent set of skills that are often missing.
Let's also take account of the increase in price of further education. When I started university in 2004, the fees were more than 5 times lower than they are now (with current fees typically around the maximum £9000/year). To justify that amount of money, universities must be fully equipping students for serious jobs in the working world, and frankly, they're not.
This blog post series is essentially:
- open feedback to universities to show the key skills they're failing to deliver and
- guidance for graduates or students that want to make up the shortfall themselves
What do universities do well?
There are many things that a university can teach better than a workplace setting. I don't feel the need to go into detail, but they include:
- Core programming fundamentals such as references and pointers, algorithms and data structures, and different programming paradigms.
- How to learn a programming language - because once you know a handful you can pretty much learn any language.
- Detailed topics such as cryptography and machine learning that most people won't have to encounter in their day-to-day work, but where an introductory knowledge can be incredibly useful time and time again.
Many universities also offer a professional training year / placement year, and I thoroughly recommend these. They're a great way to get on-the-job experience, and we tend to find that those who have taken a placement year outperform those who haven't as they've got a year or more head-start.
Should I go to university to study computing?
That's a decision you'll have to make yourself, but please follow this blog series and read what I have to say in the final post, which will be a retrospective on my university experience combined with what I know of current courses on offer (and the current price of the education you'll receive).
What topics will be covered?
I'll be publishing these posts over the coming months:
- Thing 1 - Writing code for the long term
- Thing 2 - Proper teamwork
- Thing 3 - Regressions matter
- Thing 4 - You will ship code with bugs
- Thing 5 - Presenting your work effectively
- Thing 6 - Thinking retrospectively
- Thing 7 - Consuming APIs and libraries
- Thing 8 - Project planning and scale
- A retrospective on my university course