Please take a moment to read the notes at the bottom of the page. They explain some of my philosophy of learning and contain some suggestions and tips which might help you make the most of your learning journey (particularly as it relates to the resources contained here.)
The goal of Tier 1 is to gain a robust foundational knowledge of web development and become confident at coding beginner to intermediate-level web projects. It should provide a stepping stone for branching into other facets of development or for diving deeper into more advanced web development.
| Reading | Status | Evidence |
|---|---|---|
| MDN HTML | ||
| MDN CSS | ||
| MDN JavaScript | ||
| Eloquent JavaScript | ||
| CSS Tricks |
The goal of Tier 2 is to gain substantial hands-on programming practice. You have two options for selecting where you'd prefer to dedicate that practice.
Pick one of the two paths below:
| Courses | Status | Evidence |
|---|---|---|
| Full Stack Open | ||
| MongoDB Node.js Developer Path |
| Courses | Status | Evidence |
|---|---|---|
| CS50x | ||
| CS50's Web Programming with Python and JavaScript | ||
| CS50's Introduction to Databases with SQL | ||
| MongoDB Python Developer Path |
| Reading | Status | Evidence |
|---|---|---|
| W3 Schools C Programming | ||
| Python | ||
| SQLBolt |
The goal of Tier 3 is to gain skills that will serve you well as you begin a job search. This tier dives deep into data structures and algorithms which will not only help in interviews but will also teach you to create efficient code that will work well on the job. The programming language used for this tier is Java and that choice is intentional as familiarity with a more structured language will inform how you program in whichever language you might be using in the future.
| Reading | Status | Evidence |
|---|---|---|
| Think Java | ||
| Oracle's Java Documentation | ||
| The Algorithms: Java |
The goal of Tier 4 is to polish a portfolio of your best work.
The goal of Tier 5 is to enhance your knowledge and abilities by deep diving into areas of particular interest to you. Select one or more focus areas as your interests dictate.
Select any area that interests you for further study:
You will notice that the resources listed here for React are not courses,YouTube playlists, or podcasts where other people teach you React. This section lists the official docs. This is because:
| Resource | Status | Evidence |
|---|---|---|
| React | ||
| Next.js React Foundations | ||
| Next.js Tutorial | ||
| Next.js | ||
| Recoil | ||
| Redux | ||
| TypeScript | ||
| WebPack | ||
| React Testing Library | ||
| Jest | ||
| Storybook |
You will notice that the resources listed here for Angular are not courses, YouTube playlists, or podcasts where other people teach you Angular. This section lists the official docs. This is because:
| Resource | Status | Evidence |
|---|---|---|
| TypeScript | ||
| Angular | ||
| NGRX | ||
| Nx | ||
| Jasmine | ||
| Karma | ||
| Storybook | ||
| Angular Material |
Note: For this Focus Area, feel free to dive into it in its entirety, or just do a course or two here and there to supplement one of the other focus areas. You will notice that if you start working through the Computer Science Focus Area, from time to time, one of the Mathematics courses from this Focus Area will be listed as a pre-requisite.
| Courses | Status | Evidence |
|---|---|---|
| Single Variable Calculus | ||
| Mathematics for Computer Science | ||
| Multivariable Calculus | ||
| Introduction to Probability and Statistics | ||
| Differential Equations | ||
| Linear Algebra |
Note: This focus area dives a bit deeper into nitty-gritty computer science topics. Feel free to jump around and take whichever courses sound most interesting to you. (Structure and Interpretation of Computer Programs is one of my favorites.) You will, at times, find that a course has a mathematics course pre-requisite - those courses may be found in the Mathematics Focus Area above.
Before you start, please let me introduce a bit of my philosophy for learning how to be a top-notch programmer.
Programming, software engineering, web development, whatever you want to call it, however you want to approach it, has one immutable characteristic - it's a field in flux, and there are new advances every day - don't let this discourage you, but do let it instill in you an excitement for learning. Learning new technologies should be an exciting opportunity for growth, not a disappointing drudgery. Start, from day one, with a celebratory mindset about learning new things - that mindset will skyrocket your progress.
You’ll learn a lot from taking courses. You’ll learn a lot from watching videos. You’ll learn a lot from “reading the docs.” All of these are important, in fact crucial, on your path. If you want to retain all that great learning, you need to practice it. Practice will transform something you've been exposed to into something you can “reliably do.” Lean heavily into practicing.
You're learning, you're practicing - do you want to excel? Yes? Then find opportunities to help others learn. There is no other activity that will prepare you better to interview well than consistently helping others. It teaches you to interact well with others and communicate technical concepts.
Yeah, yeah, yeah, you can find a billion people on the internet who will tell you you don't need math to be a good programmer. I agree, to a certain extent. That said, math is about learning to solve increasingly complex problems. And, knowing how to logically go about solving increasingly complex problems is what programming is all about. Don't sleep on math, every little extra bit you learn will make you that much better at problem-solving. Yeah, you “can do fine” without the math, but with it, you fly!
Helpful (non-programming) resources
Curriculum advice
General advice
.md files in a github (or gitlab) repository of your notes. You'll get practice with git and get practice with markdown. It's a twofer.General math progression
Note: As I said above, don't stress about math. Should you desire to leverage a greater understanding of math to improve your logical problem solving ability, the following sequence will serve you well. Please feel free to skip (or test out of) any topics you already know well.
122 followers · starred May 2020
1,433 followers · starred Aug 2019
143 followers · starred Oct 2018
254 followers · starred Aug 2017
Please take a moment to read the notes at the bottom of the page. They explain some of my philosophy of learning and contain some suggestions and tips which might help you make the most of your learning journey (particularly as it relates to the resources contained here.)
The goal of Tier 1 is to gain a robust foundational knowledge of web development and become confident at coding beginner to intermediate-level web projects. It should provide a stepping stone for branching into other facets of development or for diving deeper into more advanced web development.
| Reading | Status | Evidence |
|---|---|---|
| MDN HTML | ||
| MDN CSS | ||
| MDN JavaScript | ||
| Eloquent JavaScript | ||
| CSS Tricks |
The goal of Tier 2 is to gain substantial hands-on programming practice. You have two options for selecting where you'd prefer to dedicate that practice.
Pick one of the two paths below:
| Courses | Status | Evidence |
|---|---|---|
| Full Stack Open | ||
| MongoDB Node.js Developer Path |
| Courses | Status | Evidence |
|---|---|---|
| CS50x | ||
| CS50's Web Programming with Python and JavaScript | ||
| CS50's Introduction to Databases with SQL | ||
| MongoDB Python Developer Path |
| Reading | Status | Evidence |
|---|---|---|
| W3 Schools C Programming | ||
| Python | ||
| SQLBolt |
The goal of Tier 3 is to gain skills that will serve you well as you begin a job search. This tier dives deep into data structures and algorithms which will not only help in interviews but will also teach you to create efficient code that will work well on the job. The programming language used for this tier is Java and that choice is intentional as familiarity with a more structured language will inform how you program in whichever language you might be using in the future.
| Reading | Status | Evidence |
|---|---|---|
| Think Java | ||
| Oracle's Java Documentation | ||
| The Algorithms: Java |
The goal of Tier 4 is to polish a portfolio of your best work.
The goal of Tier 5 is to enhance your knowledge and abilities by deep diving into areas of particular interest to you. Select one or more focus areas as your interests dictate.
Select any area that interests you for further study:
You will notice that the resources listed here for React are not courses,YouTube playlists, or podcasts where other people teach you React. This section lists the official docs. This is because:
| Resource | Status | Evidence |
|---|---|---|
| React | ||
| Next.js React Foundations | ||
| Next.js Tutorial | ||
| Next.js | ||
| Recoil | ||
| Redux | ||
| TypeScript | ||
| WebPack | ||
| React Testing Library | ||
| Jest | ||
| Storybook |
You will notice that the resources listed here for Angular are not courses, YouTube playlists, or podcasts where other people teach you Angular. This section lists the official docs. This is because:
| Resource | Status | Evidence |
|---|---|---|
| TypeScript | ||
| Angular | ||
| NGRX | ||
| Nx | ||
| Jasmine | ||
| Karma | ||
| Storybook | ||
| Angular Material |
Note: For this Focus Area, feel free to dive into it in its entirety, or just do a course or two here and there to supplement one of the other focus areas. You will notice that if you start working through the Computer Science Focus Area, from time to time, one of the Mathematics courses from this Focus Area will be listed as a pre-requisite.
| Courses | Status | Evidence |
|---|---|---|
| Single Variable Calculus | ||
| Mathematics for Computer Science | ||
| Multivariable Calculus | ||
| Introduction to Probability and Statistics | ||
| Differential Equations | ||
| Linear Algebra |
Note: This focus area dives a bit deeper into nitty-gritty computer science topics. Feel free to jump around and take whichever courses sound most interesting to you. (Structure and Interpretation of Computer Programs is one of my favorites.) You will, at times, find that a course has a mathematics course pre-requisite - those courses may be found in the Mathematics Focus Area above.
Before you start, please let me introduce a bit of my philosophy for learning how to be a top-notch programmer.
Programming, software engineering, web development, whatever you want to call it, however you want to approach it, has one immutable characteristic - it's a field in flux, and there are new advances every day - don't let this discourage you, but do let it instill in you an excitement for learning. Learning new technologies should be an exciting opportunity for growth, not a disappointing drudgery. Start, from day one, with a celebratory mindset about learning new things - that mindset will skyrocket your progress.
You’ll learn a lot from taking courses. You’ll learn a lot from watching videos. You’ll learn a lot from “reading the docs.” All of these are important, in fact crucial, on your path. If you want to retain all that great learning, you need to practice it. Practice will transform something you've been exposed to into something you can “reliably do.” Lean heavily into practicing.
You're learning, you're practicing - do you want to excel? Yes? Then find opportunities to help others learn. There is no other activity that will prepare you better to interview well than consistently helping others. It teaches you to interact well with others and communicate technical concepts.
Yeah, yeah, yeah, you can find a billion people on the internet who will tell you you don't need math to be a good programmer. I agree, to a certain extent. That said, math is about learning to solve increasingly complex problems. And, knowing how to logically go about solving increasingly complex problems is what programming is all about. Don't sleep on math, every little extra bit you learn will make you that much better at problem-solving. Yeah, you “can do fine” without the math, but with it, you fly!
Helpful (non-programming) resources
Curriculum advice
General advice
.md files in a github (or gitlab) repository of your notes. You'll get practice with git and get practice with markdown. It's a twofer.General math progression
Note: As I said above, don't stress about math. Should you desire to leverage a greater understanding of math to improve your logical problem solving ability, the following sequence will serve you well. Please feel free to skip (or test out of) any topics you already know well.
122 followers · starred May 2020
1,433 followers · starred Aug 2019
143 followers · starred Oct 2018
254 followers · starred Aug 2017