Coding a product
August 29, 2020
For roughly the past 5 years I have been working as a software developer. This role, to my mind, fully entails the act of writing, maintaining and, if you are lucky, deleting code. As I have mentioned in a previous post the thing that is, hopefully, occupying your thinking as a software developer will be algorithms.
Not all algorithms are equal. Some are far more stimulating than others and that is partly due to levels of complexity but also the knowledge domain that the algorithm is embedded in. Creating an algorithm for parsing code semantics is rather different to an algorithm for a perceptron used in machine learning. At a basic level of sophistication these algorithms are not “hard” to code but their beauty becomes more apparent in their essential parts. The difficult part, by my estimation, is developing an intuitive understanding of the reason for the existence of each basic part. This requires domain knowledge which usually means careful study is required.
I mention all of this because these are things I believe software developers should foster a deep care and respect for. Different algorithms and their overall problem-fit. To take an analogy from the scientific world; writing code is like creating a hypothesis. You do it based on data (hopefully), you draw from pre-existing knowledge (hopefully), you submit your hypothesis for peer-review (hopefully) you revisit your hypothesis as time goes on (hopefully). These are all things that happen in the lifecycle of code.
Once software development has become your primary way of thinking you can use this to great effect in other parts of your life. Certain individuals are born thinking this way. I had to learn it. I had a moderate-level of aptitude for logical thinking. I would say I was more analytical than raw logical. Not overly invested in all of the details. I also have a deep love for creative thinking — something I really enjoy about writing music. Over time, and after much practice, the more detail-oriented, logical thinking used in software development has become natural to me. The fruit of thousands of hours of labour!
I have realised that acquiring software-developer-thinking also affords the ability to intuit the kinds of problems computers are good at solving. The deeper your understanding the better you are able to apply this kind of thinking laterally. I am interested in learning more about this kind of lateral thinking. It is inherently cross-domain and, like any kind of thinking (or skill) improves with practice. Why am I intersted in learning this?
I have realised that software development, and the kind of thinking it has taught me — for which I am eternally grateful — is only part of what I believe should occupy my mind. Seeing how we can create value from software and computers is like standing between two worlds. The why and the how. It is a far more human1 thing to understand how to create value, how to make the world a better place in some way for others and yourself. There is something social and something logical at work in this kind of activity. I find it hard to think of engaging in something more stimulating.
I believe creating a technology product (or technology-driven product) requires this kind of lateral thinking. Code for code’s sake will not make an iota of difference. Apply that code to problem in the world and you have transcended the role of software developer into something else.
Notes
- I am thinking primarily of multi-facetedness.
Hi, I'm Jean-Louis Leysens. I like writing software in JavaScript and TypeScript and listening to noisey music.