Around a decade ago, I was fortunate enough to be able to further my education at the University of Surrey for (by today's standards) relatively modest fees. There were a lot of things I enjoyed about the experience, but as I've found out subsequently it was far from perfect in terms of preparing me for the "real world" of software development.
As the price of further education has increased significantly (fees are now over 5 times the amount that I paid, and the cost of living has gone up too), I've been reflecting on whether it would truly represent value for money and the various pros and cons.
This also covers my experience of interviewing, working with and mentoring graduates over the last 8 years.
A retrospective on my university degree
I have a lot to be thankful for as my degree led almost directly to my current job (as it did for about a third of the employees at Fivium), and laid some solid foundations and principles that I've made use of over the years, but there are also plenty of things that could have been improved.
I've noted many of these during the blog series Things university doesn't teach you about software development, which would probably be worth reading first (if you haven't already).
While it's difficult to measure the value proposition, I am becoming increasingly sceptical that university continues to represent true value for money in the field of computing.
Solid foundations
Let's start out with some of the good things - things that have stuck with me and help me every day of my working life.
I was already a programmer when I started university, but I was self taught, a keen amateur.
I'd started with OPL on a Psion Organiser that my dad gave me. If you've never seen one of those before, it looks like this:
From there, I'd moved on to QBasic on the PC, and later HTML and JavaScript, and then something possessed me to pick up a copy of The C Programming Language (2nd Edition) and start learning C. While it's a great book, and still worth a read if you're interested in porting existing programming knowledge to the C language, my university lecturer later explicitly advised against using it to learn programming concepts as it's rather better for reference… oops.
Anyway, where I'm going with this is that while I'd picked up the basics of a few programming languages, I hadn't ever formally learned the concepts, and that was seriously holding me back.
Through various university modules, I was taught the absolute fundamentals - algorithms, data structures, time complexity, modelling, design, pointers, references - concepts that transcend specific programming languages and are applicable at some level to everything you do as a programmer.
I remember at the University of Surrey open day, one of the academics told us that "we don't teach you programming languages, we teach you how to learn programming languages", and he was right. The formal teaching of, at the time, C and Java, was not in-depth. They taught us enough syntax and specifics to be able to understand the concepts and write code, but make no mistake, the concepts were the focus.
Since then I've been able to pick up pretty much any programming language I've wanted to, and realistically, I believe a good grounding means you can pick up more or less any programming language (to the point of being professionally competent) in a couple of weeks.
A mix of business and computing
I had already studied business during my A levels, so this wasn't particularly revelatory to me, but I did think that the introduction of concepts that are alien to many was a good move.
This may seem blunt, but I think pure Computer Science degrees that don't incorporate a bit of wider curriculum are doing students a disservice.
Unless you exclusively work in a very specific niche, you're going to be working with non-technical business people, who care about things like marketing. You're likely to become more involved in management as your career progresses. A basic grounding in these concepts is extremely beneficial, and helps you to understand the goals and motivations of your colleagues.
Knowledge and skills in these areas means you're also able to contribute in ways not normally associated with software developers, and that makes you a more valuable employee and a more well-rounded person.
Placement / professional training year
If I could impart just one piece of advice for a student who is starting out down the computer science / software engineering road and considering a university degree it would be to choose a course that offers a professional training (placement) year.
To my knowledge, it's still not that common for students in the UK to undertake a professional year in industry, and I think that's a huge mistake, no matter the field you're studying.
As I've alluded to during this blog post series, there are many things university doesn't teach, and while I've tried to suggest how students and universities can mitigate or change this, there's really nothing quite like being employed in a real programming job to give you that confidence and experience that you'll need in later life.
Professional training years offer serious, real world experience. You'll work in a team and you'll communicate with them daily. You'll use version control, write tests, take responsibility for quality, and learn about how you work most effectively. You'll use good quality tools. You'll meet business people, end users, and other stakeholders.
It's an introduction to what you'll be doing for the rest of your life if this is your chosen career path. It's also a great way to test out if this really is what you want to do with your career. I've seen a number of great students (who were very competent programmers) decide that actually, after spending a year doing it, they'd prefer something more engineery or perhaps more towards the business analyst end of the scale.
The placement we offer at Fivium gives you exposure to UK government projects and organisations, working in a small company (with still-present start-up culture) and using with a variety of tools (mostly web-focussed development). It's a good opportunity to figure out which of those things you like or don't like.
Benefits of the placement year
Usually the professional training year pays about 65% of a graduate starting salary which is fair (you are 65% of a graduate) and is great to help keep those student loans down (more about this later).
Often, students will be given the chance to return to rejoin the company once they graduate. It's an amazing recruitment pipeline that we also benefit from.
Even if you don't want to rejoin the company you worked for, or are not offered a chance to do so, the experience makes you stand out from the crowd - and rightfully so. We consistently see students that did a placement year outperform those that didn't when we're recruiting. That extra year of mentoring and professional experience goes a long way.
We can't hire all of our students because we're a small company, but all of them go on to work in amazing jobs in the tech industry.
My personal experience was that it was a great way to spend a year. I learned arguably just as much as the first two years of university combined. I was given opportunities to write some excellent software, much of which is still used today, and contribute to frameworks used by other team members.
As a result of a successful year, I was asked to return back and do some work over the Christmas break in my final year, and during that period I was given an offer to rejoin the company permanently once I had graduated (which I accepted, and I've been there ever since).
Working with skilled professionals and being treated as an equal peer gave me a huge confidence boost, in my technical and social skills.
Coursework could be modernised
I am not an exam person, I really hate sitting them and I always get really anxious beforehand, even though I know I've done my preparation and I'll probably be fine. So, I valued coursework-heavier modules because they didn't put me in a position I find uncomfortable, and they more fairly assess your work (rather than what you can memorise).
The truth is, though, that coursework is really just another assessment metric, it's not as much of a learning aid as it could be. It does little-to-nothing to prepare you for software development in the real world, as I've written about before.
You can read my thoughts on this in more detail here:
- Thing 1 - Writing code for the long term
- Thing 3 - Regressions matter
- Thing 7 - Consuming APIs and libraries
Fundamentally though, it seems like universities are just missing basic opportunities to teach industry standards, like using version control, bug tracking, reusing existing code, writing tests and assessing the quality of what you've built. Many of these could be added nearly for free, and doing so would help students prepare for future employment.
Lack of focus on soft skills
As I wrote in my blog about proper teamwork, the soft skills elements of university courses are hugely lacking. While it's important to teach and assess the fundamentals, it's rare that software developers work alone these days. Software is an increasingly large part of the things we do, and the appliances we own, and this means that software developers are now, more than ever, intertwined with the wider businesses that we serve.
A fundamental lack of team-working skills is something that can be addressed through training and mentoring while on the job, but there's really no reason why this couldn't be provided as part of a university course. This is often attempted by throwing teams together randomly and forcing them to work for a joint grade, but in my opinion this is damaging and unfair.
Another set of skills that are always conspicuous by their absence when we interview students and fresh graduates are the ability to deliver presentations and general interview technique.
While we always try to take inexperience and personality types into account when assessing candidates, it is really frustrating to see people that haven't prepared in advance trying to blunder their way though a demo of something they're allegedly proud of! It's frustrating to the point that I've considered asking universities if we can run a workshop on it before their students interview with us.
As with the coursework improvements above, it seems like some of these things could be incorporated essentially for free as part of university courses, but really there should be a specific effort made to teach these skills. Most universities offer, for example, essay writing or language tuition, so I don't see why it would be out of the question to deliver soft skills training.
The value proposition
I've written a whole bunch about my thoughts on university and where it is lacking in what it provides students, but the real question people ask is "should I go to university?"… I'm not qualified to answer that question, but I do have an opinion on whether it's worth studying computer science / software engineering at university.
My opinion is: maybe. Sorry if that's disappointing.
The reality is that it's very, very expensive these days to go to a UK university, and you will really have to do the maths for yourself to decide if it's worth it. Here's my crude attempt at estimating the cost.
The debt you will accumulate
As a student in the UK, starting in 2017, you will spend (up to, but almost certainly) £9,250 per year on tuition fees, which is added straight onto your student loan. You could receive a maintenance allowance (for rent, food, etc) of between £3,124 up to a massive £11,002, depending on how wealthy your parents are, whether you live at home or not, and whether you're in London or not. This is also added to your loan.
On a standard three year course, this means that you could be anywhere between £37,122 and a whopping £60,756 in debt at the point you graduate, and this number is a low estimate because it's not counting the compound interest you'd incur over those three years.
No matter how you look at it, it's pretty scary stuff. I graduated in 2008, and my tuition fees were (in total, for the three years) approximately £4,500. Current and future students are dealing with a different order of magnitude.
You can work out how this would look for you by using the Student Finance Calculator, which will tell you how much you can receive for maintenance, and the Student Loans Repayment Calculator, which will tell you how much you'd owe, how much you'd pay, and how long it would take to repay.
Is it worth it?
Really what it comes down to is this:
- Are you going to get a job faster and be paid proportionally more if you have a degree, than if you don't?
- As a graduating 21-year-old, are you able to demand a higher salary than a 21-year-old with 3 years of experience working in the computing industry?
- Will you earn enough extra as a result of your degree to balance out the repayments you'll be making on the loan?
- Will you have better opportunities with a degree than the equivalent years of industry experience?
Don't get me wrong, having a degree can open doors for you, and that shouldn't be dismissed. But could you not open those same doors with three years of experience and working hard to prove yourself? For some roles, maybe, for others, maybe not.
It's worth noting that we do not require a degree to apply for a job at Fivium, although in the past we have required it, and in many ways it establishes that a candidate has a base level of knowledge and skill, despite the shortcomings I've discussed.
What about the alternatives?
A lot of people think that a university degree is the only way into their chosen profession. Historically, there has been some credibility to that argument. Many companies wouldn't even consider applicants without a degree.
That said, a lot of companies will offer internships and apprenticeships. Larger companies may have specific programmes you can join. If you have some savings, you could go on some training courses or get yourself certified in a technology. You could write some software to showcase your skills and stick it up on the Internet.
There are lots of things you can do to make yourself stand out, without necessarily having a degree, and these are only a few examples. Not all of these alternatives are free, but all of them are vastly less expensive over time.
And let's face it, once you've been employed for a few years, really that's what any potential future employer will be interested in - your professional rather than academic achievements.
Conclusion
I do not regret doing a university degree and I am incredibly thankful that I was able to afford it (the fees being considerably lower than they are now) without ending up with huge debts. My time at university has given me some very useful skills, and led directly to my current employment. I have a lot to be grateful for.
All said and done, I do not believe universities are delivering everything they could, and considering the massive hike in cost in recent years, that's not really fair on the students.
Each prospective student will have to make their own mind up, but if you'd asked me the question of "whether it's worth it" a decade ago, I would have said "yes, absolutely", and now I really can't give you a convincing answer either way.
I hope that my experiences and suggestions from this blog post series will prove useful for others. Please do let me know if you've passed any of this on to faculty staff, or if as a student you're practising some of the techniques I've written about.
Here are some links back to the topics I've covered in this series. Thanks for reading!
Things university doesn't teach you about software development: