This topic comes up enough in conversation that I wanted to have a resource ready to share with people after talking about it.
The roadmap
Becoming a software engineer is a journey of acquiring new skills.
There are two simple road markers on your journey:
- When you open your first code file and start making changes, you are a developer.
- When you get paid to write code, you are a professional developer.
I share this because imposter syndrome is a huge problem for would-be developers. For whatever reason, people think you have to be really special in some way or another to learn how to code, and they think you have to have all of the skills before you're actually a developer. That's just not true.
In fact, nobody has all the skills. We all have different skills. You just need enough relevant skills to be valuable to a company.
To become a developer, focus on learning new skills. Plenty of these skills are also useful for non-programming jobs and even your personal life.
Learn JavaScript to become a front-end developer
I would personally suggest learning JavaScript as your first real programming language for three main reasons:
- It can do practically anything.
- It's pretty easy to pick up.
- There are real jobs out there for it.
You might be familiar, but JavaScript is a very flexible, dynamic language. You don't have to deal with a ton of strict rules while learning it, so you can get right to the point. It's also easy to run - we've all used a web browser, and web browsers run JavaScript. There's no install or setup required.
You will want to get familiar with HTML and CSS before jumping into JavaScript, but they are not real programming languages. They're simple enough to pick up in a few hours, so jump right in!
When I started the self-taught route to programming, I cut my teeth on HTML, CSS, and some JavaScript with the free resources at W3Schools.
These days, I would probably start with MDN (Mozilla Developer Network) instead. MDN is a great reference website for all things web. This is their JavaScript tutorial.
Learn Node.js to become a full-stack developer
Node.js (or just "Node") is a JavaScript runtime. Basically, it's an executable file that sits on your computer and runs JavaScript. Inside it is the same JavaScript engine that's inside the Chrome browser: V8. Node lets you use JavaScript skills outside of the browser.
If you learn Node, you'll be able to create more than just websites with JavaScript. You can create web servers and automation scripts as well. You can also create desktop apps. I have done all of the above for different jobs.
W3Schools and MDN both seem to have decent Node.js tutorials:
Learn to use the terminal to work more efficiently
When you see TV hackers doing their thing, all keyboard and no mouse, they're using the terminal to get things done just by typing commands. Using the terminal is very efficient. Many development workflows are built around using the terminal, so you'll find yourself using it regularly.
If you are on Windows, you will need to install a program to give you access to the same terminal commands that Linux and Mac have. Those are the standard commands. You can install Git Bash to gain access to those commands. You will need to install Git anyway, so this is practically a required tool for Windows development.
I recommend following the Command line crash course from MDN. Remember that if you already have Git Bash installed, you won't need to install the "Windows Subsystem for Linux" that they recommend, which has a steeper learning curve.
Learn Git to be able to work on a team
Git is a distributed version control system. It lets us save and share our code easily, and protects us against losing progress. We can use it to easily revert our code to previous versions and back up our code on a separate server.
You WILL need to learn and use Git for your developer job. Thankfully, the basic Git workflow is pretty easy to grasp.
W3Schools has a nice Git tutorial that will also set you up with a GitHub account. You definitely want a GitHub account. It's free. Here's the tutorial: Git Tutorial.
Learn to build on other people's work
We stand on the shoulders of giants, as they say. There are many, many engineers of different kinds who have come before us and given us the technology we have today. That includes all of the code that has already been written, and much of that code is available for us to import into our own projects.
Most languages have a package manager that allows you to basically install other people's code into your own projects. For Node.js, the package manager is NPM (the "Node Package Manager"). NPM gets installed by the Node.js installer, so if you have Node you already have NPM.
The MDN tutorial on building a Node.js web app has a good section on using NPM.
You can find all kinds of packages to install on the NPM website.
It can be tempting to build something from scratch just because you could theoretically do it yourself. In fact, this is sometimes a great way to learn new things! However, if you are trying to actually get things done and add new features to a project, that approach is a huge waste of time.
Get comfortable with building on the code that has already been written. Don't reinvent the wheel out of pride.
Learn Google to solve any problem with ease
Googling is a skill, and it's one of the skills that all good programmers have in common.
I've mentioned before that all programmers have different skills. This is part of the reason we all need to be good at Google: for whatever problem we're having, there's a good chance other developers with more skills in that particular area have already solved that problem. We just need to find their answers.
This article on 21 Tips and Tricks to Master the Art of Googling as a Developer has some great advice on how to make the most of Google.
You should also know that many answers are found on Stack Overflow, which is the question and answer site for programmers. You can use Google to search Stack Overflow by adding site:stackoverflow.com
to your search query.
Do projects to learn and demonstrate your skills
After following a tutorial or two, it's time to try your hand at a real project. Having a few projects under your belt will give you something to talk about with recruiters and interviewers. You can also build a personal portfolio site to show them off. I highly recommend this.
Overall, the approach I would suggest is to pick a project that you sort of understand and just start building it. Use Google, Stack Overflow, and MDN to answer your questions as you go. Break large problems into a list of specific questions, then find the answers to those questions. You'll always learn more than you set out to learn in the first place.
Learn a framework to become more valuable
You can accomplish more and write less code by using a framework. You should probably create a demo project for a few frameworks just to have some familiarity with them and what they can do for you.
I recommend trying Express for backend development and either React or Vue for frontend:
- Express (the most popular Node.js framework for building web servers)
- React (frontend framework for building websites - uses a syntax called "JSX")
- Vue (frontend framework for building websites - uses a template system)
You can easily find the official website and many tutorials for each framework with Google.
Make a developer portfolio site
If you want to make a good first impression and stick out from the crowd, I suggest making a personal portfolio site. You can easily host one for free on GitHub Pages.
Your portfolio website is a sales tool, and you are the product. It should focus on introducing your skills, highlighting your experience, and sharing any relevant personal interests.
I recommend:
- Including projects you've worked on.
- Adding screenshots of your websites/apps (not your source code).
- Linking to your GitHub profile so people can see the quality of your code.
- Linking to your LinkedIn so people can connect with you.
I've seen some developers share their resumes on their personal websites for anyone to download. I wouldn't advise this, as resumes usually contain contact info that doesn't belong on the open web.
Practice for code interviews with katas
The developer interview process often includes at least one coding challenge. You will be asked to solve a problem with code while the interviewer watches (and often acts as a resource - they want to see what you'd be like on a team).
To practice for these challenges, I recommend using CodeWars. It's a website with many katas (fancy word for "code challenges") that you can solve on your own. Here's CodeWars.
CodeWars is GREAT because it runs your code against a list of tests and shows you which ones passed and any that still need work. It's very rewarding.
I also created my own kata learning site for JavaScript called N2JS ("into JS" or "into JavaScript"). It has 100+ lessons and also runs your code against a list of tests. Instead of giving you random challenges like CodeWars that may require skills you don't yet have, N2JS has lessons to teach you new JavaScript concepts before giving you a kata where you can use them.
I created N2JS with a self-guided high school computer class in mind, so keep that in mind if the pacing doesn't match your learning speed. You can always jump straight into more complex challenges on CodeWars.
Enroll in a coding bootcamp to get massive experience very quickly
This step is optional.
Coding bootcamps may be a serious investment, but they're far more economical than a college degree - especially for programming.
Many university computer science programs are slow-paced, outdated, and padded with content that is irrelevant to the job market. You know, academic stuff.
Bootcamps, on the other hand, give you a full immersion experience into the world of software development, turning you out into the workforce in around 3-4 months. Some of them are full time, in-person programs. Others are asynchronous and online. Still others are hybrids.
I recommend looking for a bootcamp that offers as much in-person or at least realtime collaboration as possible. You will want to be able to talk about your experience working on a team of developers when it comes time to find a job.
If you're worried about financing, there are options out there. Individual bootcamps can point you to financing partners that have worked well for other students.
Full disclosure: I've taught at a coding bootcamp, so I might be biased toward the idea as a whole. However, I don't get a commission for sending you anywhere. It's just an investment worth considering.
Apply for jobs
When you're ready to look for software-focused roles, it can help to look for "associate" or "apprenticeship" positions. These positions are often designed to be entry-level, and it's understood that you'll be doing some learning on the job.
Make sure you're ready to present yourself in the best possible light. Career changers can feel compelled to tell their personal story of becoming a developer, as if they need to justify themselves and what they're doing. Skip that. Jump to what you can do, what you have done, and what you will do for the company.
Be bold. Speak on the forward edge of truth.
It definitely helps to have a tidy LinkedIn profile, a polished and proofread resume, and a personal portfolio site. Every piece of evidence that points to your skills and professionalism is going to get you closer to the work you want to do.
Additionally, it helps to keep a spreadsheet of the jobs you've applied for. Job searches feel like they go from 0% to 100% the instant you accept a job offer.
In reality, your job search progresses steadily and includes many things: your learning, your practice, your professional presentation, and of course your actual job applications and interviews.
Keeping a list of those job applications helps you see the progress you're making and the work you're putting in.
Continue to improve your skills and apply for jobs, and suddenly you will find yourself at 100%.
Further Reading
If you'd like to read another take on the subject, check out this external article on Why Learning to Code is so Damn Hard. Be advised: like plenty of other good content on the internet, it does end in a sales pitch.
Good luck!
I'm sure there's plenty more to be said about learning to code, and I might have left some gaps in the info above, but I hope this gives you an idea of where to start!