Your Full Stack Roadmap
Hello world!
You want to learn how to program. Hopefully you want to learn to build web applications. Or you're already a developer and want to keep working on your skills. Awesome!
This site is an aggregation of resources from around the web to help you in your quest. Browse it, then come back when you're ready to jump into one of the topics more deeply.
Learning to code can be really hard.
It's not just you who might feel that way. Don't give up.
Your first 100 hours will probably be to be especially difficult: first you'll be on Codecademy or somewhere similar, getting the hang of variables and puts
statements, and suddenly you'll find yourself trying to solve some sort of simple algorithm like finding the nth Fibonacci number and everything will break and you'll get frustrated, cry, and believe you're not cut out for this.
Don't let this deter you. Keep at it and it will continue to make more and more sense. Organize yourself and your projects, stay on top of where you are in your plan, reach out to others for help, direction, support, and community, and don't lose heart.
Trust that you really are cut out for this. People from all walks of life are cut out for this, and your background means nothing. (Me? I achieved 2 degrees in English literature and worked in HR/Compliance before deciding to pursue web development, and I couldn't be happier with my decision.)
Your essential competencies: and your full-stack roadmap!
Stack For Yourself's Curriculum
Set up your development environment.
- Be able to type very well, quickly, and cleanly. Try typing.io to level up.
- Get yourself a text editor, project management tools, and more.
- You'll need to learn how to use command line interfaces. Terminal, bash/shell, Cygwin, and various other programs will allow you to have a textual interface to your computer, an essential part of writing code.
You need a foundational grasp of Computer Science concepts in order to think your way around code. You don't necessarily need this in order to build with code... but you do need it in order to understand what you're building and debugging.
- Check out our list of fundamental computer science concepts.
- Take a look at this 2018 developer roadmap. This a useful reference if you're wondering where a topic fits into your journey.
- Variety of free online Computer Science courses from universities. These are often Computer Science courses that teach broad programming/computer concepts.
- Some great Computer Science video lectures.
Learn a back-end language that plays nice with the web, like Ruby, Python, Go, C#, JavaScript via Node.js, PHP, or Java. Don't let yourself get lost in the crazy comparison-mongering crowds that tell you that Ruby is dying or Java is too hard. Every single one of these languages has an excellent history, great community of contributors and users, and makes buckets of cash for the companies that use them. Every one of these are great for web development for their own reasons.
Learn the language you've chosen by solving small problems, called algorithms. Then graduate to more challenging algorithims, learn and use data structures, and understand essential concepts like Object Oriented Programming. Everything you'll learn will only improve your grasp of the back-end language you've chosen.
- Create games for the console and write small programs, like to-do lists or the Tower of Hanoi game.
- Algorithms. These are small code problems. Solving them demands a fluency with your chosen language, and they tend to really help you learn that language. They're an essential part of finding work as well, as most jobs reqiure that the applicant solve one or more algorithms at the technical interview.
- Data strutures. These are ways of organizing small bits of data that your program needs to have access to as the program is executed.
Learn the heck out of git.
- Intro to git and Github. These are cornerstone tools to a developer's workflow.
Learn how to setup and use databases with your projects. Get really comfortable with SQL syntax.
- Check out our introduction to databases resource.
Learn how the web works, how requests are made, where code lives, how servers listen for and respond to queries.
- Our introduction to networking, or, an introduction to how the Internet works and how applications make and respond to requests.
- Learn a back-end web framework for the back-end language you chose. Back-end frameworks consist of files that are prewritten for you in the appropriate language, in order to take care of the initial setup of an application. They handle managing your database, creating the 'logic' of what your application can do, and they allow you to focus on working on the parts that are unique to your application instead of basic configurations that every application must have in order to be 'live' on a server. An example of a back-end web framework for Ruby is Rails. Here's a place to learn about web development concepts within the context of Rails.
Learn to create simple pages with HTML and CSS.
- Check out our introduction to HTML, CSS, and the DOM, or, Document Object Model.
- Viking School prep course is a lovely overall introduction to HTML and CSS.
Learn JavaScript. Be able to write vanilla JavaScript both in the sense of objects and in the sense of DOM manipulations.
- Learn more about the DOM and the way JavaScript interacts with HTML and CSS. A great way to do that would be to learn the most popular JavaScript library, jQuery. Find that and other resources here.
- Choose a front-end JavaScript framework and learn it. Every modern framework has a great community and support right now, so don't worry too much about choosing the 'wrong' one.
Finally, showcase your work live, and build, build, build.
- Learn to deploy your code to servers, using services like Heroku or Amazon Web Services, to have your projects visible live. You can deploy applications that do not have a back-end or databases, applications such as a small set of HTML, CSS, and JavaScript files, for free on Github via Github Pages.
- Build projects to showcase every single aspect of your learning. Share all your best code on Github so others can see your portfolio and possibly even use the code you've written.
Other roadmaps!
- FreeCodeCamp, My Journey to Becoming a Web Developer From Scratch Without a CS Degree, 2 Years Later and What I Learned
- FreeCodeCamp, How to Go From Hobbyist to Professional Developer
- How I got a second degree and earned 5 developer certifications in just one year, while working and raising two kids
- A roadmap to becoming a web developer in 2017
- Becoming a developer in 2017, an open-source map for full-stack, front-end, and/or back-end development essential competencies.
- Go from Zero to Programmer Hero in One Guide! But really there's a lot of cool discussions about how to get into web development when you're a raw beginner, that are worth checking out.
- Dreaming in Code, Lots of tutorials for different languages.
- Web technology for developers.
- "How to Get a Developer Job In Less Than A Year", a perspective from FreeCodeCamp.
- Codecademy's Full Stack path. Codecademy is an amazing first step on your road to code, especially if you have never written any code before. Great introduction to essential full stack concepts and competencies.
- Code.org courses.
- Code Avengers, various free courses to learn basics.
- Team TreeHouse, various small courses.
- KhanAcademy courses.
- Bento, cool tutorials for different web development technologies and concepts.
- Codeschool, lots of great, interactive tutorials, especially geared towards raw beginners. Some of them are behind paywalls, but it's very reasonable pricing.
- Lynda, video tutorials.
- LifeHacker's "Programmer 101 Teach Yourself To Code" article with plenty of links.
Learning with some help
I really like the idea of mastery learning, which is when you learn or are taught a concept until you master it, before moving on to the next one. Ideally, you do it with the help of a mentor or community. Here's some places to do that:
- Odin Project: completely free, Ruby-based full-stack development program, with an amazing online community.
- FreeCodeCamp: superb, completely free program, teaching from the front-end backwards, with an excellent and huge community which in many cities has local presence. Actively maintained and being expanded to include new courses such as one teaching D3.js.
- Bloc.io: a paid bootcamp whose model is to connect you with a developer who acts as a mentor.
- Thinkful: similarly to Bloc.io, a paid bootcamp program connecting you to a mentor.
In general, if you choose to go to a bootcamp, get the most out of it.