My Path from School to University to Work
Note: the below article is purely my point of view, and does not represent the perspectives of my employer(s), university, school, or any persons other than myself. This is purely meant to describe my journey, and isn't a set path to follow! It'll depend entirely on you as a person, and what path you want to take.
In May, I was invited back to my secondary school to talk to Lower Sixth (Year 12) students about my journey through university to the job I am currently in.
In the run up to the afternoon of speed networking, I had been thinking back about my journey over the last few years to the current day.
After some of the questions I received at the speed networking session with the current boys, I decided that in the spirit of Blogumentation I would write these answers up for posterity, as well as to be able to add any new questions that I may receive in the future.
Timeline
I feel a small timeline of the run up to "now" would be of use especially around giving some further context on my experiences.
2005 Joined secondary school after the 11+ exams
2006 Pre-GCSEs
- Up until this point, my sole interest in computers was gaming
- I had dabbled in creating mods for the PC games I had
- Interest in computers while exploring the network at school
- At first I felt it was Computer Security that was the interest, but looking back, I feel that it was actually the problem solving of "oh, there's this issue in my way, how can I creatively get around it?"
2008 Start GCSEs
- Opted for GCSE ICT
- More what I wanted to do, as I knew I wanted a career in tech
- But there was far too much Excel/Access/Word
- There wasn't enough real problem solving
2010 - Start A Levels
- English Literature, Latin, Maths and Computing
- Originally I'd planned on dropping Maths
- Universities preferred Maths AS, so I took it just to help with applications
- I preferred the other three subjects and wanted to study them more
- (but turns out that wasn't to be)
2011 - Start A2 Levels
- Drop Latin, as it was the weakest of my AS levels (
C
) - A2 computing project - Libelius Student Organiser
- Lots of new stuff I'd not touched
- Would not be able to get support from my teachers, as it wasn't their core knowledge
- More details at “What project did you do for your A2 final project?”
- Applied to University of Nottingham, University of Manchester, University of Essex, University of Reading, University of Kent
- Got offers from all 5
- University of Nottingham as first choice, University of Kent as second choice
2012 - Complete my A Levels
A*AB
- Got into Nottingham, my first choice
2012-2013 - First year at University
- Realise that really, this is what I want to be doing - I was properly programming and starting to properly problem solve
- Co-founded HackSoc Nottingham, the hobbyist programming society, with a few coursemates from first and second years
- Originally for competitive programming challenges
- Surged in popularity as UK student hackathon scene grew
- My first semester was much easier than it could have been, as I already had some foundations of programming
- But in the second semester I found there was a lot of new ground
- Overall the first year was straightforward, and I didn't have to work as hard as others who came to uni without a CS/IT background
- I did work pretty hard, though, as I was planning on going for a placement year, therefore I needed strong first year for applications
- I was also routinely beaten by others in the group who actually weren't from a CS/IT background, showing that my previous knowledge didn't make me better by any stretch
- That summer I spent a couple of days at Oracle, where Neeta, the mother of a school friend worked, and she introduced me to a number of placement students, engineers and managers, which gave me a taste for what a placement year at Oracle would entail
2013-2014 - Second year at University + placement year applications
- I started with my applications for my placement year as soon as the semester started, given the hints Neeta gave me
- University didn't have a placement year as part of the course
- Took the initiative, with no help from the uni
- I had two main contenders for my placement year:
- Student Beans, Rails/Android
- "build your own internship" as it was their first time taking on an intern
- based in London, likely living with my parents and commuting into London
- Intel working on Android
- They'd had 3 previous interns in that role, and had a cohort of interns from various job families every year
- based in Reading
- Before Christmas I received an offer for an interview at Intel, whereas I'd been offered the role at Student Beans
- Went for the interview, wanting to explore it, but honestly not thinking I'd take it
- Decided to take it, as it would be a larger career piece
- Felt quite bad that I'd asked Student Beans to hold on, and let me explore the interview even though I thought it'd be a no, but then ended up taking the job
- Oracle's applications opened in April/May so I couldn't apply, as it was much later than Student Beans and Intel which opened in September
- I had two offers, and didn't want to discard them on the chance I'd have an offer from Oracle (which I wasn't 100% sure would be better than the others)
- Student Beans, Rails/Android
- Second year again involved a lot of new ground to cover, very little I was ahead on
- Year long group project across the year
- Given the brief for creating a self-playing game of football called Football Facsimile
- I was selected as group leader, and as a team had to manage the inner workings of how we divided work and how we decided to reach our end goal
- Won the overall "best group project" prize
2014-2015 - Industrial Placement as Application Engineer at Intel, Reading
- Worked on the Tesco Hudl2 tablet project
- "If we run insert game name here and open the notifications bar 7 times and then close it, the screen starts to glitch"
- Lots of black-box debugging by looking through system logs to see if there was anything that applications / OS logged to help debug
- If an underlying issue, we'd pass on details to an actual engineer
- Worked with a few companies on enabling projects with new Intel tooling, such as Intel RealSense and the Intel Broadwell platform
- Not quite as technical as I hoped for, a couple of sample projects but very little overall
- Spent more time working on automation pieces like Docker Build System for Android on Intel Architecture which I enjoyed more than the day job
- Found that it wasn't quite what I wanted to do, at the end of the day
- But that's great! I was able to tick something off the list
- Deciding what you part of tech want to move into is such a massive list, it's great to at least have one less choice (for more choices, see There's more to Tech than just "regular software engineer")
- Got a year's experience and some pay, as well as being able to travel and network
- Solving real problems with real clients
2015-2016 - Final year at uni
- After a year of work, I was struggling with coming back to university
- Working on tiny little projects with no real output
- I had been very used to the freedom of work, where my evenings and weekends were my own - compared to uni, where I'd always go from one deadline to another
- Probably my suboptimal time management skills
- It was a little more of an isolated year in a way, as most of my friends had graduated and left, but luckily I still had a few new friends around
- Final year project
- Like my A2 project, I went for a project with which I would be unable to get much technical help from my supervisor, because it was something I was interested in
- However, I was able to get some great guidance with questions like "what do I need to look at next" and helping pull me out of dead ends, as well as give me a good sounding board to talk problems through
- I'd had several thoughts for projects, but as my supervisor mentioned, it should be something that I'd be happy to dedicate the next year on
- Hacksoc's General Secretary
- Led the Python programming sessions for teaching non-CS students
- Involved in InspireWiT organisation again
- Organised the volunteers both before and on the day
- I also worked on setting up the workshop infrastructure for InspireWiT, provisioning a cloud instance with tooling for a sponsor workshop, after it was found out that the organiser hadn't communicated requirements to the IT team in time
- Spent time in sponsor workshops to ensure everything was going smoothly
- And with all of that, I was also going through the stress of job interviews, which involved a few trips to London and back, which impacted my time and sanity sometimes!
- Was looking at a role in Bristol, but the day before realised that it'd be too much of a drain on time, and I'd not had time to prepare around all the other deadlines, so dropped out
2016-2017 - Software Development Engineer 1 at Capital One UK
- Joined on the graduate scheme in September 2016
- Working as a Software Engineer in the Identity Services team
- Using Java, Chef and Ruby to get the Identity service into the AWS cloud
- Building it with the intention of a Single Sign On experience for Capital One customers
2018-2018 - Software Development Engineer 2 at Capital One UK
- Promotion to Software Development Engineer 2 in January 2018
- Started move into Quality Engineering at the start of July
Common Questions
"What project did you do for your A2 final project?"
For my A2 project, I built a student organiser web application, which had the ability to display a colour-coded timetable as well as being able to enter homework. More details can be found on the Libelius Student Organiser project page.
The project was primarily about scratching an itch with having no digital method to track my timetable and homework, while also being a great way to work on a project where I knew the problem domain well.
I went into the project knowing I wouldn't be able to get much support from my teachers, as I wasn't going the Delphi/Pascal route, but was instead working with PHP and MySQL, which weren't my teachers' expertise. However, I was able to get some help with fundamentals such as some truly awful SQL queries and how I structured my code.
I learnt a huge amount through the project, and enjoyed my first foray into building a project all by myself that I had my friends using daily towards the end of the project.
If I was able to redo the project with only one piece of knowledge I've learnt since, it would be version control. Git was one of the most important things I learned outside of uni, and has helped me with so many headaches - this project could've been one of them!
"How many languages did you learn at uni?"
During my course I was exposed to a number of languages, with various levels of depth of knowledge. However, the "core" language would be Java, used by the compulsory modules that required programming experience.
Note that I wouldn't say I "know" these languages or that I've really "learned them", but more that I've had experience with them. I would say after my degree I was somewhat competent with Java, and that after a refresher I'd be able to write some Haskell, but that I'm not exactly a top developer in all these languages.
For a breakdown of all the languages and associated modules:
First Year
- ARM Assembly (Computer Systems Architecture)
- C (Introduction to Programming)
- Java (Object Oriented Programming)
- Haskell (Introduction to Functional Programming)
- Python (Foundations of Software Engineering)
- Shell Scripting (Unix and Software Tools)
- PHP (Web Programming and Scripting, Database Systems)
- SQL (Database Systems)
Second Year
- Java (Application Programming, Software Engineering Group Project, Algorithms and Data Structures, Graphical User Interfaces, Concepts of Concurrency)
- C++ (C++ Programming)
- Coq (Introduction to Formal Reasoning)
- Haskell (Advanced Functional Programming, Machines and Their Languages)
Third Year
- Java (Mobile Device Programming, Software Quality Management)
- C (Individual Dissertation)
- Shell Scripting (Computer Security)
- R (Fuzzy Sets and Fuzzy Logic Systems)
- Haskell (Compilers)
- Unreal Engine (Games)
"What languages do you use at work?"
In terms of the languages that I regularly use:
- Backend Service - Java
- Acceptance Testing - Java
- Performance Testing - Scala
- Configuration Management - Chef (Ruby)
- Scripting - Ruby, Shell Scripts, Groovy
But in terms of the tech stack our Software Engineering department as a whole use:
- Frontend Services - JavaScript + ReactJS
- Frontend Orchestration (to consume backend services) - NodeJS
- Backend Services - Java
- Scripting - Ruby, Shell Scripts, Groovy, Python
"What would you do if you hadn't done Computer Science"
I was fortunate to know since year 8 that I wanted to go into technology, so aside from that I didn't really have any other draws. As mentioned, I did Latin and English Literature at A Level because I enjoyed the subjects and wanted to explore them further, not because I saw them as an end goal for my career.
So honestly I couldn't say what I would be doing if it weren't for Computer Science.
"Do you need A Level Computing to study Computer Science/Software Engineering/...?"
No! I would say about 25-50% of my university year came with no previous experience of computing.
Although it made the first year easier, as I was a little ahead, and therefore needed to work a little less hard (at times), it didn't necessarily mean I was better. A number of students who joined without computing backgrounds came out with higher grades in the first year, when they were still learning, and came out of university with some of the highest grades.
"Do you need a degree to become a Computer Scientist/Software Engineer/...?"
Also no! At least a quarter of my immediate colleagues, let alone the wider department, haven't had a formal education in Computer Science / Software Engineering. Many exceed their colleagues who have had formal educations, partly due to the fact that they've had to work harder to get to the same level.
"Information/Cyber Security is pretty hot right now, should I be doing that?"
I had originally looked at Cybersecurity, as it was how I first got properly interested in tech (see Pre-GCSEs).
One of my teachers advised against specialising too early as it may make it harder to move specialities later. Instead, he recommended getting a general Computer Science degree and take Computer Security module(s) and potentially learn more in my spare time.
This was admittedly before the security field was as "hot" as it is now, but I feel it may still hold. Having a general Computer Science degree is a great to have as background and it doesn't mean that you can't take security modules, nor specialise later. Having a generalised background means it's easier to move disciplines in the future more easily, which although unlikely as Security will always be important, it's always possible.
As I mentioned, it turns out that this was exactly the right choice for me, as I found that security wasn't quite the path I wanted to take.
"How much of your day do you spend coding?"
As a controversial counter question, what do you define as "coding"? If you mean writing Java application code, then very little. If you include automation/scripting, then a tonne.
I'm in a somewhat irregular position, due to our team working on identity services using a third party solution. This means that instead of writing application code to extend the existing functionality, we're generally writing configuration code to tweak the server to perform the functionality we require. This isn't just a group of shell scripts; we're building it using the Configuration Management tool Chef, which allows us to write tests for our infrastructure pieces, which is a huge bonus for the team. In terms of the Java code, I'd say it takes up maybe 20% of my time since joining, whereas if you include Chef, it's much closer to 60%.
But even for other teams, I would say it's probably between 40-60% of the time they're actually writing code. There are a number of agile ceremonies such as standup, refinement, planning, retrospective, and review, which eat into the two week sprints. Aside from that, there are meetings both inside and outside the team, and reviews of the security and architecture of the system(s) you're building.
More recently I've been involved in a lot of cross-team sessions as we've been working towards our Open Banking compliance, which has involved a fair amount of whiteboarding and architecture integration planning. I've also been looking at resolving some technical debt as part of our internal architecture choices, and looking to streamline our processes, which is also not coding! I've been enjoying these opportunities as it's given me some wider-looking impacts, as well as helping me to get some really important feedback loops from senior engineers on my designs.
There are definitely a lot of jobs out there that are just concerned with being a (for want of a better term) "code monkey" where you can just write code. Surprisingly, I've found that I actually enjoy a role where I have the opportunity to look at wider impacts and how to standardise approaches, while still being able to deliver functional work. I say this which is a surprise, as I didn't think I'd be as much of a fan of working with other people as I do!
"Why Nottingham?"
I've previously done a whole talk on this subject, but to summarise:
- I'd previously seen the gorgeous campus of Nottingham a few times, so I was subconsciously rating every other university against it when looking
- I wanted a campus university, not a city one
- I preferred the idea of a self-contained experience
- Computer Science was on a separate campus, which meant that the halls of residence were literally a 5 minute walk from the lecture theatre
- This meant I could be lazy in mornings and get up as late as possible
- I looked against many league tables, such as the Sunday Times' Top Universities
- I found a course with requirements that I felt would be achievable
- I didn't want a university that had their Computer Science department born out of Engineering/Maths
- It was too Maths/Electronics based, which I wasn't as interested in
- I wanted more practical, real world Computer Science
- I came for university, but stayed for the community - there's such a vibrant, loving community (Tech Nottingham being the biggest, and most awesome)
- Nottingham is a great city - not too big, not too small, everyone is friendly and happy, cost of living is fairly low, there's tonnes to do, and a lot of great employment opportunities!
However, it was very close between Nottingham and Kent - Kent had a very strong focus on their placement years, which was part of all students' courses. There was a precedence for working at companies across the world and they had great ties with industry.
Being able to get a year working on real projects really appealed to me, but unfortunately Nottingham didn't officially provide it as part of the course. This made it difficult to choose Nottingham over Kent, as at the time I felt I needed the support and pre-existing network to do it. If Nottingham and Kent had been closer in their grade requirements, I feel it would've been a tougher choice, but I'm glad I did choose Nottingham.
I found it was much more rewarding to do all the work to get my placement year sorted off my own back and network, rather than relying on the University's contacts, even if it did sink into the time I had available in my second year. The university were more than happy for me to do one, it just anything that would count to my degree.
"How much of your degree do you use day-to-day?"
A lot of the base programming knowledge I developed as part of my degree are used whenever I'm programming, as well as:
- Agile working and teamwork aspects that I picked up as part of my group projects are used fairly often
- Algorithms and data structures are used every so often, but mostly it means I need less of a refresher when needing to pick it up
- Software Engineering design patterns would have been more useful if taught in any practical depth
That being said, I would still say that a lot of the practical techniques for development have come from my side projects or time at hackathons, and there's also a fair amount of my degree that I've not been given the opportunity to use.
"Did your degree prepare you for day one work?"
No:
- There is a lot of practical programming experience that I learned more from Hackathons than my degree
- Automation and scripting has a strong role in my job, as a DevOps engineer who owns the process of build + deployment
- I didn't learn as much from Unix and Software Tools as I would have a year or so later, when I was more interested by it
- More learning from side work / hackathons
- I wish there were better examples of, and work towards, practical UML diagrams, as I spend a fair bit of time whiteboarding
Yes:
- I had a level of confidence in my knowledge that meant I could get started much earlier than other new hires
- It was easier to have conversations and gain understanding, as I already had some fundamentals in place
"Where do you see yourself in a few years?"
When joining Capital One, I had already started thinking about what my next steps would be. But after actually getting stuck in after a month or so of being there, I realised that no, I had so much to learn from some really amazing engineers, and that it was silly me thinking of moving on before I've really grown as an engineer and an individual.
I truly believe Capital One are doing great work to look after their customers and help set them up for success, and as such, I want to be able to do more to that end.
I can definitely still see myself at Capital One, but regardless, I see myself starting to come into my own as an engineer, picking up some more meaty components and systems, as well as doing all I can to help spread my knowledge and set others up for success. I'm excited to know that I'll still have so much to learn.
One of the pieces of feedback I received from my manager at my end of year appraisal, just before I was promoted, was that he sees in me the potential to reach/exceed the same level as my mentor. This was both a huge pat on the back, and quite a scary thought. Looking at Steve, there's such a huge depth of knowledge and raw talent that I'm not sure I could ever reach, but I would love to say I can. I'd be really happy to say that in the next few years I'm on my way to becoming the "next Steve".
Note: Since originally writing the above, I have announced I will be moving into Quality Engineering. This will be a great opportunity to see the other side of developing the Identity Service, as well as looking to move into one of the more business-facing parts of the company in the future. I'm looking at bringing over some of the practices I've helped share in Software Engineering such as shared library and pattern reusage, to help standardise some common pieces of Quality Engineering.
Points from me
There have been a few other items that I hadn't been asked specifically about, but that were points I mentioned in passing or wanted to share more info about.
There's more to Tech than just "regular software engineer"
Note: I am using the term "regular software engineering" here to quote a term that I've heard used before. I do not agree with it.
Aside from just "regular software engineering", which is already a loaded term, there are a number of other roles you can fulfill within tech.
Within "regular software engineering":
- Frontend engineering i.e. React/Angular/browser-facing technologies
- Backend development i.e. NodeJS, Java, Go, C# .NET etc
- Mobile development i.e. iOS, Android
Outside of "regular software engineering", I can think of the following roles:
- Quality Engineering i.e. building testing tooling to determine if everyone else has actually built things correctly
- Can be running within other work streams i.e. Mobile/Backend
- Requires you to understand whole systems and how they should be put together (with input from other teams)
- Security Engineering i.e. building tooling to check for security exploits in software
- Application Security Testing / Pen Testing i.e. testing that applications can't be exploited
- Infrastructure Engineering i.e. provisioning servers for software to run on, building tooling to make developer lives easier, building core infrastructure
Outside of pure technical roles, you also have people management or project management which is at a great intersection of business needs and developer processes.
That doesn't mean this list isn't exhaustive, there are no doubt tonnes of other roles which may be of interest.
If any of these roles sound of interest, Capital One are always hiring! And if you're interested in Grad/Intern roles let me know and I can keep you posted for when they're open.
Employers shouldn't necessarily just look at grades (in an ideal world) / You should aim for more than "just a degree"
Note: This section is my personal view, and pictures an ideal world in which everything is possible. It doesn't necessarily frame the state of the world right now.
As mentioned, I've found a large amount of my knowledge and experience from my extra-curricular activities such as hackathons or side projects. Tech is one of the fields which can't teach you everything until you've actually put it in practice, making mistakes as you go. Going to hackathons or playing around with small projects in my spare time was a great way to do this, and I really am not sure what sort of position I would be in if I hadn't been able to do this.
With this in mind, I've tried to ensure that when I've been involved in the hiring process, I make sure that it's not just a case of looking at what a candidate has done at university, but also outside. This helps determine if they want to solve some of their own problems, or problems they are interested by, or whether just completing their uni work is enough. That being said, see below for some cases where this doesn't hold.
I've also learned to not discriminate (for want of a better word) based on which university candidates have come from. I know a number of students at Nottingham Trent University (which is seen as a "lower university" by a number of people) who would be my first pick for a role, as well as a number of students who were at a "top university" yet would not fit in with either the business culture or some of the technical aspects of the role.
Even between students on the same Computer Science course as I, the modules taken make all the difference. I know a number of students who also graduated with a First Class degree from the University of Nottingham, but came out with a very different level of experience and knowledge. For instance, they would take "easy" modules just for some easy credits and work to pass coursework, instead of working to learn.
I've personally found that I've leaned more practical skills outside my degree than in - working on side projects and at hackathons has taught me a lot about real-life project-based engineering. It's given me the chance to work with various APIs, build tech using various web frameworks, and play around with both frontend and backend code, rather than the pretend projects that were given to us at university.
Interviews are always hard, and you're always nervous, but you can get a little bit of a read as to how the person would fit within the corporate culture - do they only want to work, do they want to build lasting relationships, can they appreciate being told they're wrong? These are things you need to unearth in the interview that show you who the person is underneath their CV.
However, this often is not possible; you may need to work a job while you're at university, as you're not barely able to make your accommodation costs, or you may not have the time to go to events because you're finding you're spending more time learning than everyone else. So don't go beating yourself up if you aren't fortunate enough to have the free time, as employers should also be mindful of circumstances.
Privilege
I would like to reiterate that I've had incredible privilege while I've been at university:
- I've been able to spend time at events outside of my course, such as hackathons and meetups
- I've been able to travel to hackathons around the country, without worrying as much about the cost of travel or time away from my coursework
- I've been able to work on high end hardware
- I've not needed to work my way through university just to be able to pay for my accommodation and put food on the table
Any more questions?
If there's anything you want answered, reach out to me using my contact details in the page footer.
Looking Forward
I find it incredibly rewarding to be able to help others find fulfillment, and I'd love to help others find the same level of job and career satisfaction that I have. I'd love to be able to share my experiences and any help I can.
I would, however, like to make preference to less privileged students who want to get into tech, but haven't had the same opportunities or support I've had.
Something close to me recently is also those who are looking to switch careers. I've had a number of friends and community members who have reached out about wanting to transition into tech, and I've been trying to share advice and experiences that may help them with their journey.