Software engineering: 5 things they don’t teach you at university

Posted by on September 10, 2021

Introduction

Over the past couple of months, I’ve been working as an intern software engineer in the Banking Integrations team here at FreeAgent. Before I started, I had just finished the second year of my Computer Science degree at the University of Birmingham. 

Whilst university taught me a multitude of skills, there are many that can only be truly gained from working in a company. I’d like to share some of these below.

1. Navigating a large codebase

University taught me how to solve problems using code — a very useful skill. However, I now realise that being a good programmer does not necessarily make you a good software engineer; there are other equally important skills like teamwork, maintainability, and understanding code written by other people. 

Furthermore, at university you often write small programs on your own to accomplish a specific assignment. It is often not important that this code is unit-tested, follows good practices, and is properly commented. The importance of these things became self-evident when navigating the FreeAgent codebase, which had been worked on by — at the time of writing — 163 developers. I also struggled to navigate the codebase at first, simply because I’d never worked on programs with more than a few files before.

Tip for incoming interns

Make use of your IDE’s universal search functionality for files, keywords, and method names. Also, look into ripgrep.

2. Working with APIs

One valuable skill that wasn’t covered during my time at university is working with APIs. Before coming to FreeAgent, I had no idea how to make an HTTP request. During the first couple of weeks, my wonderful teammate Will helped me set up Postman so that I could query FreeAgent’s public API. At first, I didn’t know how Postman was making the requests — it seemed like magic. Later on, I learnt how to make requests manually (i.e. on the command line): first by using curl, followed by the more user-friendly httpie. This way, I managed to understand how the requests were formed by Postman under its complex graphical interface.

Tip for incoming interns

Practise with a public API (e.g. the Spotify Web API) first. Try to familiarise yourself with JSON, using access and refresh tokens, and the different HTTP request methods you can use to fetch data from the API. 

3. Teamwork

At university, you write most of your code by yourself. University didn’t prepare me for daily stand-ups, retros, code reviews, and making my own pull requests. In fact, my university only taught me a few basic git commands; I had to pick up most of the ones I now know during this internship. 

One key difference between university and a software company is that whilst university assesses your work individually most of the time, in a software company everything is done in a team; you have to learn to be a good team player. 

Tip for incoming interns

I would recommend looking through the pull requests of an open source project on GitHub (e.g. Jekyll, but there are loads). You could even try cloning it and making some changes yourself, followed by your own pull request.

4. Unit Testing

Another skill that university didn’t prepare me with is writing well-structured, clean and unit-tested code. At university, you learn the syntax and various quirks of a particular language, but you never learn its best practices. We were only taught about unit testing in the context of passing pre-written tests for each section of an assignment.

Now I understand that writing unit tests is often more important than writing the actual code itself. Good unit testing makes it easier to prevent and identify bugs, leading to a more maintainable codebase. 

Tip for incoming interns

If you aren’t used to writing your own unit tests, here’s a useful tutorial on how to do so using RSpec.

5. Web Frameworks

Prior to this internship, I had little experience working with web frameworks. Most of the coding assignments at university are focussed on specific computer science concepts. To build a big web application like FreeAgent, however, you need a web framework (e.g. Ruby on Rails). 

I had used the Django web framework in one of my personal projects and this made it easier to learn Rails, since a lot of the fundamental concepts (like MVC) are the same.  

Tip for incoming interns

I would recommend going through the “Getting Started with Rails” tutorial. This will save you a lot of time when it comes to familiarising yourself with the FreeAgent codebase. 

Conclusion

My degree in computer science has taught me many useful things: data structures, algorithms, programming paradigms, networks, databases and the basics of web development. These form the foundation of a software engineer’s toolkit. 

However, this internship has allowed me to see that many skills and experiences are not — and sometimes cannot — be gained at university. These include navigating large codebases, working in a team and, most importantly, getting to see my code live in production being used by real people. Should you find yourself in a position to apply for an internship at FreeAgent, I’d highly recommend it.

I hope you enjoyed reading this post and found it useful. If you’ve recently completed an internship, feel free to get in touch — I’d love to hear how your experience compares.

Leave a reply

Your email address will not be published. Required fields are marked *