Showing preview only (532K chars total). Download the full file or copy to clipboard to get everything.
Repository: P1xt/p1xt-guides
Branch: master
Commit: e9163bdb0010
Files: 67
Total size: 507.5 KB
Directory structure:
gitextract_glnj03kl/
├── .gitignore
├── CHANGELOG.md
├── LICENSE.md
├── README.md
├── RequestingChallengesFromAI.md
├── deprecated/
│ ├── README.md
│ ├── android-native.md
│ ├── cs-java-focus.md
│ ├── cs-wd.md
│ ├── data-science.md
│ ├── faq.md
│ ├── game-programming-2.0.md
│ ├── game-programming.md
│ ├── job-ready-javascript-edition-2.0.md
│ ├── job-ready-javascript-edition-3.0.md
│ ├── job-ready-python-edition.md
│ ├── job-ready.md
│ ├── projects/
│ │ └── android/
│ │ ├── Androidforbeginners.md
│ │ ├── BookListing.md
│ │ ├── BuildItBigger.md
│ │ ├── CapstoneStage1-Design.md
│ │ ├── CapstoneStage2-Build.md
│ │ ├── CourtCounter.md
│ │ ├── ForceGolf.md
│ │ ├── GigaWars.md
│ │ ├── GoUbiquitous.md
│ │ ├── HabitTracker.md
│ │ ├── Inventory.md
│ │ ├── MakeYourAppMaterial.md
│ │ ├── Makeyouownandroidapp.md
│ │ ├── MusicalStructure.md
│ │ ├── NewsApp.md
│ │ ├── Outbreak.md
│ │ ├── Pong.md
│ │ ├── PopularMoviesStage1.md
│ │ ├── PopularMoviesStage2.md
│ │ ├── QuizApp.md
│ │ ├── ReportCard.md
│ │ ├── SpaceKerfuffle!.md
│ │ ├── StockHawk.md
│ │ ├── TourGuide.md
│ │ └── YourFirstApp.md
│ ├── speedrun-practice/
│ │ ├── README.md
│ │ ├── algorithms.md
│ │ ├── android.md
│ │ ├── frontend-dev.md
│ │ ├── fullstack-dev.md
│ │ └── game-dev.md
│ ├── topic-guides/
│ │ └── vue.md
│ └── wd-cs.md
└── v4/
├── README.md
├── faq.md
├── project_ideas.md
└── specializations/
├── advanced-algorithms.md
├── algorithms.md
├── app_academy_open.md
├── backend.md
├── computer_science.md
├── data-science-i.md
├── data-science-ii.md
├── frontend.md
├── full_stack_open_2020.md
├── games.md
├── mobile.md
├── open_source.md
├── the_odin_project_javascript.md
└── the_odin_project_ruby.md
================================================
FILE CONTENTS
================================================
================================================
FILE: .gitignore
================================================
.idea
================================================
FILE: CHANGELOG.md
================================================
# Changed to the curriculum
Typically this will only list resource additions and deletions. The goal is always to minimize changes to the curriculum, so that someone following it isn't trying to 'hit a moving target'. However, from time to time, a resource becomes no longer available, and the curriculum will be modified to accommodate a replacement resource.
**December 15, 2024**
Updated to Version 6.1, streamlining Tier 1 to only focus on one main resource plus practice projects for greater clarity of purpose.
**December 1, 2024**
Updated to Version 6 - Unfortunately, in V5, I relied too heavily on CodeSignal as I believed it was a reasonable resource on the free tier but didn't realize that I wasn't hitting limits of the free tier as I had a pro subscription. I revamped to remove the CodeSignal reliance and shifted to other resources I'd identified while researching for the v5 update.
**November 11, 2024**
Updated to Version 5 - this was a substantial update that reflected significant changes in the open source resources available to learners. Since v4, a/A Online has stopped being updated, Google Code Jam (and other competitions) are not available, and several other resources have become far more robust. You can still find v4 in the [v4](./v4/) directory, however, it is no longer maintained and I would recommend migrating to v5 as the available resources are more current and reflect newer content.
**September 1, 2020**
Add CS50's AI course. Add Odin Project Full Stack JavaScript. General cleanup.
**July 1, 2019**
Add Deep Dive Into Modern Web Development - Full Stack Open 2019 from the University of Helsinki as a fullstack bootcamp option in the specializations as it provides an opportunity to study react further after App Academy and to branch out and use Node/Express for backend.
**June 29, 2019**
Refactored Tier 0 to remove the 'Learn Enough' resources as they'd been paywalled. Set Tier 0 as App Academy's online fullstack bootcamp - that way it can either be taken as Tier 0, or if you skip Tier 0, it can later be taken as a specialization. This makes sense to show up at this point in the Guide as the Khan Academy resources in Tier X are sufficient prep for App Academy to be doable but challenging.
**May 25, 2019**
Complete overhaul to version Version 4.0. Consolidated the 'special interest' guides into specializations, migrated from Coursera and Edx resources which now sit behind paywalls, and restructured the 'guides' into one cohesive guide that contains core material within each tier and allows further study each tier of a learner selected specialization. This fixes two issues. First, it handles the paywall issues to make the guide require less volatile maintenance (swapping out courses as they are paywalled). Second, it provides better structure and answers the 'which guide should I pick' question.
All prior guides have been moved to deprecated and may be out of date and/or contain dead links. Focus will be on maintaining the 4.0 Guide version, deprecated guides will not be maintained.
**December 1, 2018**
Added Job Ready Guide - JavaScript Edition 3.0.
Added Video Game Programming - comprehensive foundations 2.0.
Marked all previous versions of the Job Ready and Video Game Programming guides as deprecated. The deprecated guides remain for those who don't want to switch to the newer versions but they are no longer maintained and may contain dead links.
**April 26, 2018**
Swapped the Natural Language Processing course from Michigan for the Robotics Fundamentals course from Penn. There wasn't a similarly outstanding NLP course available so I replaced it with an outstanding course from a similarly interesting field taught at a similarly advanced level of rigor.
**April 2, 2018**
Added Computer Science and Backend Development - Java Focus Guide.
**March 31, 2018**
Swapped the OSU Calculus courses from Coursera (they're being decommissioned) for MITOCW Calculus Courses.
**March 6, 2018**
Added [Software Development Capstone Project](https://www.edx.org/course/software-development-capstone-project-ubcx-softengprjx) to the cs-wd and wd-cs guides. It's the next course in the series and became available today.
**January 25, 2018**
Added Vue topic guide.
Added React topic guide.
**January 24, 2018**
Added Angular topic guide.
**January 03, 2018**
Added [Software Engineering: Introduction](https://www.edx.org/course/software-engineering-introduction-ubcx-softeng1x) to the cs-wd and wd-cs guides. It's the next course in the series and becomes available on the 9th of January.
**October 23, 2017**
Added Speedrun/Practice section, with topic specific lists of practice projects/problems for use in practice, building a portfolio, or speedrunning.
**October 18, 2017**
Replaced D3 course in the JavaScript Job Ready 2.0, Python Job Ready, and Data Science guides with a free alternative, as the one from egghead migrated to requiring a Pro membership for access to the bulk of the course.
**October 11, 2017**
Added Software Construction: Object-Oriented Design to the wd-cs and cs-wd guides, it is the next in the How to Code series and just became available.
**September 30, 2017**
Added The Data Science Guide, the Python Job Ready Guide, and updated the original Job Ready guide to a 2.0 version this week.
**September 11, 2017**
Swapped out the MongoDB course on edX for a choice between the MongoDB course on MongoDB University and the full stack course by Penn State on edX - reason, the original course listed became no longer available.
**June 24, 2017**
Swapped the course Introduction to Cloud Infrastructure Technologies for Introduction to Cloud Computing - reason, the original course was no longer available.
**July 18, 2017**
Swapped the link for the Operating Systems and System Programming course - reason, the original link was no longer valid.
================================================
FILE: LICENSE.md
================================================
The MIT License (MIT)
Copyright (c) 2017 - 2020 P1xt
Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:
The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
================================================
FILE: README.md
================================================
<!-- TOC --><a name="p1xt-guides-version-60"></a>
# P1xt Guides - Version 6.1
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.)
<!-- TOC start -->
## Table of Contents
- [P1xt Guides - Version 6.1](#p1xt-guides---version-61)
- [Table of Contents](#table-of-contents)
- [Tier 1 - Web Development Foundation](#tier-1---web-development-foundation)
- [Goal](#goal)
- [Instructions:](#instructions)
- [Tier 2 - Practice](#tier-2---practice)
- [Goal](#goal-1)
- [Tier 2 - Option 1 - JavaScript via Bootcamp](#tier-2---option-1----javascript-via-bootcamp)
- [Instructions:](#instructions-1)
- [Tier 2 - Option 2 - Computer Science focus](#tier-2---option-2---computer-science-focus)
- [Instructions:](#instructions-2)
- [Tier 3 - Interview Prep](#tier-3---interview-prep)
- [Goal](#goal-2)
- [Instructions:](#instructions-3)
- [Tier 4 - Develop a Portfolio](#tier-4---develop-a-portfolio)
- [Goal](#goal-3)
- [Instructions:](#instructions-4)
- [Tier 5 - Dive Deeper](#tier-5---dive-deeper)
- [Goal](#goal-4)
- [Tier 5 - Focus Area - React](#tier-5---focus-area---react)
- [Instructions:](#instructions-5)
- [Tier 5 - Focus Area - Angular](#tier-5---focus-area---angular)
- [Instructions:](#instructions-6)
- [Tier 5 - Focus Area - Mathematics](#tier-5---focus-area---mathematics)
- [Tier 5 - Focus Area - Computer Science](#tier-5---focus-area---computer-science)
- [Notes](#notes)
<!-- TOC end -->
<!-- TOC --><a name="tier-1-web-development-foundation"></a>
## 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 projects alongside the Odin Project so that you are always practicing by building a project on Frontend Mentor while you progress through Odin.
- 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 |
| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----: | :------: |
| [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) | | |
| [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) | | |
| [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) | | |
| 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/) | | |
<!-- TOC --><a name="tier-2-practice"></a>
## Tier 2 - Practice
### Goal
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:**
### Tier 2 - Option 1 - JavaScript via Bootcamp
#### 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 |
| :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :----: | :------: |
| [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/web-development/harvard-university-cs50-s-web-programming-with-python-and-javascript) | | |
| [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-python-developer-path) | | |
| Reading | Status | Evidence |
| :------------------------------------------------------- | :----: | :------: |
| [W3 Schools C Programming](https://www.w3schools.com/c/) | | |
| [Python](https://docs.python.org/3/) | | |
| [SQLBolt](https://sqlbolt.com/) | | |
<!-- TOC --><a name="tier-3-interview-prep"></a>
## Tier 3 - Interview Prep
### Goal
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.
### Instructions:
- Proceed through the courses in order
- Always be practicing. Ideas for practice:
- Challenges on [CodinGame](https://www.codingame.com/training) in Java. Note that, for the first time, CodinGame also shows up in the activities below. You should aim to have finished 100 challenges on CodinGame from a mix of difficulty levels before completing this tier.
- Math progression on [Khan Academy](https://www.khanacademy.org/math). This is the tier where you'll really notice it if you haven't been building up your math skill - often, understanding an algorithm is more about understanding how it works logically (mathematically) than knowing how to program it.
- [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.
| Activity | 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) | | |
| [Exercism Java](https://exercism.org/tracks/java) | | |
| [NeetCode 150](https://neetcode.io/practice) | | |
| [LeetCode Top Interview 150](https://leetcode.com/studyplan/top-interview-150/) | | |
| [100 Challenges on CodinGame](https://www.codingame.com/training) | | |
| Reading | Status | Evidence |
| :---------------------------------------------------------------- | :----: | :------: |
| [Think Java](https://chrismayfield.github.io/ThinkJava2/) | | |
| [Oracle's Java Documentation](https://dev.java/learn/) | | |
| [The Algorithms: Java](https://github.com/TheAlgorithms/Java?tab=readme-ov-file) | | |
<!-- TOC --><a name="tier-4-develop-a-portfolio"></a>
## 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 intend to dive deeper into React or Angular in Tier 5, you may choose to include a few less projects at this point, knowing that you will be adding a few more in that tier.
- 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
<!-- TOC --><a name="tier-5-dive-deeper"></a>
## 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)
- Complete four significantly complex practice projects in React. You will want them for your portfolio so make sure they demonstrate the best of your abilities. (Ask ChatGPT for project ideas if you don't have specific projects in mind that you'd like to focus on.)
| 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)
- Complete four significantly complex practice projects in Angular. You will want them for your portfolio so make sure they demonstrate the best of your abilities. (Ask ChatGPT for project ideas if you don't have specific projects in mind that you'd like to focus on.)
| 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) | | |
---
<!-- TOC --><a name="notes"></a>
## 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**
- 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. Look at the bottom of this document for general mathematics progression.
**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. I'm serious about this part - if you're not well rested, you will learn more if you get a good night of sleep than if you try to push through a few more hours learning. You don't just learn while you're studying. While you're sleeping, your mind makes sense of all the stuff you've been learning. Sleep is an important part of the process.
- 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. One way to do this is by joining the communication channels (like discord) for the various resources as you work through them. The Odin Project, especially, has a thriving community and you'd never be wanting for people to help there.
- 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.
---
<!-- TOC --><a name="general-math-progression"></a>
**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) | | |
================================================
FILE: RequestingChallengesFromAI.md
================================================
<a name="requesting-challenges-from-ai"></a>
# Requesting Challenges from AI
[ChatGPT](https://chatgpt.com) is a fantastic learning resource. While it can come in handy helping you solve problems, it is even more valuable as a tool for generating ideas for what you can practice on as you learn to program.
The trick is in perfecting the art of creating a ChatGPT Prompt (or request) that will result in something that fits your needs.
For the purposes of this guide, I will provide here several prompts which can be modified (by you) as you progress through the curriculum so that you can get fresh and unique practice projects, tailored to your abilities and interests, as you progress.
**Tips for any prompts you riff off this:**
- lead off with what level you currently are at programming the thing you're asking AI to give you a practice project for (beginner/intermediate/advanced)
- mention any specific technologies you'd like to use
- ask for a style guide for anything with an interface
- ask for a documented api for anything where a front and backend are communicating
- ask for a data model for any backend project (and any frontend project working with data)
- ask for use cases you can use to create test cases
- ask for reference links to the official docs
- if you want the project to be for something specific, ask for that, either generally or specifically. For instance, you can absolutely ask something like "I would like this project to be a lighthearted page that is somehow related to puppies."
**Tips for using what you get from ChatGPT:**
- You can type any of the prompts contained here, or any prompt you customize from these straight into ChatGPT and it will create for you a full project specification. At that point, all you have to do is go build it.
- When ChatGPT has completed generating your project, you'll see a line of icons at the end of it's response. The icon that looks like two windows will let you copy ChatGPT's entire response. This response is in markdown, which means you can save it in any markdown file with the extension `.md` and retain your full project specification for reference. This would be a really good starter for the `README.md` in your project.
- sometimes, for really big projects, ChatGPT can't finish in one go, just tell it to continue and it will finish
## Table of Contents
- [Requesting Challenges from AI](#requesting-challenges-from-ai)
* [The baseline prompt](#the-baseline-prompt)
* [Example prompt for a more advanced and detailed project](#example-prompt-for-a-more-advanced-and-detailed-project)
* [Results from the more advanced project prompt ](#these-are-the-results-from-the-more-advanced-project-prompt)
* [Another example prompt, incorporating full stack](#another-example-prompt-incorporating-full-stack)
* [Results of the full stack project prompt](#here-are-the-results-of-the-full-stack-project-prompt)
* [Example prompt for a Java project](#example-prompt-for-a-java-project)
* [Results from Java project prompt](#here-are-the-results-from-java-project-prompt)
<!-- TOC --><a name="the-baseline-prompt"></a>
## The baseline prompt
```
I am a beginner web developer. Assign me a beginner frontend web development project. Please be very specific and detailed with the requirements. Please add a list of links to suggested tactics, terminology, and various other information I might want to reference while completing this assignment in a reference section at the end of the assignment. Please prioritize using links to the "official docs" in this list rather than random web commentary. Please provide a style guide after the reference section.
```
### This was the output from ChatGPT for this prompt
### Beginner Frontend Web Development Project: Personal Portfolio Website
#### Project Overview
You will create a **Personal Portfolio Website** to showcase your skills, projects, and contact information. This project will help you develop a strong foundation in HTML, CSS, and JavaScript, including responsive design principles.
---
### Features & Requirements
1. **Landing Page**
- Create a welcoming landing page with a short introduction about yourself.
- Include your name, a brief description of who you are (e.g., "Aspiring Web Developer"), and a professional photo or avatar.
2. **About Me Section**
- Include a short bio that covers your background, skills, and goals.
- Use HTML semantic tags like `<section>`, `<h2>`, and `<p>` for structure.
- Keep content concise and well-formatted.
3. **Projects Section**
- Display a few sample projects you’ve worked on, even if they’re simple (e.g., a basic webpage or coding exercises).
- Each project should include:
- A title
- A brief description
- A link to the live version (if available) or GitHub repository
- An image or screenshot of the project (optional)
- Use a responsive grid layout with **CSS Grid** or **Flexbox** to make this section visually appealing.
4. **Skills Section**
- Create a skills section showcasing your technical skills, like HTML, CSS, JavaScript, or any other relevant skills.
- Use icons or small graphics to make the section engaging.
- Implement a progress bar or list to visually display proficiency (e.g., "beginner," "intermediate").
5. **Contact Form**
- Include a basic contact form with fields for name, email, and message.
- Form elements should be styled to match the overall design of the website.
- Use HTML form validation (e.g., required fields) to ensure valid submissions.
6. **Footer**
- Create a footer with links to your social media profiles, GitHub, LinkedIn, or other professional sites.
- Include copyright information (e.g., "© 2023 Your Name").
7. **Responsive Design**
- Implement responsive design for desktop, tablet, and mobile screens.
- Use media queries to ensure that text, images, and layout adjust properly across different devices.
- Focus on maintaining readability and usability on all screen sizes.
---
### Step-by-Step Development Process
1. **Set Up the Project**
- Create a new project folder and include `index.html`, `style.css`, and `script.js` files.
- Set up basic HTML structure with `<!DOCTYPE html>`, `<html>`, `<head>`, and `<body>` tags.
2. **Write HTML Structure**
- Add semantic HTML structure for each section, including the landing page, About Me, Projects, Skills, Contact Form, and Footer.
- Ensure each section has clear headings, text, and placeholder images if needed.
3. **Style the Website with CSS**
- Define your CSS styling in `style.css`, starting with global styles (e.g., fonts, colors).
- Use **CSS Flexbox** or **CSS Grid** for layout, especially in the Projects and Skills sections.
- Implement media queries for responsive design adjustments at 768px (tablet) and 480px (mobile).
4. **Add JavaScript (Optional)**
- Use `script.js` to add basic interactivity, such as a toggle effect for a mobile navigation menu.
- Add form validation or simple animations to enhance the user experience.
5. **Test and Deploy**
- Test your website on various screen sizes and devices.
- Deploy the project to a platform like **GitHub Pages** or **Netlify** to make it accessible online.
---
### Reference Section
#### Official Documentation and Tutorials
- **HTML**: [HTML Documentation](https://developer.mozilla.org/en-US/docs/Web/HTML)
- **CSS**: [CSS Documentation](https://developer.mozilla.org/en-US/docs/Web/CSS)
- **JavaScript**: [JavaScript Documentation](https://developer.mozilla.org/en-US/docs/Web/JavaScript)
- **CSS Flexbox**: [Flexbox Guide](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Flexible_Box_Layout/Basic_Concepts_of_Flexbox)
- **CSS Grid**: [CSS Grid Guide](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout)
- **Responsive Design**: [Responsive Web Design Basics](https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Responsive_Design)
- **Media Queries**: [Using Media Queries](https://developer.mozilla.org/en-US/docs/Web/CSS/Media_Queries/Using_media_queries)
#### Additional Resources
- **Form Validation**: [Form Validation Documentation](https://developer.mozilla.org/en-US/docs/Learn/Forms/Form_validation)
- **GitHub Pages Deployment**: [GitHub Pages Documentation](https://docs.github.com/en/pages)
- **Netlify Deployment Guide**: [Netlify Quick Start](https://docs.netlify.com/get-started/)
---
### Style Guide
1. **Color Palette**
- **Primary Color**: #007bff (blue)
- **Accent Color**: #ff5722 (orange)
- **Background Color**: #f9f9f9 (light grey)
- **Text Color**: #333333 (dark grey)
2. **Typography**
- **Font Family**: Use [Roboto](https://fonts.google.com/specimen/Roboto) or [Open Sans](https://fonts.google.com/specimen/Open+Sans).
- **Font Sizes**:
- **Headings** (H1): 2em
- **Subheadings** (H2): 1.5em
- **Body Text**: 1em
3. **Button Styling**
- Primary Buttons: Background #007bff, Text #fff, Hover #0056b3.
- Secondary Buttons: Background #ff5722, Text #fff, Hover #e64a19.
4. **Layout**
- Use **CSS Flexbox** or **CSS Grid** for layout.
- Apply consistent padding and margin for clean spacing.
5. **Image Guidelines**
- Optimize images for web (compressed without sacrificing quality).
- Use images that are approximately 500px wide for better loading times.
This portfolio project will help you practice frontend basics and allow you to build something you can showcase in your web development journey!
## Example prompt for a more advanced and detailed project
```
I am an intermediate web developer. Assign me an intermediate frontend web development project. Please be very specific and detailed with the requirements. Please add a list of links to suggested tactics, terminology, and various other information I might want to reference while completing this assignment in a reference section at the end of the assignment. Please prioritize using links to the "official docs" in this list rather than random web commentary. Please provide a style guide after the reference section. Please provide a list of use cases from which I may create test cases. I would like this to be a pretty substantial intermediate level project that uses React, Redux, TypeScript, and Storyboard.
```
<!-- TOC --><a name="these-are-the-results-from-the-more-advanced-project-prompt"></a>
## These are the results from the more advanced project prompt
### Intermediate Frontend Web Development Project: E-Commerce Dashboard
#### Project Overview
You will develop an **E-Commerce Admin Dashboard** using **React**, **Redux**, **TypeScript**, and **Storybook**. This dashboard will allow an admin to manage products, view sales data, monitor orders, and analyze user metrics.
The focus will be on implementing clean, modular components with **TypeScript** for type safety, **Redux** for state management, and **Storybook** for component documentation. The project will include robust filtering, pagination, and detailed analytics to support an intermediate-level understanding of web development.
---
### Features & Requirements
1. **User Authentication (Mocked)**
- Implement basic authentication (e.g., login/logout).
- Use mock data to simulate authentication (no backend required).
- Store the user token in Redux and redirect to the dashboard on successful login.
2. **Dashboard Overview Page**
- Display an overview of key metrics (e.g., total sales, total users, active orders).
- Use cards or charts for each metric (chart library recommendation: **Recharts**).
- Implement a date range filter to update metrics dynamically.
3. **Product Management**
- **Product List**:
- Display a paginated list of products with columns for ID, name, category, stock, and price.
- Include filtering by category and search by product name.
- **Add/Edit Product Form**:
- Use a modal or dedicated page to add new products and edit existing ones.
- Form fields: ID (auto-generated), Name, Description, Category, Price, and Stock.
- Use TypeScript to enforce form data structure.
- **Delete Product**:
- Allow the user to delete a product with a confirmation dialog.
- Update the state in Redux on successful deletion.
4. **Order Management**
- **Order List**:
- Display a paginated list of orders, with columns for Order ID, customer name, status, total amount, and order date.
- Filter by status (e.g., Pending, Shipped, Completed).
- **Order Details**:
- Display detailed information for each order, including product list, customer info, shipping address, and status.
- Allow admin to update the status of an order (e.g., from Pending to Shipped).
5. **User Analytics**
- Display a series of charts to show user behavior (e.g., weekly active users, top-selling products).
- Implement filtering options for various date ranges (Last 7 days, Last 30 days, etc.).
- Use **Recharts** to create bar, line, and pie charts for visualization.
6. **Notifications System**
- Display notifications for important actions (e.g., successful product addition, deletion confirmation, etc.).
- Notifications should be dismissible and automatically disappear after a few seconds.
7. **Settings Page**
- Provide options for changing application theme (light/dark mode).
- Save theme preference in **local storage** and Redux state.
- Use **Styled Components** or CSS modules for theme management.
8. **Error Handling and Form Validation**
- Implement form validation for product and order forms with TypeScript.
- Use notifications to alert the user of validation errors (e.g., missing required fields).
9. **Component Documentation with Storybook**
- Document all core components in **Storybook**:
- Product Card, Order Table, Notification, Chart Components, etc.
- Write stories for various states (e.g., loading, error, success) and configurations.
10. **Testing**
- Write unit tests for key components (using **Jest** or **React Testing Library**).
- Ensure good test coverage for components like Product Card, Order List, and Notification.
11. **Deployment**
- Deploy your application to a hosting service (e.g., **Vercel** or **Netlify**).
- Configure Storybook deployment to allow easy review of your documented components.
---
### Step-by-Step Development Process
1. **Project Setup**
- Set up a new **React** project with **TypeScript** and **Redux**.
- Integrate **Storybook** into the project and confirm the development server works.
2. **Define TypeScript Interfaces**
- Define TypeScript interfaces for Products, Orders, and User objects.
- Use these types throughout the application for type safety.
3. **Create Redux Store and Actions**
- Define reducers and actions for authentication, product management, orders, and user analytics.
- Set up selectors and middleware as needed.
4. **Build Each Feature**
- Start with the Dashboard Overview, building and documenting each component in Storybook.
- Develop each feature one at a time, testing them as you go.
5. **Style with Styled Components**
- Define a global theme and apply light/dark modes as you build each page.
6. **Test & Document**
- Write tests for critical components and document them in Storybook with variations.
7. **Deploy & Finalize**
- Deploy the application and Storybook.
- Verify functionality in production and perform final quality assurance.
---
### Use Cases for Test Cases
1. **User Authentication**
- User can log in with correct credentials.
- User is redirected to the dashboard upon login.
- Unauthorized users are redirected to the login page if they try to access dashboard routes.
2. **Product Management**
- Products are displayed in a paginated list.
- User can filter products by category.
- User can add a new product with valid information.
- Editing a product updates the product list.
- User receives a confirmation message upon deleting a product.
3. **Order Management**
- Orders are displayed in a paginated list.
- User can filter orders by status.
- User can update order status.
- Order details display correctly for each order.
4. **Analytics**
- Analytics reflect correct data for selected date ranges.
- Charts are responsive to filter changes.
5. **Notifications**
- Notifications appear after key actions (add product, delete product).
- Notifications automatically disappear after a few seconds.
6. **Settings**
- Switching to dark mode updates the theme.
- Theme preference is saved in local storage and persists on reload.
---
### Reference Section
#### Official Docs
- **React**: [React Documentation](https://reactjs.org/docs/getting-started.html)
- **Redux**: [Redux Documentation](https://redux.js.org/introduction/getting-started)
- **TypeScript**: [TypeScript Documentation](https://www.typescriptlang.org/docs/)
- **Storybook**: [Storybook Documentation](https://storybook.js.org/docs/react/get-started/introduction)
#### Recommended Libraries
- **Styled Components**: [Styled Components Documentation](https://styled-components.com/docs)
- **Recharts (for charts)**: [Recharts Documentation](https://recharts.org/en-US/guide)
- **React Testing Library**: [React Testing Library Docs](https://testing-library.com/docs/react-testing-library/intro/)
#### Useful Terminology
- **TypeScript Types**: [TypeScript Type Documentation](https://www.typescriptlang.org/docs/handbook/2/everyday-types.html)
- **Pagination with Redux**: [Redux Pagination Tutorial](https://redux.js.org/recipes/paginated-lists)
---
### Style Guide
1. **Color Palette**:
- Primary Color: #007bff (blue)
- Secondary Color: #6c757d (grey)
- Success Color: #28a745 (green)
- Warning Color: #ffc107 (yellow)
- Background Color: #f8f9fa (light grey for dashboard)
2. **Typography**:
- **Font Family**: Use [Roboto](https://fonts.google.com/specimen/Roboto) or [Open Sans](https://fonts.google.com/specimen/Open+Sans).
- **Font Sizes**:
- Headings (H1): 2em
- Subheadings (H2): 1.5em
- Body: 1em
3. **Button Styling**:
- Primary Buttons: Background #007bff, Text #fff, Hover #0056b3.
- Secondary Buttons: Background #6c757d, Text #fff, Hover #5a6268.
4. **Layout**:
- Use **CSS Flexbox** and **CSS Grid** for responsive layout.
- Apply consistent padding and margin for a clean UI.
5. **Component Styling**:
- Use modular **Styled Components** for each component.
- Define styles within components to ensure consistency.
This project will give you hands-on experience with React and Redux workflows, reinforce TypeScript skills, and expose you to UI component documentation through Storybook.
<!-- TOC --><a name="another-example-prompt-incorporating-full-stack"></a>
## Another example prompt, incorporating full stack
```
I am an intermediate web developer. Assign me an intermediate full-stack web development project. Please be very specific and detailed with the requirements. Please add a list of links to suggested tactics, terminology, and various other information I might want to reference while completing this assignment in a reference section at the end of the assignment. Please prioritize using links to the "official docs" in this list rather than random web commentary. Please provide a frontend style guide after the reference section. Please provide a backend API design document. Please provide a data model. Please provide a list of use cases from which I may create test cases. I would like this to be a pretty substantial intermediate level project that uses React on the frontend, Python on the backend, and SQL as the data store.
```
<!-- TOC --><a name="here-are-the-results-of-the-full-stack-project-prompt"></a>
## Here are the results of the full stack project prompt
### Intermediate Full-Stack Web Development Project: Online Book Club Platform
---
#### Project Overview
Build an **Online Book Club Platform** where users can register, join book clubs, add books to read, share reviews, and interact with other users. This project will focus on creating a full-stack web application with **React** on the frontend, **Python (Flask)** for the backend, and **SQL** (e.g., PostgreSQL) for data storage.
The project involves user authentication, CRUD operations for book management, real-time commenting features, and user interactions such as likes on books and comments.
---
### Project Requirements
1. **User Authentication**
- **Sign Up and Log In**: Allow users to register and log in with email and password.
- **Session Management**: Use sessions or JSON Web Tokens (JWT) for authentication.
- **Profile Management**: Users can edit their profiles, including profile picture, bio, and favorite genres.
2. **Book Clubs**
- **Join/Create Book Clubs**: Users can create or join book clubs with specific themes or genres.
- **Club Page**: Each club has a dedicated page with a description, member list, and list of books currently being read.
- **Club Moderation**: The creator of a club is automatically assigned as the moderator and can add or remove members, as well as delete posts.
3. **Books**
- **Book CRUD**: Users can add, edit, and delete books to the clubs they moderate.
- **Book Details Page**: Each book has a dedicated page displaying the title, author, cover, description, and reviews.
- **Reading Progress**: Users can track their progress (e.g., Not Started, In Progress, Completed) on each book.
4. **Reviews and Comments**
- **Add Reviews**: Users can write reviews for each book they are reading.
- **Comments**: Real-time commenting on book reviews (implement with WebSockets).
- **Likes and Ratings**: Users can like reviews and rate books from 1-5 stars.
5. **User Interactions**
- **Social Feed**: Display a social feed showing recent activity, such as new book clubs created, reviews added, and books being discussed.
- **Friend System**: Users can add each other as friends to stay updated on their reading activity.
---
### Step-by-Step Development Process
1. **Set Up Project Structure**
- Create a new React frontend project and Flask backend project.
- Set up PostgreSQL as your SQL database and integrate it with Flask using SQLAlchemy.
2. **Implement User Authentication**
- Use Flask for backend authentication routes and JWT for session management.
- Implement a simple sign-up and login form on the frontend using React and Axios for requests.
- Use Context API to manage the authentication state in React.
3. **Book Club and Book Management**
- Set up API endpoints for book club and book CRUD operations.
- On the frontend, create React components for creating, listing, and viewing book clubs and books.
- Use React state to manage book club membership and display club members.
4. **Reviews and Comments**
- Implement review submission in React with a textarea input.
- Use WebSockets to enable real-time commenting on reviews.
- Set up the Flask server with WebSocket functionality to handle real-time interactions.
5. **User Interactions and Social Feed**
- Create SQL tables and endpoints for user friendships and activity tracking.
- Display the feed in the frontend with recent activity such as new reviews, book club creations, and likes.
6. **Deploy Application**
- Deploy the backend to Heroku or Digital Ocean and the frontend to Netlify or Vercel.
- Ensure frontend and backend are integrated and operating smoothly on production.
---
### Data Model
1. **Users Table**
- `user_id`: Primary key
- `email`: Unique, indexed
- `password_hash`: String
- `bio`: Text
- `profile_picture_url`: String
- `favorite_genres`: Array of strings
2. **Clubs Table**
- `club_id`: Primary key
- `name`: String, unique
- `description`: Text
- `created_by`: Foreign key to `user_id`
- `members`: Array of foreign keys to `user_id`
3. **Books Table**
- `book_id`: Primary key
- `title`: String
- `author`: String
- `description`: Text
- `cover_image_url`: String
- `club_id`: Foreign key to `club_id`
4. **Reviews Table**
- `review_id`: Primary key
- `book_id`: Foreign key to `book_id`
- `user_id`: Foreign key to `user_id`
- `content`: Text
- `rating`: Integer (1-5 stars)
5. **Comments Table**
- `comment_id`: Primary key
- `review_id`: Foreign key to `review_id`
- `user_id`: Foreign key to `user_id`
- `content`: Text
- `timestamp`: Datetime
6. **Friendships Table**
- `friendship_id`: Primary key
- `user_id`: Foreign key to `user_id`
- `friend_id`: Foreign key to `user_id`
---
### API Design Document
1. **User Authentication**
- `POST /api/auth/signup`: Create a new user.
- `POST /api/auth/login`: Log in an existing user.
- `GET /api/user/profile`: Get user profile details.
- `PUT /api/user/profile`: Update user profile.
2. **Book Clubs**
- `POST /api/clubs`: Create a new book club.
- `GET /api/clubs`: Get a list of all clubs.
- `GET /api/clubs/:id`: Get details of a specific club.
- `PUT /api/clubs/:id`: Update club details.
- `DELETE /api/clubs/:id`: Delete a club.
3. **Books**
- `POST /api/books`: Add a book to a club.
- `GET /api/books/:clubId`: Get all books in a specific club.
- `GET /api/books/:id`: Get details of a specific book.
- `PUT /api/books/:id`: Update book details.
- `DELETE /api/books/:id`: Delete a book.
4. **Reviews and Comments**
- `POST /api/reviews`: Add a review for a book.
- `GET /api/reviews/:bookId`: Get all reviews for a book.
- `POST /api/comments`: Add a comment to a review.
5. **Friendships**
- `POST /api/friends`: Add a friend.
- `DELETE /api/friends/:friendId`: Remove a friend.
- `GET /api/friends`: Get a list of friends.
6. **Social Feed**
- `GET /api/feed`: Get recent activities for the user’s social feed.
---
### Use Cases for Test Cases
1. **User Authentication**
- User can register with a valid email and password.
- User cannot register with an existing email.
- User can log in with correct credentials.
2. **Book Club Management**
- User can create a book club.
- Club moderator can add and remove members.
- Only the club creator can delete the club.
3. **Book Management**
- Moderator can add a book to a club.
- Non-moderators cannot add/edit/delete books in a club.
4. **Reviews and Comments**
- Users can add reviews to books they are reading.
- Users can add comments to reviews in real time.
- Users can like reviews.
5. **Friendship Management**
- User can add another user as a friend.
- User can see the reading activity of friends in the feed.
6. **Social Feed**
- User’s feed shows recent reviews and comments from friends.
- Feed updates in real time as activities occur.
---
### Reference Section
#### Official Documentation
- **React**: [React Documentation](https://reactjs.org/docs/getting-started.html)
- **Flask**: [Flask Documentation](https://flask.palletsprojects.com/en/2.0.x/)
- **SQLAlchemy**: [SQLAlchemy Documentation](https://docs.sqlalchemy.org/en/14/)
- **PostgreSQL**: [PostgreSQL Documentation](https://www.postgresql.org/docs/)
- **WebSocket in Flask**: [Flask-SocketIO Documentation](https://flask-socketio.readthedocs.io/en/latest/)
#### Recommended Libraries
- **Axios** for HTTP requests: [Axios Documentation](https://axios-http.com/docs/intro)
- **React Context API** for state management: [React Context Documentation](https://reactjs.org/docs/context.html)
- **JSON Web Tokens (JWT)** for authentication: [JWT Guide](https://jwt.io/introduction/)
---
### Frontend Style Guide
1. **Color Palette**
- **Primary Color**: #1e90ff (Dodger Blue)
- **Secondary Color**: #333333 (Dark Grey)
- **Background Color**: #f4f4f4 (Light Grey)
- **Accent Color**: #ff6f61 (Coral)
2. **Typography**
- **Font Family**: [Roboto](https://fonts.google.com/specimen/Roboto)
- **Font Sizes**:
- Headings (H1): 2em
- Subheadings (H2): 1.5em
- Body Text: 1em
3. **Button Styles**
- **Primary Button**: Background #1e90ff, text #fff, rounded corners, hover background #007acc.
- **Secondary Button**: Background #ff6f61, text #fff, hover background #ff4f41.
4. **Layout**
- Use **CSS Flexbox** or **CSS Grid** for flexible layouts.
- Apply consistent padding and margin to ensure a clean, modern look.
5. **Images**
- Profile pictures: 100px by 100px (circular).
- Book cover images: 200px by 300px.
6. **Forms**
- Input fields: Rounded with a light-grey background.
- Submit button: Styled as a primary button.
- Form spacing: Use 1em margin between fields for clarity.
7. **Notifications and Alerts**
- Success: Light green background with a green border.
- Error: Light red background with a red border.
- Info: Light blue background with a blue border.
This substantial project will build both your frontend and backend skills by incorporating real-time interactions, managing a SQL database, and implementing secure user authentication.
<!-- TOC --><a name="example-prompt-for-a-java-project"></a>
## Example prompt for a Java project
```
I am an intermediate level Java developer. Assign me an intermediate level Java project. Please be very specific and detailed with the requirements. Please add a list of links to suggested tactics, terminology, and various other information I might want to reference while completing this assignment in a reference section at the end of the assignment. Please prioritize using links to the "official docs" in this list rather than random web commentary. Please provide a list of use cases from which I may create test cases. I would like this to be a pretty substantial intermediate level project that leverages using Java for both the frontend and backend. Please document the data model, API, and a style guide for the user interface.
```
<!-- TOC --><a name="here-are-the-results-from-java-project-prompt"></a>
## Here are the results from Java project prompt
### Intermediate Java Project: **Personal Finance Manager**
---
#### Project Overview
Build a **Personal Finance Manager** that provides users with a desktop application to track income, expenses, budgeting, and savings. This application will use Java Swing for the user interface and a backend layer handling the logic and database integration. The project will involve core Java skills, with experience in designing a GUI, using object-oriented principles, multi-threading, and persisting data through an embedded SQL database (like H2).
---
### Project Requirements
1. **User Accounts and Authentication**
- **Registration/Login System**: Each user should register an account with a unique username and password.
- **Session Management**: Ensure that only authenticated users can access the finance management features, with each session scoped to the login instance.
- **Password Security**: Hash passwords before storing them in the database.
2. **Income and Expense Tracking**
- **Add Income/Expense Entries**: Users can add, view, edit, or delete entries for income and expenses. Each entry should include an amount, date, category, and description.
- **Category Management**: Define default categories (e.g., Food, Entertainment, Salary, etc.) and allow users to create custom categories.
- **Recurring Entries**: Allow users to set recurring income or expense entries (e.g., monthly rent or salary).
3. **Budgeting and Financial Goals**
- **Budget Creation**: Users can set monthly budgets for each category.
- **Goal Setting**: Allow users to set financial goals, such as a specific amount to save over a period.
- **Budget and Goal Monitoring**: Notify users when they approach or exceed their budget or are close to achieving their goals.
4. **Data Visualization**
- **Expense Reports**: Display monthly and yearly breakdowns of expenses and income by category.
- **Charts**: Use a library like JFreeChart to show visual breakdowns of spending, income, and savings over time.
5. **Search and Filtering**
- Provide a search feature to find specific entries based on date range, category, or description.
- Allow users to filter the main display by month, category, or entry type (income/expense).
6. **Persistence and Database Management**
- Use H2 (or SQLite) as an embedded database to store user, income, expense, and budget data.
- Implement data models to organize tables for users, transactions, budgets, and goals.
7. **Multi-threading for Data Refresh and Notifications**
- Implement a background thread to check and notify users when they approach or exceed budgets or reach financial goals.
- Ensure data refreshes automatically after a set interval.
8. **Desktop Interface using Java Swing**
- Design an intuitive GUI using Java Swing components (JFrames, JPanels, JTable, JDialog, etc.).
- Ensure data from the backend is displayed dynamically, allowing users to interact and perform CRUD operations within the interface.
---
### Data Model
1. **User Table**
- `user_id`: Primary key
- `username`: Unique
- `password_hash`: Encrypted string
2. **Income_Expense Table**
- `entry_id`: Primary key
- `user_id`: Foreign key
- `amount`: Double
- `category`: String
- `description`: Text
- `type`: Enum (Income, Expense)
- `date`: Date
3. **Budget Table**
- `budget_id`: Primary key
- `user_id`: Foreign key
- `category`: String
- `amount`: Double
- `month`: Month enum
4. **Goal Table**
- `goal_id`: Primary key
- `user_id`: Foreign key
- `goal_amount`: Double
- `current_amount`: Double
- `deadline`: Date
---
### API Design Document
Since this is a Java-based desktop app without a web server, the API will function as methods within service classes to perform CRUD operations. Below is an outline of key methods:
1. **UserService**
- `boolean registerUser(String username, String password)`: Registers a new user.
- `User login(String username, String password)`: Validates login and returns a user session.
2. **FinanceService**
- `void addIncomeExpense(Entry entry)`: Adds a new income/expense entry.
- `List<Entry> getEntriesByUser(int userId)`: Retrieves all entries for a user.
- `void editEntry(Entry entry)`: Updates an existing income/expense entry.
- `void deleteEntry(int entryId)`: Deletes an entry by ID.
3. **BudgetService**
- `void setBudget(int userId, String category, double amount)`: Sets a budget for a category.
- `double getBudgetAmount(String category)`: Retrieves the budget amount for a category.
4. **GoalService**
- `void setGoal(int userId, double goalAmount, Date deadline)`: Sets a financial goal.
- `Goal getGoal(int goalId)`: Retrieves goal details by ID.
- `void updateGoalProgress(int goalId, double amount)`: Updates the goal’s current saved amount.
---
### Use Cases for Test Cases
1. **User Registration and Login**
- Register with unique usernames.
- Prevent registration with duplicate usernames.
- Login with valid and invalid credentials.
2. **Add, View, Edit, and Delete Entries**
- Add a new income or expense entry.
- View all entries by category or date range.
- Edit an entry’s details and save changes.
- Delete an entry and ensure it’s removed from the database.
3. **Set and Track Budgets**
- Set monthly budgets for specific categories.
- Notify users when they are close to exceeding the budget.
4. **Set and Monitor Financial Goals**
- Add financial goals with deadlines.
- Update goal progress and verify if notifications are triggered.
5. **Data Visualization**
- Generate reports for monthly income and expenses.
- Display charts with accurate data for the specified time range.
---
### Reference Section
#### Official Documentation
- **Java SE Documentation**: [Java SE Docs](https://docs.oracle.com/javase/8/docs/)
- **Java Swing**: [Java Swing Docs](https://docs.oracle.com/javase/tutorial/uiswing/)
- **Java Collections Framework**: [Collections Docs](https://docs.oracle.com/javase/8/docs/technotes/guides/collections/overview.html)
- **JDBC**: [JDBC Guide](https://docs.oracle.com/javase/tutorial/jdbc/)
- **JFreeChart**: [JFreeChart Documentation](https://sourceforge.net/projects/jfreechart/files/)
- **Password Hashing**: [Java Security Guide](https://docs.oracle.com/javase/tutorial/security/tools/index.html)
#### Suggested Libraries
- **Java ExecutorService**: [Concurrency Guide](https://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html)
- **SQLite JDBC**: [SQLite JDBC Driver](https://bitbucket.org/xerial/sqlite-jdbc)
---
### Style Guide for User Interface
1. **Color Scheme**
- **Primary Background**: #f8f9fa (light grey)
- **Primary Text**: #343a40 (dark grey)
- **Button Colors**: #007bff (blue) for primary actions, #6c757d (grey) for secondary actions
2. **Font**
- **Font Family**: Use Sans-serif font, such as Arial or Roboto.
- **Header Text**: 16px, bold
- **Body Text**: 14px
3. **Button Styles**
- **Primary Button**: Blue background, white text, slightly rounded corners.
- **Secondary Button**: Grey background, black text, with a small margin.
4. **Layout**
- Use consistent padding and margins across all components.
- Each section (e.g., income/expense form, goal setting, budget setting) should be clearly separated visually with borders or spacing.
5. **Dialogs and Alerts**
- **Errors**: Use a red background with white text.
- **Success Messages**: Green background with white text.
- **Information Messages**: Blue background with white text.
6. **Charts**
- Ensure clear color coding for each category in pie and bar charts.
- Use tooltips to display precise values on hover.
This project will exercise both frontend and backend skills within a Java environment, incorporating data management, user interface design, and concurrency.
================================================
FILE: deprecated/README.md
================================================
# Guides in a variety of domains
> These guides remain for posterity, and so that anyone who was currently working through one still has it available for reference. However, everything contained here has been deprecated (and will no longer be maintained) in favor of [the revamped guide](../README.md).
Web development, software engineering, games programming, mobile app development ...
# Contents
- [Guides in a variety of domains](#guides-in-a-variety-of-domains)
- [Contents](#contents)
- [Summary](#summary)
- [Guides](#guides)
- [Job Ready Guide - JavaScript Edition 3.0](#job-ready-guide---javascript-edition-30)
- [Job Ready Guide - Python Edition](#job-ready-guide---python-edition)
- [Computer Science and Backend Development - Java Focus](#computer-science-and-backend-development---java-focus)
- [Computer Science and Web Development - comprehensive](#computer-science-and-web-development---comprehensive)
- [Web Development with Computer Science Foundations - comprehensive](#web-development-with-computer-science-foundations---comprehensive)
- [Data Science - comprehensive](#data-science---comprehensive)
- [Video Game Programming - comprehensive foundations 2.0](#video-game-programming---comprehensive-foundations-20)
- [Native Android Programming - comprehensive](#native-android-programming---comprehensive)
- [Topic Specific Deep Dives](#topic-specific-deep-dives)
- [Practice Speedrun](#practice-speedrun)
- [Frequently Asked Questions](#frequently-asked-questions)
- [Attribution](#attribution)
- [Deprecated Guides](#deprecated-guides)
- [Get Job ready with 13 projects, 2 courses, and 10 books](#get-job-ready-with-13-projects-2-courses-and-10-books)
- [Job Ready Guide - JavaScript Edition 2.0](#job-ready-guide---javascript-edition-20)
- [Video Game Programming - comprehensive foundations](#video-game-programming---comprehensive-foundations)
## Summary
Resources for learners who want to dive deeper on their journey to becoming web developers / software engineers.
There are multiple guides, the first outlines the bare minimum to be successful as an
entry-level junior web developer, two dive much more deeply to prepare you for "beyond junior",
and one that focuses on game development.
If you're interested in seeing how much Computer Science you can learn in a year, the CS guide has been ported over to be one of the paths in my [Speedstudy Challenge](https://github.com/P1xt/speedstudy).
**Additional guides added:**
- Android Development - May, 2017
- Data Science - September, 2017
- Job Ready Python - September, 2017
- Job Ready JavaScript 2.0 - September, 2017
- Practice/Speedrun Project lists - October, 2017
- Topic Guide: Angular - January, 2018
- Topic Guide: Vue - January, 2018
- Topic Guide: React - January, 2018
- Computer Science and Backend Development - Java Focus - April 2018
- Job Ready JavaScript 3.0 - December, 2018
- Video Game Programming - comprehensive foundations 2.0 - December, 2018
A few people suggested making it possible to buy me a coffee as thanks - so please feel free but not obligated to
<a href='https://ko-fi.com/PIXTCODE' target='_blank'><img height='36' style='border:0px;height:36px;' src='https://az743702.vo.msecnd.net/cdn/kofi4.png?v=0' border='0' alt='Buy Me a Coffee at ko-fi.com' /></a>
Do not click that button if you don't want to or can't afford to. I devote time to this project because I want to, in my free time, because I value helping others. Not for donations. The button is just there on a lark because a couple people asked for it and I'm, frankly, curious. Donations (or lack thereof) will not alter my dedication to this project either way.
## Guides
### Job Ready Guide - JavaScript Edition 3.0
A JavaScript-centric version of the Job Ready Guide, narrowly focused on building the skills likely necessary to beeline to "job ready" JavaScript Developer. This is a further update to the original guide and is designed to provide a gentler introduction plus far more hands-on practice throughout the course of the guide.
**Goal:** confident frontend web developer ready to apply for junior positions
[go to the Job Ready Guide - JavaScript Edition 3.0](./job-ready-javascript-edition-3.0.md)
### Job Ready Guide - Python Edition
A Python-centric version of the Job Ready Guide, narrowly focused on building the skills likely necessary to beeline to "job ready" Python Developer.
[go to the Job Ready Guide - Python Edition](./job-ready-python-edition.md)
### Computer Science and Backend Development - Java Focus
Deep dive into Computer Science with a focus on Java
_"not in a rush" plan, with resources to increase the depth of knowledge gained in general computer science topics plus
sufficient implementation practice to confidently enter the industry as a Software Engineer_
**Goal:** proficient software engineer, well versed
in the Java Programming language in particular, and
Computer Science in general
[go to the Computer Science and Backend Development - Java Focus Guide](./cs-java-focus.md)
### Computer Science and Web Development - comprehensive
Get prepared, over the long haul, to be an established senior level software engineer, capable of
architecting solutions for the web (and beyond it)
_"not in a rush" plan, with resources to increase the depth of knowledge gained in general computer science topics plus
sufficient implementation practice to confidently enter the industry as a Web Developer or a Software Engineer in
non Web related positions_
**Goal:** proficient web developer and software engineer
(this option has more of a computer science focus, but also web development)
[go to the Computer Science and Web Development Guide](./cs-wd.md)
### Web Development with Computer Science Foundations - comprehensive
Get prepared, over the long haul, to be an established senior level web developer, at the level where
companies would be lucky to have you and people would be following your blog because you're an expert
_"not in a rush" plan that focuses on pushing beyond beginner level, and intermediate level, to expert
level as a web developer with a reasonable foundation in software engineering_
**Goal:** confident web developer ready to apply for non-junior positions
(this one primarily focuses on web development but includes enough computer science to lay a good foundation)
[go to the Web Development with Computer Science Foundations Guide](./wd-cs.md)
### Data Science - comprehensive
Learn the mathematics, science, and programming skills necessary to tackle machine learning, bioinformatics, artificial intelligence and other data science tasks.
_"not in a rush"_ plan that pushes from beginner to advanced, including a bonus tier to push even further.
**Goal:** accomplished and capable data scientist, proficient in Python, R, Mathematics, Science, and the algorithms standard to data science.
[go to the Data Science Guide](./data-science.md)
### Video Game Programming - comprehensive foundations 2.0
Note: the 2.0 version of this guide includes slightly more game programming practice, adds the excellent CS50 game programming course, and a general overall maintenance update to ensure links are current.
Develop a variety of games, first in JavaScript, then C++ while learning the computer science principles
important in game development ... while having fun in the process.
**Goal:** learn how to code video games
[go to the Video Game Programming Guide2.0](./game-programming-2.0.md)
### Native Android Programming - comprehensive
Learn native Android Programming, including Java at a rigorous level, including the math and computer science topics necessary
to ensure you're prepared to tackle any Android development task.
**Goal:** Become a proficient and capable Android developer
[go to the Android Programming Guide](./android-native.md)
### Topic Specific Deep Dives
Comprehensive review of narrow topics.
- [Regex Guide](./topic-guides/regex.md)
- [Angular Guide](./topic-guides/angular.md)
- [Vue Guide](./topic-guides/vue.md)
- [React Guide](./topic-guides/react.md)
## Practice Speedrun
Topic specific practice, to build out a portfolio, gain additional experience in an area, or for a preset list of assignments to tackle for a hands-on boosting speedrun to drive your ability to the next level (check the Algorithms section for interview prep or practice for programming competitions in Python, Java, C++ or JavaScript):
- [Algorithms and Data Structures](./speedrun-practice/algorithms.md)
- [Android](./speedrun-practice/android.md)
- [Frontend Web Development](./speedrun-practice/frontend-dev.md)
- [Fullstack Web Development](./speedrun-practice/fullstack-dev.md)
- [Game Development](./speedrun-practice/game-dev.md)
## Frequently Asked Questions
see the [FAQ](./faq.md)
## Attribution
- Many of the courses listed closely mimic the list from [Open Source Society University - Computer Science](https://github.com/open-source-society/computer-science)
- Many of the topics selected to augment were inspired by [Google Interview University](https://github.com/jwasham/google-interview-university)
- Many of the projects were inspired by (or are directly taken from) [Free Code Camp](https://www.freecodecamp.com/), [The Odin Project](http://www.theodinproject.com/) and [Udacity](https://www.udacity.com)
Although I took heavy inspiration from many resources when creating these guides, none of it is a cut and paste path from somewhere else. Often, I substituted courses (especially in the case of Coursera) to ensure that the entire course was available for free and required no purchases of any kind. Where possible, I tried to align projects to reinforce prior learning.
## Deprecated Guides
### Get Job ready with 13 projects, 2 courses, and 10 books
Note: This is an old version of the guide, left here so anyone already working through it may continute to do so - I highly recommend anyone new to the guides use [the 3.0 version](#job-ready-guide---javascript-edition-30) instead. This version is no longer maintained and may contain dead links.
~~A structured plan of resources and activities for learners who want to beeline to "job ready" and get there
reasonably prepared to be successful.~~
~~**Goal:** confident web developer ready to apply for junior positions~~
~~[go to the Job Ready Guide](./job-ready.md)~~
### Job Ready Guide - JavaScript Edition 2.0
Note: This is an old version of the guide, left here so anyone already working through it may continute to do so - I highly recommend anyone new to the guides use [the 3.0 version](#job-ready-guide---javascript-edition-30) instead. This version is no longer maintained and may contain dead links.
~~A JavaScript-centric version of the Job Ready Guide, narrowly focused on building the skills likely necessary to beeline to "job ready" JavaScript Developer. This is an updated version of the original Job Ready guide which incorporates additional algorithms practice, additional projects, and a sequence that builds in additional activities to answer the "what should I be doing on the side" question.~~
~~**Goal:** confident frontend web developer ready to apply for junior positions~~
~~[go to the Job Ready Guide - JavaScript Edition 2.0](./job-ready-javascript-edition-2.0.md)~~
### Video Game Programming - comprehensive foundations
Note: this version of the Game Programming Guide is deprecated in favor of [the 2.0 version](#video-game-programming---comprehensive-foundations-2.0) it is left here so as not to strand anyone who was in the middle of it and doesn't want to switch to the 2.0 version. No longer maintained - may contain dead links.
~~Develop a variety of games, first in JavaScript, then C++ while learning the computer science principles
important in game development ... while having fun in the process.~~
~~**Goal:** learn how to code video games~~
~~[go to the Video Game Programming Guide](./game-programming.md)~~
================================================
FILE: deprecated/android-native.md
================================================
# Native Android Programming - comprehensive
This guide makes heavy use of "official docs" for Java and Android, plus projects and cources from the Udacity
Android Nanodegree programs, augmented with a Tier of "Computer Science" to ensure that your ability to
craft expert level Android applications won't be hampered by lackluster math or
algorithm training.
**Note:** For many assignments and projects in this guide, you are
tasked with creating a "sample" type application, or with cloning an application which already exists.
Use good judgement when you get to the point that you are actually deploying apps to the app store. Only
publish apps which are your original creations, using your original content and assets. Don't get sued
publishing something you copied or cloned.
## Tier 0 - CS / Java Foundations
- [ ] Tutorial: [Getting Started](http://docs.oracle.com/javase/tutorial/getStarted/index.html)
- [ ] Course: [Java Programming Basics](https://www.udacity.com/course/java-programming-basics--ud282)
- [ ] Tutorial: [Learning the Java Language](http://docs.oracle.com/javase/tutorial/java/index.html)
- [ ] Tutorial: [Essential Java Classes](http://docs.oracle.com/javase/tutorial/essential/index.html)
- [ ] Tutorial: [Collections](http://docs.oracle.com/javase/tutorial/collections/index.html)
- [ ] Course: [CS106A - Programming Methodology](https://see.stanford.edu/Course/CS106A)
- [ ] Bookmark: [Java SE8 API Specification](http://docs.oracle.com/javase/8/docs/api/index.html) - reference this frequently throughout the rest of the guide
- [ ] Bookmark: [Android API Guides](https://developer.android.com/guide/index.html) - reference this frequently throughout the rest of the guide
- [ ] Book: [Precalculus](https://openstax.org/details/books/precalculus) Complete by end of Tier 1.
## Tier 1 - Android Fundamentals
- [ ] Course: [Android Basics: User Interface](https://www.udacity.com/course/android-basics-user-interface--ud834)
- [ ] Project: [Build a Single Screen App](./projects/android/YourFirstApp.md)
- [ ] Course: [Android Basics: User Input](https://www.udacity.com/course/android-basics-user-input--ud836)
- [ ] Project: [Court Counter App](./projects/android/CourtCounter.md)
- [ ] Project: [Quiz App](./projects/android/QuizApp.md)
- [ ] Course: [Android Basics: Multiscreen Apps](https://www.udacity.com/course/android-basics-multiscreen-apps--ud839)
- [ ] Project: [Musical Structure App](./projects/android/MusicalStructure.md)
- [ ] Project: [Report Card](./projects/android/ReportCard.md)
- [ ] Project: [Tour Guide App](./projects/android/TourGuide.md)
- [ ] Course: [Android Basics: Networking](https://www.udacity.com/course/android-basics-networking--ud843)
- [ ] Project: [Book Listing App](./projects/android/BookListing.md)
- [ ] Project: [News App](./projects/android/NewsApp.md)
- [ ] Course: [Android Basics: Data Storage](https://www.udacity.com/course/android-basics-data-storage--ud845)
- [ ] Project: [Habit Tracker App](./projects/android/HabitTracker.md)
- [ ] Project: [Inventory App](./projects/android/Inventory.md)
## Tier 2 - Intermediate Android
- [ ] Course: [Single Variable Calculus](https://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/) Complete by end of Tier 2
- [ ] Course: [Developing Android Apps](https://www.udacity.com/course/new-android-fundamentals--ud851)
- [ ] Project: [Popular Movies, Stage 1](./projects/android/PopularMoviesStage1.md)
- [ ] Project: [Popular Movies, Stage 2](./projects/android/PopularMoviesStage2.md)
- [ ] Course: [Gradle for Android and Java](https://www.udacity.com/course/gradle-for-android-and-java--ud867)
- [ ] Project: [Build it Bigger](./projects/android/BuildItBigger.md)
- [ ] Course: [Material Design for Android Developers](https://www.udacity.com/course/material-design-for-android-developers--ud862)
- [ ] Project: [Make Your App Material](./projects/android/MakeYourAppMaterial.md)
- [ ] Project: [Capstone, Stage 1 - Design](./projects/android/CapstoneStage1-Design.md)
- [ ] Project: [Capstone, Stage 2 - Build](./projects/android/CapstoneStage2-Build.md)
## Tier 3 - More CS
- [ ] Course: [Multivariable Calculus](https://ocw.mit.edu/courses/mathematics/18-02sc-multivariable-calculus-fall-2010/) Complete by the end of Tier 3
- [ ] Course: [Introduction to Programming in Java](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-092-introduction-to-programming-in-java-january-iap-2010/)
- [ ] Book: [Think Java - How to Think Like a Computer Scientist](http://greenteapress.com/wp/think-java/)
- [ ] Course: [Algorithms, Part I](https://www.coursera.org/learn/algorithms-part1)
- [ ] Project: Complete all challenges from the [Code Jam Qualification Round 2015](https://code.google.com/codejam/contest/6224486/dashboard)
- [ ] Course: [Mathematics for Computer Science](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-spring-2015/index.htm)
- [ ] Project: Complete all challenges from the [Code Jam Round 1B 2015](https://code.google.com/codejam/contest/8224486/dashboard)
- [ ] Book: [Open Data Structures](http://www.aupress.ca/books/120226/ebook/99Z_Morin_2013-Open_Data_Structures.pdf)
- [ ] Course: [Algorithms, Part II](https://www.coursera.org/learn/algorithms-part2)
- [ ] Project: Complete all challenges from the [Code Jam Round 1C 2015](https://code.google.com/codejam/contest/4244486/dashboard)
- [ ] Course: [Intro to Artificial Intelligence](https://www.udacity.com/course/intro-to-artificial-intelligence--cs271)
## Tier 4 - Advanced Android
- [ ] Project: [2D Game Development with libGDX](https://www.udacity.com/course/2d-game-development-with-libgdx--ud405)
- [ ] Project: [Outbreak](./projects/android/Outbreak.md)
- [ ] Course: [Google Location Services on Android](https://www.udacity.com/course/google-location-services-on-android--ud876-1)
- [ ] Course: [Monetize Your Android App with Ads](https://www.udacity.com/course/monetize-your-android-app-with-ads--ud876-3)
- [ ] Course: [Add Google Maps to your Android App](https://www.udacity.com/course/add-google-maps-to-your-android-app--ud876-4)
- [ ] Course: [Android Performance](https://www.udacity.com/course/android-performance--ud825)
- [ ] Course: [How to Make a Platformer Using libGDX](https://www.udacity.com/course/how-to-make-a-platformer-using-libgdx--ud406)
- [ ] Project: [Space Kerfuffle](./projects/android/SpaceKerfuffle!.md)
- [ ] Course: [Advanced Android App Development](https://www.udacity.com/course/advanced-android-app-development--ud855)
- [ ] Project: [Stock Hawk!](./projects/android/StockHawk.md)
- [ ] Bookmark: [Android API Guides](https://developer.android.com/guide/index.html) You bookmarked this back in Tier 0.
Take the time to thoroughly review all of the content now. Study it as if it were a book and you needed to know "it all".
- [ ] Project: Your choice - ideas listed below
- [ ] Project: Your choice - ideas listed below
- [ ] Project: Your choice - ideas listed below
- [ ] Project: Your choice - ideas listed below
- [ ] Project: Your choice - ideas listed below
## Advanced Project ideas
* clone any game from the game programming guide (or any other game you enjoy) as a native Android application
* create a real time chat application (clone your favorite instant messenger) - note you'll need to build a backend in
order to make this work. Use any backend you like, suggestion: check out firebase.
* create an educational app, useful for learning and practicing subject matter you're highly familiar with (like android programming)
* create an app for a non-profit in your area, whatever they need
* contribute to open source, on any android or java project
* make any android app you want from your original idea, deploy it to the app store
================================================
FILE: deprecated/cs-java-focus.md
================================================
# Computer Science and Backend Development - Java Focus
If you have any questions, be sure to check the [FAQ](./faq.md). In fact, before you even start anything, go read the FAQ.
It has a plethora of hints, tips and answers to help you ensure you get the most out of this guide.
>Note that at the end of each tier, there are a number of "choose your own" projects. Do not feel you have to wait until the end of the tier to complete them - whenever you want to "build", just skip to the end of the tier, build something, check it off, then return to where you were.
**Project suggestions:** Above all, pick something you're interested in building. It doesn't have to be a "web page", it could be a command line utility, a mobile app, some fancy arduino robot, or yes, a web page, or anything else you are inspired to build. Try to pick something substantial for the level you're at - 40+ hours of effort. Try not to pick something so daunting it'll take you months or (worse) you won't be able to complete.
**Specific Project Ideas**
* Clone a popular website, with either emphasis on some fancy frontend, or the emphasis on a rock solid API with the minimal frontend necessary to test it
* Clone pretty much any template you find on the web, but do it in Kotlin as an Android app
* Build/clone a game
* Hit Kaggle and build a kernel for solving one of the problems there
* Hit HackerRank or CodinGame for a weeklong problem solving binge, finishing as many problems as you possibly can
* Build a command line utility that automates something you do frequently.
* Contribute a PR to the Open Source project of your choice
* Write a series of blog posts / tutorials that explain thoroughly some topic you've been studying
* Build an application you wish was available, but isn't
## Tier 1 - getting started
* [ ] Course: [Introduction to Computer Science - CS50](https://www.edx.org/course/introduction-computer-science-harvardx-cs50x#!)
* [ ] Project: [Google Code Jam 2008 - Qualification Round (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Article: Read [Project Specification Documents](http://www.pixelearth.net/pages/project-specification) and get in the habit of including every bit of information it details that makes sense for a project in the README.md or other supporting documentation for your projects
* [ ] Course: [Effective Thinking Through Mathematics](https://www.edx.org/course/effective-thinking-through-mathematics-utaustinx-ut-9-01x)
* [ ] Project: [Google Code Jam 2009 - Qualification Round (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Course: [How to Code: Simple Data](https://www.edx.org/course/how-code-simple-data-ubcx-htc1x)
* [ ] Project: [Google Code Jam 2010 - Qualification Round (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Book: [Precalculus](http://www.stitz-zeager.com/szprecalculus07042013.pdf)
* [ ] Course: [How to Code: Complex Data](https://www.edx.org/course/how-code-complex-data-ubcx-htc2x)
* [ ] Project: [Google Code Jam 2011 - Qualification Round (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Project: [Google Code Jam 2008 - Round 1A (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Video Series: [Essence of Calculus](https://www.youtube.com/watch?v=WUvTyaaNkzM&list=PLZHQObOWTQDMsr9K-rj53DwVRMYO3t5Yr)
* [ ] Course: [Single Variable Calculus](https://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/)
* [ ] Book: [Think Java - How to Think Like a Computer Scientist](http://greenteapress.com/wp/think-java/)
* [ ] Project: [Google Code Jam 2009 - Round 1A (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Course: [Software Construction: Data Abstraction](https://www.edx.org/course/software-construction-data-abstraction-ubcx-softconst1x)
* [ ] Project: [Google Code Jam 2010 - Round 1A (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Book: [Introducing Java 8](http://www.oreilly.com/programming/free/introducing-java-8.csp)
* [ ] Course: [Software Construction: Object-Oriented Design](https://www.edx.org/course/software-construction-object-oriented-ubcx-softconst2x)
* [ ] Project: [Google Code Jam 2011 - Round 1A (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Project: [The Java Tutorials](https://docs.oracle.com/javase/tutorial/index.html) Work through all of the tutorials
* [ ] Project: [Spring](http://spring.io/guides) Work through each of the Spring.io guides.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
## Tier 2 - develop more expertise
* [ ] Book: [Object-Oriented vs. Functional Programming](http://www.oreilly.com/programming/free/object-oriented-vs-functional-programming.csp)
* [ ] Course: [Software Engineering: Introduction](https://www.edx.org/course/software-engineering-introduction-ubcx-softeng1x)
* [ ] Project: [Google Code Jam 2008 - Round 1B (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Book: [Java Structures](http://dept.cs.williams.edu/~bailey/JavaStructures/Book_files/JavaStructures.pdf)
* [ ] Article: Read [Algorithms and Flowcharts](http://www.academia.edu/7857144/ALGORITHMS_AND_FLOWCHARTS) and then familiarize yourself with [Pencil](http://pencil.evolus.vn/) ... start flowcharting complex portions of your code logic as part of your documentation
* [ ] Book: [Docker for Java Developers](http://www.oreilly.com/programming/free/docker-for-java-developers.csp)
* [ ] Course: [Software Development Capstone Project](https://www.edx.org/course/software-development-capstone-project-ubcx-softengprjx)
* [ ] Project: [Google Code Jam 2008 - Round 1C (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Course: [Mathematics for Computer Science](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-spring-2015/index.htm)
* [ ] Course: [UX Design for Mobile Developers](https://www.udacity.com/course/ux-design-for-mobile-developers--ud849)
* [ ] Docs: [Kotlin](https://kotlinlang.org/docs/reference/) Work though all Reference and Tutorials
* [ ] Book: [Don't Panic: Mobile Developer's Guide to The Galaxy](https://www.open-xchange.com/fileadmin/user_upload/Resources_Pages/Mobile_Developers_Guide/Mobile_Developers_Guide_17thEdition_Web.pdf)
* [ ] Project: [Google Code Jam 2009 - Round 1B (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Book: [Open Data Structures](http://opendatastructures.org/ods-java.pdf)
* [ ] Project: [Google Code Jam 2009 - Round 1C (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Course: [Algorithms, Part I](https://www.coursera.org/learn/algorithms-part1)
* [ ] Project: [Google Code Jam 2010 - Round 1B (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Book: [Applied Discrete Structures](http://faculty.uml.edu/klevasseur/ads-latex/ads.pdf)
* [ ] Project: [Google Code Jam 2010 - Round 1C (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Course: [Algorithms, Part II](https://www.coursera.org/learn/algorithms-part2)
* [ ] Project: [Google Code Jam 2011 - Round 1B (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Project: [Google Code Jam 2011 - Round 1C (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
## Tier 3 - add more rigor
* [ ] Book: [Professor Frisby's Mostly Adequate Guide to Functional Programming](https://www.gitbook.com/book/drboolean/mostly-adequate-guide/details)
* [ ] Project: [Google Code Jam 2008 - Round 2(language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Book: [Microservices for Java Developers](http://www.oreilly.com/programming/free/microservices-for-java-developers.csp)
* [ ] Course: [Software Testing](https://www.udacity.com/course/software-testing--cs258)
* [ ] Project: [Google Code Jam 2008 - Round 3 (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Book: [Calculus](https://ocw.mit.edu/ans7870/resources/Strang/Edited/Calculus/Calculus.pdf)
* [ ] Course: [Software Debugging](https://www.udacity.com/course/software-debugging--cs259)
* [ ] Project: [Google Code Jam 2009 - Round 2(language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Course: [Multivariable Calculus](https://ocw.mit.edu/courses/mathematics/18-02sc-multivariable-calculus-fall-2010/)
* [ ] Project: [Google Code Jam 2009 - Round 3 (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Course: [Software Architecture & Design](https://www.udacity.com/course/software-architecture-design--ud821)
* [ ] Course: [Classical Mechanics](https://ocw.mit.edu/courses/physics/8-01sc-classical-mechanics-fall-2016/)
* [ ] Book: [Modern Java EE Design Patterns](http://www.oreilly.com/programming/free/modern-java-ee-design-patterns.csp)
* [ ] Project: [Google Code Jam 2010 - Round 2(language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Course: [Databases](https://lagunita.stanford.edu/courses/DB/2014/SelfPaced/about)
* [ ] Project: [Google Code Jam 2010 - Round 3 (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Course: [Agile Software Development](https://www.edx.org/course/agile-software-development-ethx-asd-1x)
* [ ] Course: [Introduction to Cloud Infrastructure Technologies](https://www.edx.org/course/introduction-cloud-infrastructure-linuxfoundationx-lfs151-x)
* [ ] Course: [Intro to Theoretical Computer Science](https://www.udacity.com/course/intro-to-theoretical-computer-science--cs313)
* [ ] Project: [Google Code Jam 2011 - Round 2(language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Course: [Introduction to Probability - The Science of Uncertainty](https://www.edx.org/course/introduction-probability-science-mitx-6-041x-0)
* [ ] Project: [Google Code Jam 2011 - Round 3 (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Video Series: [Essence of Linear Algebra](https://www.youtube.com/watch?v=kjBOesZCoqc&list=PLZHQObOWTQDPD3MizzM2xVFitgF8hE_ab)
* [ ] Course: [Linear Algebra - Foundations to Frontiers](https://www.edx.org/course/linear-algebra-foundations-frontiers-utaustinx-ut-5-04x#!)
* [ ] Course: [Cryptography I](https://www.coursera.org/course/crypto)
* [ ] Book: [Cryptography: An Introduction](http://www.cs.umd.edu/~waa/414-F11/IntroToCrypto.pdf)
* [ ] Course: [Cryptography II](https://www.coursera.org/course/crypto2)
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
## Tier 4 - polish the rough edges
* [ ] Course: [Computer Architecture](https://www.coursera.org/course/comparch)
* [ ] Project: [Google Code Jam 2008 - World Finals (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Book: [Information Theory, Inference, and Learning Algorithms](http://www.inference.org.uk/itprnn/book.pdf)
* [ ] Course: [Introduction to Cyber Security](https://www.futurelearn.com/courses/introduction-to-cyber-security)
* [ ] Project: [Google Code Jam 2009 - World Finals (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Book: [Foundations of Computer Science
](http://infolab.stanford.edu/~ullman/focs.html#pdfs)
* [ ] Course: [Differential Equations](https://ocw.mit.edu/courses/mathematics/18-03sc-differential-equations-fall-2011/)
* [ ] Course: [Computer Graphics](https://www.edx.org/course/computer-graphics-uc-san-diegox-cse167x)
* [ ] Project: [Google Code Jam 2010 - World Finals (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Book: [The Quest for Artificial Intelligence](http://ai.stanford.edu/~nilsson/QAI/qai.pdf)
* [ ] Course: [Artificial Intelligence](https://www.edx.org/course/artificial-intelligence-uc-berkeleyx-cs188-1x#!)
* [ ] Project: [Google Code Jam 2011 - World Finals (language of your choice)](https://code.google.com/codejam/past-contests)
* [ ] Course: [Machine Learning](https://www.coursera.org/learn/machine-learning)
* [ ] Book: [Deep Learning](http://www.deeplearningbook.org/)
* [ ] Project: [Google Code Jam 2012](https://code.google.com/codejam/past-contests) All Rounds
* [ ] Book: [The Philosophy of Computer Science](https://www.cse.buffalo.edu//~rapaport/Papers/phics.pdf)
* [ ] Course: [Operating Systems and System Programming](http://theopenacademy.com/content/operating-systems-and-system-programming)
* [ ] Project: [Google Code Jam 2013](https://code.google.com/codejam/past-contests) All Rounds
* [ ] Book: [Numeric Algorithms](https://people.csail.mit.edu/jsolomon/share/book/numerical_book.pdf)
* [ ] Book: [Basics of Compiler Design](http://www.diku.dk/~torbenm/Basics/basics_lulu2.pdf)
* [ ] Course: [Compilers](https://lagunita.stanford.edu/courses/Engineering/Compilers/Fall2014/about)
* [ ] Project: [Google Code Jam 2014](https://code.google.com/codejam/past-contests) All Rounds
* [ ] Course: [Robotics Fundamentals](https://www.edx.org/course/robotics-fundamentals-pennx-robo1x)
* [ ] Project: [Google Code Jam 2015](https://code.google.com/codejam/past-contests) All Rounds
* [ ] Course: [Computer Networks](https://lagunita.stanford.edu/courses/Engineering/Networking-SP/SelfPaced/about)
* [ ] Project: [Google Code Jam 2016](https://code.google.com/codejam/past-contests) All Rounds
* [ ] Course: [Parallel Computer Architecture and Programming](http://15418.courses.cs.cmu.edu/spring2016/home)
* [ ] Project: [Google Code Jam 2017](https://code.google.com/codejam/past-contests) All Rounds
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
* [ ] Project: Build Something of your choice using what you've learned to this point.
================================================
FILE: deprecated/cs-wd.md
================================================
# Computer Science and Web Development - comprehensive
If you have any questions, be sure to check the [FAQ](./faq.md). In fact, before you even start anything, go read the FAQ.
It has a plethora of hints, tips and answers to help you ensure you get the most out of this guide.
## Tier 1 - getting started
- [ ] Book: [You Don't Know JS: Up & Going](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/up%20&%20going/README.md#you-dont-know-js-up--going)
- [ ] Book: [You Don't Know JS: Scope & Closures](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/scope%20&%20closures/README.md#you-dont-know-js-scope--closures)
- [ ] Book: [You Don't Know JS: this & Object Prototypes](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/this%20&%20object%20prototypes/README.md#you-dont-know-js-this--object-prototypes)
- [ ] Course: [Learn to Code HTML & CSS](http://learn.shayhowe.com/html-css/)
- [ ] Project: Clone [this](https://creativemarket.com/ikonome/686585-Material-Resume-Blue/screenshots/#screenshot2) online resume template
- [ ] Course: [Introduction to Computer Science - CS50](https://www.edx.org/course/introduction-computer-science-harvardx-cs50x#!)
- [ ] Book: [You Don't Know JS: Types & Grammar](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/types%20&%20grammar/README.md#you-dont-know-js-types--grammar)
- [ ] Book: [You Don't Know JS: Async & Performance](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/async%20&%20performance/README.md#you-dont-know-js-async--performance)
- [ ] Book: [You Don't Know JS: ES6 & Beyond](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/es6%20&%20beyond/README.md#you-dont-know-js-es6--beyond)
- [ ] Course: [Learn to Code Advanced HTML & CSS](http://learn.shayhowe.com/advanced-html-css/)
- [ ] Project: Portfolio from the frontend section of FCC
- [ ] Article: Read [Project Specification Documents](http://www.pixelearth.net/pages/project-specification) and get in the habit of including every bit of information it details that makes sense for a project in the README.md or other supporting documentation for your projects
- [ ] Course: [Effective Thinking Through Mathematics](https://www.edx.org/course/effective-thinking-through-mathematics-utaustinx-ut-9-01x)
- [ ] Book: [Setting Up ES6](https://leanpub.com/setting-up-es6/read)
- [ ] Book: [JavaScript Allongé, the "Six" Edition](https://leanpub.com/javascriptallongesix)
- [ ] Course: [Getting Sassy with CSS](http://www.sassshop.com/#/)
- [ ] Project: Build an online Towers of Hanoi solver that accepts a tower height between 5 and 10, and then displays a graphical (animated) solution, iteratively moving each piece until the puzzle is solved
## Tier 2 - develop more expertise
- [ ] Course: [How to Code: Simple Data](https://www.edx.org/course/how-code-simple-data-ubcx-htc1x)
- [ ] Course: [How to Code: Complex Data](https://www.edx.org/course/how-code-complex-data-ubcx-htc2x)
- [ ] Course: [Software Construction: Data Abstraction](https://www.edx.org/course/software-construction-data-abstraction-ubcx-softconst1x)
- [ ] Course: [Software Construction: Object-Oriented Design](https://www.edx.org/course/software-construction-object-oriented-ubcx-softconst2x)
- [ ] Course: [Software Engineering: Introduction](https://www.edx.org/course/software-engineering-introduction-ubcx-softeng1x)
- [ ] Course: [Software Development Capstone Project](https://www.edx.org/course/software-development-capstone-project-ubcx-softengprjx)
- [ ] Book: [DOM Enlightenment](http://domenlightenment.com/)
- [ ] Project: Simon Game from the frontend section of FCC
- [ ] Project: Complete all Classic Puzzles - Easy on [CodinGame](https://www.codingame.com/) in JavaScript
- [ ] Course: [Programming for the Web with JavaScript](https://www.edx.org/course/programming-web-javascript-pennx-sd4x) on edX or Course: [CS50's Mobile App Development with React Native](https://www.edx.org/course/cs50s-mobile-app-development-with-react-native) on edX (or both, your choice)
- [ ] The FCC Backend Certification - all projects, ignore the tutorials and just read the official docs if you want.
- [ ] Course: [Single Variable Calculus](https://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/)
- [ ] Book: [JavaScript Design Patterns](https://addyosmani.com/resources/essentialjsdesignpatterns/book/)
- [ ] Project: Clone [this](https://blackrockdigital.github.io/startbootstrap-creative/) landing page
- [ ] Course: [Mathematics for Computer Science](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-spring-2015/index.htm)
- [ ] Article: Read [Algorithms and Flowcharts](http://www.academia.edu/7857144/ALGORITHMS_AND_FLOWCHARTS) and then familiarize yourself with [Pencil](http://pencil.evolus.vn/) ... start flowcharting complex portions of your code logic as part of your documentation
- [ ] Project: Clone [this Admin template](http://rubix410.sketchpixy.com/ltr/dashboard) using React, Angular, or Vue
- [ ] Book: [Think Java - How to Think Like a Computer Scientist](http://greenteapress.com/wp/think-java/)
- [ ] Book: [Open Data Structures](http://www.aupress.ca/books/120226/ebook/99Z_Morin_2013-Open_Data_Structures.pdf)
- [ ] Course: [Algorithms, Part I](https://www.coursera.org/learn/algorithms-part1)
- [ ] Course: [Algorithms, Part II](https://www.coursera.org/learn/algorithms-part2)
- [ ] Project: Complete all challenges from the [Code Jam Qualification Round 2015](https://code.google.com/codejam/contest/6224486/dashboard)
- [ ] Project: Clone the front page of [this](https://urbanarmorgear.com/) website modifying it to highlight a different product or industry. Make special note of the secondary navigation bar at the top. Implementing that is the highlight of this project.
- [ ] Course: [UX Design for Mobile Developers](https://www.udacity.com/course/ux-design-for-mobile-developers--ud849)
- [ ] Course: [Android Development for Beginners](https://www.udacity.com/course/android-development-for-beginners--ud837)
- [ ] Project: Build the Pomodoro project from the FCC frontend curriculum - as an android app
## Tier 3 - add more rigor
- [ ] Book: [Professor Frisby's Mostly Adequate Guide to Functional Programming](https://www.gitbook.com/book/drboolean/mostly-adequate-guide/details)
- [ ] Course: [Software Testing](https://www.udacity.com/course/software-testing--cs258)
- [ ] Course: [Software Debugging](https://www.udacity.com/course/software-debugging--cs259)
- [ ] Project: Clone the Netflix interface using React, Angular, or Vue - pulling data from [the Movie DB API](https://www.themoviedb.org/documentation/api) or an API in a backend you create yourself.
- [ ] Course: [Multivariable Calculus](https://ocw.mit.edu/courses/mathematics/18-02sc-multivariable-calculus-fall-2010/)
- [ ] Project: Complete all Classic Puzzles - Medium on [CodinGame](https://www.codingame.com/) in JavaScript
- [ ] Course: [Software Architecture & Design](https://www.udacity.com/course/software-architecture-design--ud821)
- [ ] Project: Complete all challenges from the [Code Jam Round 1A 2015](https://code.google.com/codejam/contest/4224486/dashboard)
- [ ] Book: [Functional Light JS](https://github.com/getify/Functional-Light-JS)
- [ ] Project: Clone [this](https://blackrockdigital.github.io/startbootstrap-clean-blog/) blog template - note that there are multiple pages
- [ ] Course: [Databases](https://lagunita.stanford.edu/courses/DB/2014/SelfPaced/about)
- [ ] Course: [Agile Software Development](https://www.edx.org/course/agile-software-development-ethx-asd-1x)
- [ ] Project: Complete all ES6 Katas [here](http://es6katas.org/)
- [ ] Course: [Introduction to Cloud Infrastructure Technologies](https://www.edx.org/course/introduction-cloud-infrastructure-linuxfoundationx-lfs151-x)
- [ ] Project: Complete all challenges from the [Code Jam Round 1B 2015](https://code.google.com/codejam/contest/8224486/dashboard)
- [ ] Project: Build Facebook: yes, all the functionality. See [here](http://www.theodinproject.com/courses/ruby-on-rails/lessons/final-project) for a list of requirements you should fulfill.
- [ ] Course: [Intro to Theoretical Computer Science](https://www.udacity.com/course/intro-to-theoretical-computer-science--cs313)
- [ ] Project: Complete all challenges from the [Code Jam Round 1C 2015](https://code.google.com/codejam/contest/4244486/dashboard)
- [ ] Course: [Introduction to Probability - The Science of Uncertainty](https://www.edx.org/course/introduction-probability-science-mitx-6-041x-0)
- [ ] Project: Write the CSS Necessary to create your own 12 column based grid layout - see [here](http://960.gs/) for an example
- [ ] Course: [Linear Algebra - Foundations to Frontiers](https://www.edx.org/course/linear-algebra-foundations-frontiers-utaustinx-ut-5-04x#!)
- [ ] Project: Complete all Classic Puzzles - Hard on [CodinGame](https://www.codingame.com/) in JavaScript
- [ ] Course: [Cryptography I](https://www.coursera.org/course/crypto)
- [ ] Project: Complete all challenges from the [Code Jam Round 2 2015](https://code.google.com/codejam/contest/8234486/dashboard)
- [ ] Course: [Cryptography II](https://www.coursera.org/course/crypto2)
- [ ] Project: Clone Twitter - yes, all the functionality
## Tier 4 - polish the rough edges
- [ ] Course: [Computer Architecture](https://www.coursera.org/course/comparch)
- [ ] Project: Complete all challenges from the [Code Jam Round 3 2015](https://code.google.com/codejam/contest/4254486/dashboard)
- [ ] Course: [Introduction to Cyber Security](https://www.futurelearn.com/courses/introduction-to-cyber-security)
- [ ] Project: Complete all Classic Puzzles - Very Hard on [CodinGame](https://www.codingame.com/) in JavaScript
- [ ] Course: [Computer Graphics](https://www.edx.org/course/computer-graphics-uc-san-diegox-cse167x)
- [ ] Course: [Artificial Intelligence](https://www.edx.org/course/artificial-intelligence-uc-berkeleyx-cs188-1x#!)
- [ ] Project: Complete all challenges from the [Code Jam World Finals 2015](https://code.google.com/codejam/contest/5224486/dashboard)
- [ ] Course: [Machine Learning](https://www.coursera.org/learn/machine-learning)
- [ ] Project: Design, implement, test, and deploy a game that is playable on the web, using the technologies of your choice. The only criteria are that it be playable online, and that it include a substantial AI component.
- [ ] Course: [Operating Systems and System Programming](http://theopenacademy.com/content/operating-systems-and-system-programming)
- [ ] Project: Create a node module that will convert markdown to properly formatted html
- [ ] Course: [Compilers](https://lagunita.stanford.edu/courses/Engineering/Compilers/Fall2014/about)
- [ ] Course: [Robotics Fundamentals](https://www.edx.org/course/robotics-fundamentals-pennx-robo1x)
- [ ] Project: Clone [Learn Harmony](http://learnharmony.org/#/?_k=0okjs7)
- [ ] Course: [Computer Networks](https://lagunita.stanford.edu/courses/Engineering/Networking-SP/SelfPaced/about)
- [ ] Course: [Parallel Computer Architecture and Programming](http://15418.courses.cs.cmu.edu/spring2016/home)
- [ ] Project: Complete all problems from all rounds of the [Distributed Google Code Jam 2015](https://code.google.com/codejam/contests.html) - scroll down to the appropriate section
- [ ] Project: Clone Slack - the functionality should be complete to the point that one user can create a room, invite other users, and all users of that room can real-time chat. The room should be secure and inaccessible to anyone but those invited.
- [ ] Project: Create an npm module that bootstraps a fullstack application, with Node.js on the backend, and the SPA library/framework of your choice on the frontend. Include a full test suite and comprehensive build processes. Publish it to NPM.
- [ ] Project: Complete all problems from all rounds of the [Google Code Jam 2016](https://code.google.com/codejam/contests.html) - scroll down to the appropriate section
- [ ] Project: Extend your CSS grid framework to include the CSS and JavaScript required to implement 5 to 10 material design components
================================================
FILE: deprecated/data-science.md
================================================
# Data Science - comprehensive
A curriculum covering Data Science topics relevant to Machine Learning, Bioinformatics, and Artificial Intelligence. Includes necessary background in mathematics and the sciences.
Suggestions:
- Do all courses/books in order
- Don't skip anything (if you're tempted to skip a course because you think you already know it, take the final, if you pass, then skip).
- Projects are listed at the end of each Tier, you should consider them assigned at the beginning of the Tier, and due at the end - so work on them alongside the books and courses as you work your way through a Tier.
- For any project, feel free to use Python or R. Python is introduced earlier in the guide so it's likely you'll use it nearly exclusively for the earlier projects. It would be a good idea to lean more heavily on R in the latter projects to ensure you have substantial practice in both.
- Make a point of building your GitHub profile during your study so that over time you show a history of data science projects.
- If you haven't already, begin blogging about what you're learning on Medium (or elsewhere). Try to focus on tutorials for topics you've learned well that might be helpful to others.
**Note:** All items should have a free to audit option. There are two Algorithms courses which require a book purchase (Cormen), but I have provided alternate courses which do not.
## Blogs
Bookmark these blogs and try to read at least one article from one of them per week.
- [Data School](http://www.dataschool.io/)
- [Machine Learning Mastery](https://machinelearningmastery.com/blog/)
- [No Free Hunch - Kaggle's blog](http://blog.kaggle.com/)
- [Pete Warden's Blog](https://petewarden.com/)
- [The Unofficial Google Data Science Blog](http://www.unofficialgoogledatascience.com/)
- [Data Science Central](http://www.datasciencecentral.com/)
- [R Bloggers](https://www.r-bloggers.com/)
## Tier 0 - prep
- [ ] Course: [Question Everything: Scientific Thinking in Real Life](https://www.edx.org/course/question-everything-scientific-thinking-uqx-query101x-1)
- [ ] Book: [College Algebra](https://openstax.org/details/books/college-algebra) or Course: [College Algebra and Problem Solving](https://www.edx.org/course/college-algebra-problem-solving-asux-mat117x) or thorough knowledge of Algebra.
- [ ] Book: [Precalculus](https://openstax.org/details/books/precalculus) or Course: [Precalculus](https://www.edx.org/course/precalculus-asux-mat170x) or [Khan Academy](https://www.khanacademy.org/math/precalculus) or thorough knowledge of Precalculus
- [ ] Course: [Introduction to Computer Science and Programming Using Python](https://www.edx.org/course/introduction-computer-science-mitx-6-00-1x-11)
- [ ] Course Series: [Data Science Path on Cognitive Class](https://cognitiveclass.ai/learn/data-science/)
- [ ] Book: [Think Python](http://greenteapress.com/thinkpython2/thinkpython2.pdf)
- [ ] Project: Do all problems in Rosalind's [Python Village](http://rosalind.info/problems/list-view/?location=python-village)
- [ ] Project: [Titanic: Machine Learning from Disaster](https://www.kaggle.com/c/titanic)
- [ ] Project: Complete one [Bot Programming Competition on CodinGame](https://www.codingame.com/multiplayer/bot-programming)
## Tier 1 - foundations
- [ ] Course: [M001: MongoDB Basics](https://university.mongodb.com/courses/M001/about) - note: this course is only intermittently offered, sign up at the start of the Tier, then proceed to the other courses and return to this one when it's in session
- [ ] Course: [MM220P: MongoDB for Python Developers](https://university.mongodb.com/courses/M220P/about) - note: this course is only intermittently offered, sign up at the start of the Tier, then proceed to the other courses and return to this one when it's in session
- [ ] Course: [Introduction to Biology - The Secret of Life](https://www.edx.org/course/introduction-biology-secret-life-mitx-7-00x-6)
- [ ] Course: [Single Variable Calculus](https://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/)
- [ ] Course: [Introduction to Probability and Statistics](https://ocw.mit.edu/courses/mathematics/18-05-introduction-to-probability-and-statistics-spring-2014/index.htm)
- [ ] Course Series: [Deep Learning Path on Cognitive Class](https://cognitiveclass.ai/learn/deep-learning/)
- [ ] Course: [Introduction to Computational Thinking and Data Science](https://www.edx.org/course/introduction-computational-thinking-data-mitx-6-00-2x-6)
- [ ] Course: [Data Science](http://cs109.github.io/2015/)
- [ ] Book: [Think Stats](http://greenteapress.com/thinkstats2/thinkstats2.pdf)
- [ ] Course: [Programming for the Web with JavaScript](https://www.edx.org/course/programming-web-javascript-pennx-sd4x)
- [ ] Course: [Introduction to Solid State Chemistry](https://ocw.mit.edu/courses/materials-science-and-engineering/3-091sc-introduction-to-solid-state-chemistry-fall-2010/index.htm)
- [ ] Course: [Multivariable Calculus](https://ocw.mit.edu/courses/mathematics/18-02sc-multivariable-calculus-fall-2010/)
- [ ] Book: [An Introduction to Statistical Learning](http://www-bcf.usc.edu/~gareth/ISL/ISLR%20Sixth%20Printing.pdf)
- [ ] Course: [Principles of Biochemistry](https://www.edx.org/course/principles-biochemistry-harvardx-mcb63x-0)
- [ ] Book: [The Elements of Statistical Learning](https://web.stanford.edu/~hastie/ElemStatLearn/printings/ESLII_print12.pdf)
- [ ] Course: [Intro to Machine Learning](https://www.udacity.com/course/intro-to-machine-learning--ud120)
- [ ] Project: Complete the [Hackerrank Python Track](https://www.hackerrank.com/domains/python/py-introduction)
- [ ] Project: Do 10 problems (of your choice) on [Rosalind](http://rosalind.info/problems/locations/)
- [ ] Project: [House Prices: Advanced Regression Techniques](https://www.kaggle.com/c/house-prices-advanced-regression-techniques)
- [ ] Project: Complete one competition of your choice from [Crowd Analytix](https://www.crowdanalytix.com/community)
- [ ] Project: Complete one [Bot Programming Competition on CodinGame](https://www.codingame.com/multiplayer/bot-programming)
- [ ] Project: Complete [Deep Learning - TensorFlow on CodinGame](https://www.codingame.com/ide/puzzle/deep-learning-tensorflow)
## Tier 2 - develop more expertise
- [ ] Course: [MongoDB Performance](https://university.mongodb.com/courses/M201/about) - note: this course is only intermittently offered, sign up at the start of Tier 2, then proceed to the other courses and return to this one when the next session opens up.
- [ ] Book: [Biology](https://openstax.org/details/books/biology)
- [ ] Course: [Linear Algebra](https://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebra-fall-2011/)
- [ ] Book: [Think Bayes](http://www.greenteapress.com/thinkbayes/thinkbayes.pdf)
- [ ] Course: [Proteins: Biology's Workforce](https://www.edx.org/course/proteins-biologys-workforce-ricex-bioc300-1x-2)
- [ ] Course: [Mathematics for Computer Science](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-spring-2015/index.htm)
- [ ] Course: [Python for Data Science](https://www.edx.org/course/python-data-science-uc-san-diegox-dse200x)
- [ ] Course: [Data Visualization and D3.js](https://www.udacity.com/course/data-visualization-and-d3js--ud507)
- [ ] Course: [Statistics and Probability in Data Science using Python](https://www.edx.org/course/statistics-probability-data-science-uc-san-diegox-dse210x)
- [ ] Book: [Think DSP](http://greenteapress.com/thinkdsp/thinkdsp.pdf)
- [ ] Course: [DNA: Biology’s Genetic Code](https://www.edx.org/course/dna-biologys-genetic-code-ricex-bioc300-2x-1)
- [ ] Course: [Machine Learning](https://www.coursera.org/learn/machine-learning)
- [ ] Book: [Think Complexity](http://greenteapress.com/complexity2/thinkcomplexity2.pdf)
- [ ] Course: [Database Mini-Courses](https://lagunita.stanford.edu/courses/DB/2014/SelfPaced/about) - take all mini-courses
- [ ] Course: [Deep Learning](https://www.udacity.com/course/deep-learning--ud730)
- [ ] Project: Do 20 problems (of your choice) on [Rosalind](http://rosalind.info/problems/locations/)
- [ ] Project: [Digit Recognizer](https://www.kaggle.com/c/digit-recognizer)
- [ ] Project: Complete the [Hackerrank Probability Challenges](https://www.hackerrank.com/domains/mathematics/probability)
- [ ] Project: Complete the [Hackerrank Linear Algebra Foundations Challenges](https://www.hackerrank.com/domains/mathematics/linear-algebra-foundations)
- [ ] Project: Complete one competition of your choice from [Crowd Analytix](https://www.crowdanalytix.com/community)
- [ ] Project: Complete one [Bot Programming Competition on CodinGame](https://www.codingame.com/multiplayer/bot-programming)
## Tier 3 - add more rigor
- [ ] Course: [Introduction to Algorithms](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/index.htm) (Python - requires book purchase) or [Algorithms, Part I](https://www.coursera.org/learn/algorithms-part1) and [Algorithms, Part II](https://www.coursera.org/learn/algorithms-part2) (Java)
- [ ] Course: [Design and Analysis of Algorithms](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2015/index.htm) (Python - requires book purchase) or [Analysis of Algorithms](https://www.coursera.org/learn/analysis-of-algorithms) (Java)
- [ ] Book: [The Art of R Programming](http://heather.cs.ucdavis.edu/~matloff/132/NSPpart.pdf)
- [ ] Course: [Mathematical Biostatistics Boot Camp 1](https://www.coursera.org/learn/biostatistics)
- [ ] Course: [Mathematical Biostatistics Boot Camp 2](https://www.coursera.org/learn/biostatistics-2)
- [ ] Course Series: [Big Data Path on Cognitive Class](https://cognitiveclass.ai/learn/big-data/)
- [ ] Course: [Convex Optimization](https://lagunita.stanford.edu/courses/Engineering/CVX101/Winter2014/about)
- [ ] Book: [R for Data Science](http://r4ds.had.co.nz/)
- [ ] Course: [Probability: Basic Concepts & Discrete Random Variables](https://www.edx.org/course/probability-basic-concepts-discrete-purduex-416-1x-1)
- [ ] Course Series: [Hadoop Path on Cognitive Class](https://cognitiveclass.ai/learn/hadoop/)
- [ ] Course: [Probability: Distribution Models & Continuous Random Variables](https://www.edx.org/course/probability-distribution-models-purduex-416-2x-1)
- [ ] Course: [Introduction to Mechanics, Part 1](https://www.edx.org/course/introduction-mechanics-part-1-ricex-phys-101-1x)
- [ ] Course: [Electricity & Magnetism, Part 2](https://www.edx.org/course/electricity-magnetism-part-2-ricex-phys102-2x-0)
- [ ] Course: [Statistics for Applications](https://ocw.mit.edu/courses/mathematics/18-650-statistics-for-applications-fall-2016/index.htm)
- [ ] Course: [Intro to Hadoop and MapReduce](https://www.udacity.com/course/intro-to-hadoop-and-mapreduce--ud617)
- [ ] Course: [Differential Equations](https://ocw.mit.edu/courses/mathematics/18-03sc-differential-equations-fall-2011/)
- [ ] Project: Do 30 problems (of your choice) on [Rosalind](http://rosalind.info/problems/locations/)
- [ ] Project: Complete one competition of your choice on [Kaggle](https://www.kaggle.com/competitions?sortBy=prize&group=active&page=1&pageSize=20)
- [ ] Project: Complete the [Hackerrank Algorithms Challenges](https://www.hackerrank.com/domains/algorithms)
- [ ] Project: Complete one competition of your choice from [Crowd Analytix](https://www.crowdanalytix.com/community)
- [ ] Project: Complete one competition of your choice from [Analytics Vidhya](https://datahack.analyticsvidhya.com/contest/all/)
## Tier 4 - practical applications
- [ ] Book: [Machine Learning with R](https://vk.com/doc168073_317718618?hash=90cd2a2976f079b1e7&dl=43db8b80daa2831cc1)
- [ ] Course: [Statistics and R for the Life Sciences](https://www.edx.org/course/statistics-r-harvardx-ph525-1x-0)
- [ ] Course: [Introduction to Linear Models and Matrix Algebra](https://www.edx.org/course/introduction-linear-models-matrix-harvardx-ph525-2x-1)
- [ ] Book: [The Quest for Artificial Intelligence](http://ai.stanford.edu/~nilsson/QAI/qai.pdf)
- [ ] Course: [Statistical Inference and Modeling for High-throughput Experiments](https://www.edx.org/course/statistical-inference-modeling-high-harvardx-ph525-3x-0)
- [ ] Course: [High-Dimensional Data Analysis](https://www.edx.org/course/high-dimensional-data-analysis-harvardx-ph525-4x-0)
- [ ] Course: [Introduction to Bioconductor: Annotation and Analysis of Genomes and Genomic Assays](https://www.edx.org/course/introduction-bioconductor-annotation-harvardx-ph525-5x-0)
- [ ] Course: [High-performance Computing for Reproducible Genomics](https://www.edx.org/course/high-performance-computing-reproducible-harvardx-ph525-6x-0)
- [ ] Course: [Case Studies in Functional Genomics](https://www.edx.org/course/case-studies-functional-genomics-harvardx-ph525-7x-0)
- [ ] Course: [Quantum Mechanics for Everyone](https://www.edx.org/course/quantum-mechanics-everyone-georgetownx-phyx-008-01x)
- [ ] Course: [Artificial Intelligence (AI)](https://www.edx.org/course/artificial-intelligence-ai-columbiax-csmm-101x-1)
- [ ] Course: [Machine Learning](https://www.edx.org/course/machine-learning-columbiax-csmm-102x-1)
- [ ] Book: [Multiagent Systems](http://www.masfoundations.org/download.html)
- [ ] Course: [Robotics](https://www.edx.org/course/robotics-columbiax-csmm-103x-0)
- [ ] Course: [Animation and CGI Motion](https://www.edx.org/course/animation-cgi-motion-columbiax-csmm-104x-0)
- [ ] Project: Do 30 problems (of your choice) on [Rosalind](http://rosalind.info/problems/locations/)
- [ ] Project: Complete one competition of your choice on [Kaggle](https://www.kaggle.com/competitions?sortBy=prize&group=active&page=1&pageSize=20)
- [ ] Project: Complete one competition of your choice on [Kaggle](https://www.kaggle.com/competitions?sortBy=prize&group=active&page=1&pageSize=20)
- [ ] Project: Complete the [Hackerrank Artificial Intelligence Challenges](https://www.hackerrank.com/domains/ai)
- [ ] Project: Complete one competition of your choice from [Crowd Analytix](https://www.crowdanalytix.com/community)
- [ ] Project: Complete one competition of your choice from [Analytics Vidhya](https://datahack.analyticsvidhya.com/contest/all/)
- [ ] Project: Complete one competition of your choice from [Driven Data](https://www.drivendata.org/competitions/)
## Tier 5 - Bonus Round - Advanced
- [ ] Course: [Topics in Mathematics of Data Science](https://ocw.mit.edu/courses/mathematics/18-s096-topics-in-mathematics-of-data-science-fall-2015/index.htm)
- [ ] Book: [Bayesian Methods for Hackers](https://github.com/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers)
- [ ] Book: [Bayesian Methods in the Search for MH370](https://link.springer.com/book/10.1007/978-981-10-0379-0)
- [ ] Course: [Mathematics of Machine Learning](https://ocw.mit.edu/courses/mathematics/18-657-mathematics-of-machine-learning-fall-2015/index.htm)
- [ ] Book: [Mining of Massive Datasets](http://infolab.stanford.edu/~ullman/mmds/book.pdf)
- [ ] Book: [Informatics in the Future](https://link.springer.com/book/10.1007%2F978-3-319-55735-9)
- [ ] Course: [Discrete Stochastic Processes](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-262-discrete-stochastic-processes-spring-2011/)
- [ ] Book: [Bisociative Knowledge Discovery](https://link.springer.com/book/10.1007%2F978-3-642-31830-6)
- [ ] Course: [Dynamic Systems and Control](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-241j-dynamic-systems-and-control-spring-2011/index.htm)
- [ ] Book: [New Horizons for a Data-Driven Economy](https://link.springer.com/book/10.1007%2F978-3-319-21569-3)
- [ ] Book: [The Challenge of Chance](https://link.springer.com/book/10.1007/978-3-319-26300-7)
================================================
FILE: deprecated/faq.md
================================================
# Frequently Asked Questions
## What are the pre-requisites to begin any of the guides?
You should understand how to use Git and Github, which you can learn using any of these free resources:
**Note**: Just pick one of the courses below to learn the basics. You will learn a lot more once you get started!
- [Git Videos](https://git-scm.com/videos) or [Pro Git](https://git-scm.com/book/en/v2)
- [Git - the simple guide](http://rogerdudler.github.io/git-guide/)
- [GitHub Training & Guides](https://www.youtube.com/playlist?list=PLg7s6cbtAD15G8lNyoaYDuKZSKyJrgwB-)
- [GitHub Hello World](https://guides.github.com/activities/hello-world/)
- [Git Immersion](http://gitimmersion.com/index.html)
- [How to Use Git and GitHub](https://www.udacity.com/course/how-to-use-git-and-github--ud775)
- How to not f-up your local files with Git [part1](https://medium.com/@francesco.agnoletto/how-to-not-f-up-your-local-files-with-git-part-1-e0756c88fd3c), [part2](https://medium.com/@francesco.agnoletto/how-to-not-f-up-your-local-files-with-git-part-2-fc4e243be02a) and [part 3](https://medium.com/chingu/how-to-not-f-up-your-local-files-with-git-part-3-bf03b27b6e64)
## What development environment should I be using?
* Pick your favorite editor, write all your code on your own machine in that editor
* Save all your code to GitHub
* Publish all your projects to the web - using surge.sh, github pages, heroku etc
* Avoid codepen.
* Avoid cloud 9 or any other "just code it on the web so you don't have to learn how to code on your own machine" site.
* Whenever you are doing a "Clone this" project - use only assets you create yourself or that have copyrights which would allow you to use them.
* Develop the habit of giving attribution for everything you use that was the product of someone else's effort.
## How should I approach the items in the guides?
### Power up your learning - make every minute count
* When you're working through a book, type out the example code and do all the exercises.
* When you're working through a course, do all the assignments.
* When you're building a Project, include a build process (like [gulp](http://gulpjs.com/)), include at least 5 automated tests ([Karma](https://karma-runner.github.io/1.0/index.html), [mocha](https://mochajs.org/), sinon, chai, jasmine, tape, whatever works for you), include a README.md file that clearly explains the project, and practice using [meaningful
commit messages](http://chris.beams.io/posts/git-commit/)
* Use each project to demonstrate that you can deliver an optimized product. Implement tests (as I mentioned above), use your build process to minimize assets, use a linter (like [ESLint](http://eslint.org/)) on your JavaScript and have some method to your madness when it comes to your css naming conventions (like [BEM](http://getbem.com/introduction/))
* As you learn, take the time to discuss what you're learning with others: write blog posts, spend time actively discussing code and concepts with other developers (of varying skill levels), if you're comfortable with it - produce some helpful videos explaining topics that others might find daunting, and (most importantly) embrace the opportunity to help others one on one. You never know something so thoroughly as when you take the time to deeply consider it and explain it to someone else who might be struggling. Helping others doesn't just benefit them, it benefits you by increasing your understanding and mastery of the topic. Help people - you'll learn a lot in the process - you'll be a better developer for having done it.
### For each item you should:
* take notes, on a blog, in markdown, wherever, somewhere - not about what you read, or about what the instructor said - about what you learned
* build something - even if it's just a 20 line function that computes something you find interesting
* if you build something, document it and test it as appropriate
* do the exercises, build the projects - fully, not some scaled down halfassery
### For four projects of your choosing
* Seek 1-3 other developers to collaborate on the project
* Coordinate with the team to complete the project
* Build the project out to a full production quality application
* Invite others who are not associated with the team to rigorously test the final product.
* Resolve any legitimate issues found
### Once per month - do two or more of the following:
* Write up a comprehensive blog post or markdown entry in a repository detailing the high points of what you learned that month
* Watch [this video](https://www.youtube.com/watch?v=4NIb9l3imAo) and [this video](https://www.youtube.com/watch?v=Eg5-tdAwclo) - on interviewing
* Read [this](http://steve-yegge.blogspot.co.uk/2007_09_01_archive.html) - on crafting a resume
* Do one lesson from [CUST104: Business Communications](https://learn.saylor.org/course/view.php?id=345)
* Live stream what you're working on for an hour. Or, lend a hand to someone who needs help by screensharing and walking them through it.
* Catch up on industry reading on sites like [Joel on Software](https://www.joelonsoftware.com/), [Coding Horror](https://blog.codinghorror.com/), [CSS Tricks](https://css-tricks.com/), [A List Apart](http://alistapart.com/articles), [UX Myths](http://uxmyths.com/), [JavaScript Weekly](http://javascriptweekly.com/)
## Do you have any hints for success?
* have git commits every week, most of the days of the week
* try to get in one of [@tropicalchancer's cohorts](https://chingu-cohorts.github.io/chingu-directory/) - be active once you're in
* try to pick one to two other languages to use regularly for solving algorithms and implementing projects in addition to JavaScript (good choices would be to pick one of C++, Java or Python and one of Golang or Rust).
* spend 30 minutes a day studying math on Khan Academy
## What should I be studying alongside the guides?
There WILL be math. And, it's important. If the thought frightens you, or bores you, or has you thinking
"this isn't for me", head to [Khan Academy](https://www.khanacademy.org/) right now, sign up, and start devoting 30 minutes a day. This is an investment that will pay off. I'm not making this up.
## Should I work through a guide in order?
Yes. Skip nothing, even if you think you already know it.
If you need to "double up" for variety, do no more than two items from the guide
simultaneously and don't add a third until you finish one of the two.
Everything builds on everything else. Plus, if you try to do everything at once, you'll finish nothing - or
end up "accidentally on purpose" skipping early foundational material because it was "too hard" and you moved on
"just for now" which eventually morphed to "forever".
## How long will this take me?
I don't know? How lazy are you? How much time are you devoting to it?
How often do you plan to decide "this is too hard" and waste a month or more
surfing YouTube for an easier option?
## I'm stuck, what should I do?
* Use the official docs.
* Use MDN
* Train yourself to write the code, not copy paste it.
* Stack overflow should be a resource for ideas, not a crutch to help you avoid writing code yourself.
* [Shay Howe](http://learn.shayhowe.com/) has a good overview of HTML and CSS if you need more than you got in the CS50 and MEAN stack course to feel comfortable with the projects.
* If you're at a loss for how to figure out the design for a page you're building, reference [Google's Material Design documentation](https://material.google.com/). Try to become familar with it by the time you finish the list of resources in this post. It will save you from having shoddy looking pages.
#### If you get lost. If this is too hard.
* Buck up camper - no one said this was easy - it is WORTH IT though.
* Figure it out. Ask for someone to point you in the right direction.
* Don't Quit.
* Don't Panic!
## How do I deploy a frontend project
Here are some resources to help you learn how to use surge.sh, you could also use GitHub Pages or any
other host you want, but figuring that out is up to you.
- [YouTube video by Hiếu Sensei walking through the entire process](https://www.youtube.com/watch?v=W10ckhQ1H7c)
- [YouTube video by David Wells that goes into far more detail](https://www.youtube.com/watch?v=LZA8QVLOinE)
- [Very brief article and video showing how to quickly deploy to surge.sh](http://toolsfortheweb.net/hosting/using-surge-for-free-static-site-hosting/)
- [surge.sh site](https://surge.sh/)
## What sites should I have bookmarked and reference frequently?
* [surge.sh](https://surge.sh/) - deploy your frontend projects here (or use github pages)
* [MDN](https://developer.mozilla.org/en-US/) - look HTML, CSS, and JavaScript stuff up here
* [Heroku](https://dashboard.heroku.com/) - deploy your fullstack projects here (or glitch)
* [Firebase](https://firebase.google.com/) or [mLab](https://mlab.com/) - database hosting
* [GitHub](https://github.com/) - store your code here
* [Material Design](https://material.google.com) - lean on this when you need a structure for creating a minimalistic but awesome looking site
* [Material Palette](https://www.materialpalette.com/) - for selecting color schemes
* [Wirify](https://www.wirify.com/) - for quickly turning a web page into a wireframe so you can see the big picture instead of all the graphics
## I need some extra stuff to do on the side for more practice. Have any ideas?
* sign up for https://www.codingame.com - finish every training challenge up through "very hard", for the hard and very hard challenges, you'll likely need to have worked down the main list in this post to the data structures book
* learn [Sass](http://sass-lang.com/guide)
* Join one of the Chingu cohorts that @tropicalchancer puts together and actively participate on one or more group projects
* Project: Clone [this](https://blackrockdigital.github.io/startbootstrap-creative/) landing page
* Project: Clone [this](https://blackrockdigital.github.io/startbootstrap-clean-blog/) blog template - note that there are multiple pages
* Project: Clone [this](https://creativemarket.com/ikonome/686585-Material-Resume-Blue/screenshots/#screenshot2) online resume template
* Project: Clone the front page of [this](https://urbanarmorgear.com/) website modifying it to highlight a different product or industry. Make special note of the secondary navigation bar at the top. Implementing that is the highlight of this project.
* Project: Do one of the FCC projects not listed in this guide.
* Goal: Contribute one pull request per month to an open source project of your choosing.
## I really want some more advanced stuff for practice. Have any ideas?
* pick a pet web development project you can code in a week and complete it
* code an android application
* learn golang or rust and complete any of the backend projects from FCC with that language as the backend language
* redo any of the algorithmic type projects you've already completed from the list, in a language other than JavaScript
* pick an open source project from [Code Triage](https://www.codetriage.com/) and contribute to fixing an open issue
* code a flash cards application, for jotting quick notes you can use to quiz yourself later
* hit hackerrank and complete the Project Euler problems
## Are there any additional free resources you'd recommend alongside the materials in the guides?
[OpenStax](https://openstax.org/subjects) - Open Source textbooks on a variety of University level topics, check here if you want a reference math or physics textbook
================================================
FILE: deprecated/game-programming-2.0.md
================================================
# Video Game Programming - comprehensive foundations
I list a lot of games to clone in this list. I do not mean make the exact same game down to the assets and name and everything. I mean make a game that uses the same mechanics. **Don't get yourself sued for copyright violation.**
There are references at the bottom of this list to answer some common questions relevant only to this guide (and thus not present in the [FAQ](./faq.md) which contains a plathora of information pertinent to not only this guide, but the others as well.)
## Tier 0 - Beginner "taste" of Game Programming - JavaScript based
### Get some experience doing graphics with JavaScript using processing.js
- [ ] Course: [Intro to HTML/CSS: Making webpages](https://www.khanacademy.org/computing/computer-programming/html-css)
- [ ] Project: Build all assignments in the Intro to HTML/CSS: Making webpages course
- [ ] Course: [Intro to JS: Drawing & Animation](https://www.khanacademy.org/computing/computer-programming/programming)
- [ ] Project: Build all assignments in the Drawing and Animation course
- [ ] Course: [Advanced JS: Games & Visualizations](https://www.khanacademy.org/computing/computer-programming/programming-games-visualizations)
- [ ] Project: Build all assignments in the Games & Visualizations course
- [ ] Project: Build a "pet project" game on Khan Academy using all the skills you've learned with processing.js. Make sure it has, at minimum, a "start game" screen, at least one level of a playable game that keeps score, and a "game over" screen.
- [ ] Course: [Advanced JS: Natural Simulations](https://www.khanacademy.org/computing/computer-programming/programming-natural-simulations)
- [ ] Project: Build all assignments in the Natural Simulations course
- [ ] Project: Build a "pet project" game on Khan Academy using all the skills you've learned with processing.js. Make sure it has, at minimum, a "start game" screen, at least one level of a playable game that keeps score, and a "game over" screen.
- [ ] Course: [HTML/JS: Making webpages interactive](https://www.khanacademy.org/computing/computer-programming/html-css-js)
- [ ] Project: Build all assignments in the HTML/JS: Making webpages interactive course
### Get familiar with JavaScript (Feel free to skip this and come back and "unskip it" if at any point you feel daunted by what comes later)
- [ ] Book: [Eloquent JavaScript](https://eloquentjavascript.net/)
- [ ] Book: [You Don't Know JS: Up & Going](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/up%20&%20going/README.md#you-dont-know-js-up--going)
- [ ] Book: [You Don't Know JS: Scope & Closures](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/scope%20&%20closures/README.md#you-dont-know-js-scope--closures)
- [ ] Book: [You Don't Know JS: this & Object Prototypes](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/this%20&%20object%20prototypes/README.md#you-dont-know-js-this--object-prototypes)
- [ ] Book: [You Don't Know JS: Types & Grammar](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/types%20&%20grammar/README.md#you-dont-know-js-types--grammar)
- [ ] Book: [You Don't Know JS: Async & Performance](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/async%20&%20performance/README.md#you-dont-know-js-async--performance)
- [ ] Book: [You Don't Know JS: ES6 & Beyond](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/es6%20&%20beyond/README.md#you-dont-know-js-es6--beyond)
### Learn a smidge of math and algorithms so you can compute things
- [ ] Course: [Algebra I](https://www.khanacademy.org/math/algebra)
- [ ] Course: [Algebra II](https://www.khanacademy.org/math/algebra2)
- [ ] Course: [Trigonometry](https://www.khanacademy.org/math/trigonometry)
- [ ] Course: [Precalculus](https://www.khanacademy.org/math/precalculus)
- [ ] Course: [Algorithms](https://www.khanacademy.org/computing/computer-science/algorithms)
### Get Familiar with Phaser and setup your bookmarks to Phaser Docs and helpful links for getting/creating assets
- [ ] Tutorial: [Getting Started with Phaser](http://phaser.io/tutorials/getting-started)
- [ ] Tutorial: [Making Your First Phaser Game](http://phaser.io/tutorials/making-your-first-phaser-game)
- [ ] Bookmark: [Phaser docs](http://phaser.io/docs/)
- [ ] Bookmark: [Phaser examples](http://phaser.io/examples)
- [ ] Bookmark: [Tiled](http://www.mapeditor.org/)
- [ ] Bookmark: [OpenGameArt](http://opengameart.org/art-search-advanced?keys=&field_art_type_tid%2525255B%2525255D=9&sort_by=count&sort_order=DESC)
- [ ] Bookmark: [Gimp](https://www.gimp.org/)
- [ ] Article: [Pixel Art Tutorial](http://makegames.tumblr.com/post/42648699708/pixel-art-tutorial)
- [ ] Article: [The Total Beginner’s Guide to Better 2D Game Art](http://www.gamedev.net/page/resources/_/creative/visual-arts/the-total-beginner%E2%80%99s-guide-to-better-2d-game-art-r2959)
### Build these using Phaser- in order - the complexity builds with each one
- [ ] Game: Concentration (Reference [Wikipedia](<https://en.wikipedia.org/wiki/Concentration_(game)>))
- [ ] Game: Tic-Tac-Toe (unbeatable AI opponent) [Wikipedia](http://en.wikipedia.org/wiki/Tic-tac-toe)
- [ ] Game: Minesweeper [Wikipedia](<http://en.wikipedia.org/wiki/Minesweeper_(computer_game)>)
- [ ] Game: Sokoban [Wikipedia](https://en.wikipedia.org/wiki/Sokoban)
- [ ] Game: Snake [Wikipedia](<http://en.wikipedia.org/wiki/Snake_(video_game)>)
- [ ] Game: Pong (Reference Tutorial [Pong - Tutorials 1 through 7](http://www.zekechan.net/tag/pong/))
- [ ] Game: Galaga
- [ ] Game: Breakout
## Tier 1
- [ ] Course: [Introduction to Computer Science - CS50](https://www.edx.org/course/introduction-computer-science-harvardx-cs50x#!)
- [ ] Course: [Effective Thinking Through Mathematics](https://www.edx.org/course/effective-thinking-through-mathematics-utaustinx-ut-9-01x)
- [ ] Game: Hangman
- [ ] Course: [CS50's Introduction to Game Development](https://www.edx.org/course/cs50s-introduction-to-game-development)
- [ ] Game: Your choice
- [ ] Game: Your choice
- [ ] Course: [Video Game Design History](https://www.edx.org/course/video-game-design-history-ritx-game101x#!)
- [ ] Game: Your choice
- [ ] Book: [Precalculus](http://www.stitz-zeager.com/szprecalculus07042013.pdf)
- [ ] Book: [Fundamentals of C++ Programming](http://python.cs.southern.edu/cppbook/progcpp.pdf) and [labs](http://www.cs.southern.edu/halterman/Courses/Winter2014/124/Labs/index.html)
- [ ] Game: Adventure (see [text adventure games](http://www.web-adventures.org/))
- [ ] Exercises: [Code Monk](https://www.hackerearth.com/practice/), then [CodinGame](https://www.codingame.com/start) - begin working through these lessons, make them a daily habit as you continue on
- [ ] Article: Read [Algorithms and Flowcharts](http://www.academia.edu/7857144/ALGORITHMS_AND_FLOWCHARTS) and then familiarize yourself with [Pencil](http://pencil.evolus.vn/) ... start flowcharting complex portions of your code logic as part of your documentation
- [ ] Book: [An Introduction to Design Patterns in C++ with Qt 4](http://ptgmedia.pearsoncmg.com/images/9780131879058/downloads/0131879057_Ezust_book.pdf)
- [ ] Game: Zork (see [text adventure games](http://www.web-adventures.org/))
- [ ] Article: [Building a Game on Your Own](http://www.flipcode.com/archives/Building_A_Game_On_Your_Own.shtml)
- [ ] Article: [How do I Make Games](http://web.archive.org/web/20051104034215/http://www.lupinegames.com/articles/path_to_dev.html)
- [ ] Game: Your choice
- [ ] Article: [So You Want to Be a Game Programmer?](http://gamesfromwithin.com/so-you-want-to-be-a-game-programmer)
- [ ] Article: [Finishing a Game](http://makegames.tumblr.com/post/1136623767/finishing-a-game)
- [ ] Article: [Pixel Art Tutorial](http://makegames.tumblr.com/post/42648699708/pixel-art-tutorial)
- [ ] Game: Your choice
- [ ] Article: [The Total Beginner’s Guide to Better 2D Game Art](http://www.gamedev.net/page/resources/_/creative/visual-arts/the-total-beginner%E2%80%99s-guide-to-better-2d-game-art-r2959)
- [ ] Course: [Single Variable Calculus](https://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/)
- [ ] Game: Duck Hunt
- [ ] Course: [The Rise of Superheroes and Their Impact On Pop Culture](https://www.edx.org/course/rise-superheroes-impact-pop-culture-smithsonianx-popx1-5x#!)
- [ ] Game: Sokoban, Snake, or Minesweeper - your choice
## Tier 2
- [ ] Course: [Product Design](https://www.udacity.com/course/product-design--ud509)
- [ ] Book: [Game Programming Patterns](http://gameprogrammingpatterns.com/contents.html)
- [ ] Game: Galaga
- [ ] Course: [Mathematics for Computer Science](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-spring-2015/index.htm)
- [ ] Tutorial: [Introduction to OpenGL Graphics Programming](http://lazyfoo.net/tutorials/OpenGL/index.php)
- [ ] Tutorial: [Beginning Game Programming v2.0](http://lazyfoo.net/tutorials/SDL/index.php)
- [ ] Game: Frogger
- [ ] Course: [Software Development Process](https://www.udacity.com/course/software-development-process--ud805)
- [ ] Book: [Applied Discrete Structures](http://faculty.uml.edu/klevasseur/ads-latex/ads.pdf) and [assignments](http://www.cs.southern.edu/halterman/Courses/Fall2015/280/Assignments/index.html)
- [ ] Game: Space Invaders
- [ ] Course: [Algorithms, Part I](https://www.coursera.org/learn/algorithms-part1)
- [ ] Course: [Algorithms, Part II](https://www.coursera.org/learn/algorithms-part2)
- [ ] Game: Tetris
- [ ] Course: [Software Architecture & Design](https://www.udacity.com/course/software-architecture-design--ud821)
- [ ] Article List: [Amit’s Game Programming Information](http://www-cs-students.stanford.edu/~amitp/gameprog.html)
- [ ] Article: [General Concepts for Beginning Developers](http://www.hobbygamedev.com/beg/general-concepts-for-beginning-game-developers/)
- [ ] Article: [OpenGL Math Primer](http://lazyfoo.net/articles/article10/index.php)
- [ ] Game: Breakout
- [ ] Course: [Multivariable Calculus](https://ocw.mit.edu/courses/mathematics/18-02sc-multivariable-calculus-fall-2010/)
- [ ] Course: [Intro to Physics](https://www.udacity.com/course/intro-to-physics--ph100)
- [ ] Game: Asteroids
- [ ] Course: [Agile Software Development](https://www.edx.org/course/agile-software-development-ethx-asd-1x)
- [ ] Game: Puzzle Bobble
## Tier 3
- [ ] Article: [AI](http://lazyfoo.net/articles/article08/index.php)
- [ ] Article: [Tiling](http://lazyfoo.net/tutorials/SDL/39_tiling/index.php)
- [ ] Article: [Making a Level Editor](http://lazyfoo.net/articles/article09/index.php)
- [ ] Game: PacMan
- [ ] Course: [Databases](https://lagunita.stanford.edu/courses/DB/2014/SelfPaced/about)
- [ ] Course: [Software Testing](https://www.udacity.com/course/software-testing--cs258)
- [ ] Course: [Software Debugging](https://www.udacity.com/course/software-debugging--cs259)
- [ ] Game: Super Mario Brothers
- [ ] Course: [Linear Algebra - Foundations to Frontiers](https://www.edx.org/course/linear-algebra-foundations-frontiers-utaustinx-ut-5-04x#!)
- [ ] Book: [Linear Algebra](http://joshua.smcvt.edu/linearalgebra/book.pdf) and [answers to exercises](http://joshua.smcvt.edu/linearalgebra/jhanswer.pdf)
- [ ] Game: Sonic the Hedgehog
- [ ] Course: [Cryptography I](https://www.coursera.org/course/crypto)
- [ ] Course: [Cryptography II](https://www.coursera.org/course/crypto2)
- [ ] Book: [Artificial Intelligence](http://artint.info/html/ArtInt.html)
- [ ] Game: Zelda
- [ ] Book: [Open Data Structures](http://www.aupress.ca/books/120226/ebook/99Z_Morin_2013-Open_Data_Structures.pdf)
- [ ] Course: [Compilers](https://lagunita.stanford.edu/courses/Engineering/Compilers/Fall2014/about)
- [ ] Course: [Artificial Intelligence](https://www.edx.org/course/artificial-intelligence-uc-berkeleyx-cs188-1x#!)
- [ ] Game: Gauntlet
- [ ] Book: [Data Structures and Algorithm Analysis](http://people.cs.vt.edu/~shaffer/Book/C++3e20130328.pdf) and [assignments](http://www.cs.southern.edu/halterman/Courses/Winter2016/318/Assignments/index.html)
- [ ] Course: [Computer Graphics](https://www.edx.org/course/computer-graphics-uc-san-diegox-cse167x)
- [ ] Game: Doom
## Tier 4
- [ ] Course: [Machine Learning](https://www.coursera.org/learn/machine-learning)
- [ ] Game: Final Fantasy
- [ ] Course: [Computer Networks](https://lagunita.stanford.edu/courses/Engineering/Networking-SP/SelfPaced/about)
- [ ] Course: [Parallel Computer Architecture and Programming](http://15418.courses.cs.cmu.edu/spring2016/home)
- [ ] Game: Multiplayer card game (your pick) with both AI and networked (human) players
- [ ] Course: [Computer Architecture](https://www.coursera.org/course/comparch)
- [ ] Tutorial: [Programmed Introduction to MIPS Assembly Language](http://chortle.ccsu.edu/AssemblyTutorial/)
- [ ] Course: [Operating Systems and System Programming](https://www.youtube.com/view_play_list?p=-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c)
- [ ] Course: [Interactive 3D Graphics](https://www.udacity.com/course/interactive-3d-graphics--cs291)
- [ ] Getting Started [Get Started with UE4](https://docs.unrealengine.com/latest/INT/GettingStarted/index.html)
- [ ] Tutorials: [Unreal Engine 4 official video tutorials](https://docs.unrealengine.com/latest/INT/Videos/)
- [ ] Documentation: [Unreal Engine 4 Documentation](https://docs.unrealengine.com/latest/INT/)
- [ ] Book: [The Blender Manual](https://www.blender.org/manual/) - study every section
- [ ] Game: Pick any prior game and re-do it in 3d using Unreal Engine
- [ ] Game: Diablo
- [ ] Game: Your choice - include AI
- [ ] Game: Your choice - Multiplayer
- [ ] Game: Your choice - with leaderboards
- [ ] Game: Your choice :D
- [ ] Game: Your choice :D
## Tier 5
Tier 5 involves branching out to target the platforms you're most interested in and developing skills in the relevant technologies. At this point, you have a strong foundation in maths and algorithms, significant practice working with graphics, hands on experience building a variety of games, exposure to AI and Machine learning, exposure to networking and hardware concerns, and should have learned various software engineering practices (design, testing, debugging) so that you're writing quality code.
Now that you've got a really strong foundation, the sky's the limit. Pick the platform you want to develop for, Android, iOS, Windows, Linux, Mac, Web, XBox, Playstation, whatever - and start reading. Start with official docs, read them all. Find blogs dedicated to that platform. Rebuild some of the easiest projects you've done thus far, targeting that platform.
Use the Force :D
## Bookmarks you should have
- [surge.sh](https://surge.sh/) - deploy your frontend projects here (or use github pages)
- [MDN](https://developer.mozilla.org/en-US/) - look HTML, CSS, and JavaScript stuff up here
- [Heroku](https://dashboard.heroku.com/) - deploy your fullstack projects here (or hyperdev)
- [Firebase](https://firebase.google.com/) or [mLab](https://mlab.com/) - database hosting
- [Material Design](https://material.google.com) - lean on this when you need a structure for creating a minimalistic but awesome looking site
- [Material Palette](https://www.materialpalette.com/) - for selecting color schemes
- [GitHub](https://github.com/) - store your code here
- [Gimp](https://www.gimp.org/) - image editor
- [Blender](https://www.blender.org/) - 3d creation suite
- [Inkscape](https://inkscape.org/en/) - vector drawing
- [Tiled](http://www.mapeditor.org/) - tilemap editor
- [Leshy SpriteSheet Tool](https://www.leshylabs.com/apps/sstool/) - HTML5 tool for creating, packing, and modifying sprite sheets and texture atlases.
- [OpenGameArt](http://opengameart.org/art-search-advanced?keys=&field_art_type_tid%2525255B%2525255D=9&sort_by=count&sort_order=DESC) - open source game art (check the copyright, some are more open than others)
- [Wirify](https://www.wirify.com/) - for quickly turning a web page into a wireframe so you can see the big picture instead of all the graphics
## For every game project
- Mockup the game screens by hand, using Pencil, or in graphics software - before you start coding the game
- Write a document describing the game, win conditions, lose conditions, and features you intend to include - before you start coding
- Create a minimal demo before building out the whole things
- Store your mockups, design documentation, and game progress in a versionable repository (GitHub)
- Include tests :D
- Include documentation on how to build and run the game
## If you need a productive break from a course or book to clear your head, BUILD A GAME, then get back to the list. Here's some ideas (some are already present in the lists above):
- Pong
- Zork
- Mastermind
- Memory Puzzle
- Galaga
- PacMan
- Breakout
- Solitaire
- Flappy Bird
- Space Invaders
- Super Mario Bros
- Fruit Ninja
- Last Stand
- Tetris
- Angry Birds
- Bejeweled
- Sokoban
- Katamari Damacy
- Blackjack (with AI opponents)
- Checkers (with AI opponent)
- Donkey Kong
- Tron (two player, with option for multiplayer or AI opponent)
- Pokemon
- Monopoly (1-4 player, with option for multiplayer or AI opponent)
- Bomberman
- Diablo
- Zelda
- Scythe
- Minecraft
- Risk
- Lunar Lander
- Streetfighter
- Castlevania
================================================
FILE: deprecated/game-programming.md
================================================
# Video Game Programming - comprehensive foundations
## Deprecated - Updated 2.0 version available [here](./game-programming-2.0.md)
I list a lot of games to clone in this list. I do not mean make the exact same game down to the assets and name and everything. I mean make a game that uses the same mechanics. **Don't get yourself sued for copyright violation.**
There are references at the bottom of this list to answer some common questions relevant only to this guide (and thus not present in the [FAQ](./faq.md) which contains a plathora of information pertinent to not only this guide, but the others as well.)
## Tier 0 - Beginner "taste" of Game Programming - JavaScript based
### Get familiar with JavaScript (Feel free to skip this and come back and "unskip it" if at any point you feel daunted by what comes later)
- [ ] Book: [You Don't Know JS: Up & Going](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/up%20&%20going/README.md#you-dont-know-js-up--going)
- [ ] Book: [You Don't Know JS: Scope & Closures](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/scope%20&%20closures/README.md#you-dont-know-js-scope--closures)
- [ ] Book: [You Don't Know JS: this & Object Prototypes](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/this%20&%20object%20prototypes/README.md#you-dont-know-js-this--object-prototypes)
- [ ] Book: [You Don't Know JS: Types & Grammar](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/types%20&%20grammar/README.md#you-dont-know-js-types--grammar)
- [ ] Book: [You Don't Know JS: Async & Performance](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/async%20&%20performance/README.md#you-dont-know-js-async--performance)
- [ ] Book: [You Don't Know JS: ES6 & Beyond](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/es6%20&%20beyond/README.md#you-dont-know-js-es6--beyond)
### Get some experience doing graphics with JavaScript using processing.js
- [ ] Course: [Intro to JS: Drawing & Animation](https://www.khanacademy.org/computing/computer-programming/programming)
- [ ] Project: Build all assignments in the Drawing and Animation course
- [ ] Course: [Advanced JS: Games & Visualizations](https://www.khanacademy.org/computing/computer-programming/programming-games-visualizations)
- [ ] Project: Build all assignments in the Games & Visualizations course
- [ ] Course: [Advanced JS: Natural Simulations](https://www.khanacademy.org/computing/computer-programming/programming-natural-simulations)
- [ ] Project: Build all assignments in the Natural Simulations course
- [ ] Project: Build a "pet project" game on Khan Academy using all the skills you've learned with processing.js. Make sure it has, at minimum, a "start game" screen, at least one level of a playable game that keeps score, and a "game over" screen.
### Learn a smidge of math and algorithms so you can compute things
- [ ] Book: Precalculus (feel free to skip if you're already doing 30 minutes a day of math on Khan Academy)
- [ ] Course: [Algorithms](https://www.khanacademy.org/computing/computer-science/algorithms)
### Get Familiar with Phaser and setup your bookmarks to Phaser Docs and helpful links for getting/creating assets
- [ ] Tutorial: [Getting Started with Phaser](http://phaser.io/tutorials/getting-started)
- [ ] Tutorial: [Making Your First Phaser Game](http://phaser.io/tutorials/making-your-first-phaser-game)
- [ ] Bookmark: [Phaser docs](http://phaser.io/docs/)
- [ ] Bookmark: [Phaser examples](http://phaser.io/examples)
- [ ] Bookmark: [Tiled](http://www.mapeditor.org/)
- [ ] Bookmark: [OpenGameArt](http://opengameart.org/art-search-advanced?keys=&field_art_type_tid%2525255B%2525255D=9&sort_by=count&sort_order=DESC)
- [ ] Bookmark: [Gimp](https://www.gimp.org/)
- [ ] Article: [Pixel Art Tutorial](http://makegames.tumblr.com/post/42648699708/pixel-art-tutorial)
- [ ] Article: [The Total Beginner’s Guide to Better 2D Game Art](http://www.gamedev.net/page/resources/_/creative/visual-arts/the-total-beginner%E2%80%99s-guide-to-better-2d-game-art-r2959)
### Build these - in order - the complexity builds with each one
- [ ] Game: Concentration (Reference [Wikipedia](<https://en.wikipedia.org/wiki/Concentration_(game)>))
- [ ] Game: Tic-Tac-Toe (unbeatable AI opponent) [Wikipedia](http://en.wikipedia.org/wiki/Tic-tac-toe)
- [ ] Game: Minesweeper [Wikipedia](<http://en.wikipedia.org/wiki/Minesweeper_(computer_game)>)
- [ ] Game: Sokoban [Wikipedia](https://en.wikipedia.org/wiki/Sokoban)
- [ ] Game: Snake [Wikipedia](<http://en.wikipedia.org/wiki/Snake_(video_game)>)
- [ ] Game: Pong (Reference Tutorial [Pong - Tutorials 1 through 7](http://www.zekechan.net/tag/pong/))
- [ ] Game: Galaga
- [ ] Game: Breakout
## Tier 1
- [ ] Course: [Introduction to Computer Science - CS50](https://www.edx.org/course/introduction-computer-science-harvardx-cs50x#!)
- [ ] Course: [Effective Thinking Through Mathematics](https://www.edx.org/course/effective-thinking-through-mathematics-utaustinx-ut-9-01x)
- [ ] Game: Hangman
- [ ] Book: [Precalculus](http://www.stitz-zeager.com/szprecalculus07042013.pdf)
- [ ] Book: [Fundamentals of C++ Programming](http://python.cs.southern.edu/cppbook/progcpp.pdf) and [labs](http://www.cs.southern.edu/halterman/Courses/Winter2014/124/Labs/index.html)
- [ ] Game: Adventure (see [text adventure games](http://www.web-adventures.org/))
- [ ] Exercises: [Code Monk](https://www.hackerearth.com/practice/), then [CodinGame](https://www.codingame.com/start) - begin working through these lessons, make them a daily habit as you continue on
- [ ] Article: Read [Algorithms and Flowcharts](http://www.academia.edu/7857144/ALGORITHMS_AND_FLOWCHARTS) and then familiarize yourself with [Pencil](http://pencil.evolus.vn/) ... start flowcharting complex portions of your code logic as part of your documentation
- [ ] Course: [Video Game Design History](https://www.edx.org/course/video-game-design-history-ritx-game101x#!)
- [ ] Book: [An Introduction to Design Patterns in C++ with Qt 4](http://ptgmedia.pearsoncmg.com/images/9780131879058/downloads/0131879057_Ezust_book.pdf)
- [ ] Game: Zork (see [text adventure games](http://www.web-adventures.org/))
- [ ] Article: [Building a Game on Your Own](http://www.flipcode.com/archives/Building_A_Game_On_Your_Own.shtml)
- [ ] Article: [How do I Make Games](http://web.archive.org/web/20051104034215/http://www.lupinegames.com/articles/path_to_dev.html)
- [ ] Article: [So You Want to Be a Game Programmer?](http://gamesfromwithin.com/so-you-want-to-be-a-game-programmer)
- [ ] Article: [Finishing a Game](http://makegames.tumblr.com/post/1136623767/finishing-a-game)
- [ ] Article: [Pixel Art Tutorial](http://makegames.tumblr.com/post/42648699708/pixel-art-tutorial)
- [ ] Article: [The Total Beginner’s Guide to Better 2D Game Art](http://www.gamedev.net/page/resources/_/creative/visual-arts/the-total-beginner%E2%80%99s-guide-to-better-2d-game-art-r2959)
- [ ] Article: [2D Tutorial Series Introduction](http://www.aaroncox.net/tutorials/arcade/Introduction.html)
- [ ] Game: Pong (Reference Tutorial [Paddle Battle](http://www.aaroncox.net/tutorials/arcade/PaddleBattle.html))
- [ ] Course: [Single Variable Calculus](https://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/)
- [ ] Game: Duck Hunt
- [ ] Course: [The Rise of Superheroes and Their Impact On Pop Culture](https://www.edx.org/course/rise-superheroes-impact-pop-culture-smithsonianx-popx1-5x#!)
- [ ] Game: Sokoban, Snake, or Minesweeper - your choice
## Tier 2
- [ ] Course: [Product Design](https://www.udacity.com/course/product-design--ud509)
- [ ] Book: [Game Programming Patterns](http://gameprogrammingpatterns.com/contents.html)
- [ ] Game: Galaga
- [ ] Course: [Mathematics for Computer Science](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-042j-mathematics-for-computer-science-spring-2015/index.htm)
- [ ] Tutorial: [Introduction to OpenGL Graphics Programming](http://lazyfoo.net/tutorials/OpenGL/index.php)
- [ ] Tutorial: [Beginning Game Programming v2.0](http://lazyfoo.net/tutorials/SDL/index.php)
- [ ] Game: Frogger
- [ ] Course: [Software Development Process](https://www.udacity.com/course/software-development-process--ud805)
- [ ] Book: [Applied Discrete Structures](http://faculty.uml.edu/klevasseur/ads-latex/ads.pdf) and [assignments](http://www.cs.southern.edu/halterman/Courses/Fall2015/280/Assignments/index.html)
- [ ] Game: Space Invaders
- [ ] Course: [Algorithms, Part I](https://www.coursera.org/learn/algorithms-part1)
- [ ] Course: [Algorithms, Part II](https://www.coursera.org/learn/algorithms-part2)
- [ ] Game: Tetris (Reference tutorial [Falling Blocks (Tetris)](http://www.aaroncox.net/tutorials/arcade/FallingBlocks.html))
- [ ] Course: [Software Architecture & Design](https://www.udacity.com/course/software-architecture-design--ud821)
- [ ] Article List: [Amit’s Game Programming Information](http://www-cs-students.stanford.edu/~amitp/gameprog.html)
- [ ] Article: [General Concepts for Beginning Developers](http://www.hobbygamedev.com/beg/general-concepts-for-beginning-game-developers/)
- [ ] Article: [OpenGL Math Primer](http://lazyfoo.net/articles/article10/index.php)
- [ ] Game: Breakout (Reference tutorial [Block Breaker (Breakout)](http://www.aaroncox.net/tutorials/arcade/BlockBreaker.html))
- [ ] Course: [Multivariable Calculus](https://ocw.mit.edu/courses/mathematics/18-02sc-multivariable-calculus-fall-2010/)
- [ ] Course: [Intro to Physics](https://www.udacity.com/course/intro-to-physics--ph100)
- [ ] Game: Asteroids
- [ ] Course: [Agile Software Development](https://www.edx.org/course/agile-software-development-ethx-asd-1x)
- [ ] Game: Puzzle Bobble
## Tier 3
- [ ] Article: [AI](http://lazyfoo.net/articles/article08/index.php)
- [ ] Article: [Tiling](http://lazyfoo.net/tutorials/SDL/39_tiling/index.php)
- [ ] Article: [Making a Level Editor](http://lazyfoo.net/articles/article09/index.php)
- [ ] Game: PacMan
- [ ] Course: [Databases](https://lagunita.stanford.edu/courses/DB/2014/SelfPaced/about)
- [ ] Course: [Software Testing](https://www.udacity.com/course/software-testing--cs258)
- [ ] Course: [Software Debugging](https://www.udacity.com/course/software-debugging--cs259)
- [ ] Game: Super Mario Brothers
- [ ] Course: [Linear Algebra - Foundations to Frontiers](https://www.edx.org/course/linear-algebra-foundations-frontiers-utaustinx-ut-5-04x#!)
- [ ] Book: [Linear Algebra](http://joshua.smcvt.edu/linearalgebra/book.pdf) and [answers to exercises](http://joshua.smcvt.edu/linearalgebra/jhanswer.pdf)
- [ ] Game: Sonic the Hedgehog
- [ ] Course: [Cryptography I](https://www.coursera.org/course/crypto)
- [ ] Course: [Cryptography II](https://www.coursera.org/course/crypto2)
- [ ] Book: [Artificial Intelligence](http://artint.info/html/ArtInt.html)
- [ ] Game: Zelda
- [ ] Book: [Open Data Structures](http://www.aupress.ca/books/120226/ebook/99Z_Morin_2013-Open_Data_Structures.pdf)
- [ ] Course: [Compilers](https://lagunita.stanford.edu/courses/Engineering/Compilers/Fall2014/about)
- [ ] Course: [Artificial Intelligence](https://www.edx.org/course/artificial-intelligence-uc-berkeleyx-cs188-1x#!)
- [ ] Game: Gauntlet
- [ ] Book: [Data Structures and Algorithm Analysis](http://people.cs.vt.edu/~shaffer/Book/C++3e20130328.pdf) and [assignments](http://www.cs.southern.edu/halterman/Courses/Winter2016/318/Assignments/index.html)
- [ ] Course: [Computer Graphics](https://www.edx.org/course/computer-graphics-uc-san-diegox-cse167x)
- [ ] Game: Doom
## Tier 4
- [ ] Course: [Machine Learning](https://www.coursera.org/learn/machine-learning)
- [ ] Game: Final Fantasy
- [ ] Course: [Computer Networks](https://lagunita.stanford.edu/courses/Engineering/Networking-SP/SelfPaced/about)
- [ ] Course: [Parallel Computer Architecture and Programming](http://15418.courses.cs.cmu.edu/spring2016/home)
- [ ] Game: Multiplayer card game (your pick) with both AI and networked (human) players
- [ ] Course: [Computer Architecture](https://www.coursera.org/course/comparch)
- [ ] Tutorial: [Programmed Introduction to MIPS Assembly Language](http://chortle.ccsu.edu/AssemblyTutorial/)
- [ ] Course: [Operating Systems and System Programming](https://www.youtube.com/view_play_list?p=-XXv-cvA_iBDyz-ba4yDskqMDY6A1w_c)
- [ ] Course: [Interactive 3D Graphics](https://www.udacity.com/course/interactive-3d-graphics--cs291)
- [ ] Getting Started [Get Started with UE4](https://docs.unrealengine.com/latest/INT/GettingStarted/index.html)
- [ ] Tutorials: [Unreal Engine 4 official video tutorials](https://docs.unrealengine.com/latest/INT/Videos/)
- [ ] Documentation: [Unreal Engine 4 Documentation](https://docs.unrealengine.com/latest/INT/)
- [ ] Book: [The Blender Manual](https://www.blender.org/manual/) - study every section
- [ ] Game: Pick any prior game and re-do it in 3d using Unreal Engine
- [ ] Game: Diablo
- [ ] Game: Your choice - include AI
- [ ] Game: Your choice - Multiplayer
- [ ] Game: Your choice - with leaderboards
- [ ] Game: Your choice :D
- [ ] Game: Your choice :D
## Tier 5
Tier 5 involves branching out to target the platforms you're most interested in and developing skills in the relevant technologies. At this point, you have a strong foundation in maths and algorithms, significant practice working with graphics, hands on experience building a variety of games, exposure to AI and Machine learning, exposure to networking and hardware concerns, and should have learned various software engineering practices (design, testing, debugging) so that you're writing quality code.
Now that you've got a really strong foundation, the sky's the limit. Pick the platform you want to develop for, Android, iOS, Windows, Linux, Mac, Web, XBox, Playstation, whatever - and start reading. Start with official docs, read them all. Find blogs dedicated to that platform. Rebuild some of the easiest projects you've done thus far, targeting that platform.
Use the Force :D
## Bookmarks you should have
- [surge.sh](https://surge.sh/) - deploy your frontend projects here (or use github pages)
- [MDN](https://developer.mozilla.org/en-US/) - look HTML, CSS, and JavaScript stuff up here
- [Heroku](https://dashboard.heroku.com/) - deploy your fullstack projects here (or hyperdev)
- [Firebase](https://firebase.google.com/) or [mLab](https://mlab.com/) - database hosting
- [Material Design](https://material.google.com) - lean on this when you need a structure for creating a minimalistic but awesome looking site
- [Material Palette](https://www.materialpalette.com/) - for selecting color schemes
- [GitHub](https://github.com/) - store your code here
- [Gimp](https://www.gimp.org/) - image editor
- [Blender](https://www.blender.org/) - 3d creation suite
- [Inkscape](https://inkscape.org/en/) - vector drawing
- [Tiled](http://www.mapeditor.org/) - tilemap editor
- [Leshy SpriteSheet Tool](https://www.leshylabs.com/apps/sstool/) - HTML5 tool for creating, packing, and modifying sprite sheets and texture atlases.
- [OpenGameArt](http://opengameart.org/art-search-advanced?keys=&field_art_type_tid%2525255B%2525255D=9&sort_by=count&sort_order=DESC) - open source game art (check the copyright, some are more open than others)
- [Wirify](https://www.wirify.com/) - for quickly turning a web page into a wireframe so you can see the big picture instead of all the graphics
## For every game project
- Mockup the game screens by hand, using Pencil, or in graphics software - before you start coding the game
- Write a document describing the game, win conditions, lose conditions, and features you intend to include - before you start coding
- Create a minimal demo before building out the whole things
- Store your mockups, design documentation, and game progress in a versionable repository (GitHub)
- Include tests :D
- Include documentation on how to build and run the game
## If you need a productive break from a course or book to clear your head, BUILD A GAME, then get back to the list. Here's some ideas (some are already present in the lists above):
- Pong
- Zork
- Mastermind
- Memory Puzzle
- Galaga
- PacMan
- Breakout
- Solitaire
- Flappy Bird
- Space Invaders
- Super Mario Bros
- Fruit Ninja
- Last Stand
- Tetris
- Angry Birds
- Bejeweled
- Sokoban
- Katamari Damacy
- Blackjack (with AI opponents)
- Checkers (with AI opponent)
- Donkey Kong
- Tron (two player, with option for multiplayer or AI opponent)
- Pokemon
- Monopoly (1-4 player, with option for multiplayer or AI opponent)
- Bomberman
- Diablo
- Zelda
- Scythe
- Minecraft
- Risk
- Lunar Lander
- Streetfighter
- Castlevania
================================================
FILE: deprecated/job-ready-javascript-edition-2.0.md
================================================
# Get Job ready - JavaScript Edition - Version 2.0
## Deprecated - Updated 3.0 version available [here](./job-ready-javascript-edition-3.0.md)
A guide primarily focused on Frontend development, but including just enough of an introduction to Backend to enable an understanding of the "entire process" to prepare for productive entry to a Full Stack team as a confident and capable Frontend Developer.
- [Tier 0 - Prep](#tier-0---prep)
- [Tier 1 - Intro to Programming](#tier-1---intro-to-programming)
- [Tier 2 - Add Complexity](#tier-2---add-complexity)
- [Tier 3 - Practice](#tier-3---practice)
- [Tier 4 - Wrap everything up and prep for interviews](#tier-4---wrap-everything-up-and-prep-for-interviews)
- [What now?](#what-now-)
- [FAQ for this guide](#faq-for-this-guide)
- [Why is it so much longer than the original Job Ready Guide?](#why-is-it-so-much-longer-than-the-original-job-ready-guide)
- [Why so much Math and Algorithms?](#why-so-much-math-and-algorithms)
- [Where should I deploy my code?](#where-should-i-deploy-my-code)
- [Why the change in Project selections?](#why-the-change-in-project-selections)
- [Do you have a list of helpful links to point me in the right direction if I need a productive break, or need to consult the official docs while I'm working through all this?](#do-you-have-a-list-of-helpful-links-to-point-me-in-the-right-direction-if-i-need-a-productive-break--or-need-to-consult-the-official-docs-while-i-m-working-through-all-this)
---
## Tier 0 - Prep
**Goal:** Be comfortable with git by midway through Tier 1, and comfortable with Precalculus by midway through Tier 2.
_Anything in Tier 0 can be studied before beginning Tier 1, or alongside the rest of the guide as you progress through the other Tiers._
- [ ] Book: [College Algebra](https://openstax.org/details/books/college-algebra) or Course: [College Algebra and Problem Solving](https://www.edx.org/course/college-algebra-problem-solving-asux-mat117x) or thorough knowledge of Algebra.
- [ ] Book: [Precalculus](https://openstax.org/details/books/precalculus) or Course: [Precalculus](https://www.edx.org/course/precalculus-asux-mat170x) or [Khan Academy](https://www.khanacademy.org/math/precalculus) or thorough knowledge of Precalculus
- [ ] Videos: [Git Videos](https://git-scm.com/videos) or Book: [Pro Git](https://git-scm.com/book/en/v2) or thorough knowledge of Git.
- [ ] Project: [JavaScript Interview Prep](https://www.hackerrank.com/chingu-challenge-9-javascript-prep) - sign up for this now and work through it alongside the rest of the guide.
- [ ] Project: take a quick read through the [FAQ for this guide](#faq-for-this-guide) at the end of this document, particularly the helpful links, you'll want to reference them as you work through the guide.
---
## Tier 1 - Intro to Programming
**Goal:** Become Proficient with HTML, CSS and JavaScript.
- [ ] Book: [You Don't Know JS: Up & Going](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/up%20&%20going/README.md#you-dont-know-js-up--going)
- [ ] Course - [CS50](https://www.edx.org/course/introduction-computer-science-harvardx-cs50x) on edX
- [ ] Book: [You Don't Know JS: Scope & Closures](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/scope%20&%20closures/README.md#you-dont-know-js-scope--closures)
- [ ] Course: [Learn to Code HTML & CSS](http://learn.shayhowe.com/html-css/)
- [ ] Project: Pick a template from [here](https://freebiesbug.com/psd-freebies/website-template/), [here](http://www.free-css.com/free-css-templates) or [here](http://www.os-templates.com/free-website-templates) and implement the frontend of a website with it as your inspiration (do not use its assets)
- [ ] Book: [You Don't Know JS: this & Object Prototypes](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/this%20&%20object%20prototypes/README.md#you-dont-know-js-this--object-prototypes)
- [ ] Project: [CSS Zen Garden](http://www.csszengarden.com/) - implement your own CSS design for the competition
- [ ] Course: [Programming for the Web with JavaScript](https://www.edx.org/course/programming-web-javascript-pennx-sd4x)
- [ ] Project: Pick a template from [here](https://freebiesbug.com/psd-freebies/website-template/), [here](http://www.free-css.com/free-css-templates) or [here](http://www.os-templates.com/free-website-templates) and implement the frontend of a website with it as your inspiration (do not use its assets)
- [ ] Book: [You Don't Know JS: Types & Grammar](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/types%20&%20grammar/README.md#you-dont-know-js-types--grammar)
- [ ] Project: Pick a template from [here](https://freebiesbug.com/psd-freebies/website-template/), [here](http://www.free-css.com/free-css-templates) or [here](http://www.os-templates.com/free-website-templates) and implement the frontend of a website with it as your inspiration (do not use its assets)
- [ ] Book: [You Don't Know JS: Async & Performance](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/async%20&%20performance/README.md#you-dont-know-js-async--performance)
- [ ] Project: Select an API from [Todd Motto's API List](https://github.com/toddmotto/public-apis) and build a frontend-only application powered by data fetched from the API you chose.
- [ ] Course: [Learn to Code Advanced HTML & CSS](http://learn.shayhowe.com/advanced-html-css/)
- [ ] Project: Select an API from [Todd Motto's API List](https://github.com/toddmotto/public-apis) and build a frontend-only application powered by data fetched from the API you chose.
- [ ] Course: [Getting Sassy with CSS](http://www.sassshop.com/#/)
- [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) in CodePen. Start one now and set a goal of finishing as many as you can by the end of Tier 3. Do them in any order you like. (Intent: Build a presence on CodePen as a proficient HTML/(S)CSS developer to add another online body of work alongside your growing GitHub profile.)
- [ ] Book: [You Don't Know JS: ES6 & Beyond](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/es6%20&%20beyond/README.md#you-dont-know-js-es6--beyond)
- [ ] Project: Select an API from [Todd Motto's API List](https://github.com/toddmotto/public-apis) and build a frontend-only application powered by data fetched from the API you chose.
---
## Tier 2 - Add Complexity
**Goal:** Become familiar with D3.js and React to strengthen your proficiency with JavaScript.
- [ ] Course: [CS50's Mobile App Development with React Native](https://www.edx.org/course/cs50s-mobile-app-development-with-react-native)
- [ ] Course: [Data Visualization and D3.js](https://www.udacity.com/course/data-visualizat
gitextract_glnj03kl/
├── .gitignore
├── CHANGELOG.md
├── LICENSE.md
├── README.md
├── RequestingChallengesFromAI.md
├── deprecated/
│ ├── README.md
│ ├── android-native.md
│ ├── cs-java-focus.md
│ ├── cs-wd.md
│ ├── data-science.md
│ ├── faq.md
│ ├── game-programming-2.0.md
│ ├── game-programming.md
│ ├── job-ready-javascript-edition-2.0.md
│ ├── job-ready-javascript-edition-3.0.md
│ ├── job-ready-python-edition.md
│ ├── job-ready.md
│ ├── projects/
│ │ └── android/
│ │ ├── Androidforbeginners.md
│ │ ├── BookListing.md
│ │ ├── BuildItBigger.md
│ │ ├── CapstoneStage1-Design.md
│ │ ├── CapstoneStage2-Build.md
│ │ ├── CourtCounter.md
│ │ ├── ForceGolf.md
│ │ ├── GigaWars.md
│ │ ├── GoUbiquitous.md
│ │ ├── HabitTracker.md
│ │ ├── Inventory.md
│ │ ├── MakeYourAppMaterial.md
│ │ ├── Makeyouownandroidapp.md
│ │ ├── MusicalStructure.md
│ │ ├── NewsApp.md
│ │ ├── Outbreak.md
│ │ ├── Pong.md
│ │ ├── PopularMoviesStage1.md
│ │ ├── PopularMoviesStage2.md
│ │ ├── QuizApp.md
│ │ ├── ReportCard.md
│ │ ├── SpaceKerfuffle!.md
│ │ ├── StockHawk.md
│ │ ├── TourGuide.md
│ │ └── YourFirstApp.md
│ ├── speedrun-practice/
│ │ ├── README.md
│ │ ├── algorithms.md
│ │ ├── android.md
│ │ ├── frontend-dev.md
│ │ ├── fullstack-dev.md
│ │ └── game-dev.md
│ ├── topic-guides/
│ │ └── vue.md
│ └── wd-cs.md
└── v4/
├── README.md
├── faq.md
├── project_ideas.md
└── specializations/
├── advanced-algorithms.md
├── algorithms.md
├── app_academy_open.md
├── backend.md
├── computer_science.md
├── data-science-i.md
├── data-science-ii.md
├── frontend.md
├── full_stack_open_2020.md
├── games.md
├── mobile.md
├── open_source.md
├── the_odin_project_javascript.md
└── the_odin_project_ruby.md
Condensed preview — 67 files, each showing path, character count, and a content snippet. Download the .json file or copy for the full structured content (530K chars).
[
{
"path": ".gitignore",
"chars": 6,
"preview": ".idea\n"
},
{
"path": "CHANGELOG.md",
"chars": 5884,
"preview": "# Changed to the curriculum\n\nTypically this will only list resource additions and deletions. The goal is always to minim"
},
{
"path": "LICENSE.md",
"chars": 1078,
"preview": "The MIT License (MIT)\n\nCopyright (c) 2017 - 2020 P1xt\n\nPermission is hereby granted, free of charge, to any person obtai"
},
{
"path": "README.md",
"chars": 36425,
"preview": "\n<!-- TOC --><a name=\"p1xt-guides-version-60\"></a>\n# P1xt Guides - Version 6.1\n\nPlease take a moment to read the [notes]"
},
{
"path": "RequestingChallengesFromAI.md",
"chars": 38168,
"preview": "<a name=\"requesting-challenges-from-ai\"></a>\n# Requesting Challenges from AI\n[ChatGPT](https://chatgpt.com) is a fantast"
},
{
"path": "deprecated/README.md",
"chars": 12010,
"preview": "# Guides in a variety of domains\n\n> These guides remain for posterity, and so that anyone who was currently working thro"
},
{
"path": "deprecated/android-native.md",
"chars": 7843,
"preview": "# Native Android Programming - comprehensive\n\nThis guide makes heavy use of \"official docs\" for Java and Android, plus p"
},
{
"path": "deprecated/cs-java-focus.md",
"chars": 16501,
"preview": "# Computer Science and Backend Development - Java Focus\n\nIf you have any questions, be sure to check the [FAQ](./faq.md)"
},
{
"path": "deprecated/cs-wd.md",
"chars": 12147,
"preview": "# Computer Science and Web Development - comprehensive\n\nIf you have any questions, be sure to check the [FAQ](./faq.md)."
},
{
"path": "deprecated/data-science.md",
"chars": 16056,
"preview": "# Data Science - comprehensive\nA curriculum covering Data Science topics relevant to Machine Learning, Bioinformatics, a"
},
{
"path": "deprecated/faq.md",
"chars": 11529,
"preview": "# Frequently Asked Questions\n## What are the pre-requisites to begin any of the guides?\nYou should understand how to use"
},
{
"path": "deprecated/game-programming-2.0.md",
"chars": 17260,
"preview": "# Video Game Programming - comprehensive foundations\n\nI list a lot of games to clone in this list. I do not mean make th"
},
{
"path": "deprecated/game-programming.md",
"chars": 16611,
"preview": "# Video Game Programming - comprehensive foundations\n\n## Deprecated - Updated 2.0 version available [here](./game-progra"
},
{
"path": "deprecated/job-ready-javascript-edition-2.0.md",
"chars": 16192,
"preview": "# Get Job ready - JavaScript Edition - Version 2.0\n\n## Deprecated - Updated 3.0 version available [here](./job-ready-jav"
},
{
"path": "deprecated/job-ready-javascript-edition-3.0.md",
"chars": 20398,
"preview": "# Get Job ready - JavaScript Edition - Version 3.0\n\nA guide primarily focused on Frontend development, but including jus"
},
{
"path": "deprecated/job-ready-python-edition.md",
"chars": 12475,
"preview": "# Get Job Ready - Python Edition\n\n- [Tier 0 - prep](#tier-0---prep)\n- [Tier 1 - Non-Python frontend necessities for Web "
},
{
"path": "deprecated/job-ready.md",
"chars": 4827,
"preview": "# Get Job ready with 13 projects, 2 courses, and 10 books\n\n## Deprecated - Updated 3.0 version available [here](./job-re"
},
{
"path": "deprecated/projects/android/Androidforbeginners.md",
"chars": 132,
"preview": "Please see the details of the project description [here](https://www.udacity.com/course/viewer#!/c-ud837/l-4040108662/m-"
},
{
"path": "deprecated/projects/android/BookListing.md",
"chars": 1680,
"preview": "# Project Overview \nThis project is a chance for you to combine and practice everything you learned in this section of t"
},
{
"path": "deprecated/projects/android/BuildItBigger.md",
"chars": 8650,
"preview": "## Project Overview\nIn this project, you will create an app with multiple flavors that uses\nmultiple libraries and Googl"
},
{
"path": "deprecated/projects/android/CapstoneStage1-Design.md",
"chars": 4398,
"preview": "## Project Overview\n\nIn the Capstone project, you will build an app of your own design in two stages. In Stage 1, you wi"
},
{
"path": "deprecated/projects/android/CapstoneStage2-Build.md",
"chars": 3350,
"preview": "## Project Overview\n\nIn Stage 1, you designed and planned your Capstone app. Now, it's time to build it! \n\n\n## Why this"
},
{
"path": "deprecated/projects/android/CourtCounter.md",
"chars": 1986,
"preview": "# Court Counter App\n<br > \n<img src=\"https://lh3.googleusercontent.com/22vI-D9H9CprTLOpXtgselsfVjoiMTLOGJEv46a2oQ5EI6j"
},
{
"path": "deprecated/projects/android/ForceGolf.md",
"chars": 2178,
"preview": "# Project 5: Force Golf\n\n## Project Description\n\n### Project Overview\n\nFor this project, you will make a top-down [minig"
},
{
"path": "deprecated/projects/android/GigaWars.md",
"chars": 4727,
"preview": "# GigaWars\n\n## Description\n\n### Project Overview\n\nGigaWars is an epic space-combat strategy game where you unleash a fle"
},
{
"path": "deprecated/projects/android/GoUbiquitous.md",
"chars": 4277,
"preview": "## Project Overview\nIn this project, you will build a wearable watch face for Sunshine to run on an Android Wear device."
},
{
"path": "deprecated/projects/android/HabitTracker.md",
"chars": 1455,
"preview": "# Project Overview\nThis project is a chance for you to combine and practice everything you learned in this section of th"
},
{
"path": "deprecated/projects/android/Inventory.md",
"chars": 1981,
"preview": "# Project Overview\nThis project is a chance for you to combine and practice everything you learned in this section of th"
},
{
"path": "deprecated/projects/android/MakeYourAppMaterial.md",
"chars": 5160,
"preview": " and complete the fo"
},
{
"path": "v4/specializations/full_stack_open_2020.md",
"chars": 3827,
"preview": "# Web Development - Deep Dive Into Modern Web Development - Full Stack Open 2020 Specialization\n\nComplete the [Deep Dive"
},
{
"path": "v4/specializations/games.md",
"chars": 4764,
"preview": "# Game Development Specialization\n\nPick your targeted platform, programming language, and related framework and complete"
},
{
"path": "v4/specializations/mobile.md",
"chars": 4755,
"preview": "# Mobile App Development Specialization\n\nPick your targeted mobile platform and complete the following: \n**Note:** All "
},
{
"path": "v4/specializations/open_source.md",
"chars": 3815,
"preview": "# Open Source Contributions Specialization\n\nPick one or more Open Source projects and contribute to them. Follow each pr"
},
{
"path": "v4/specializations/the_odin_project_javascript.md",
"chars": 2145,
"preview": "### Web Development - Full Stack JavaScript- The Odin Project Specialization\n\nComplete [The Odin Project - Full Stack Ja"
},
{
"path": "v4/specializations/the_odin_project_ruby.md",
"chars": 2364,
"preview": "### Web Development - Full Stack Ruby on Rails - The Odin Project Specialization\n\nComplete [The Odin Project - Full Stac"
}
]
About this extraction
This page contains the full source code of the P1xt/p1xt-guides GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 67 files (507.5 KB), approximately 115.1k tokens. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.