Don’t Underestimate How Much Progress You Have Made
Hi Friends.
I first studied programming at university. My first lecture took place on a cold September morning, where I sat in a crowded lecture theatre surrounded by other students. We were all talking amongst ourselves when the course lecturer walked in. As he approached the lectern, everybody gradually quietened down. Being new to it all, I didn’t know what to expect when he started speaking.
He gave us an introduction to the course module, explaining that we’d be learning about Object Oriented Programming using Java. There were also laboratory classes where we could practise the concepts that we had learned. I often felt disadvantaged during those sessions, as some of the other students on the course had previous programming experience. While I was struggling with fundamental concepts like array manipulation and nested for
loops, I would hear other students brushing off the exercises as trivial.
By the time my studies were over, I had enough experience from writing Java programs as part of coursework and tutorials to be able to write some of my own. I remember being fascinated at being able to create any program that I could imagine: the sky was the limit. I ended up writing a few small utility programs that (I thought) I needed using Java – the language I had learned during my studies.
The idea behind Java is clever – it’s a language that compiles to run on the Java Virtual Machine (JVM). As the specifications of the JVM stay the same on any computing platform, there are no differences in programming for Windows, Mac, or any other operating system. With a complete implementation of the JVM, the program could theoretically be run anywhere without further tweaking.
However, I considered one aspect of that strength to be a disadvantage. As Java programs compiled to .jar
files for running on a JVM, they all had the same icon in Windows. It was around this time that I decided to learn C#: the syntax was like that of Java, and the compiled binaries could be given unique icons.
Fast forward a few years and I was at a company, helping to write and maintain the front and back ends of a Silverlight based Web application. However, Silverlight was being phased out. While a plan was in place to change their Silverlight client with one built using HTML; CSS; and JavaScript, there was a problem: I had next to no knowledge of those technologies.
The company wasn’t concerned: they already had a senior front-end developer (let’s call him Declan) that they had chosen to lead the new team. They also reassigned another front-end developer (let’s call him John) to the project too. Part of the project was to adapt and redesign the system back-end architecture and, as this seemed like an exciting project, I spoke to Declan who in turn convinced management to include me in the team.
While my role was to design and build APIs for the new UIs, I also wanted to learn to use modern front-end technologies. It also made sense for me to be able to work full stack so that I would be able to debug workflows without having to call someone over for help with the UI. It was a new project, and Declan wanted to use a combination of React/Redux and LESS to build it. The two technologies were new to both me and John, so Declan gave a few informal presentations to help us learn the basics. I also asked for small tasks on the front-end so that I could gain some experience.
I had no idea where to start when trying to do my first bug fix. Up until that point, I had been working almost exclusively with C# and XAML – the only editor I needed was Visual Studio. Suddenly, I was using an unfamiliar editor (Visual Studio Code), looking at code in a language I didn’t understand, written in modules that worked together in ways that I could only explain as magic.
A few months went by. I overheard a conversation one day between Declan and his friend. They were talking about the project and how it was going. Declan spoke of how John had managed to learn React and LESS but seemed to struggle with some concepts. Having struggled with my front-end tasks, I asked Declan whether he thought I was learning at a reasonable pace: it was a disguised way of asking for pointers on how I might learn more effectively. He turned to me and without any hesitation said ‘yes’.
Closing Thoughts
When I was learning to program for the first time, I felt slow: I felt as if I was barely keeping up with the others in my class. But I passed my course. When I tried to write my first C# and XAML Windows programs, I found it difficult to learn the syntax and piece the concepts together. But that learning eventually helped me to pass my first C# job interview. And while I was having trouble working on simple front-end tasks, I was (apparently) learning. I still have days where it feels I haven’t achieved anything. It feels different when looking back at what I had done that week though.
If you find difficulty when learning something new, or making progress with a project, it’s important to be kind to yourself and put things in perspective. There are always more things to learn. Becoming aware of knowledge gaps is a sign of improvement, but they also make it easy to forget the progress that you’ve already made. It might be worth trying the following if you think you’re not getting anywhere:
Make notes on what you do every day. They can be as detailed (or simple) as you like – even high-level one-liners are enough.
Gather up your notes at the end of each week and remove any duplicates or unnecessary details.
Use this to make a record on your progress for the week.
Repeat, adding more entries for each week as they go by.
Over time you’ll have an achievement diary that spans months, and eventually years. And if you ever have any doubts, you only need look to see how far you’ve come.