5 Years in Software Development - What I've Learnt
Tags: beginners, career
Published: 2022-09-13 13:49:48

## Introduction
Hi everyone! This is my very first post and will hopefully not be my last. I'm Moin (pronounced like "coin", not the French pronunciation "mwan"). I've been a Software Developer for 5 years now, and I wanted to share my experience(s) and what I've learnt over these five years as a Software Dev; mainly for any aspiring Devs, but also for anyone else who may be early on in their careers or anyone who is just interested. 

### Before I start... A little about me
I'm a HUGE Star Wars fan and a massive fan of the MCU (yes, I'm a nerd). I love reading books (even nerdier). My favourite book series is probably 'The Left Hand of God' series by Paul Hoffman.  I'm also a gamer - my favourite game series' are probably Halo and Assassin's Creed. 

I'm also a big fan of Cricket. I support India as that is from where my family originates. 

I'm currently doing a Master's Degree Apprenticeship in Digital and Technology Solutions at Manchester Metropolitan University, going into my final year of this (at the time of writing).

#### How did I get into Software Dev?
Well, when I was coming up to starting my GCSEs, I actually wanted to be an accountant. I was quite good at Maths at the time which led me to choose accounting as my aspiring career. 

However, one day, I was sat next to my uncle at my grandparents' house (my uncle is an accountant). He was on his laptop working, using Microsoft Excel. I was watching him work, but, my mind, unlike his, was not focussed on the numbers in the spreadsheet.  Instead, I was thinking "How does Microsoft Excel work?". 

I had already chosen Computing as a subject to study for my GCSEs, but didn't give a second thought to going into it for my career. When the first of the GCSE academic years started, Computing was amazingly my first lesson and the very first thing we were taught was how to write a 'Hello World' program in a VB.NET Console Application. Once I'd completed this task and saw it running, I felt something that, to this day, I cannot explain... something in my heart, almost as though I had found something significant in my life. From that day on, I very much had a different idea for a career path to accounting... Software Engineering. 

#### How did I get to where I am today?
I mainly came through the Education system, however, did this slightly differently to a traditional degree. I did something called a Degree Apprenticeship. If you don't know what a Degree Apprenticeship is, you can read more about it here: [Degree Apprenticeships - UCAS](https://www.ucas.com/apprenticeships/what-you-need-know-about-apprenticeships/degree-apprenticeships-0). 

In short, a Degree Apprenticeship is where you work and study simultaneously (approximately: work 4 days a week, study 1 day a week). The main benefits of this course are:

- You will gain a full BSc degree qualification.
- You will also gain proper work experience.
- You will not only learn technical skills, but also 'soft' skills, such as communication, presentation, etc. 
- Your degree course gets fully funded by your company (so no debt at the end of the course).
- You are pretty much guaranteed a job after the degree (as you are already working for a company who will most likely keep you on). 

Doing a Degree Apprenticeship provided me with an advantage compared to others...

- Employers in the Software Engineering industry mainly look for experience above qualifications, so, the Degree Apprenticeship gave me the best of both worlds. 
- Learning theory is one thing, but being able to apply that theory to real-world scenarios is even better. Again, Degree Apprenticeships gave me the best of both as I was able to take what was taught at university for the course and apply it to the work for my job.

## So, What Have I Learnt?
Whilst I've learnt a ton of technical skills, I won't be going into those in any great detail as I want this to be more focussed around my general Software Dev experience.

### Lesson 1 - It's not all code, code, code...
One of the biggest misconceptions I believed (and I think a lot of people believe) before starting my career in Software Engineering was that I would be writing code everyday, all day. When I started, I was somewhat startled by this not being the case.

Whilst coding is a core requirement of the job, it is only a very small part of it. There are so many other different skills to Software Development that you have to know in order to be able to do the job, both technical (T) and non-technical (NT) (**not a full list**):

- Infrastructure - where the code you write gets deployed to and hosted. (T)
- DevOps - how to deploy your code to the Infrastructure that will host it. (T)
- Work Environment - how to work in different working environments. Each workplace will have its own methodology that it adheres to (such as Waterfall or Agile). (NT)
- Different tools used for the job - this is not only the tools used for writing code, but also the tools used for the different processes around Software Engineering e.g. Jira for managing tasks. (T & NT)
- Stakeholder communication - not only how to communicate with stakeholders, but also why you do this. This also requires translational skills i.e. translating technical speak to non-technical speak. (NT)

Above is just a snippet of the knowledge and skills required, but **the main point here is, don't expect to be coding everyday**. 

### Lesson 2 - Constant Change == Constant Learning
As you are probably already aware, technology is a rapidly changing environment. Advancements are made everyday which define the work we do and how we go about doing it. 

The Software industry is no different. Being a Software Developer means constantly learning; whether this is improving existing methods used or picking up new technologies, the learning curve is constant. The industry takes the phrase "you learn something new everyday" to a whole new level.

Personally, I feel like I have learnt so much just from 5 years of Software Engineering, and to this day, I am constantly learning. 

This learning curve is not only technical in nature, but also non-technical because, as mentioned previously, you also have to learn/develop 'soft' skills in this job such as your communication skills, presentation skills, team working skills, etc. 

One thing I have learnt about learning on the job is that you have to also know the method for learning. If you don't have a method for learning, then you cannot gain the full benefit of learning something new. I follow the 4 steps shown in the diagram below when learning anything new. 

![Steps for Learning Successfully and Effectively](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/othhwv074xbi2eijz7pw.png)

**The main point here is to be prepared to learn constantly on the job.**

### Lesson 3 - Opinions, Opinions, Opinions...
One key lesson I have learnt over the years is that the Software industry is full of different opinions, mainly around how to complete certain technical tasks. This means there is no right or wrong answer when you come across a technical task, however, there are better or worse methods you can use. 

When you conduct research on how to complete a given technical task, you will find contradicting arguments online. As long as you can justify what you decide to use, then you can use whatever you like, however, I would be wary of the sources you use during research e.g. following Microsoft's Documentation is probably better than following the advice/opinion of someone on the site 'Stack Overflow'.  

**The main point here is, be careful when choosing a method and be sure you can justify it and have fully investigated all the alternatives.**

### Lesson 4 - Remember to Take Breaks...
Software Development can be difficult, I'm not going to downplay that. It is important to know what your maximum capacity is so that you do not overdo it. Taking breaks is a hugely significant part of the job. It not only benefits you, but also benefits those around you and the company you work for as well:
- It benefits you as it gives you time to rest and re-energise so that you can return to work with a 'bounce in your step'. 
- It benefits those around you as taking breaks means that you are more likely to come back with positivity rather than negativity caused by tiredness/fatigue.
- It benefits the company you work for as your productivity is more likely to be increased. 

**The main point here is take regular breaks, not only for yourself, but also for those around you and your company.**

### Final Lesson - Have Fun!
I cannot think of anything worse than being in a job I don't enjoy. Yes, Software Development can get frustrating at times, for example, when you are trying to figure out why some code isn't working and you realise it's just a small mistake (such as a missing semi-colon at the end of a line), but, personally, I love being able to be part of the industry that, currently, the world relies upon significantly, if not the most. Being able to do it to help people is also really important to me. I am always trying to help people, not only providing them with solutions,  but also providing them with the means to help themselves and others in future (essentially creating a domino effect). Ironically, Moin is a Muslim name meaning Supporter, helper, so quite apt.

The main thing here is, go into a job that you will enjoy. There is a direct correlation between enjoying doing something, and doing it well. So, if you enjoy Software Development, then, go for it. If you aren't sure whether you will enjoy it, then give it a try, because you will never know until you try. 

## Conclusion
The above is just a taster of some of the key general lessons I have learnt from 5 years in Software Development and I hope that, if you have gotten this far reading this post, you have a clearer picture of Software Development and what it entails and I have helped you in some way in making a decision for your future.

If you have any further questions, feel free to contact me anytime using one of the following:
- LinkedIn: [Moin Mohamed - LinkedIn](https://www.linkedin.com/in/moin-mohamed-99b161192/)
- Twitter: [Moin Mohamed - Twitter](https://twitter.com/Moinster786)