One of the most common questions asked by aspiring software developers (or aspiring to be anything, really): How to get started?
I understand this is one of the most overwhelming topics for a beginner. It may feel like there’s so much to know, and not enough clarity on where to start.
But part of the obsession with this question also comes from the fact that it’s easy to waste time studying and debating the best way to get started. And it’s hard to actually start and do something.
So what’s the big secret to getting started? Take the first step. When you think about all the steps ahead of you, you can feel overwhelmed and not do anything. It’s a lot of pressure to handle.
But if all you got to do is just take the first step, it’s easy to summon courage and do it. Once the first step is done, then you take the 2nd and so on. You’ll be on your way to become a programmer, one step at a time.
In this guide, we’ll go over the steps involved in getting started as a software developer. We’ll talk about planning your journey, the technical skills you need and how to go about learning them.
I am going to try break this down as simply as possible, with only the most essential components of the picture. The aim is not to give you an exhaustive list of everything you should know, but only the essential skills you need to begin.
By the end of this guide, you’ll know enough to get started on the right foot and create a roadmap for the next few weeks.
It's Not Just Coding
Before we get started with more information on software development, there is something basic you need to understand first.
Many aspiring developers think that becoming a software developer only means learning to code. But that’s not true.
Don’t get me wrong, you do need to know how to code, but there’s more to it than just programming, the first of which is a software development model or method.
Most software programmers or teams have a standard process in place which they are supposed to follow from start to end. Two of the most popular models these days are waterfall model and agile development. So you should at least know what these two mean.
Regardless of what model you or your team picks, the following components will still apply. The only difference will be in sequence and the extent of overlap between them. Let’s take a look at all the key parts of being a software developer.
Every software development project is about solving a problem. In most cases, it means automating a manual process, either completely or to some extent.
Needless to say, you should have a good idea about a manual process and its flaws before you decide to build software to improve on it. Only then you can fully gather requirements and understand what the software is supposed to do.
One of the common best practices at this stage is to talk to a potential client or customer about their needs and prepare a specifications document.
Once you have understood the requirements well enough to proceed, the next step is to visualize some sort of interface - a design depicting how a user will interact with the software to achieve its purpose.
There are many different approaches to do this based on what kind of software you’re building. But for now, just be aware that some kind of architectural blueprint to guide the coding phase is necessary before you start the coding.
You can’t start building a house before putting some kind of plan in place about which room goes where, how spacious it needs to be and so on.
Now that you somewhat know what you need to build and how it’s supposed to look like, it’s time to start coding. This is the stage where you build the software that will help users solve a problem or automate part of a process.
One thing that bogs down most beginning developers is which language to start with. But it’s not as much of a big deal that you may be making it out to be.
The important thing is to start with and master one coding language first, instead of confusing yourself with too many. As long as you’re focused on mastering only one language at first, the choice of that language doesn’t matter that much.
There are too many good and bad coding practices to cover in this guide, but what you must know for now is that good code is well structured, robust and clean.
It works as it’s supposed to in as many scenarios as possible and easy to understand for other programmers, who may later need to change or expand on it.
Algorithms & Data Structures
Algorithms and data structures are ready-to-use solutions to some of the most common coding scenarios. For example, a part of your code may require to sort a list of things. Sorting a list of things is a common problem faced by many coders before you.
If you can learn the best way to do that, you can use it not just for code that you’re currently writing, but also for any other code or project that you may work on later.
But instead of putting a lot of mental effort and time in how to do so, you can just learn and use a standard sorting algorithm, developed and agreed upon by the programming community in general.
Also, it’s not just enough to memorize or be able to use an algorithm or data structure. You must understand how and why it works.
This is because most of the problems you will face as a programmer will require you to tweak the algorithm, not just apply it as it is. So you must be able to create your own variations of these algorithms.
Being good with algorithms and data structures can help you solve a coding problems way faster than it would have taken you to figure out the solution from scratch. But also know that it’s not going to be easy.
That’s the reason majority of software developers don’t focus on this area as much as they should. And they lose out on a high value skillset and lucrative opportunities to those who do.
If you really seek to build your reputation as a killer developer, or get a job at your dream tech company, then you need to eat, drink and sleep algorithms and data structures.
A Development Ecosystem
To be a software developer, you’ll need to gain experience and competence in at least one platform that you’ll be developing software for.
For example, if you choose to build software for Windows, then you’ll need to work on mastering Windows and not other platforms like Mac, the web browser, Android, or the world wide web.
Similarly, if you’re making a web application, then you’ll need to focus on a specific web platform, with its development standards and practices.
Having mastery of a platform means knowing the tools, patterns and frameworks typically used when developing for that platform.
A Full Stack
Now that you know that you need to master a programming language and a development platform, you might as well know about frameworks and stacks.
A framework is a set of code libraries from which you can add code snippets into the code of software that you’re working on. Just like algorithms and data structures, frameworks make common programming tasks faster and easier.
.NET, for example, is a commonly used framework with C# programming language. It has many C# classes and libraries prebuilt, which you can use in your C# code where needed. So you don’t have to re-invent the wheel every time you’re trying to do something that has already been done before.
A stack, on the other hand, is a set of a programming language, a framework, a database and some other technologies typically used together to create a full software application.
If you know about all the tools and technologies associated with a particular stack, you can develop an entire application with it from start to finish.
So learning a complete stack is extremely valuable. If you have ever heard the term “full stack developer,” that’s where it came from.
Basic Database Management
Regardless of what kind of software you’re developing, there’s a good chance of some kind of database being involved. Depending on the what the software does, the database is required to store information about users, configurations and more.
Databases are an important part of software development, used to store data for applications. So some of the essentials you should know include how databases work; the basic queries to fetch data; inserting, updating and deleting data; and joining datasets.
You may also need to perform these activities programmatically and write code that can talk to the database.
Other concepts that come into play here are those related to source code repositories. Version control is an integral part of any coding project.
Different versions of software are stored and collaboratively worked on to add more bells and whistles, or to fix bugs. Version control also helps in tracking the history of changes that have been made to different parts at different times.
Source control lets multiple developers work on the same code at the same time and then merge all those changes back together.
As a software developer, you’ll be expected to know at least one version control tool, especially when you’re working in projects with multiple developers. And basics like checking in and checking out code, as well as merging changes from a number of sources.
Build & Deployment
Most software development projects today use some sort of automated build and deployment technology. After you have checked in a piece of code in your source control system, a build will help ensure that it works.
At the very least, it will compile the code to check if there are any compilation errors. Depending on how sophisticated the build system is, it may also run some user and code quality checks, plus report on the results.
The next step is deployment, which means making the software available to all or a limited set of intended users. The initial deployment will probably be to a production machine or a testing environment.
You don’t need to be an expert in everything related to deployment. Creating and maintaining a build and deployment system is a huge topic in itself. In fact, it has given rise to a separate and rising subject called DevOps (developer operations). But you need to be familiar with the basics.
Testing & Debugging
Before the final software is released to users, it undergoes a phase of testing. This is where a limited group of people try different ways users may interact with the software, and check if any of those scenarios cause the software to behave the way it shouldn’t.
As with different approaches to building software, there are a number of methods to carry out testing.
In the early days it used to be a linear process. So it was okay if the developers didn’t know much about testing. A software developer wrote the code. The tester tested and found bugs. The developer fixed the bugs and so on.
But with the adoption of agile methodologies, having basic knowledge of testing isn’t optional anymore. Software developers and testers work much more closely with each other, often in parallel.
With that in mind, you should have a basic understanding of concepts like whitebox testing, blackbox testing, test automation, boundary conditions and acceptance testing. A good programmer will always perform some kind of basic testing to their own code before passing on to someone else.
In fact, 90% of where a coder spends most of his or her time is debugging - not writing code but trying to identify why a piece of code they wrote isn’t working. There’s no way around it. You’re going to have to know how to debug code, whether your own or someone else’s.
How To Begin
As you can see, there’s a lot more to software development than just writing code. Right now, it’s okay to feel overwhelmed and not know what any of these concepts mean.
What you need is a plan that takes you from being an aspiring software developer to a competent one. And you must be wondering what is the best way to develop all these technical skills and be a coder.
Many aspiring coders fall into the trap of reading several reference books, page by page, as if they need to know every library, every class, every framework and every concept before they begin coding.
This is a huge mistake because not only are you wasting precious time, but also because you wouldn’t know how useful or important something is until you need it to solve an actual problem at hand.
Only 20% of information about a particular skill or technology is used in 80% if the real world projects a software developer works on. So the key to learning something quickly is identifying what concepts fall into that 20%.
Yet most programming books are written as reference manuals, with the same treatment given to 100% of the topics. There is practically no emphasis on what you need to know as soon as possible and how much. Here’s a better way to learn anything quickly.
Understand The Big Picture
When you begin with a new skill, start with a surface level understanding of what it is, what it does and what are the subtopics included within this particular topic.
You don’t need to go into detail of anything because you can always go deep on concepts later or google things. But the idea is to know the things you don’t know that you don’t know.
You’re not learning to change the tire of a car, but at least you’ll know there is a toolkit in the trunk that can help you do that.
Similarly, in order to Google something, you’ll have to at least know what to type in Google search! The idea is to not read too much up front and learn by doing.
Learn By Doing
Set a goal to create an actual working software application and let your curiosity drive you to what you want to know at a particular step.
When you’re stuck at a step, then go on and read more about the topic that’ll help you solve that immediate problem. That way, you’ll also be sure that what you’re reading is actually relevant. And it’s more likely to stick in your mind.
For example, it’s one thing to learn about databases, how to run queries and so on.
But you learn at a different level when you decide to create an application that interacts with a database to manage your music albums - from which you can fetch titles, edit album information, add or delete albums and more.
Since you have a specific purpose now, you crack open a book or course on databases and know exactly what you need to find and read to achieve the functions/features you want to build.
And then you use that information to solve your immediate challenges, eventually moving towards the full application goal. Think about how much more enjoyable and useful that is than just reading a bunch of stuff you don’t even know to be relevant in the real world.
Conclusion: Get To Practice
Hopefully, I have given you everything you need to begin. So there’s no excuse not to get started. Just keep in mind that patience and practice are going to take you far ahead than just reading and studying.
Try to stay calm and enjoy the process, even it it may get frustrating at times. The skills will come and you’ll be on your way to the exciting world of software development.