I come across questions on how to get started in programming often. People are hungry to learn, but don’t know where to start or which path to take. This is made even more difficult these days due to a lot of different areas that exist, such as web development, mobile software development, game development etc.
Although we live at a time when tutorials and lessons are abundant, a lot of it can feel overwhelming. What you need is a roadmap to navigate the topics. You want a structure to guide you in your learning. A lot of coding bootcamps follow an approach similar to a college curriculum. Working through these curriculums is frustrating because you don’t feel like you are learning anything substantial quickly enough. College curriculum is great if your goal is to get a certificate or a degree. They are not great if your goal is to learn the practical skills of software engineering.
Following is a roadmap that I have put together to help you guide yourself in learning how to program. Your mileage with this will depend on your current experience with coding. These days though, I expect a lot of people to have had some exposure to very basic coding concepts such as loops, if statements etc. Spending any more time on these concepts may not be worthwhile. What you want is a road map that gets you on your way to building things.
Here it is, my recommended roadmap for learning how to build software:
1. Start with Web Development
As I had mentioned, there are many different areas of software development that you could focus on. I recommend starting with Web Development because it has the quickest feedback loop. This will help you improve fast and learn various concepts quickly. Principles learnt here can then be applied to other areas that you may be interested in such as mobile app development or game development.
For the backend, you will primarily work with either PHP, Python, Java or Ruby. Pick any one that you feel comfortable with. I recommend Python or Ruby to start.
2. Prioritize building an end-to-end application first
One of the key principles for effective learning is to focus on depth first. Instead of learning a lot of concepts across the breadth of the topics, I recommend going deep into one specific area. In this case, I suggest focusing on building a simple end-to-end application first.
You will get a general idea of what it is like to build something from scratch. More importantly, you will feel great having a built a working app. The feeling of satisfaction from the progress will motivate and propel you forward.
At this point you are ready to unpack and dive deeper into various aspects of what you have built.
End-to-End Project: A Beginner’s Guide to Building Your First Web App
Checkout my detailed Beginner’s Guide to learn more about the step-by-step process of building your first web application.
3. Dive deep into the principles of software architecture
Once you have built an end-to-end app you will find that learning a couple of frameworks and libraries will be enough to keep you going. Most coding bootcamps stop here. But this stops short of diving into the richer and more rewarding world of software engineering.
I recommend spending time learning software design principles, object oriented programming and various systems architecture patterns. You will learn the details of how to cleanly and effectively work with databases, how to structure your code to enable more complex systems, different design patterns and architectures.
Software architecture principles are timeless and will support you throughout your entire career.
Some great books I can recommend here are:
Patterns of Enterprise Application Architecture
Modern Distributed Data Architecture with Event Streams, Stream Processing and Derived Data
Check out my overview on building large scale backend systems with event streams and stream processing.
4. Data structure and algorithms are super important
The importance of algorithms in software engineering can be surprisingly controversial. This is perhaps due to Silicon Valley tech companies relying on them in the interview process. It’s true that many professional software developers never look back at the algorithms that they vaguely learn in college.
That’s unfortunate. The reality is that deep knowledge of algorithms, just like software architecture are foundational requirements if you want to excel as a software engineer at the highest level.
(Check out the book Programming Pearls for some great practical thinking on this).
I hope this roadmap gives you some sense of the various aspects that you can focus on to learn programming and launch a career in software engineering. I have not provided a time estimate here since your progress will vary. Learning something new and complex takes time. If you stick with it, a rewarding career is waiting for you on the other side.
Getting Started with Web Application Development
Sign up to receive a Free roadmap on Getting Started with Web Application Development.
The Guide includes:
- 6 Step roadmap to go from a Beginner to a Full Stack Web Application Engineer
- Each step includes details on what to focus on, traps to avoid and how to practice
- Includes a detailed glossary of common terms
Hey, I saw your post on reddit and was having trouble leaving a comment there. So I have a question that is somewhat related…
I have just finished MIT600.x Intro to CP with Python, and Harvard CS50 Intro to CP courses on edx. I had time to take these because I’ve been unemployed (food service) for the last couple of months. Now I am thinking to a career path and how to pay rent/feed myself while I pick up more programming skills. What can I do to get a programming/compute related job within the next few months? Should I go for a bootcamp which look pretty intensive, or just continue with edx/free courses?
I ask because I don’t think my previous skills (BA in anthropology and years of cooking) will allow me to support myself anymore as more and more food related businesses close. Clearly programming isn’t going anywhere anytime soon and seems like a good career opportunity. Any advice would be great right now. I know I can’t get any jobs with just having finished Intro classes, but I do need to transition to the computer related field and am just curious what kind of advice you would give to someone like me.
Hi Roman, thanks for your question. Here’s some of my thoughts:
To break into a tech role you have to acquire a deep set of technical skills and demonstrate them through great projects and great work.
Bootcamps are one way to do this through an institution. However, there are a lot of schools out there that teach a shallow set of skills focused around a few frameworks. You should talk to the Alumni of the bootcamps you are interested in to see how they faired looking for employment after graduating.
Software engineering, like cooking, is one of those skills where all the ingredients are available at home for you to work with. That means your focus should always be on building useful apps and tools that clearly demonstrate your capabilities. Use github to track and log your commits to show your progression. Publish your work online and let others see and play around with what you have built. This habit is important regardless of whether you choose to go with bootcamp or not.
Nothing speaks louder about your skills than a complete working app or project that others can use.
I will be writing more about different software engineering topics here. Including things like how to navigate different programming languages, how typical software teams build product etc. If there are specific topics and areas you would like me to cover, please let me know!
Best of luck!
You mentioned in the first paragraph that we should focus on back-end systems such as Python and Ruby. So do you mean frameworks like Django and Flask? I have currently been teaching myself MERN stack, but feel like I need to have python in my arsenal for the job hunt. I want to finish learning MERN stack completely because I don’t know what else to learn, but do you have better recommendations?
If you choose to go with Python for backend, both Django and/or Flask are good bets. That said, it is important to focus on general system design and architecture using Python as your language. This will give you the foundation to work with any backend Python framework your come across.
The good news is that, if you are already strong and proficient on the frontend, you can simply swap out NodeJS with a Python framework. Keep MongoDB as your storage. This way you get to focus completely on how Python can fit into the app you are building.
I will be writing more about different programming languages and how to choose in the next couple of week.