My apprenticeship as a Software Developer at Companies House began in January 2020. As well as a new year, it was a completely new start for me, having come from a non-technical background with very little programming experience.
I’ll admit, I was equally excited as I was fearful of the challenges ahead. On the one hand, I could not wait to learn to code - with an actual team of software engineers supporting and helping me, as opposed to flicking through the pages of a teach-yourself Python book.
But on the other hand, I’d heard rumours about how difficult learning to code actually is. If you watch as much television as I do, you may have come across this ‘genius programmer’ trope who allegedly exist in the Google and Amazon sectors of the industry. They’re those hacker and Harvard graduate types - intimidatingly clever people who are asked to write pages of complex code.
Whilst the code zooms in front of your eyes, you’ll find them speaking 100 miles per hour in what seems like another language - confusing every non-programmer in the room. After witnessing this trope time and time again, I believed it myself. I thought there was not a chance that I could ever get to that level of expertise.
Alternatively, I’d heard amazing stories of self-taught programmers who landed themselves their dream developer job. People with no experience who had become top programmers from tackling the exercises of Codecademy and dabbling with their own side projects for half an hour a day.
This suggested that coding is not as scary as it seems and is something that everyone can learn, no matter what their skill set is. All it takes is commitment and enthusiasm. Hearing these positive stories gave me a confidence boost. Maybe it was possible to learn programming in the same way.
The ups and downs of learning to code
During the first stages of my learning as an apprentice, these 2 conflicting expectations lingered over me every time I opened up my codebase.
I’d arrive at work and chat with my supportive team who filled me with hope and confidence about what I was doing. I’d feel positive after conquering one or two problems and overcoming the confusion of variables and conditions. I was on my way - I was surely a programmer already!
I'd think I'd mastered Object Orientated Programming (OOP), until 4 hours later, when I was faced with the reality of the situation. Somehow, all my code was now broken and nothing would work. It was a lot harder than I’d initially thought.
I’d scramble for answers from other programmers, stringing questions together and getting mixed up with the terminology. I’d furiously search for solutions and traipse through Stack Overflow. I'd sit there feeling totally disheartened as I thought back to those programmers who can whip up a solution faster than you can tie a shoelace, whilst I’d spent hours trying to return the number ‘3’ back to the terminal.
Then suddenly, I’d see it. The problem was staring at me all along. I’d changed a variable or data type some time ago and forgot to change it back. After going back through the code and deleting my redundant progress, I’d compile the program and it would work.
I’d get great feedback from my manager and my confidence would flood back. I’d feel like I was once again on my way to becoming an expert developer. I’d learned loads of new stuff in the process and would definitely, never, be making that mistake again!
And yet, the next task came along and the cycle began again. I could not understand why my experience was not like those success stories and why I kept flitting between complete despair and overconfidence.
A learning curve
Nine months into my apprenticeship, I’ve levelled my expectations. I no longer subscribe to these 2 extremes of ‘learning to code is easy’ and ’coding is impossible’. I’ve accepted that learning to code is a process.
Like every other skill, there’s an individual learning curve. The reality is that it’s neither so ridiculously complex that only the scientist boffins can understand it, nor is it as easy as following the fun exercises on Codecademy.
As I progress from being a complete beginner, some things are becoming second nature. My lack of experience causes me to make silly mistakes sometimes, making me feel like I’m back at square one. But this is normal, I’m learning from it after all.
Having spoken to other programmers at Companies House, I’m also encouraged by the diversity of people’s backgrounds. Some, like me, have come from non-technical backgrounds. Some have computer science degrees. But what they all have in common is that they’ve been through that same ‘easy vs impossible’ conflict.
Actually, it turns out what most people enjoy about programming is experiencing these small struggles and small victories. Slowly but surely they build up your confidence and knowledge. What gives me confidence now is looking back to what I wrote a few months ago and realising just how much I’ve progressed.
This gives me the encouragement to push through in those moments of despair, as ultimately, I know that I’ll come out the other side a better programmer.