On learning

In my youth I was decidedly average. Average academically, neither popular nor outcast, fairly terrible at sports, never excelling at anything in particular. I never had high hopes, aspirations nor any particular desires other than to enjoy life for what it is. What I did have, however, was curiosity - curiosity to make things and understand them.

One of my earliest memories was finding my grandparents boiler cupboard and looking at all the pipes, inspecting them, figuring out where they went, which ones were connected together. I imagined the water flowing through them, where it went and what it was for. I remember this well because I began to touch the pipes until one left a nasty red burn on my fingertips. My mother shouted at me. Later she realised the importance of what I was doing, that my curious nature was an innate characteristic of my identity, and this curiosity has stayed with me until this day.

I stumbled in to software engineering almost by accident. I found a passion for music, not formal music theory but music creation - natural, productive, progressive. I didn't find theory to be particularly useful for the purpose of what I actually enjoyed, and what I saw value in, which was simply making music I liked. I made music using computers, mostly, as it was the most efficient method for me to be creative, and it was the most practical - I could literally sit beside my computer for hours, on my own, perfecting something. I found enjoyment in it, and was proud of what I was making. I found myself learning gradually, simply through making, not by considering theory at all; learning music always a practical endeavour, never learning simply for the sake of learning but always for the purpose of producing a better outcome.

My trajectory in to software engineering is not too dissimilar. I studied Sound Design at university and we had a module aptly named "Online Presence" whereby we were required to curate a digital portfolio. I was never quite satisfied by the output of these website builder tools - I found them restrictive... I wanted something much more bespoke. In order to achieve this goal, I quickly learned HTML and CSS, never for a moment considering the fact that this would have wild implications for my professional career ultimately as a software engineer, I simply wanted to make something that I thought was good and learning these languages was the best way to do it.

Now I find myself fully embedded in the world of professional software engineering, working for one of the biggest banks in the United Kingdom, building software that people use every single day. Although I now have considerations other than my own desire to make something I care about, my ultimate goal remains the same - I'm profoundly curious and I leverage this to learn continually as I make things. Once it was music, now it's software... I look back to when I was making music - often I would discover or seek out a new technique for the purpose of producing a better outcome. This is something that I find myself doing when I make software all of the time. Whenever I postulate a solution, I'm always trying to assess the value it will bring to the outcome - will this change make the software more stable, more maintainable? Will it add value to our users? Will it be easily understood by myself, or others, many years after it's been written? Often by thinking in this way, the solution becomes valuable - solutions more future proof, scalable and maintainable. I learn a great deal thinking in this manner, but again, it's always for a practical purpose.

Each year I find myself learning something new. Last year I wanted to build an online note taking editor that allowed me to focus on writing rather than formatting. I built Internote for this purpose, and ended up learning all about AWS, infrastructure-as-code and patterns of serverless application design as a necessity to achieving my initial goal. This year, I built a few small projects, with the most notable one being Machi - a data-driven state machine library that I built for the purpose of understanding the ins and outs of a similar proprietary state machine library at work. And another project I worked on this year was Urban Jungle, an app to manage house plants with reminders for watering. Aside from the utility I obtained from building it, I took the opportunity to explore a purely functional approach to application development using fp-ts, a functional library in TypeScript. I learnt all about monads, higher-kinded types etc, but only because I wanted to build an app - the functional learning was a second degree benefit but one that has opened my mind to new ways of building software that I'll take with me in to other projects.

I truly hope that I never loose my curiosity and never stop solving new problems, I have it to thank for the career I have been fortunate enough to land myself in, as well as the enjoyment I get from building things of value. I hope that I never stop learning, or finding opportunities to, as I continue creating, and I hope that I can inspire others to be curious too.