In this article, I'll quickly describe a path that you can follow in order to discover/learn IT and Software development from scratch. I'll also discuss the different career paths that you can explore over time, based on your own interests and goals.
This content is part of the first volume of my Dev Concepts series.
Overview
Let's start by taking a look at a simple overview of the different sub-domains of IT and software development that you can explore over the course of your career. There's more, but those are front and center:
As you can see, there's quite a lot. Enough actually to keep you busy and learning for a whole lifetime. The above diagram puts more emphasis on the Software Development part, which is why it is bigger. But rest assured that the other domains are as important, and at least as wide. You could in fact spend your whole career in any of those "sub-domains" of IT, and you would still be learning new things every single day.
There's actually so much complexity and variety in IT that each of the sub-domains includes various job types. You could become a security specialist, focused on pentesting, or a malware specialist, a hardware hacker, a cloud security expert, an IT auditor, etc. Or you could work in IT architecture, and become a software architect, an infrastructure architect, a solution architect or even an enterprise architect. It's the same for most domains, really! This is actually one of the things that I enjoy the most about IT. There's so much to learn and do that you will never get bored.
It can feel daunting at first, but don't be scared. You can start small, learn the basics, grow at your own pace, and finally reach your dream job.
Where should I start?
If you're just getting started with IT and Software development, then you should focus on a few core topics at first:
- Computer architecture
- Operating systems
- Coding basics
- General concerns (e.g., code quality and testing)
Your goal shouldn't be to become an expert right away, but rather to get a bird's eye view over IT before diving into more specific subjects like front-end or back-end development. Many tutorials on the Web will immediately teach you about HTML, CSS and JavaScript, without helping you to see the bigger picture. Of course, you can take shortcuts to accelerate learning, but if you lack fundamental knowledge, then you'll have a hard time becoming a software crafter, and you'll have difficulties further down the road.
NOTE: You should get into the mindset of a software crafter right from the get go. Try to discover, understand and follow best practices.
Where do I go from there?
In the beginning, whether you choose to explore back-end or front-end development doesn't matter all that much. If you know which side you prefer to work in, then it's easier indeed, but both are as complex and as difficult to learn. They each have their specificities and attention points. Over time, if you're motivated enough, then you should jump over the fence and discover the other part. You might even try to go full-stack from the very beginning, but it'll probably take you more time to become really productive. The good news is that there is a lot of overlap between back-end and front-end development.
Whichever path you choose, security must always be on your mind. It isn't an option. Security is a top priority, whether you, your team, team leader and/or organization realize it or not.
As you gain confidence/understanding of the basics, you'll be able to dive into software design to improve the quality of your code, and help it stand the test of time.
After a while, you should get (at least) a basic understanding of software architecture. Ideally, you should also learn more about solution architecture and enterprise architecture, as those are really impactful areas of the software world (especially so in larger organizations).
TIP: Don't worry about the time it all takes. This is a journey. Not a sprint, but rather a marathon. Take your time and move forward, one step at a time.
Another idea is to dive deeper into the functional or even business analysis sides to become a better partner for the end-users. As I've mentioned in my previous article, depending on the organization you work in, you might have more or less opportunity (or need) to do this.
Furthermore, growing more knowledgeable about IT infrastructure/operations, cloud computing and DevSecOps will help you to contribute to the full spectrum of the application life cycle. Knowing how a system is deployed, how the infrastructure is configured is very useful and people who want to get into technical leadership clearly need to understand that. I've personally decided to work for a few years in IT infrastructure so that I could dive much deeper into that area. Believe me, I've learned a ton. It was definitely challenging, but it was also super fun.
You may also try to learn what you can about team/project/process management. Team organization is a fascinating subject in and of itself. Knowing about team/product/project management is incredibly useful, whether you're in charge or not. Most software is developed by teams made of humans, and the team dynamics have a huge impact on what the team is able to deliver. Product management is also a very interesting area, where having a background in IT can help a lot.
One thing to avoid is doing the exact same job for too long (unless it remains interesting/engaging/fun), because you'll stagnate, and you won't be challenged enough to learn new things. The same goes for staying on a legacy technical stack for too long, which can keep you too far away from the current job market, and make it much harder for you to find a new job. It's common knowledge that you should always expand your comfort zone. It's the only way forward in life ;-)
One can choose to go back toward safety or forward toward growth. Growth must be chosen again and again; fear must be overcome again and again. (Abraham Maslow)
All of these steps can take you in various directions over time. You could become a software developer, a technical leader, a team manager, a front-end specialist, a business analyst, a security specialist, an IT architect, or even a Chief Technical Officer (CTO) if that's what you fancy. The possibilities are endless. You could also decide to specialize in a very specific niche domain. It's not my preference, but it's all up to you... and that's the cool part!
The notion of seniority is also of interest, but is really relative; it means different things to different people. Some people/organizations consider that seniority equals number of years, while that couldn't be further from the truth. To me, seniority is about both knowledge, and experience. Both take time to acquire of course, but with motivation and dedication, one can learn much faster. Time alone is an awful indicator of seniority.
Finally, independently of your evolution within the world of software development, you'll also have to choose between being an employee, a consultant, a freelancer, or even a mix of those. For instance, I'm currently a freelance IT coach/CTO and a part-time employee. One benefit of being a consultant/freelancer is that you'll have to learn much faster; there's no choice, otherwise you won't be able to find/satisfy clients. You'll also get to discover various environments, teams and company cultures. Those experiences can help you grow much faster.
Don't hesitate to revisit your choice over time too; what's true for you today might not be tomorrow, and change can be wonderful, and refreshing!
Conclusion
In this article, I've told you about possible career paths in IT and software development. I've also given you a few pieces of advice about where to start, based on my own experience. Of course, this is just my opinion. I'm a generalist, not a specialist, so I see a lot of value in learning about many things. But being a specialist is also fine.
In any case, it's your own career, so make your own choices. Just keep in mind that not choosing is also a choice. No matter what you choose, make sure to have fun!
Come discuss on Twitter, and tell me about your own career choices!
That’s it for today!
PS: If you want to learn tons of other cool things about product/software/Web development, then check out the Dev Concepts series, subscribe to my newsletter, and come say hi on Twitter!