When I first came out of university I was eager to try and conquer the world with my programming abilities and felt elated that I’d been able to secure a job at a very well respected investment bank within my city of origin. However, 6 months into my new career I realised I knew very little.

Sure, I’d programmed a few games and successfully attained the grades I needed to qualify for the graduate program but the actual learning curve going from university level projects to developing tools for enterprise applications used firmwide is HUGE.

I don’t consider myself arrogant but having done freelance part time whilst studying I was confident that I wouldn’t be the worst programmer in the world when I first joined. However, when I started I was blown away by the sheer amount of things I had to learn and am still actively trying to learn in my spare time in order to keep up.

Below you’ll find a list of some of the stuff that I wish I had went into deeper during my academic life:

Test Driven Development Rules

Seriously, if I’d known about test driven development(TDD), when I was in first year, every consequent assignment would have been a breeze. Writing a group project application? Write tests for the expected behaviour at the start and you’ll save yourself a world of trouble.

Software Development Life Cycle

This was something that was taught at university but glossed over and should have been drummed into us more religiously. Having to completely change the way we write our software is a huge stepping stone that requires a bit of getting used to and adding this on top of the mountain of other things we have to overcome is hard.

Learn Unix Inside Out

Having to support the applications you are working on means you have to be comfortable with grepping and tailing and navigating through hundreds of directories and thousands of different log files. I was fairly comfortable with Unix having set up hundreds of different websites over the past 4 years but I was only getting good at doing a specific sequence of steps. Setup a domain using apache, restart a few services and possibly do a bit of python but that’s about it.

Even now I’m dedicating time every weekend to try and learn a couple new commands that will ultimately help me traverse the unix ecosystem.

Build Systems and Dev-Ops

Ever used Jenkins at University? probably not, but it’s a huge part of software development and recently Continuous Integration is becoming bigger and bigger. I recently went to a talk by one of the lead developers at the BBC who was praising the growing trend in continuous integration systems and how Jenkins has changed the way they release their code into the wild.

Continuous Integration/Continuous Deployment is HUGE these days.

If I was going back to Uni, I’d at least like to cover these briefly and at least get given a project that requires the use of some form of CI/CD tool. Given it’s growing prominence in the workplace it’s definitely going to be beneficial.

Software Security Is Important

It seems like every week we see a new story in the news about how some company has stored all their passwords in plaintext and now 100 million people are at risk of having their identities being stolen. At University we have no concept of security and it’s something that is hugely important in the workplace these days. From the start of my working life it’s been drummed into me that security should be thought about at every level of what we do.

With how important security is these days at every firm, it’s crazy to think that the subject is just brushed over before we are let loose on the world.

University is Great

This article might seem like I’m bashing the current education system, but it’s the opposite, I’m incredibly grateful for the education that I was lucky enough to received. All I’m hoping to say in this article is that these areas need to be given a greater importance for the next generation as these things are only ever going to become more and more important.