Is a Career in Software Development Right for You?
A career in software development can be very rewarding. Being able to build things that are used in the real world and helping people is amazing. It can be a surprisingly creative field. It's generally well compensated and most jobs come with good benefits such as health/dental, paid vacation, etc. At the time of this writing, demand for developers far outweighs supply, so employment opportunities are very good (although there can be instability within specific companies or even industries).
A few years ago a "Learn to Code" movement started, encouraging everyone to learn how to program, kind of as a type of literacy. While I believe very strongly that anyone can learn to code, not everyone will necessarily enjoy it enough to want to make it their 9-5 career. So how do you know if its right for you? Over my years as a software developer, I've observed a number of characteristics among myself and colleagues that make up the "programmer brain". In this post, I'll go over these so you can decide for yourself if this is something you might like to try.
First, let's get a common misconception out of the way. You do not need to be a super genius or have a PhD in mathematics to be a successful programmer. Well maybe if your goal is to work at NASA on a rocket guidance system... But seriously, aside from some specific areas such as computer graphics and animation which require a solid understanding of linear algebra and trigonometry, for most jobs this simply isn't required (not covering AI or Machine Learning in this post as those are completely different areas outside of my expertise). Being logical however, is definitely a must. Some of the most common concepts a programmer encounters are conditionals, as in "if something is true, then do task A, otherwise, do task B".
While this may have killed the cat, curiosity most certainly benefits programmers. Being curious about how something works, "what's under the hood" so to speak is a good quality to have. For example, if you're reading some code and there's a function call you've never seen before, inspect into it to see what it does. If it's part of the language API, go ahead and look it up in the documentation. Curiosity ensures developers are always learning something new about the code they're working with. If you find yourself frequently asking "why" or doing some research on how something works, this is a good sign that you're curious.
In programming, code rarely runs exactly right the first time. It may run but not produce the expected result, or it may encounter a runtime error. These error messages can sometimes be helpful in pointing to where the problem lies, or sometimes may be red herrings leading to hours of work trying to solve. Persistence is a useful quality to have here to keep at it, working through the problem until its resolved. If you find that you don't give up easily when facing problems, this is a good sign that you're persistent.
Persistence without an equal amount of analytical skills however, leads to insanity. Quite literally, the definition of insanity is doing the same thing over and over while expecting a different result. So to make that persistence useful, you need to apply analytic reasoning to the problem. For example, read the error message carefully, then make one modification to the code to try and address the issue, then run the code again. Does the same error result? Or a different error? Try a different change to the code, or start a debug session, or maybe a unit test to verify your understanding of the code. Or maybe the current function you're working on is too large to understand, try breaking it down smaller to isolate just the problem code. This is analytical thinking and is definitely required for programming.
In software development, things rarely work correctly the first time, and require multiple iterations to get right. That's why persistence and analytical skills are so useful. But what's also important is how you feel during this very typical cycle. Some people will interpret the repeated run/debug cycle as a fun challenge or puzzle to figure out. For example, if some code was resulting in an error message, then making a small modification results in a different error message - that's actually progress and something to feel good about. And when it does finally work, a happy dance could be totally appropriate! Others may feel frustrated or exasperated with how much effort it can take to make even seemingly simple things work. Think back to the last time you had to solve a difficult problem - did it feel satisfying to step up to the challenge and solve it or did you want to tear your hair out? This feeling will be encountered frequently in software development.
Programming is all about the details, lots and lots of details. Of course there's bigger picture thinking as well especially when it comes to architecture and design, but when it comes to the hands-on work of programming, there are many details involved. For example, leaving off the
=== can be significant. If you care about getting the small details right and always put effort into this, then you're detail oriented.
One principle that comes up frequently in software development is "could we do better?". There may be some code that solves the problem, but there's always room for improvement. For example, maybe the way it's currently written is confusing, or it's too slow. Or it could be a process that everyone has to follow that involves several manual steps and could instead be automated. It's good to be thinking about ways that the code and process can be improved. You may be an optimizer if you frequently look for ways to improve your life such as automating savings and bill payments, or even re-arranging storage in your home to make more space.
The field of software development is constantly evolving - there's always a new language, framework, tool or paradigm to learn. What this means is that even if someone is comfortable with their current skills, if they're not frequently learning new skills, it may be harder to land the next job. This can be a plus as things never get boring, on the downside, there is extra effort involved which can extend beyond the 9 - 5. If you enjoy learning new things (eg: via books, courses, video tutorials etc.), then programming could be a good fit. I wrote another post on how to learn new things.