P1xt / p1xt-guides

Programming curricula
MIT License
7.02k stars 1.72k forks source link
computer-science game-development programming software-engineering web-development

V6 will be coming in December 2024. Please read https://github.com/P1xt/p1xt-guides/issues/208#issuecomment-2470295618 for recommendations on productive things you can be doing right now to be learning before I release V6. If you don't want to read that, everything currently listed in V5 below will be a productive use of your time. Yes, I know that Tier 3 is currently empty. V6 will correct that.

My goals:

The only reason I make this guide is to save you the time, headaches, and heartache of wasting time on resources that are inefficient and not respectful of the value of your time. Your time is your most valuable asset, and my only goal here is to point you to where it might be best used to get you where you want to be without falling into the rabbit holes of time wasting inefficient resources.

Best to you all, There WILL be a monumental update in December 2024, Don't sleep on learning math, P1xt

# P1xt Guides - Version 5.0 Please take a moment to read the [notes](#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.)

Table of Contents

## Tier 1 - Web Development Foundation ### Goal 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. ### Instructions: - Proceed through the courses and projects in order. - When you begin working on the Frontend Mentor projects, sign up for their discord and engage with the community. Help others when you can. - Include mathematics in your studies if possible. There is a General Mathematics Progression at the bottom of the [Notes](#notes) below to guide you to whatever course in the sequence is appropriate for your level. - Leverage the reading material listed for this tier while completing the projects. It covers the materials from the courses in much greater depth and will help a lot. You should be familiar with both reading it and using it as a reference when you have questions by the end of the tier. - Near the end of this tier, polish up two of your best projects, showcasing your best work, for potential leverage in creating your portfolio in Tier 4. | Activity | Status | Evidence | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----: | :------: | | [Course: HTML & CSS Crash Course](https://v2.scrimba.com/html-css-crash-course-c02l) | | | | [ Course: Learn Flexbox](https://v2.scrimba.com/learn-flexbox-c0k) | | | | [ Course: Learn CSS Grid](https://v2.scrimba.com/learn-css-grid-c02k) | | | | [Project: Profile card component](https://www.frontendmentor.io/challenges/profile-card-component-cfArpWshJ) | | | | [Project: Social links profile](https://www.frontendmentor.io/challenges/social-links-profile-UG32l9m6dQ) | | | | [Project: NFT preview card component](https://www.frontendmentor.io/challenges/nft-preview-card-component-SbdUL_w0U) | | | | [Project: Order summary component](https://www.frontendmentor.io/challenges/order-summary-component-QlPmajDUj) | | | | [Project: Product preview card component](https://www.frontendmentor.io/challenges/product-preview-card-component-GO7UmttRfa) | | | | [Project: Stats preview card component](https://www.frontendmentor.io/challenges/stats-preview-card-component-8JqbgoU62) | | | | [Project: Results summary component](https://www.frontendmentor.io/challenges/results-summary-component-CE_K6s0maV) | | | | [Project: Recipe page](https://www.frontendmentor.io/challenges/recipe-page-KiTsR8QQKm) | | | | [Project: 3-column preview card component](https://www.frontendmentor.io/challenges/3column-preview-card-component-pH92eAR2-) | | | | [Project: Single price grid component](https://www.frontendmentor.io/challenges/single-price-grid-component-5ce41129d0ff452fec5abbbc) | | | | [Project: Huddle landing page with a single introductory section](https://www.frontendmentor.io/challenges/huddle-landing-page-with-a-single-introductory-section-B_2Wvxgi0) | | | | [Project: Four card feature section](https://www.frontendmentor.io/challenges/four-card-feature-section-weK1eFYK) | | | | [Project: Social proof section](https://www.frontendmentor.io/challenges/social-proof-section-6e0qTv_bA) | | | | [Course: Build a Space Travel Website with Frontend Mentor](https://v2.scrimba.com/build-a-space-travel-website-c014) | | | | [Course: Learn JavaScript](https://v2.scrimba.com/learn-javascript-c0v) | | | | [Course: Introduction to ES6+](https://v2.scrimba.com/introduction-to-es6-c0t) | | | | [Project: FAQ Accordion](https://www.frontendmentor.io/challenges/faq-accordion-wyfFdeBwBz) | | | | [Project: Interactive rating component](https://www.frontendmentor.io/challenges/interactive-rating-component-koxpeBUmI) | | | | [Project: Article preview component](https://www.frontendmentor.io/challenges/article-preview-component-dYBN_pYFT) | | | | [Project: Base Apparel coming soon page](https://www.frontendmentor.io/challenges/base-apparel-coming-soon-page-5d46b47f8db8a7063f9331a0) | | | | [Project: Intro component with sign-up form](https://www.frontendmentor.io/challenges/intro-component-with-signup-form-5cf91bd49edda32581d28fd1) | | | | [Project: Ping single column coming soon page](https://www.frontendmentor.io/challenges/ping-single-column-coming-soon-page-5cadd051fec04111f7b848da) | | | | [Course: Learn TypeScript](https://v2.scrimba.com/learn-typescript-c03c) | | | | Reading | Status | Evidence | | :------------------------------------------------------------------------ | :----: | :------: | | [MDN HTML](https://developer.mozilla.org/en-US/docs/Web/HTML) | | | | [MDN CSS](https://developer.mozilla.org/en-US/docs/Web/CSS) | | | | [MDN JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript) | | | | [Eloquent JavaScript](https://eloquentjavascript.net/) | | | | [CSS Tricks](https://css-tricks.com/guides/) | | | ## Tier 2 - Practice ### Goal The goal of Tier 2 is to gain substantial hands-on programming practice. You have three options for selecting where you'd prefer to dedicate that practice. **Pick one of the three paths below:** ### Tier 2 - Option 1 - JavaScript via Bootcamps #### Instructions: - Proceed through the courses in order - Always be practicing. Ideas for practice: - Projects on [Frontend Mentor](https://www.frontendmentor.io/challenges?sort=difficulty%7Casc&type=free) - Challenges on [CodinGame](https://www.codingame.com/training) in JavaScript - [Ask ChatGPT to assign you a programming challenge](./RequestingChallengesFromAI.md) - Include mathematics in your studies if possible. There is a General Mathematics Progression at the bottom of the [Notes](#notes) below to guide you to whatever course in the sequence is appropriate for your level. - Take time to read from the reading list - Near the end of this tier, polish up two of your best projects, showcasing your best work, for potential leverage in creating your portfolio in Tier 4. | Courses | Status | Evidence | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----: | :------: | | [The Odin Project Foundations](https://www.theodinproject.com/paths/foundations/courses/foundations) | | | | [The Odin Project Full Stack JavaScript](https://www.theodinproject.com/paths/full-stack-javascript) | | | | [Full Stack Open](https://fullstackopen.com/en/) | | | | [MongoDB Node.js Developer Path ](https://learn.mongodb.com/learning-paths/mongodb-nodejs-developer-path?sessionFields=%5B%5B%22format%22%2C%22Free%22%5D%2C%5B%22certifiction%22%2C%22Learning%20Path%22%5D%5D) | | | | Reading | Status | Evidence | | :-------------------------------- | :----: | :------: | | [GraphQL](https://graphql.org/) | | | | [Node.js](https://nodejs.org/en) | | | | [Express](https://expressjs.com/) | | | ### Tier 2 - Option 2 - Computer Science focus #### Instructions: - Proceed through the courses in order - Always be practicing. Ideas for practice: - Projects on [Frontend Mentor](https://www.frontendmentor.io/challenges?sort=difficulty%7Casc&type=free) - Challenges on [CodinGame](https://www.codingame.com/training) in C, JavaScript, or Python - Math progression on [Khan Academy](https://www.khanacademy.org/math) - [Ask ChatGPT to assign you a programming challenge](./RequestingChallengesFromAI.md) - Take time to read from the reading list - Near the end of this tier, polish up two of your best projects, showcasing your best work, for potential leverage in creating your portfolio in Tier 4. | Courses | Status | Evidence | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----: | :------: | | [CS50x](https://www.edx.org/learn/computer-science/harvard-university-cs50-s-introduction-to-computer-science) | | | | [CS50's Web Programming with Python and JavaScript ](https://www.edx.org/learn/computer-science/harvard-university-cs50-s-introduction-to-computer-science) | | | | [CS50's Introduction to Databases with SQL](https://www.edx.org/learn/sql/harvard-university-cs50-s-introduction-to-databases-with-sql) | | | | [MongoDB Python Developer Path ](https://learn.mongodb.com/learning-paths/mongodb-java-developer-path?sessionFields=%5B%5B%22format%22%2C%22Free%22%5D%2C%5B%22certifiction%22%2C%22Learning%20Path%22%5D%5D) | | | | Reading | Status | Evidence | | :------------------------------------------------------- | :----: | :------: | | [W3 Schools C Programming](https://www.w3schools.com/c/) | | | | [Python](https://docs.python.org/3/) | | | | [SQLBolt](https://sqlbolt.com/) | | | ### Tier 2 - Option 3 - Java Deep Dive #### Instructions: - Proceed through the courses in order - Always be practicing. Ideas for practice: - Challenges on [CodinGame](https://www.codingame.com/training) in Java - Math progression on [Khan Academy](https://www.khanacademy.org/math) - [Ask ChatGPT to assign you a programming challenge](./RequestingChallengesFromAI.md) - Take time to read from the reading list - Near the end of this tier, polish up two of your best projects, showcasing your best work, for potential leverage in creating your portfolio in Tier 4. | Courses | Status | Evidence | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----: | :------: | | [Computer Science: Programming with a Purpose](https://www.coursera.org/learn/cs-programming-java) | | | | [Computer Science: Algorithms, Theory, and Machines](https://www.coursera.org/learn/cs-algorithms-theory-machines) | | | | [Algorithms, Part I](https://www.coursera.org/learn/algorithms-part1) | | | | [Algorithms, Part II](https://www.coursera.org/learn/algorithms-part2) | | | | [MongoDB Java Developer Path](https://learn.mongodb.com/learning-paths/mongodb-java-developer-path?sessionFields=%5B%5B%22format%22%2C%22Free%22%5D%2C%5B%22certifiction%22%2C%22Learning%20Path%22%5D%5D) | | | | Reading | Status | Evidence | | :----------------------------------------------------- | :----: | :------: | | [Oracle's Java Documentation](https://dev.java/learn/) | | | ## Tier 3 - Interview Prep *Tier 3 is currently being revised* | ## Tier 4 - Develop a Portfolio ### Goal The goal of Tier 4 is to polish a portfolio of your best work. ### Instructions: - Create an online portfolio of your best work. You can: - Polish projects you've completed previously - Complete new projects - Ensure the portfolio is visible online - Ensure that you've adhered to good coding practices - Ensure that your projects are clean and free from errors - Aim for between 5 and 10 projects and ensure at least two projects are substantial in size and scope - If you need project ideas, ask ChatGPT using very specific prompts for project ideas of the scope you need and using the skills and technologies you'd like to highlight ## Tier 5 - Dive Deeper ### Goal 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:** ### Tier 5 - Focus Area - React 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: - by this point you should be capable of, and consistently, "reading the docs" - React changes pretty regularly, tutorials won't be updated, the docs will. - The docs are actually fantastic and you will learn far more by diving in, as any course or tutorial would only show you bits and pieces, and to be an expert, you need a much bigger picture. #### Instructions: - Thoroughly study each resource. Dive deep into the APIs and documentation after working through any tutorials and quickstarts. - Always be practicing. Ideas for practice: - Projects on [Frontend Mentor](https://www.frontendmentor.io/challenges?sort=difficulty%7Casc&type=free) in React - Math progression on [Khan Academy](https://www.khanacademy.org/math) - [Ask ChatGPT to assign you a programming challenge](./RequestingChallengesFromAI.md) | Resource | Status | Evidence | | :------------------------------------------------------------------------------------ | :----: | :------: | | [React](https://react.dev/learn) | | | | [Next.js React Foundations](https://nextjs.org/learn/react-foundations) | | | | [Next.js Tutorial](https://nextjs.org/learn) | | | | [Next.js](https://nextjs.org/docs) | | | | [Recoil](https://recoiljs.org/) | | | | [Redux](https://redux.js.org/) | | | | [TypeScript](https://www.typescriptlang.org/) | | | | [WebPack](https://webpack.js.org/) | | | | [React Testing Library](https://testing-library.com/docs/react-testing-library/intro) | | | | [Jest](https://jestjs.io/) | | | | [Storybook](https://storybook.js.org/) | | | ### Tier 5 - Focus Area - Angular 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: - by this point you should be capable of, and consistently, "reading the docs" - Angular changes pretty regularly, tutorials won't be updated, the docs will. - The docs are actually fantastic and you will learn far more by diving in, as any course or tutorial would only show you bits and pieces, and to be an expert, you need a much bigger picture. #### Instructions: - Thoroughly study each resource. Dive deep into the APIs and documentation after working through any tutorials and quickstarts. - Always be practicing. Ideas for practice: - Projects on [Frontend Mentor](https://www.frontendmentor.io/challenges?sort=difficulty%7Casc&type=free) in Angular - Math progression on [Khan Academy](https://www.khanacademy.org/math) - [Ask ChatGPT to assign you a programming challenge](./RequestingChallengesFromAI.md) | Resource | Status | Evidence | | :-------------------------------------------------------- | :----: | :------: | | [TypeScript](https://www.typescriptlang.org/) | | | | [Angular](https://angular.dev/overview) | | | | [NGRX](https://ngrx.io/) | | | | [Nx](https://nx.dev/) | | | | [Jasmine](https://jasmine.github.io/) | | | | [Karma](https://karma-runner.github.io/latest/index.html) | | | | [Storybook](https://storybook.js.org/) | | | | [Angular Material](https://material.angular.io/) | | | ### Tier 5 - Focus Area - Mathematics 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](https://ocw.mit.edu/courses/18-01sc-single-variable-calculus-fall-2010/) | | | | [Mathematics for Computer Science ](https://openlearninglibrary.mit.edu/courses/course-v1:OCW+6.042J+2T2019/about) | | | | [Multivariable Calculus](https://ocw.mit.edu/courses/18-02sc-multivariable-calculus-fall-2010/) | | | | [Introduction to Probability and Statistics ](https://openlearninglibrary.mit.edu/courses/course-v1:MITx+18.05r_10+2022_Summer/about) | | | | [Differential Equations](https://ocw.mit.edu/courses/18-03sc-differential-equations-fall-2011/) | | | | [Linear Algebra](https://openlearninglibrary.mit.edu/courses/course-v1:OCW+18.06SC+2T2019/about) | | | ### Tier 5 - Focus Area - Computer Science 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. | Courses | Status | Evidence | | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----: | :------: | | [Introduction to Computer Science and Programming in Python](https://ocw.mit.edu/courses/6-0001-introduction-to-computer-science-and-programming-in-python-fall-2016/) | | | | [Introduction to Computational Thinking and Data Science](https://ocw.mit.edu/courses/6-0002-introduction-to-computational-thinking-and-data-science-fall-2016/) | | | | [Structure and Interpretation of Computer Programs](https://ocw.mit.edu/courses/6-001-structure-and-interpretation-of-computer-programs-spring-2005/) | | | | [Introduction to Algorithms](https://ocw.mit.edu/courses/6-006-introduction-to-algorithms-spring-2020/) | | | | [Software Construction](https://ocw.mit.edu/courses/6-005-software-construction-spring-2016/) | | | | [Probabilistic Systems Analysis and Applied Probability](https://ocw.mit.edu/courses/6-041sc-probabilistic-systems-analysis-and-applied-probability-fall-2013/) | | | | [Design and Analysis of Algorithms](https://ocw.mit.edu/courses/6-046j-design-and-analysis-of-algorithms-spring-2015/) | | | | [CS50's Introduction to Artificial Intelligence with Python](https://www.edx.org/course/cs50s-introduction-to-artificial-intelligence-with-python) | | | | [Artificial Intelligence](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-034-artificial-intelligence-fall-2010/index.htm) | | | | [Performance Engineering of Software Systems](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-172-performance-engineering-of-software-systems-fall-2018/) | | | | [Compilers](https://online.stanford.edu/courses/soe-ycscs1-compilers) | | | --- ## Notes Before you start, please let me introduce a bit of my philosophy for learning how to be a top-notch programmer. - always be learning - always be practicing - always help others when you can - include learning some math 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** - [Notion](https://www.notion.so) - for taking notes (in markdown which will help you write README's later) - [Finch](https://finchcare.com/) - take care of yourself while communing with a sweet little birb **Curriculum advice** - You'll notice a fair number of CodeSignal courses in Tier 1. They are excellent and they are free. You should note though that their AI assistant is not "unlimited free" so do not rely on it too much unless you want to pay them a monthly fee. - Always have a practice project you're working on and something you're reading. This gives you productive stuff to do if you need a break from what you're learning. - Finish what you start, even if it's difficult. You'll learn perserverance (extremely valuable), develop confidence, and minimize the risk of getting stuck in a never-ending loop of just repeating beginner stuff while never really being able to do anything amazing. - If you're wondering what all the "Status" and "Evidence" columns are for, they're so that if you fork this repository, you can show when you begin and finish each item (in your fork) and link any projects you did in "Evidence" as a sort of journal for yourself so you can browse back over your journey (and possibly find projects for your eventual portfolio faster) - You'll notice a Khan Academy link in each tier, prompting you to practice mathematics there. Don't get too hung up on which math you "need". Instead focus on learning a bit more math than you already know. Pick whichever course is next in line for you, then when you finish that one, pick the next one. In general, you won't go wrong if you progress into algebra, geometry, trigonometry, statistics, pre-calculus, calculus, and discrete mathematics. But, don't stress on it, just practice some at the level you're at now - grow over time. **General advice** - If you can't summon the willpower to do anything, decide "I'll do five minutes, that's enough for today." And, then, do 5 minutes. 5 minutes is more than 0 minutes and sometimes leads to ... more minutes ... or not, be ok with either. - Get enough sleep, everything is better if you've slept well. - Eat well. If your body and mind have the nutrients they need, they can do their jobs better. - Get some physical activity. You don't have to run a marathon (unless you're into that) but being physically active helps your body and your mind. Even if it's just a leisurely walk a time or two a day - be active. This will legit help you learn more. - As soon as you know one thing, help anyone struggling with that one thing. Add to the list of things you help others with as you learn more things. You aren't just helping others, you are helping yourself. You are learning "the thing" more deeply and you are practicing communicationg about technical things. This is a skill you want to be practicing your entire journey, not trying to figure out the day before an interview. - You are not special because you know more than someone else. Treat others with dignity and respect. Be humble. No matter how much you've learned, you don't know everything. Lead with kindness, it'll serve you well. - If you want practice with git, and don't have a project in mind, take your notes in markdown and save the `.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. | Courses | Status | Evidence | | :------------------------------------------------------------------------------------ | :----: | :------: | | [Arithmetic](https://www.khanacademy.org/math/arithmetic) | | | | [Pre-algebra](https://www.khanacademy.org/math/pre-algebra) | | | | [Algebra I](https://www.khanacademy.org/math/algebra) | | | | [Geometry](https://www.khanacademy.org/math/geometry) | | | | [Algebra II](https://www.khanacademy.org/math/algebra2) | | | | [Trigonometry](https://www.khanacademy.org/math/trigonometry) | | | | [Precalculus](https://www.khanacademy.org/math/precalculus) | | | | [Calculus I](https://www.khanacademy.org/math/calculus-1) | | | | [Statistics and Probability](https://www.khanacademy.org/math/statistics-probability) | | | | [Calculus II](https://www.khanacademy.org/math/calculus-2) | | | | [Multivariable Calculus](https://www.khanacademy.org/math/multivariable-calculus) | | | | [Differential Equations](https://www.khanacademy.org/math/differential-equations) | | | | [Linear Algebra](https://www.khanacademy.org/math/linear-algebra) | | |