Over the past years I’ve come to realise that one of the most important qualities to improving as a software engineer is “perseverance”. While growing up I had always recited an amazing tongue twister “aspire to acquire what you desire, if in the process you misfire, do not retire but rather re-fire to acquire your desire”.
In the past five to six years I’ve put myself on a non-stop never ending learning curve because when I look back after three months I want to be able to say I’ve learnt new things and I can actually measure exactly what it is. There are a lot of options and idea’s out there available in order to measure progress et al. Some people like to go with the KPI’s, most teams do. I however do not measure my personal growth based on those metrics but rather based on my own personal scale. The goal is usually to learn “two new concepts” every month. I use the word “concept” in very broad terms here because it could be programming concepts, design concepts, infrastructure concepts et al. It could also be concepts not necessarily related to software engineering but affects you as a person and how you think about software in general.
A friend of mine once said to me that if you surround yourself with smart software engineers you’d definitely become one and the first thing I replied was “that’s fallacy”. Being around the smartest engineers does not automatically translate to you turning out good. The only way you benefit from being with smart engineers is if you’re willing to learn and tap in from their knowledge. By no means is this easy as you might come to a point where everything seems blurry at first but once you get a hold of yourself and tow along you’d be surprised at how good your are and how much you have underrated your ability. When you get to that point then you know you are actually growing. It is important to note that it is usually at this point where a lot of software engineers think they know it all and fall into the trap of decline or being stuck at a specific level for years (reminiscent of an infinite loop).
While persevering and obtaining a decent standard you need to quickly realise that the key to being the best you can be is “continuous learning”. In this field of software engineering things change quite fast and you have to move along with the industry rapidly. I have read stories of people feeling too comfortable in our industry and before they knew it the industry had moved on without waiting for them obviously. You need to keep yourself updated with the latest technologies and design patterns even if you do not use them right away or might never use them because no knowledge is a waste.
I’ve had the privilege of working with computers since 2010 as a very young lad. Going through system administration on cyber cafe computers, system analysis/documentation, IT project management and eventually software development has helped me a lot in understanding complexities as well as navigating what I call “office politics” at a very young age, but most importantly “understanding people and understanding that the day you stop learning is the day you dig your grave” in this field has been one of the most insightful lessons I’ve learnt up to date. My journey compared to others might be quite short but for others it probably can be a focal point for starting off.
Something worth noting, there’s a thin line between “self-confidence” and “arrogance” which is one of the reasons I prefer not to have any of the fancy titles that engineers like to go with these days. The former when not well managed can result in the later. In 2013 I wrote my first commercial/production ready code at BlissPrint. We knew nothing about version control then, we served a small subset of clients, we were building and maintaining simple payroll softwares, but today all three of us can comfortably look back and say we’ve never stopped learning. All that knowledge added up to enabling me improve myself dating as far back to my first time in 2010 when I wrote the famous “university grade calculator” in c++(If you studied CS in Ghana you know this for sure) and I’ve never looked back since then.
I’m writing this article with my mentee’s in mind (both remote and those from Code Afrique). Your journey might have only started a year ago but I want you to always remember that the learning process doesn’t stop hence you need to persevere in your quest for knowledge. Contrary to what a lot of you might think, I’m still constantly learning also and do not know everything myself. Teaching you all (either in the University or in Code Afrique) is also a “learning mechanism” for me as the only way I know how to get better is to “persevere continuously” and I hope this is the one characteristic that you actually emulate. Like I mentioned to most of you, I only picked Ruby a few years back and I’ve gone on since that time to pick different languages and work with them, some I’ve abandoned along the way, some I’ve gone along with but in the end every single language I have picked starting from c and c++ back in 2010 has taught me something new and helped me expand my horizon.
I‘d conclude by saying what I’ve always said(might be boring for some of you who know me too well but I hope you understand why I repeat this), always remember that “as an engineer your priority is solving problems” in the most effective and efficient way (like it is for all engineers). I see “programming” as my “tool of choice” for solving problems and not the other way around. This for me is the most fundamental principle I follow in our discipline hence as long as the problems and it’s surrounding complexities continue to evolve, we as professionals must continue to evolve to solve these problems and the challenges that come with them.