I started writing code when i was Fifteen years old. I remember I started out with ALGOL. For me it was about experimenting with an activity I found oddly satisfying. I stood on the aisle in the University of Lagos Library, looking for something fun to read. Then I stumbled upon a book that caught my attention; can’t even remember the name of the book. The book was about constructing solutions and algorithms to different forms of mathematical problems. So I dived in out of curiosity, wondering what ALGOL was all about.
In those moments, I sat in the library perusing a book that detailed methods of deciphering mathematical hurdles and multiple solution techniques that could be converted to instructions that run on a computer processor. Each of these approaches was dissected, their strengths and pitfalls exposed with the aim of portraying problem solving as an art that requires deep levels of thought and understanding. This was my first experience writing code. It was not done on computer. Just a pen, a paper, and a book that was probably written before my father was born!
My time as a software developer has spanned roughly 7 years. And in that time, I have written trivial code and momentous code. I have built mobile apps for education and entertainment; i have built games; i have written software for medical diagnostics; i have built various forms of artificial intelligence; heck, i once wrote a checkers game in school because i did not like the ones i found on the app store at the time (lol, they weren’t bad, i just wanted a checkers game with my customized set of rules). Currently i’m working with a team of smart people to build systems powering some of the biggest banks in Nigeria, and I haven’t even scratched the surface regarding what i hope to accomplish as i progress through my career.
There lies the beauty in software. There’s always something fun to do. There’s always something challenging to work on. You’re only limited by the extent of your knowledge and creativity. Half the time i’m not engaged in some worthwhile activity, i have ideas bouncing around my head. The more I frolic with these ideas, the more they give birth to other ideas. Yes, idea sex is actually a thing!
Such is the life of a programmer. A programmer seeks to understand how things work and how they can be made better. This can only be achieved through deep understanding which is instigated by genuine curiosity. To reach such levels of deep understanding, sometimes one must dissociate one’s self from the usual thought patterns. It’s called divergent thinking, and it’s often how genius is born. So when lady posts a flower-crown selfie she took on Snapchat, you may ogle her pretty face, while i’m busy contemplating how the mathematics was implemented to discover her facial structure, plot the flower-crown over her face and smooth out her blemishes. It’s all machine learning baby!!! And it’s beautiful once you understand the mathematics and software behind it.
The story of any great software product is one of intelligence applied to the proper interpretation of a problem domain. Of course, with this interpretation you will need to infuse the right level of user empathy. Empathy allows you to appreciate the problem domain from your user’s perspective and build systems they can connect with. So what does this mean?
If we as software engineers must apply ourselves to different problem domains then it follows that we must have extensive comprehension of the problems we are trying to solve.
If you’re building a music streaming service, the quality of your product will be largely influenced by your knowledge of what music lovers want. If you’re building a product to facilitate housing and accommodation, your understanding of some of the dynamics driving the housing industry will translate into better software. The badass people of Teamapt, building software for businesses across industries, have had to dive deep into the business psychology in order to churn out the products we are building.
So hats off to all the folks hoping to make a career out of software engineering. In the years I have worked in this field, I can give you some bits of advice that will help your journey:
1. Go Deep, Then Go Deeper
The artists who make the most impact are the ones who go deep. They hone their dexterity through hours of practice, seeking out means by which they can better their craft. Being an art lover myself, when I visit art exhibitions, I can always tell the difference in mastery between two different artists in their quality of work. It’s the same with any other field of profession, even software. Those who get ahead are those who go deep with what they do. Spend time outside your 9–5 learning and practicing coding. It’s an ever changing industry and if you’re not abreast of the current trends and technologies, you risk going out of fashion or falling behind.
Then keep in mind what I stated earlier concerning Idea Sex. As you gain different bits of knowledge and skill, your mind will open up to new ideas. Ensure those ideas have plenty of good sex in your head — like real orgies — so they can give birth to other ideas. Lol, tie them together and then go deeper! It’s beautiful once you immerse yourself in the flow, because you begin to discover things for yourself. And that’s when you truly start to stand out. Going deep is how you do good work. So don’t rest on the surface. Don’t be a sissy.
2. Engage in Personal Projects
Although it’s great to find work in a place you love, at the end of the day you’re still limited to the projects your company is pursuing. You will do yourself a lot of good if you engage in projects outside your day job. Find something interesting and challenging and pursue it at night and on weekends. You will gain a lot of knowledge and experience you would not have gained at work. Besides, all that extra experience can really add up over time and make you a rockstar at your day job.
3. Contribute to Open Source Projects
This is somewhat related to the point I stated earlier but I decided to make it separate because of it’s level of importance. Participating in open source projects is something many developers overlook when in reality, many of the tools and frameworks we use are actualized by open participation. There are tons of Open Source projects that will afford you the opportunity to meet other great developers and collaborate on very interesting projects. This will help you build your Digital Profile which will come in handy if you’re seeking employment with reputable software companies.
4. Experience other aspects of Software Development
There is so much to building software that lies outside writing the actual code. There’s Product development, Project management, Software Architecture, User Experience / Interface Design, Quality Assurance, etc.. Experiencing several aspects of software development can help drive your thought process from different angles when you’re writing code. Recently I was promoted to Head of Quality Assurance at Teamapt and I began to really appreciate the need to develop systems for automated testing, continuous integration, deployment pipelines and ensuring code quality. Even though I’m currently Head of QA, i also devote time to reading resources on Enterprise Software Architecture, because it lies central to building systems that scale massively and stand the test of time. So don’t get stuck on writing code, try to gain experience in other parts of the software process so you can be more complete.
5. Learn the Business, Understand the Industry
A company usually exists with the aim of delivering value and earning profit. For a software company, this is hardly different. Even if the core products are software, there still exists a business concern which drives the company. Therefore, every aspect of the products (from architecture, to user experience, to the database and system design and implementation) is dictated by the business.
Software Developers cannot deliver products that hit the nail on the head if they are out of touch with the business concerns that inspired the product in the first place
Learning the business is one thing, understanding the industry is another. A grounded understanding of the industry will ensure you’re able to innovate on problems and create more complete solutions.
6. Train your soft skills
There’s two kinds of skills required to succeed in any profession. The hard skills are skills that are learned in school or via professional training and they are usually tethered to knowledge of the profession. Then there’s soft skills which are less quantifiable, they primarily touch on communication and collaboration. Think of soft skills as ‘people skills’; your ability to interact and relate with your fellow employees and customers.
Being a classic introvert, I often struggled with this bit. Until I acknowledged over time that my need for personal space would not fly well at the office. If you’re a software developer, you will most times have to work in a team with other developers, project managers, and business people. You will need to know how to relate with these people and communicate your ideas and opinions explicitly so the team can be effective. There are great books on people skills. I enjoyed Dale Carnegie’s ‘How to Win Friends and Influence People’ and I highly recommend it.
So there you have it. The crux of the points I mentioned is personal development. If you’re not growing and actively pushing yourself to be better, you’re bound to have a very mediocre career, not just as a developer, but with anything you do. At best you will fail to realize your full potential. With the knowledge you gain and skills you acquire, you open up more opportunities for yourself. Have fun with it!!