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 ================================================ # 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.) ## 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) ## 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/) | | | ## 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/) | | | ## 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) | | | ## 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 ## 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) | | | --- ## 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. --- **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 ================================================ # 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) ## 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 `
`, `

`, and `

` 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 ``, ``, ``, and `` 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. ``` ## 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. ## 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. ``` ## 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. ## 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. ``` ## 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 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 Buy Me a Coffee at ko-fi.com 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]()) - [ ] Game: Tic-Tac-Toe (unbeatable AI opponent) [Wikipedia](http://en.wikipedia.org/wiki/Tic-tac-toe) - [ ] Game: Minesweeper [Wikipedia]() - [ ] Game: Sokoban [Wikipedia](https://en.wikipedia.org/wiki/Sokoban) - [ ] Game: Snake [Wikipedia]() - [ ] 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]()) - [ ] Game: Tic-Tac-Toe (unbeatable AI opponent) [Wikipedia](http://en.wikipedia.org/wiki/Tic-tac-toe) - [ ] Game: Minesweeper [Wikipedia]() - [ ] Game: Sokoban [Wikipedia](https://en.wikipedia.org/wiki/Sokoban) - [ ] Game: Snake [Wikipedia]() - [ ] 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-visualization-and-d3js--ud507) - [ ] 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. - [ ] Project: Clone [this Admin template](http://rubix410.sketchpixy.com/ltr/dashboard) using React, Angular, or Vue - [ ] Book: [JavaScript Allongé, the "Six" Edition](https://leanpub.com/javascriptallongesix) - [ ] Project: Clone [this](https://creativemarket.com/ikonome/686585-Material-Resume-Blue/screenshots/#screenshot2) online resume template - [ ] Project: Do a one week Speedrun of the FreeCodeCamp Backend Projects, finishing as many as you can in 7 days. - [ ] Book: [JavaScript Design Patterns](https://addyosmani.com/resources/essentialjsdesignpatterns/book/) - [ ] Project: Revisit [CSS Zen Garden](http://www.csszengarden.com/) - and implement a new design - [ ] Project: Clone Twitter using Node.js on the backend, and your frontend framework/library of choice. Include all basic features: signup/login/logout, follow user, search, tweet, like/retweet, home page with stream of recent tweets. --- ## Tier 3 - Practice **Goal:** Practice Frontend Development in greater depth and continue studying JavaScript, ensuring you understand the algorithms and data structures you're likely to encounter in interviews (and on the job). - [ ] Project: Read [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/) - and make two contributions to open source projects (of your choice) by the end of this Tier. - [ ] Book: [Open Data Structures](http://www.aupress.ca/books/120226/ebook/99Z_Morin_2013-Open_Data_Structures.pdf) - [ ] Project: Finish all classic puzzles on [CodinGame](https://www.codingame.com/training) from easy through hard by the end of the Tier. - [ ] Project: Clone Medium. Include: create account, create post, publish post, edit post, add topic to post, follow user, follow topic, cheer for post, and home page with feed of recent posts, followed users, and followed topics. - [ ] 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) - [ ] 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. Consider building it as a Chrome Extension, Mobile, or Electron App - [ ] 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) - [ ] 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. Consider building it as a Chrome Extension, Mobile, or Electron App - [ ] Project: Full stack project of your choice (ideas: clone Facebook, Reddit, Netflix, Slack) - Consider building it as a Chrome Extension, Mobile, or Electron App. - [ ] Project: Full stack project of your choice (make it grand) - or do a one month Speedrun of the FreeCodeCamp Projects. --- ## Tier 4 - Wrap everything up and prep for interviews **Goal:** Interview with confidence. - [ ] Project: Finish any questions you have remaining from [JavaScript Interview Prep](https://www.hackerrank.com/chingu-challenge-9-javascript-prep) - [ ] Project: Finish any of [100 Days of CSS](https://codepen.io/collection/AVPPQq/) you have yet to complete. - [ ] Project: Create and polish your Portfolio site. - [ ] Project: Create and polish your Resume/CV. - [ ] Project: Study and complete all [The HackerRank Interview Preparation Kit](https://www.hackerrank.com/interview/interview-preparation-kit) on HackerRank - [ ] Project: Continue honing your skills as you interview. Prioritize contributing to open source. --- ## What now? - If you want to move on to Data Science - hit the [Data Science Guide](./data-science.md) - If you preferred the Algorithms and Data Structures - hit the [CS-WD Guide](./cs-wd.md) - If you mostly enjoyed the Web Development - hit the [WD-CS Guide](./wd-cs.md) --- ## FAQ for this guide ### Why is it so much longer than the original Job Ready Guide? What I've observed over the past 9 months is two phenomena, the first being that many "self-supplemented" with additional beginner projects and resources while working through YDKJS, so I expanded on the beginner section to alleviate the "but what else should I be doing" question. The second is that the most successful learners also supplemented with more involved projects towards the end of the guide, so I added more intricate/advanced projects to meet that need. ### Why so much Math and Algorithms? It's not THAT much math, just through Precalculus so you won't feel so behind the curve when you want to push beyond just "Job Ready" and tackle more involved programming projects. The algorithms -- I've added them to ensure you're prepared and confident you can handle anything you might encounter in an interview. ### Where should I deploy my code? For all projects - store your code on GitHub, GitLab or BitBucket (GitHub preferred if you want it to later be seen by potential employers) and for web projects deploy the code on the web using the service of your choice ([GitHub](https://pages.github.com/) or [GitLab](https://about.gitlab.com/features/pages/) projects or [Surge.sh](http://surge.sh/) are ideal for frontend only projects, while Heroku is a free alternative for backend/fullstack). ### Why the change in Project selections? To give you greater freedom, over the course of studying the guide, to create a portfolio that is unique to you - rather than a clone of the same exact projects that are on the portfolio of every other junior web dev out there. ### 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? Yes, yes I do: - For when you need a quick/fun productive break that teaches you how to use CSS to layout a site (revisit this section in Tier 1 - Flexbox Zombies alone will prove extremely helpful learning to layout a page for the early projects.) - [CSS Diner](https://flukeout.github.io/) - [FlexBox Defense](http://www.flexboxdefense.com/) - [FlexBox Froggy](http://flexboxfroggy.com/) - [Grid Garden](http://cssgridgarden.com/) - [FlexBox Zombies](http://geddski.teachable.com/p/flexbox-zombies) - For when you need a quick/fun productive break in which you also practice JavaScript - [Untrusted](https://alexnisnevich.github.io/untrusted/) - [Elevator Saga](http://play.elevatorsaga.com/) - [Screeps](https://screeps.com) - For when you need assets/ideas - [pixabay](https://pixabay.com/) - [Unsplash](https://unsplash.com/) - [Pexels](https://www.pexels.com/) - [LibreStock](http://librestock.com/) - [Google Fonts](https://fonts.google.com/) - [FlatIcon's Free Icon Sets](https://www.flaticon.com/packs?license=selection&order_by=1) - Official Docs - [MDN HTML](https://developer.mozilla.org/en-US/docs/Web/HTML) - for exploring all that HTML has to offer - [MDN CSS](https://developer.mozilla.org/en-US/docs/Web/CSS)- for exploring all that CSS has to offer - [MDN JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript)- for exploring all that JavaScript has to offer - [Sass](http://sass-lang.com/guide) - supercharged CSS - [Node.js](https://nodejs.org/en/docs/) - should be your primary reference for building backend projects - [Express](https://expressjs.com/) - an excellent framework to accompany Node.js on the backend - [MongoDB](https://docs.mongodb.com/) - for storing data - [Mongoose](http://mongoosejs.com/) - access to MongoDB from Node.js made easy(er) - [Passport.js](http://passportjs.org/) - remember this link when you have to setup a login system - [D3](https://d3js.org/) - for creating awesome graphs and charts - [Angular](https://angular.io/) - option for creating single page apps on the frontend - [React](https://reactjs.org/) - option for creating single page apps on the frontend - [Vue](https://vuejs.org/) - option for creating single page apps on the frontend - [Redux](http://redux.js.org/) - for managing state in a single page app - [Mocha](https://mochajs.org/) - venture into testing - [Karma](https://karma-runner.github.io/1.0/index.html) - venture into testing - [Jest](https://facebook.github.io/jest/) - venture into testing - [Webpack](https://webpack.github.io/) - module bundler for use in your build process (so you can minify your HTML/CSS/JavaScript among other things and deliver an optimized build to production) - [Babel](http://babeljs.io/) - makes the new JavaScript work on old browsers (or node versions for that matter) - [Gulp](https://gulpjs.com/) - for automating your workflow - [ESLint](https://eslint.org/) - for helping to keep your code clean - [Prettier](https://prettier.io/) - more help keeping your code clean - [Travis](https://travis-ci.org/) - continuous deployment (how to trigger a build/deploy whenever you commit your changes via git) ================================================ FILE: deprecated/job-ready-javascript-edition-3.0.md ================================================ # Get Job ready - JavaScript Edition - Version 3.0 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 - The Basics](#tier-1---the-basics) - [Tier 2 - Intro to Programming](#tier-2---intro-to-programming) - [Tier 3 - Add Complexity](#tier-3---add-complexity) - [Tier 4 - Practice](#tier-4---practice) - [Tier 5 - Wrap everything up and prep for interviews](#tier-5---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 the end of Tier 4. _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._ - [ ] Start working on [Khan Academy](https://www.khanacademy.org/math) math sections daily. Begin wherever your current knowledge lies, and progress alongside the rest of the guide (aiming to cover [Algebra I ](https://www.khanacademy.org/math/algebra), [ Algebra II ](https://www.khanacademy.org/math/algebra2), [ Trigonometry ](https://www.khanacademy.org/math/trigonometry) and [ Precalculus ](https://www.khanacademy.org/math/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 - The Basics **Goal**: Become comfortable with HTML, CSS, JavaScript and SQL basics. - [ ] Course: [Intro to JS: Drawing & Animation](https://www.khanacademy.org/computing/computer-programming/programming) - [ ] Course: [Intro to HTML/CSS: Making webpages](https://www.khanacademy.org/computing/computer-programming/html-css) - [ ] Course: [Intro to SQL: Querying and managing data](https://www.khanacademy.org/computing/computer-programming/sql) - [ ] Course: [Advanced JS: Games & Visualizations](https://www.khanacademy.org/computing/computer-programming/programming-games-visualizations) - [ ] Course: [Advanced JS: Natural Simulations](https://www.khanacademy.org/computing/computer-programming/programming-natural-simulations) - [ ] Course: [HTML/JS: Making webpages interactive](https://www.khanacademy.org/computing/computer-programming/html-css-js) - [ ] Course: [HTML/JS: Making webpages interactive with jQuery](https://www.khanacademy.org/computing/computer-programming/html-js-jquery) ## Tier 2 - Intro to Programming **Goal:** Become Proficient with HTML, CSS and JavaScript. - [ ] Course: [Learn to Code HTML & CSS](http://learn.shayhowe.com/html-css/) - [ ] Course: [Learn to Code Advanced HTML & CSS](http://learn.shayhowe.com/advanced-html-css/) - [ ] Book: [Eloquent JavaScript](https://eloquentjavascript.net/) - [ ] Project: Create a web page using [this theme](https://blackrockdigital.github.io/startbootstrap-landing-page/) as your inspiration, include all features (hover effects, animations, etc) - [ ] 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) - [ ] Project: Create a web page using [this theme](https://blackrockdigital.github.io/startbootstrap-agency/) as your inspiration, include all features (hover effects, animations, etc) - [ ] Project: [CodinGame](https://www.codingame.com/training) finish all problems in the 'Classic Puzzle - Easy' section. - [ ] Course - [CS50](https://www.edx.org/course/introduction-computer-science-harvardx-cs50x) on edX - [ ] Project: Create a web page using [this theme](https://blackrockdigital.github.io/startbootstrap-resume/) as your inspiration, include all features (hover effects, animations, etc) - [ ] 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) - [ ] Project: Create a web page using [this theme](https://blackrockdigital.github.io/startbootstrap-stylish-portfolio/) as your inspiration, include all features (hover effects, animations, etc) - [ ] 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: Create a web page using [this theme](https://webthemez.com/preview/?ballet-one-page-free-website-template/) as your inspiration, include all features (hover effects, animations, etc) - [ ] 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: [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: Async & Performance](https://github.com/getify/You-Dont-Know-JS/tree/1st-ed/async%20&%20performance/README.md#you-dont-know-js-async--performance) - [ ] Course: [Getting Sassy with CSS](http://www.sassshop.com/#/) - [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) in CodePen. Complete at least 5 more at this point. - [ ] 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: Create a web page using [this theme](https://webthemez.com/demo/delta-corporate-material-design-bootstrap-html-template/index.html) as your inspiration, include all features (hover effects, animations, etc). Note that this theme has multiple pages for you to implement. - [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) in CodePen. Complete at least 10 more at this point. - [ ] Project: Complete [the Odin Project JavaScript course](https://www.theodinproject.com/courses/javascript) including all projects (Feel free to skip the Ruby on Rails section.) - [ ] Course: [Algorithms](https://www.khanacademy.org/computing/computer-science/algorithms) - [ ] 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. - [ ] Project: Complete any sections of [Algebra I ](https://www.khanacademy.org/math/algebra) you have yet to complete. --- ## Tier 3 - Add Complexity **Goal:** Become familiar with D3.js and frontend libraries/frameworks 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) - [ ] Project: Create a web page using [this theme](https://blackrockdigital.github.io/startbootstrap-creative/) as your inspiration, include all features (hover effects, animations, etc) - [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) in CodePen. Complete at least 5 more at this point. - [ ] Course: [Data Visualization and D3.js](https://www.udacity.com/course/data-visualization-and-d3js--ud507) - [ ] Project: Clone [this](https://creativemarket.com/ikonome/686585-Material-Resume-Blue/screenshots/#screenshot2) online resume template - [ ] Book: [JavaScript Allongé, the "Six" Edition](https://leanpub.com/javascriptallongesix) - [ ] Project: [CodinGame](https://www.codingame.com/training) finish all problems in the 'Classic Puzzle - Medium' section. - [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) in CodePen. Complete at least 5 more at this point. - [ ] Tackle documentation: Pick [Angular](https://angular.io/), [React](https://reactjs.org/), or [Vue](https://vuejs.org/) and dive into its official documentation, study it all, practice it, learn it thoroughly - then clone [this Admin template](http://rubix410.sketchpixy.com/ltr/dashboard) using whichever library/framework you chose. Note that there are 'many' pages and features to this template, you should clone them all. Continue practicing by using your library/framework of choice on the majority of the projects from this point forward in the guide. - [ ] Tackle documentation: Study the [Jest.io official docs](https://jestjs.io/) working through all the introduction and guides sections. - [ ] Project: Create a web page using [this theme](https://blackrockdigital.github.io/startbootstrap-coming-soon/) as your inspiration, include all features (hover effects, animations, etc) - [ ] Book: [JavaScript Design Patterns](https://addyosmani.com/resources/essentialjsdesignpatterns/book/) - [ ] Project: Revisit [CSS Zen Garden](http://www.csszengarden.com/) - and implement a new design - [ ] Project: Create a web page using [this theme](https://webthemez.com/preview/?lookup-interior-design-bootstrap-website-template/) as your inspiration, include all features (hover effects, animations, etc) - [ ] Tackle documentation: Study the [Express.js official docs](https://expressjs.com/), paying special attention to all Getting Started and Guide sections. - [ ] Project: Clone Twitter using Node.js/Express.js on the backend, and your frontend framework/library of choice. Include all basic features: signup/login/logout, follow user, search, tweet, like/retweet, home page with stream of recent tweets. - [ ] 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. - [ ] Project: Complete any sections of [ Algebra II ](https://www.khanacademy.org/math/algebra2) you have yet to complete. --- ## Tier 4 - Practice **Goal:** Practice Frontend Development in greater depth and continue studying JavaScript, ensuring you understand the algorithms and data structures you're likely to encounter in interviews (and on the job). - [ ] Project: Read [How to Contribute to Open Source](https://opensource.guide/how-to-contribute/) - and make two contributions to open source projects (of your choice) by the end of this Tier. - [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) in CodePen. Complete at least 5 more at this point. - [ ] Project: Create a web page using [this theme](https://webthemez.com/demo/flavour-restaurant-html5-responsive-web-template/) as your inspiration, include all features (hover effects, animations, etc) - [ ] Project: Complete any sections of [ Trigonometry ](https://www.khanacademy.org/math/trigonometry) you have yet to complete. - [ ] Book: [Open Data Structures](http://www.aupress.ca/books/120226/ebook/99Z_Morin_2013-Open_Data_Structures.pdf) - [ ] Project: [CodinGame](https://www.codingame.com/training) finish all problems in the 'Classic Puzzle - Hard' section. - [ ] Project: Create a web page using [this theme](https://webthemez.com/demo/fine-best-app-landing-page-free-web-template/) as your inspiration, include all features (hover effects, animations, etc) - [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) in CodePen. Complete at least 5 more at this point. - [ ] Tackle documentation: Thoroughly study [The Webpack Guides](https://webpack.js.org/guides/) - [ ] Project: Clone Medium. Include: create account, create post, publish post, edit post, add topic to post, follow user, follow topic, cheer for post, and home page with feed of recent posts, followed users, and followed topics. - [ ] Project: Create a web page using [this theme](https://webthemez.com/demo/startup-multi-purpose-responsive-html5-bootstrap-template/) as your inspiration, include all features (hover effects, animations, etc) - [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) in CodePen. Complete at least 5 more at this point. - [ ] Project: Full stack project of your choice (ideas: clone Facebook, Reddit, Netflix, Slack) - Consider building it as a Chrome Extension, Mobile, or Electron App. - [ ] Project: Full stack project of your choice (make it grand). - [ ] 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. - [ ] Project: Complete any sections of [ Precalculus ](https://www.khanacademy.org/math/precalculus) you have yet to complete. --- ## Tier 5 - Wrap everything up and prep for interviews **Goal:** Interview with confidence. - [ ] Project: Finish any questions you have remaining from [JavaScript Interview Prep](https://www.hackerrank.com/chingu-challenge-9-javascript-prep) - [ ] Project: Finish any of [100 Days of CSS](https://codepen.io/collection/AVPPQq/) you have yet to complete. - [ ] Project: [CodinGame](https://www.codingame.com/training) finish all problems in the 'Classic Puzzle - Very Hard' section. - [ ] Project: Create and polish your Portfolio site. - [ ] Project: Create and polish your Resume/CV. - [ ] Project: Study and complete all [The HackerRank Interview Preparation Kit](https://www.hackerrank.com/interview/interview-preparation-kit) on HackerRank - [ ] Project: Continue honing your skills as you interview. Prioritize contributing to open source. Look at the 'official docs' section of the FAQ at the end of this guide and begin studying any or all of them. --- ## What now? - If you want to move on to Data Science - hit the [Data Science Guide](./data-science.md) - If you preferred the Algorithms and Data Structures - hit the [CS-WD Guide](./cs-wd.md) - If you mostly enjoyed the Web Development - hit the [WD-CS Guide](./wd-cs.md) --- ## FAQ for this guide ### Why is it so much longer than the original Job Ready Guide? What I've observed over the past 9 months is two phenomena, the first being that many "self-supplemented" with additional beginner projects and resources while working through YDKJS, so I expanded on the beginner section to alleviate the "but what else should I be doing" question. The second is that the most successful learners also supplemented with more involved projects towards the end of the guide, so I added more intricate/advanced projects to meet that need. ### Why so much Math and Algorithms? It's not THAT much math, just through Precalculus so you won't feel so behind the curve when you want to push beyond just "Job Ready" and tackle more involved programming projects. The algorithms -- I've added them to ensure you're prepared and confident you can handle anything you might encounter in an interview. ### Where should I deploy my code? For all projects - store your code on GitHub, GitLab or BitBucket (GitHub preferred if you want it to later be seen by potential employers) and for web projects deploy the code on the web using the service of your choice ([GitHub](https://pages.github.com/) or [GitLab](https://about.gitlab.com/features/pages/) projects or [Surge.sh](http://surge.sh/) are ideal for frontend only projects, while Heroku is a free alternative for backend/fullstack). ### Why the change in Project selections? To provide a bit more guidance in selecting a variety of projects that will involve a variety of front end development work (animations, media, etc). ### 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? Yes, yes I do: - For when you need a quick/fun productive break that teaches you how to use CSS to layout a site (revisit this section in Tier 1 - Flexbox Zombies alone will prove extremely helpful learning to layout a page for the early projects.) - [CSS Diner](https://flukeout.github.io/) - [FlexBox Defense](http://www.flexboxdefense.com/) - [FlexBox Froggy](http://flexboxfroggy.com/) - [Grid Garden](http://cssgridgarden.com/) - [FlexBox Zombies](http://geddski.teachable.com/p/flexbox-zombies) - For when you need a quick/fun productive break in which you also practice JavaScript - [Untrusted](https://alexnisnevich.github.io/untrusted/) - [Elevator Saga](http://play.elevatorsaga.com/) - [Screeps](https://screeps.com) - For when you need assets/ideas - [pixabay](https://pixabay.com/) - [Unsplash](https://unsplash.com/) - [Pexels](https://www.pexels.com/) - [LibreStock](http://librestock.com/) - [Google Fonts](https://fonts.google.com/) - [FlatIcon's Free Icon Sets](https://www.flaticon.com/packs?license=selection&order_by=1) - Official Docs - [MDN HTML](https://developer.mozilla.org/en-US/docs/Web/HTML) - for exploring all that HTML has to offer - [MDN CSS](https://developer.mozilla.org/en-US/docs/Web/CSS)- for exploring all that CSS has to offer - [MDN JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript)- for exploring all that JavaScript has to offer - [Sass](http://sass-lang.com/guide) - supercharged CSS - [Node.js](https://nodejs.org/en/docs/) - should be your primary reference for building backend projects - [Express](https://expressjs.com/) - an excellent framework to accompany Node.js on the backend - [MongoDB](https://docs.mongodb.com/) - for storing data - [Mongoose](http://mongoosejs.com/) - access to MongoDB from Node.js made easy(er) - [Passport.js](http://passportjs.org/) - remember this link when you have to setup a login system - [D3](https://d3js.org/) - for creating awesome graphs and charts - [Angular](https://angular.io/) - option for creating single page apps on the frontend - [React](https://reactjs.org/) - option for creating single page apps on the frontend - [Vue](https://vuejs.org/) - option for creating single page apps on the frontend - [Redux](http://redux.js.org/) - for managing state in a single page app - [ngrx](http://ngrx.github.io/) - reactive programming in Angular applications - [RxJS](https://rxjs-dev.firebaseapp.com/guide/overview) - reactive JavaScript - [Mocha](https://mochajs.org/) - venture into testing - [Karma](https://karma-runner.github.io/1.0/index.html) - venture into testing - [Jest](https://facebook.github.io/jest/) - venture into testing - [Webpack](https://webpack.github.io/) - module bundler for use in your build process (so you can minify your HTML/CSS/JavaScript among other things and deliver an optimized build to production) - [Babel](http://babeljs.io/) - makes the new JavaScript work on old browsers (or node versions for that matter) - [Gulp](https://gulpjs.com/) - for automating your workflow - [ESLint](https://eslint.org/) - for helping to keep your code clean - [Prettier](https://prettier.io/) - more help keeping your code clean - [Travis](https://travis-ci.org/) - continuous deployment (how to trigger a build/deploy whenever you commit your changes via git) ================================================ FILE: deprecated/job-ready-python-edition.md ================================================ # Get Job Ready - Python Edition - [Tier 0 - prep](#tier-0---prep) - [Tier 1 - Non-Python frontend necessities for Web Development](#tier-1---non-python-frontend-necessities-for-web-development) - [Tier 2 - Python Basics](#tier-2---python-basics) - [Tier 3 - More Python and Basic CS](#tier-3---more-python-and-basic-cs) - [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 other Job Ready Guide?](#why-is-it-so-much-longer-than-the-other-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) - [What Python should I use?](#what-python-should-i-use) --- ## 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. --- ## Tier 1 - Non-Python frontend necessities for Web Development **Goal:** Become Proficient with HTML, CSS and JavaScript, including the frontend framework/library of your choice plus D3. - [ ] 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) - [ ] 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) - [ ] 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) - [ ] 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/) - [ ] 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: [Data Visualization and D3.js](https://www.udacity.com/course/data-visualization-and-d3js--ud507) - [ ] Project - Clone [this Admin template](http://rubix410.sketchpixy.com/ltr/dashboard) using React, Angular, or Vue - [ ] Book: [JavaScript Allongé, the "Six" Edition](https://leanpub.com/javascriptallongesix) - [ ] 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. - [ ] Book: [JavaScript Design Patterns](https://addyosmani.com/resources/essentialjsdesignpatterns/book/) - [ ] Project: Clone [this](https://creativemarket.com/ikonome/686585-Material-Resume-Blue/screenshots/#screenshot2) online resume template - [ ] Project: Do a one week Speedrun of the FreeCodeCamp Projects, finishing as many as you can in seven days. --- ## Tier 2 - Python Basics **Goal:** Become familiar with Python, MongoDB, and the Flask or Django framework and begin building proficiency with creating full stack web applications with Python on the backend. - [ ] Challenge: [Python Interview Prep](https://www.hackerrank.com/chingu-challenge-3) on Hackerrank. Sign up now and work problems alongside the guide as you progress. - [ ] 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 Computer Science and Programming Using Python](https://www.edx.org/course/introduction-computer-science-mitx-6-00-1x-11) - [ ] Study: [The Flask User Guide](http://flask.pocoo.org/docs/0.12/) or [the Django documentation](https://docs.djangoproject.com/en/1.11/) - pick based on which is more prevalent in your area, which you personally prefer, or any other criteria you choose, but pick one and study it thoroughly. Do the tutorials, read it all, learn testing, auth, databases, all of it. - [ ] Project: Clone Twitter using Python on the backend, and your frontend framework/library of choice. Include all basic features: signup/login/logout, follow user, search, tweet, like/retweet, home page with stream of recent tweets. - [ ] Course: [Single Variable Calculus](https://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/) - [ ] Project: participate in one [Bot Programming](https://www.codingame.com/multiplayer/bot-programming) competition. - [ ] Book: [Think Python](http://greenteapress.com/thinkpython2/thinkpython2.pdf) - [ ] Study: [The pytest testing tool](https://docs.pytest.org/en/latest/) read the docs thoroughly, experiment with the examples and become proficient with pytest (including unittest and nose). - [ ] Project: participate in one [Bot Programming](https://www.codingame.com/multiplayer/bot-programming) competition. - [ ] Project: Clone Medium. Include: create account, create post, publish post, edit post, add topic to post, follow user, follow topic, cheer for post, and home page with feed of recent posts, followed users, and followed topics. - [ ] Project: Do a one week Speedrun of the FreeCodeCamp Projects, finishing as many as you can in seven days. --- ## Tier 3 - More Python and Basic CS **Goal:** Learn Python to a deeper level, ensuring you understand the algorithms and data structures you're likely to encounter in interviews (and on the job). - [ ] Project: Finish all classic puzzles on [CodinGame](https://www.codingame.com/training) from easy through hard by the end of the Tier. - [ ] Course: [Introduction to Computational Thinking and Data Science](https://www.edx.org/course/introduction-computational-thinking-data-mitx-6-00-2x-6) - [ ] Project: Your choice - Clone Netflix, Slack, Reddit, or Facebook (or a comparably involved site of your choosing). The clone should be functional and include all basic features. - [ ] 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: [Introduction to Algorithms](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/index.htm) (requires book purchase) or Book - [Open Data Structures](http://www.aupress.ca/books/120226/ebook/99Z_Morin_2013-Open_Data_Structures.pdf) - [ ] Project: participate in one [Bot Programming](https://www.codingame.com/multiplayer/bot-programming) competition. - [ ] Course: [Intro to Machine Learning](https://www.udacity.com/course/intro-to-machine-learning--ud120) - [ ] Project: [Titanic: Machine Learning from Disaster](https://www.kaggle.com/c/titanic) - [ ] Course: [Database Mini-Courses](https://lagunita.stanford.edu/courses/DB/2014/SelfPaced/about) - take all mini-courses - [ ] Project: Your choice - Clone Netflix, Slack, Reddit, or Facebook (or a comparably involved site of your choosing). The clone should be functional and include all basic features. - [ ] Project: Create a Portfolio highlighting your best work. - [ ] Project: [House Prices: Advanced Regression Techniques](https://www.kaggle.com/c/house-prices-advanced-regression-techniques) - [ ] Project: Do a one month Speedrun of the FreeCodeCamp Projects, finishing as many as you can in 30 days. --- ## Tier 4 - Wrap everything up and prep for interviews **Goal:** Interview with confidence. - [ ] Project: Finish any questions you have remaining from [Python Interview Prep](https://www.hackerrank.com/chingu-challenge-3) - [ ] Project: Refine and polish your Portfolio. - [ ] Project: Create and polish your Resume/CV. - [ ] Project: [Cracking the Coding Interview](https://www.hackerrank.com/domains/tutorials/cracking-the-coding-interview) on HackerRank - [ ] Project: Continue honing your skills as you interview. Participate in more bot competitions on CodinGame, participate in competitions on Kaggle, contribute to open source JavaScript or Python projects, work on side projects that illustrate your frontend skill. --- ## What now? - If you really enjoyed the dip into Machine Learning - hit the [Data Science Guide](./data-science.md) - If you preferred the Algorithms and Data Structures - hit the [CS-WD Guide](./cs-wd.md) - If you mostly enjoyed the Web Development - hit the [WD-CS Guide](./wd-cs.md) --- ## FAQ for this guide ### Why is it so much longer than the other Job Ready Guide? The most notable difference between this and the original Job Ready guide is that it is significantly longer but still begins with YDKJS. This is because in order to use Python for web development, you also need some proficiency with the primarily frontend topics as well (HTML, CSS, JavaScript). Python is typically used for far more than just server-side web development so I've tried to at least touch on the "grander scheme" without bogging down too much. ### Why so much Math and Algorithms? There is far more focus on algorithms - this reflects what you can expect in industry, you're far more likely to be rigorously tested on algorithms and data structures in a python interview than a general or frontend web development interview. ### Where should I deploy my code? For all projects - store your code on GitHub, GitLab or BitBucket (GitHub preferred if you want it to later be seen by potential employers) and for web projects deploy the code on the web using the service of your choice ([GitHub](https://pages.github.com/) or [GitLab](https://about.gitlab.com/features/pages/) projects or [Surge.sh](http://surge.sh/) are ideal for frontend only projects, while Heroku is a free alternative for backend/fullstack). ### What Python should I use? When you get to Tier 2 - I highly recommend installing the Python 3 version of [Anaconda](https://www.anaconda.com/download/) for use in the Python-centric portion of the guide. It containerizes your Python environment to ensure nothing you do impacts the rest of your machine, contains all the plugins you're likely to need, and even provides the Spyder IDE which is an ideal starter setup for Python development. ================================================ FILE: deprecated/job-ready.md ================================================ # Get Job ready with 13 projects, 2 courses, and 10 books ## Deprecated - Updated 3.0 version available [here](./job-ready-javascript-edition-3.0.md) Are you working through the FreeCodeCamp curriculum and want to be job ready (for a junior role) without finishing all three certifications? Want to short-circuit the process and get this done quick without getting laughed out of interviews? Are you thinking "I'll just finish the frontend certification" and start applying? **You're looking at the wrong certification** to get prepared and I'll tell you why. The frontend certification does NOT teach you any of the real world skills that go along with programming that you'll need on the job. It doesn't teach you how to work in an editor on your own machine. It doesn't teach you how to run a build process. It doesn't teach you how to share your code in a git repository. And, it doesn't teach you how to deploy your code to a real server on the net. **Have no fear** there IS a FCC certification that will get you much, much closer to your goal. Combine it with just a few other resources and you can get there. The backend certification is the one you want to be aiming for. Finish this list - and you'll walk into interviews with a lot more confidence, and a much better chance of landing that job. 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. ## Read these books, complete these two courses, this certification, and these three projects - [ ] 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) - [ ] Course - [CS50](https://www.edx.org/course/introduction-computer-science-harvardx-cs50x) on edX - [ ] Book - [JavaScript Allongé, the "Six" Edition](https://leanpub.com/javascriptallongesix) * [ ] 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. - [ ] Book - [DOM Enlightenment](http://domenlightenment.com/) - [ ] Project - Portfolio from the frontend section of FCC - [ ] Book - [JavaScript Design Patterns](https://addyosmani.com/resources/essentialjsdesignpatterns/book/) - [ ] 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. - [ ] Book - [Open Data Structures](http://www.aupress.ca/books/120226/ebook/99Z_Morin_2013-Open_Data_Structures.pdf) - [ ] Project - Clone [this Admin template](http://rubix410.sketchpixy.com/ltr/dashboard) using React, Angular, or Vue **_Special note: No, you're not done until you finish every step, in order._** **If you don't have access to Netflix, or just want an alternative to the Netflix Project** Clone Spotify - you can sign up for a free account. [Spotify](https://www.spotify.com/us/) You can use their API to search pretty much all of the data they have available: [Spotify Web API](https://developer.spotify.com/web-api/) You can't actually pull full length versions of the media to play in your app, just play the demo track ;) #### If you're thinking @P1xt, you're nuts, I just want to be a frontend developer, this is too much - No it's not. - This will actually do what the frontend cert alone wont. It will prepare you to do the job of a frontend web developer in today's market. Writing some HTML and CSS isn't all there is to the job. This will prepare you for the rest - Don't quit. - Don't panic! ================================================ FILE: deprecated/projects/android/Androidforbeginners.md ================================================ Please see the details of the project description [here](https://www.udacity.com/course/viewer#!/c-ud837/l-4040108662/m-4606438835) ================================================ FILE: deprecated/projects/android/BookListing.md ================================================ # Project Overview This project is a chance for you to combine and practice everything you learned in this section of the Nanodegree program. You will be making a book listing app using an API query and a ListView. The goal is to design and create the structure of a Book Listing app which would allow a user to get a list of published books on a given topic. You will be using the google books api in order to fetch results and display them to the user. If you are subscribed to the paid Nanodegree program, coaches will be available in the Coaches Lounge to help guide you through the final project. You will receive feedback after submitting your project and a verified certificate after successfully finishing this project. If you are enrolled in the free version of this course, the [project rubric](https://review.udacity.com/#!/rubrics/164/view) and all of the project details are available to you. Either way, we would love to see a description and link to your app on the discussion forum. # Why this project? In the most recent portion of the Nanodegree program, you learned about the web and about how to get data from an api. You also learned how to parse that data and display it to a user. This project gives you the ability to practice those skills, which will be key in developing any app which makes use of a backend server, real time data, or interactions over the internet. # What Will I Learn? This project is about combining various ideas and skills we’ve been practicing throughout the course. They include: * Fetching data from an API * Using an AsyncTask * Parsing a JSON response * Creating a list based on that data and displaying it to the user. ================================================ FILE: deprecated/projects/android/BuildItBigger.md ================================================ ## Project Overview In this project, you will create an app with multiple flavors that uses multiple libraries and Google Cloud Endpoints. The finished app will consist of four modules: 1. A Java library that provides jokes 2. A Google Cloud Endpoints (GCE) project that serves those jokes 3. An Android Library containing an activity for displaying jokes 4. An Android app that fetches jokes from the GCE module and passes them to the Android Library for display ## Why this Project? As Android projects grow in complexity, it becomes necessary to customize the behavior of the Gradle build tool, allowing automation of repetitive tasks. Particularly, factoring functionality into libraries and creating product flavors allow for much bigger projects with minimal added complexity. ##What Will I Learn? You will learn the role of Gradle in building Android Apps and how to use Gradle to manage apps of increasing complexity. You'll learn to: * Add free and paid flavors to an app, and set up your build to share code between them * Factor reusable functionality into a Java library * Factor reusable Android functionality into an Android library * Configure a multi-project build to compile your libraries and app * Use the Gradle App Engine plugin to deploy a backend * Configure an integration test suite that runs against the local App Engine development server # Project Overview When you're done, your multi-project build will look something like this. Proceed to the next slide for specific instructions. ![project overview](//lh3.googleusercontent.com/cJQtO_A08shKWZ1NEJxpvdYcfXxoHH87HYldIx_gOoGcoqnnZDTP3ycVqAnZSUMYzHygxhb-nEE_Yv_QmZY=s0#w=1920&h=1080) ### Supporting Courses You should have the skills you need to complete this projcet after completing Gradle for Android And Java. ##How Do I Complete this Project? ### Step 0: Starting Point This is the starting point for the final project, which is provided to you in the course repository. It contains an activity with a banner ad and a button that purports to tell a joke, but actually just complains. The banner ad was set up following the instructions here. You may need to download the Google Repository from the Extras section of the Android SDK Manager. When you can build an deploy this starter code to an emulator, you're ready to move on. ### Step 1: Create a Java library Your first task is to create a Java library that provides jokes. Create a new Gradle Java project either using the Android Studio wizard, or by hand. Then introduce a project dependency between your app and the new Java Library. If you need review, check out demo 4.01 from the course code. Make the button display a toast showing a joke retrieved from your Java joke telling library. ### Step 2: Create an Android Library Create an Android Library containing an Activity that will display a joke passed to it as an intent extra. Wire up project dependencies so that the button can now pass the joke from the Java Library to the Android Library. For review on how to create an Android library, check out demo 4.03. For a refresher on intent extras, check out this documentation. ### Step 3: Create GCE Module This next task will be pretty tricky. Instead of pulling jokes directly from our Java library, we'll set up a GCE development server, and pull our jokes from there. Follow the instructions in this tutorial to add a GCE module to your project: Introduce a project dependency between your Java library and your GCE module, and modify the GCE starter code to pull jokes from your Java library. Create an Async task to retrieve jokes. Made the button kick off a task to retrieve a joke, then launch the activity from your Android Library to display it. ### Step 4: Add Functional Tests Add code to test that your Async task successfully retrieves a non-empty string. For a refresher on setting up Android tests, check out demo 4.09. ### Step 5: Add a Paid Flavor Add free and paid product flavors to your app. Remove the ad (and any dependencies you can) from the paid flavor. ## Optional Tasks For extra practice to make your project stand out, complete the following tasks. ### Add Interstitial Ad Follow these instructions to add an interstitial ad to the free version. Display the ad after the user hits the button, and before the joke is shown. ### Add Loading Indicator Add a loading indicator that is shown while the joke is being retrieved, and disappears when the joke is ready. This tutorial is a good place to start. ### Configure Test Task To tie it all together, create a Gradle task that: 1. Launches the GCE local development server 2. Runs all tests 3. Shuts the server down again # Project Rubric Your project will be evaluated by a Udacity Code Reviewer according to this rubric. A summary of the rubric is provided below. ### Required Components * Project contains a Java library for supplying jokes * Project contains an Android library with an activity that displays jokes passed to it as intent extras. * Project contains a Google Cloud Endpoints module that supplies jokes from the Java library. Project loads jokes from GCE module via an async task. * Project contains connected tests to verify that the async task is indeed loading jokes. * Project contains paid/free flavors. The paid flavor has no ads, and no unnecessary dependencies. ### Required Behavior * App retrieves jokes from Google Cloud Endpoints module and displays them via an Activity from the Android Library. ### Optional Components Once you have a functioning project, consider adding more features to test your Gradle and Android skills. Here are a few suggestions: * Make the free app variant display interstitial ads between the main activity and the joke-displaying activity. * Have the app display a loading indicator while the joke is being fetched from the server. * Write a Gradle task that starts the GCE dev server, runs all the Android tests, and shuts down the dev server. ## Submission and Evaluation Your project will be evaluated by a Udacity Code Reviewer according to the rubric in the previous node. Be sure to review it thoroughly before you submit. All criteria must "meet specifications" in order to pass. **Note**: Please make sure you **clean** your project before creating a zip file or pushing code to a GitHub repository. You can clean your project by following the instructions given in **[this](https://goo.gl/8lgeV5)** link. If you are using GitHub to host your projects, please make sure the code you want to submit for review is in the **master** branch of your repository. **IMPORTANT: If you're submitting via a public Github repository, please make sure any external API key that you utilize, has been removed from your code.** It's highly unsafe (and often breaks the Terms of Service) to include API keys in public repos, so you need to remove yours. You can add a note in a README file where a reviewer should go to insert their API key. Reviewers have been trained to expect this situation. When you're ready to submit your project, click on Udacity in the navigation bar at the top your screen to return to your Udacity Home. Then, locate and expand the project you'd like to submit. Click on the button to submit your project. You can view the submission process in more detail here. If you have any problems submitting your project, please email us at **android-project@udacity.com**. Due to the high volume of submissions, the turnaround for your project can take **up to a week**. Each Android ND project will be reviewed against the Common Project Requirements, in addition to its project-specific rubric. ================================================ FILE: deprecated/projects/android/CapstoneStage1-Design.md ================================================ ## Project Overview In the Capstone project, you will build an app of your own design in two stages. In Stage 1, you will design and plan the app, using a template that we provide in the "Instructions" node. Creating and building your own app idea can be both exciting and daunting; ultimately, we want the experience to be rewarding. You'll apply a wealth of different concepts and components that you've learned across the Nanodegree to bring you own app idea to life. To keep the process from becoming overwhelming (or simply chaotic), you will design and plan your app, and receive feedback, *before* you start building. This will help prevent and mitigate pain points you might run into along the way, and also replicates the process of professional Android Developers. ## Why this Project? To become a proficient Android Developer, you need to design apps and make plans for how to implement them. This will involve choices such as how you will store data, how you will display data to the user, and what functionality to include in the app. ## What Will I Learn? Through this project, you'll demonstrate the ability to communicate an app idea formally, using: * An app description * UI flow mocks, similar to what you've seen in other Nanodegree projects, like the Popular Movies overview * A list of required tasks that you will complete to build the app, in order The Capstone project will give you the experience you need to own the full development of an app. This first stage replicates the design and planning experience that proficient Android Developers are expected to demonstrate. ## How Will I Complete this Project? ### Supporting Courses You will learn the skills you need to complete this project in these courses: * Developing Android Apps: Android Fundamentals * Advanced Android App Development: Productionize and Publish Your App * Google Play Services: Use Google APIs to Improve Your Apps * Gradle for Android and Java: Build Better Apps Through Automation ### App Ideas If you don't have an app idea of your own, feel free to choose one of these: * Teleprompter app (we're always on the look-out for a good teleprompter app!) * Fitness app * Podcast app * Travel app * Reddit app ### Required Tasks 1. Review the requirements for the app in this **document** 2. Make a copy of **this template** 3. Rename the copy: "**Capstone_Stage1**" 4. Fill out each section: * App Description * UI Mocks * Key Considerations * Next Steps: Required Tasks 5. Download the completed document as a PDF, and save it as: "**Capstone_Stage1.pdf**" ## Project Rubric project rubric. Be sure to review it thoroughly before you submit. All criteria must "meet specifications" in order to pass. **Note**: Please make sure you **clean** your project before creating a zip file or pushing code to a GitHub repository. You can clean your project by following the instructions given in **[this](https://goo.gl/8lgeV5)** link. **IMPORTANT: If you're working in a public Github repository, please make sure any external API key that you utilize, has been removed from your code.** It's highly unsafe (and often breaks the Terms of Service) to include API keys in public repos, so you need to remove yours. You can add a note in a README file where a reviewer should go to insert their API key. Reviewers have been trained to expect this situation. ================================================ FILE: deprecated/projects/android/CapstoneStage2-Build.md ================================================ ## Project Overview In Stage 1, you designed and planned your Capstone app. Now, it's time to build it! ## Why this Project? In this project, you will demonstrate the skills you've learned in your Nanodegree journey, and apply them to creating a unique app experience of your own. By the end of this project, you will have an app that you can submit to the Google Play Store for distribution. ## What Will I Learn? The Capstone project will give you the experience you need to own the full development cycle of an app. ## How Will I Complete this Project? ### Supporting Courses You will learn the skills you need to complete this project in these courses: * Developing Android Apps: Android Fundamentals * Advanced Android App Development: Productionize and Publish Your App * Google Play Services: Use Google APIs to Improve Your Apps * Gradle for Android and Java: Build Better Apps Through Automation ## Required Tasks 1. Successfully complete Stage 1. 2. Build your app using your Stage 1 document as a guide. 3. Submit your app source code through the Nanodegree project portal. Your project will be evaluated by a Udacity Code Reviewer according to this rubric. Be sure to review it thoroughly before you submit. All criteria must "meet specifications" in order to pass. Continue to the next node for submission and evaluation instructions. ## Submission and Evaluation Your project will be evaluated by a Udacity Code Reviewer according to the rubric in the previous node. Be sure to review it thoroughly before you submit. All criteria must "meet specifications" in order to pass. **Note**: Please make sure you **clean** your project before creating a zip file or pushing code to a GitHub repository. You can clean your project by following the instructions given in **[this](https://goo.gl/8lgeV5)** link. If you are using GitHub to host your projects, please make sure the code you want to submit for review is in the **master** branch of your repository. **IMPORTANT: If you're submitting via a public Github repository, please make sure any external API key that you utilize, has been removed from your code.** It's highly unsafe (and often breaks the Terms of Service) to include API keys in public repos, so you need to remove yours. You can add a note in a README file where a reviewer should go to insert their API key. Reviewers have been trained to expect this situation. When you're ready to submit your project, click on Udacity in the navigation bar at the top your screen to return to your Udacity Home. Then, locate and expand the project you'd like to submit. Click on the button to submit your project. You can view the submission process in more detail here. If you have any problems submitting your project, please email us at **android-project@udacity.com**. Due to the high volume of submissions, the turnaround for your project can take **up to a week**. Each Android ND project will be reviewed against the Common Project Requirements, in addition to its project-specific rubric. ================================================ FILE: deprecated/projects/android/CourtCounter.md ================================================ # Court Counter App


## Project Overview This project is a chance for you to combine and practice everything you learned in this section of the Nanodegree program. You will be making an app that allows a user to keep track of points within a game. The goal is to create an **Score Keeper app** which gives a user the ability to keep track of the score of two different teams playing a game of your choice. To build this project, you can follow along with the practice set and customize the Court Counter app to track scores from a different sport. - - - ### Why this project? In the most recent portion of the Nanodegree program, you learned how to make use of Java in your Android apps to make them interactive. With Score Keeper, you will be practicing this skill set, with particular focus on button code, variable scope, and updating views. - - - ### What will I learn? This project is about combining various ideas and skills we’ve been practicing throughout the course. They include: * Adding button code to your app * Updating views * Properly scoping variables * Finding views by their ID - - - ### Subscription vs Free-Version student If you are subscribed to the paid Nanodegree program, coaches will be available in the Coaches Lounge to help guide you through the final project. You will receive feedback after submitting your project and a verified certificate after successfully finishing this project. If you are enrolled in the free version of this course, the project rubric and all of the project details are available to you. Either way, we would love to see a description and link to your app on the discussion forum. ================================================ FILE: deprecated/projects/android/ForceGolf.md ================================================ # Project 5: Force Golf ## Project Description ### Project Overview For this project, you will make a top-down [minigolf](https://en.wikipedia.org/wiki/Miniature_golf) game with a space-aged aesthetic. A typical minigolf game consists of 18 holes, you may think of them as levels, that constitute an entire course. For each level in the course, a player is tasked with hitting a ball into a hole — this is the core gameplay mechanic for Force Golf. Players will be able to control the direction and force applied to a ball as it is hit around a level. Each time the ball is hit, a stroke is recorded. The goal is to complete a level, or an entire course, in the smallest number of strokes possible. You will build a LibGDX project, create a data representation of a level, implement a simple level loader, and then use Box2D to execute the physics required for a single level of Force Golf. It should be noted that levels typically contain hazards intended to obstruct a clear path from the ball's starting position to the hole. This makes gameplay more fun and challenging, and you are encouraged to include such hazards in the level you build. ### Why This Project? Force Golf is at its core a physics game, and it lends itself very well to being implemented with Box2D. By completing this project, you will not only gain experience working physics in 2D, but you will also be well-prepared to work with other physics engines. Additionally, we wanted to give you a project that allows for experimentation and creativity. Since you have the freedom to build levels as you see fit, you have an open canvas for designing interesting gameplay that utilizes all Box2D has to offer. ### What Will I Learn? You will learn how to utilize Box2D to simulate 2D physics in a game. Through this project, you will be introduced to concepts like forces, collision detection, and joints. Even if you do not have a formal physics background, you will still be able to gain a working knowledge of how physics are defined and applied in games. This will give you the ability to build your own 2D physics games and give you a great starting point if you decide to work with 3D physics. ================================================ FILE: deprecated/projects/android/GigaWars.md ================================================ # GigaWars ## Description ### Project Overview GigaWars is an epic space-combat strategy game where you unleash a fleet of ships to destroy your enemy's base. The player (human or computer) will decide what ships to send into battle when, managing their resources. The individual ships will control themselves, however. In the distant future we no longer need to send soldiers into harms way; we can program the ships to fly themselves! You will write in-depth logic for several ship types to create glorious computer-controlled space battles. You will also write logic for computer players to play the game. ### Why this project? GigaWars is a chance for you to combine the skills that allowed you to create Space Kerfuffle! with your newfound mastery of game AI. This project will demonstrate mastery of a variety of game development concepts. The unique factor that separates video games from other media is their interactivity; their ability to create a dynamic user experience respond intelligently and meaningfully to situations. AI is the cornerstone of this interactivity. Imagine the power you will feel watching two fleets of ships duke it out, knowing that every automated maneuver is the result of your careful planning! ### What will I learn? This project will provide hands-on experience writing the type of AI scripts that you see in video games everywhere. Programming the ship logic will give you a chance to practice writing logic for active game entities and apply the steering and pathfinding techniques you learned in the course. Creating the computer agent that decides what ships to deploy when will be an exercise in creating high-level, strategic AI using decision trees, state machines, or whatever other AI techniques you deem appropriate. ## Completion Follow these steps to complete the project: * Create a new libGDX project. Be sure to check the "Ai" box in the libGDX project setup tool when generating your project. This will automatically add the relevant dependencies to your build.gradle files. * Download the provided game assets (link coming soon), or find/create your own! * Create all the classes you need to render an epic space battle. The basic gameplay rules are as follows: * There are two players. They can both be computer players, or there can be a human and a computer player. Each player has a base, which can be destroyed by the enemy player. * Each player has access to a resource or resources, and they gain resources over time. How exactly this works is up to you. * Each player can use a resource or resources to deploy ships. The players do not control the ships directly! Instead, the ships should have automated behavior. * Ships have decision making and steering AI that makes them fight once deployed. Ships can attack one another or the enemy's base. There is a mechanism by which the enemy base can be destroyed. * Create game AI that controls the ships and controls a computer player. * Watch your fleets fight! If you're unsure how to go about this, here are some design tips: * Rendering and updating all the ships is not too different from the work you did for Project 2: Space Kerfuffle! You can use your code from that project as an example. * For resources, the simplest option is to have a resource simply accumulate over time for each player. From there, there are a few simple ways to spice things up. * Make each side earn interest on there current resource total, so players must make strategic decisions about when to save up and accumulate more total resources, and when to spend and deploy more units. * Make each side earn resources as they destroy enemy ships. * Make a unit that can retrieve resources from the environment, such as from asteroids. * For ship decision making, and for the computer player's decision making, we recommend using `gdx.ai` [behavior trees](https://github.com/libgdx/gdx-ai/wiki/Behavior-Trees) or [state machines](https://github.com/libgdx/gdx-ai/wiki/State-Machine). * For ship steering, we recommend using the `gdx.ai` [steering API](https://github.com/libgdx/gdx-ai/wiki/Steering-Behaviors). * Use the built-in `gdx.ai` classes! A lot of common behaviors, especially in the steer package, are created for you. Using or extending these classes will be much easier than implementing everything yourself. * The enemy ship AI is the most complex part of the project. We recommend starting with getting some basic behaviors working for one or two ships, like avoiding walls or chasing enemies, and building up gradually from there. Once you have your ship behavior working, it will be easy to get the resources/ship purchasing gameplay elements in place. ================================================ FILE: deprecated/projects/android/GoUbiquitous.md ================================================ ## Project Overview In this project, you will build a wearable watch face for Sunshine to run on an Android Wear device. ## Why this Project? Android Wear is an exciting way to integrate your app more directly into users’ lives. As a new developer, it will be important for you to understand how to perform this integration. This project gives you an opportunity to design a companion app for Sunshine, tying it to a watch face in order to enrich the experience. ## What Will I Learn? Through this project, you will: * Understand the fundamentals of Android Wear. * Design for multiple watch form factors. * Communicate between a mobile device and a wearable device. ## How Will I Complete this Project? ### Supporting Courses You should have the skills you need to complete this app after completing: * Developing Android Apps * Advanced Android App Development * Android Ubiquitous Computing ### Required Tasks * Clone/Download a zip file of the final branch of Sunshine from Advanced Android App Development. * Spend time exploring the samples built into Android Studio, looking for ways to incorporate that functionality into an Android Wear watchface. ### Design Mocks Feel free to use the following square and round designs as a design reference. ![square](//lh3.googleusercontent.com/bb5NXi9Vq-Lt4WsApGwWPJbb2TTa-5EFUA_O5q6Ki2Jh_tAzmFX14sOrhzKsfipKsI8yB003dNxgkemdAUFB=s0#w=280&h=280) ![round](//lh3.googleusercontent.com/Hy5VR-7Rsz6RAD_5ylXHQ6EzLZCg1DObOGWe7CUtdSNImh9yBT0CSLaOcusQyGXwJOYgiIDJvIi44pwWKQHr=s0#w=280&h=280) But certainly feel free to customize and create per your own taste and preferences! We're looking forward to seeing what you create! ## Project Rubric Your project will be evaluated by a Udacity Code Reviewer according to this rubric. Be sure to review it thoroughly before you submit. All criteria must "meet specifications" in order to pass. Continue to the next node for submission and evaluation instructions. ## Submission and Evaluation Your project will be evaluated by a Udacity Code Reviewer according to the rubric in the previous node. Be sure to review it thoroughly before you submit. All criteria must "meet specifications" in order to pass. **Note**: Please make sure you **clean** your project before creating a zip file or pushing code to a GitHub repository. You can clean your project by following the instructions given in **[this](https://goo.gl/8lgeV5)** link. If you are using GitHub to host your projects, please make sure the code you want to submit for review is in the **master** branch of your repository. **IMPORTANT: If you're submitting via a public Github repository, please make sure any external API key that you utilize, has been removed from your code.** It's highly unsafe (and often breaks the Terms of Service) to include API keys in public repos, so you need to remove yours. You can add a note in a README file where a reviewer should go to insert their API key. Reviewers have been trained to expect this situation. When you're ready to submit your project, click on Udacity in the navigation bar at the top your screen to return to your Udacity Home. Then, locate and expand the project you'd like to submit. Click on the button to submit your project. You can view the submission process in more detail here. If you have any problems submitting your project, please email us at **android-project@udacity.com**. Due to the high volume of submissions, the turnaround for your project can take **up to a week**. Each Android ND project will be reviewed against the Common Project Requirements, in addition to its project-specific rubric. ================================================ FILE: deprecated/projects/android/HabitTracker.md ================================================ # Project Overview This project is a chance for you to combine and practice everything you learned in this section of the Nanodegree program. You will be making a habit tracking app using an SQLite table. The goal is to design and create the structure of a Habit Tracking app which would allow a user to store and track their habits over time. If you are subscribed to the paid Nanodegree program, coaches will be available in the Coaches Lounge to help guide you through the final project. You will receive feedback after submitting your project and a verified certificate after successfully finishing this project. If you are enrolled in the free version of this course, the [project rubric](https://review.udacity.com/#!/rubrics/162/view) and all of the project details are available to you. Either way, we would love to see a description and link to your app on the discussion forum. # Why this project? In the most recent portion of the Nanodegree program, you learned about data storage in a SQLite database on Android. This is critical if you want to make any app that persists a user’s data over time or syncs with an online database for offline use. # What Will I Learn? This project is about combining various ideas and skills we’ve been practicing throughout the course. They include: * Creating a SQLite table in your app * Populating that table with new entries * Modifying the entries * Displaying the contents of the table to users. ================================================ FILE: deprecated/projects/android/Inventory.md ================================================ # Project Overview This project is a chance for you to combine and practice everything you learned in this section of the Nanodegree program. You will be making an inventory app for a small business using an SQL table and a number of CRUD commands. The goal is to design and create the structure of an Inventory App which would allow a store to keep track of its inventory of products. The app will need to store information about price, quantity available, supplier, and a picture of the product. It will also need to allow the user to track sales and shipments and make it easy for the user to order more from the listed supplier. If you are subscribed to the paid Nanodegree program, coaches will be available in the Coaches Lounge to help guide you through the final project. You will receive feedback after submitting your project and a verified certificate after successfully finishing this project. If you are enrolled in the free version of this course, the [project rubric](https://review.udacity.com/#!/rubrics/163/view) and all of the project details are available to you. Either way, we would love to see a description and link to your app on the discussion forum. # Why this project? In the most recent portion of the Nanodegree program, you learned about data storage in Android, using both SQLite tables and file storage on the device. These skills let you build apps which are critical to small businesses worldwide. By practicing these skills and building this app, you will have the foundation to build similar apps for any kind of business. # What Will I Learn? This project is about combining various ideas and skills we’ve been practicing throughout the course. They include: * Storing information in a SQLite database * Integrating Android’s file storage systems into that database * Presenting information from files and SQLite databases to users * Updating information based on user input. * Creating intents to other apps using stored information. ================================================ FILE: deprecated/projects/android/MakeYourAppMaterial.md ================================================ ![p5](//lh3.googleusercontent.com/w80PLTgl1Hv2f4X2G8YJHL7rZi1bJkkM516aKpiut9Wj52cIEAkM05SZGQcDQksffZbc_FzNULyQHfqjBGM=s0#w=1008&h=161) ## Project Overview In this project, you will redesign an app to follow the Material Design guidelines and translate a set of static design mocks to a living and breathing app. ## Why this Project? This project gives you an opportunity to improve an app’s design, a vital skill for building apps users will love. It also replicates a common developer task of updating and changing an app's design as new standards are released. ##What Will I Learn? Through this project, you will: * Understand the fundamentals of Android design. * Apply Material Design guidelines to an mobile application. * Separate an interface into surfaces. * Effectively use transitions and motion. ## How Will I Complete this Project? You will improve an app for this project: * XYZ Reader: A mock RSS feed reader featuring banner photos and shocking headlines! Download the code here. The app is currently functional, and work in most cases for most users. Your job will be to take the user feedback in the UI Review node, and implement changes that will improve the UI and make it conform to Material Design. ### Supporting Courses You should have the skills you need to complete this app after completing: * Developing Android Apps * Advanced Android App Development * Material Design for Android Developers You can also refer to the [Material Design specification](http://www.google.com/design/spec/material-design/introduction.html). ### Required Tasks * Download a zip file of the app. * Read the UI Review in the next node. * Spend time exploring the current state of the app, looking for ways it could be improved. The app will need multiple improvements. Be sure to look specifically at issues called out in the UI Review. * Execute the improvements! * Make a single GitHub repo with your code for the app and submit it through the Nanodegree portal. See the Submission and Evaluation node for detailed instructions. For detailed information on how your project will be assessed, see the Rubric node. ## User Feedback for XYZ Reader: ### Lyla says: “This app is starting to shape up but it feels a bit off in quite a few places. I can't put finger on it but it feels odd.” ### Jay says: “Is the text supposed to be so wonky and unreadable? It is not accessible to those of us without perfect vision." ### Kagure says: “The color scheme is really sad and I shouldn't feel sad.” ## Project Rubric Your project will be evaluated by a Udacity Code Reviewer according to this rubric. Be sure to review it thoroughly before you submit. All criteria must "meet specifications" in order to pass. Continue to the next node for submission and evaluation instructions. ## Submission and Evaluation Your project will be evaluated by a Udacity Code Reviewer according to the rubric in the previous node. Be sure to review it thoroughly before you submit. All criteria must "meet specifications" in order to pass. **Note**: Please make sure you **clean** your project before creating a zip file or pushing code to a GitHub repository. You can clean your project by following the instructions given in **[this](https://goo.gl/8lgeV5)** link. If you are using GitHub to host your projects, please make sure the code you want to submit for review is in the **master** branch of your repository. **IMPORTANT: If you're submitting via a public Github repository, please make sure any external API key that you utilize, has been removed from your code.** It's highly unsafe (and often breaks the Terms of Service) to include API keys in public repos, so you need to remove yours. You can add a note in a README file where a reviewer should go to insert their API key. Reviewers have been trained to expect this situation. When you're ready to submit your project, click on Udacity in the navigation bar at the top your screen to return to your Udacity Home. Then, locate and expand the project you'd like to submit. Click on the button to submit your project. You can view the submission process in more detail here. If you have any problems submitting your project, please email us at **android-project@udacity.com**. Due to the high volume of submissions, the turnaround for your project can take **up to a week**. Each Android ND project will be reviewed against the Common Project Requirements, in addition to its project-specific rubric. ================================================ FILE: deprecated/projects/android/Makeyouownandroidapp.md ================================================ ## Project Overview For this project, students will make their own Android app. They can either come up with their own idea or select from one of the ideas listed under App Ideas on the Final Project Description page. They are also welcome to repurpose code from Sunshine to create a new app. ## Why this project? This project is a way for students to demonstrate the concepts they learned in the Developing Android Apps course by building them out. ## What will students learn? Students will learn how to: * Create an app that meets standard design Android's CoreApp Quality Guidelines * Identify the minimum permissions required to support core functionality * Implement a ContentProvider to access locally stored data * Implement a SyncAdapter, AsyncTasks or IntentService when pulling/sending data from a web service * Use a Loader to move data to an app's views * Preserve and restore user or app state upon device rotation or from the Home/Back buttons * *Optional:* Implement Notifications, ShareActionProvider, Broadcast Events, and Custom Views ## How do students complete this project? 1. Complete the Developing Android Apps course 2. Students will create an open-ended project following the Project Description and Rubric listed here 3. The project must: * Import and build on the latest version of Android Studio (Eclipse users take note) * Be entirely self-contained on an Android device (No external devices/bluetooth peripherals). * Include only safe-for-work content in your app * Meet specifications on all required components of the rubric (including submitting their Project Description, Self-Evaluation, Mockups for all user-facing screens including tablet mocks, and a signed .apk) ## Evaluation ### Overview The project will be evaluated against the rubric: Android Fundamentals The criteria included in this rubric are a subset of the Core App Quality Guidelines that the app would be evaluated against if it were submitted to the Google Play Store. Find the full list of guidelines here: http://developer.android.com/distribute/essentials/quality/core.html ### How Grading Works We have created a document that gives rubric specific instructions to help you guys grade Developing Android Apps projects.You can access the document here: Android Apps Grading- Best Practices It is VERY IMPORTANT that you read this document before you begin evaluating projects. ================================================ FILE: deprecated/projects/android/MusicalStructure.md ================================================ # Project Overview This project is a chance for you to combine and practice everything you learned in this section of the Nanodegree program. You will be making the structure of a music app using intents and empty activities. The goal is to design and create the structure of a Music app which would allow a user to play audio files. There are many music player apps, and they make a wide variety of design choices. It will be your job to decide what kind of music app your structure would turn into and build out that structure using intents. Will you build an app to play music from the user’s library of music? Will you build an app to stream random songs from a database? Will you build a musical suggestion engine? Those choices are up to you! If you are subscribed to the paid Nanodegree program, coaches will be available in the Coaches Lounge to help guide you through the final project. You will receive feedback after submitting your project and a verified certificate after successfully finishing this project. If you are enrolled in the free version of this course, the [project rubric](https://review.udacity.com/#!/rubrics/159/view) and all of the project details are available to you. Either way, we would love to see a description and link to your app on the discussion forum. # Why this project? In the most recent portion of the Nanodegree program, you learned how to think about the structure of an app and how to use OnClickListeners and explicit Intents to link between different activities within your own app. Practicing these skills will drastically improve the quality of the apps you build down the road. # What Will I Learn? This project is about combining various ideas and skills we’ve been practicing throughout the course. They include: * Designing an app experience to achieve a certain goal * Creating new activities * Using explicit Intents to link between activities in your app. * Using OnClickListeners to add behavior to buttons using Java code. ================================================ FILE: deprecated/projects/android/NewsApp.md ================================================ # Project Overview The final project is a chance for you to combine and practice everything you learned in this section of the Nanodegree program. You will be making your own app that connects to the Internet to provide news articles on a topic of your choice. The goal is to create an News feed app which gives a user regularly-updated news from the internet related to a particular topic, person, or location. The presentation of the information as well as the topic is up to you. If you are subscribed to the paid Nanodegree program, coaches will be available in the Coaches Lounge to help guide you through the final project. You will receive feedback after submitting your project and a verified certificate after successfully finishing this project. If you are enrolled in the free version of this course, the [project rubric](https://review.udacity.com/#!/rubrics/165/view) and all of the project details are available to you. Either way, we would love to see a description and link to your app on the discussion forum. # Why this project? In the most recent portion of the Nanodegree program, you worked to build the Earthquake app. Along the way, you learned about connecting to the internet in Android, parsing responses from an API, updating the information in your app, and properly displaying that information. Practicing these skills is imperative in order to build apps that delight and surprise users by anticipating their needs and supplying them with relevant information. # What Will I Learn? This project is about combining various ideas and skills we’ve been practicing throughout the course. They include: * Connecting to an API * Parsing the response of the API * Handling error cases gracefully * Updating information regularly ================================================ FILE: deprecated/projects/android/Outbreak.md ================================================ # Project 1: Outbreak ## Project Description ### Project overview For this project, you will make a simple game reminiscent of classic Atari arcade game Breakout. Players will control a platform at the bottom of the screen that moves from side to side to intercept a ball that will bounce on impact. The goal is to stop the ball from falling past your platform and deflect it into various blocks in the upper half of the screen. When the ball collides with a block, the block is destroyed. You will create a LibGDX project, implement a Screen, draw the game objects using a ShapeRenderer, and program the controls and real-time motion of the ball. ### Why this project? A breakout clone looks simple on the surface but there are lots of mechanics that go into making even a small game. Doing this project will allow you to build your skills and give you the confidence to tackle even more difficult projects. ### What will I learn? This project provides an opportunity to practice many of the core skills of 2D game development: key-frame animation, 2D collision detection, asset loading and management, level design and loading, and efficiently structuring a game with many objects spawning, getting destroyed, and flying across the screen. More important than any individual skill is the knowledge that you can make a complex game like this yourself. Complete this project, and you will be able to apply the same skills to making a variety of 2D games--including ones you design yourself. ### Why is this project meaningful to my career? Completing this project demonstrates a strong command of essential 2D game development skills. You can also show potential employers or collaborators that you can make an intensive game that runs on desktop or mobile (or as a browser game). This project is an excellent way to display a wide range of technical 2D game development ability. ## Completing the Project Completing the project consists of the following tasks: * Make a LibGDX project using the project generator tool. * Create a play screen using the Game class and Screen interface. * Write a render loop that displays all the game objects, including the player's platform, the ball, and the blocks, using ShapeRenderer. * Program the gameplay, including: * Polling for input to move the platform (arrow keys for the desktop build, and using the accelerometer on Android). * Moving the ball in real time and programming its bounce behavior. * Collision detection that makes the ball bounce when hitting a wall or block or the player platform, and destroying blocks on hit. ### Bonus challenges * Implement a Score that goes up as the player destroys blocks. * Add a start screen, Game Over screen, and/or win screen. * Implement different difficulty settings (eg the ball moves faster, there is a time limit, blocks take multiple hits). ## Submitting Your Project Before submitting your project for evaluation, we recommend that you check that each of the following is true: * Your app compiles & runs as expected * You are proud of your app and its output * You completed your project according to the instructions * You checked your project against [the rubric](https://review.udacity.com/#!/projects/5609616480/rubric) ================================================ FILE: deprecated/projects/android/Pong.md ================================================ # Project 0: Pong ## Project description ### Project Overview In this project, you will write code to complete the classic arcade game, Pong. We provide the skeleton of a libGDX game, and you supply key features such as controls for the player and collision detection between the paddles and the ball. ### Why this project? Pong remains to this day an iconic work in video game history. It can be seen as an emphatic proof of concept for the entire video game medium. Elegant in its simplicity, it still has all the essential features of a video game, such as a render loop, a basic notion of physics, player input, and a computer-controlled agent. Over the course of this Nanodegree program, you will learn how to apply these notions to much more complex projects. Still, there's no better place to start your game development journey than with this classic. ### What will I learn? This project is an opportunity for you to apply what you've learned so far to make a playable game. As far as what you can make with the tools you'll learn in this Nanodegree program, this is only the beginning. Are you ready to take the first step on your game development adventure? Let's play some Pong! ## Project Completion: Completing the project consists of the following tasks: * Download the project [here](https://github.com/udacity/2d-game-dev-project-0). * Import the libGDX project into Android Studio or IntelliJ IDEA. * Using the Ball class as an example, add the required method(s) to the Paddle class so that it can draw itself. * Give the Paddle class an `.update()` method where it moves up or down in response to arrow key input. * Write collision detection for the Ball and Paddle. * Instantiate necessary game entities in the PongScreen class, and call the appropriate methods to render/update them in the PongScreen class’ `.render()` method. * Uncomment starting code indicated by TODOs as you complete various portions of the project. ### Bonus challenges / Optional features * Add a game selection / start screen * Add music and / or sound effects. * Code your own computer paddle logic. ## Submitting Your Project The submission portal for this project is not open yet. You can view the rubric [here](https://review.udacity.com/#!/projects/7425879428/rubric). ================================================ FILE: deprecated/projects/android/PopularMoviesStage1.md ================================================ ## Project Overview Most of us can relate to kicking back on the couch and enjoying a movie with friends and family. In this project, you’ll build an app to allow users to discover the most popular movies playing. We will split the development of this app in two stages. First, let's talk about stage 1. In this stage you’ll build the core experience of your movies app. You app will: * Present the user with a grid arrangement of movie posters upon launch. * Allow your user to change sort order via a setting: * The sort order can be by most popular or by highest-rated * Allow the user to tap on a movie poster and transition to a details screen with additional information such as: * original title * movie poster image thumbnail * A plot synopsis (called overview in the api) * user rating (called vote_average in the api) * release date ## Why this Project? To become an Android developer, you must know how to bring particular mobile experiences to life. Specifically, you need to know how to build clean and compelling user interfaces (UIs), fetch data from network services, and optimize the experience for various mobile devices. You will hone these fundamental skills in this project. By building this app, you will demonstrate your understanding of the foundational elements of programming for Android. Your app will communicate with the Internet and provide a responsive and delightful user experience. ## What Will I Learn After Stage 1? * You will fetch data from the Internet with theMovieDB API. * You will use adapters and custom list layouts to populate list views. * You will incorporate libraries to simplify the amount of code you need to write ## How Will I Complete this Project? ### Supporting Course Material You should have the skills you need to complete this app after completing Lessons 1-3 of Developing Android Apps. If you'd like to make your app's UI beautiful, we also suggest reviewing this material from Lesson 5, which goes into greater detail about how to make more detailed layouts. ### Required Tasks * Build a UI layout for multiple Activities. * Launch these Activities via Intent. * Fetch data from themovieDB API ### Implementation Guide For step-by-step support, we've provided details on how to approach each task in this Implementation Guide. ## Project Rubric Your project will be evaluated by a Udacity Code Reviewer according to this rubric. Be sure to review it thoroughly before you submit. All criteria must "meet specifications" in order to pass. ## Submission and Evaluation Your project will be evaluated by a Udacity Code Reviewer according to the rubric in the previous node. Be sure to review it thoroughly before you submit. All criteria must "meet specifications" in order to pass. **Note**: Please make sure you **clean** your project before creating a zip file or pushing code to a GitHub repository. You can clean your project by following the instructions given in **[this](https://goo.gl/8lgeV5)** link. If you are using GitHub to host your projects, please make sure the code you want to submit for review is in the **master** branch of your repository. **IMPORTANT: If you're submitting via a public Github repository, please make sure any external API key that you utilize, has been removed from your code.** It's highly unsafe (and often breaks the Terms of Service) to include API keys in public repos, so you need to remove yours. You can add a note in a README file where a reviewer should go to insert their API key. Reviewers have been trained to expect this situation. When you're ready to submit your project, click on Udacity in the navigation bar at the top your screen to return to your Udacity Home. Then, locate and expand the project you'd like to submit. Click on the button to submit your project. You can view the submission process in more detail here. If you have any problems submitting your project, please email us at **android-project@udacity.com**. Due to the high volume of submissions, the turnaround for your project can take **up to a week**. Each Android ND project will be reviewed against the Common Project Requirements, in addition to its project-specific rubric. ================================================ FILE: deprecated/projects/android/PopularMoviesStage2.md ================================================ ## Project Overview Welcome back to Popular Movies! In this second and final stage, you’ll add additional functionality to the app you built in Stage 1. You’ll add more information to your movie details view: * You’ll allow users to view and play trailers ( either in the youtube app or a web browser). * You’ll allow users to read reviews of a selected movie. * You’ll also allow users to mark a movie as a favorite in the details view by tapping a button(star). This is for a local movies collection that you will maintain and does not require an API request*. * You’ll modify the existing sorting criteria for the main view to include an additional pivot to show their favorites collection. Lastly, you’ll optimize your app experience for tablet. Recall from Stage 1, you built a UI that presented the user with a grid of movie posters, allowed users to change sort order, and presented a screen with additional information on the movie selected by the user: ![pop-movies-grid](//lh3.googleusercontent.com/HxdjfVFSsu76bW_Ru5nUvtrQLuM_g09jjPuWU9Obz8W5IT8xczs9OZSIT9JJBkY7tUWPKgzncYHS9xl0EsY=s0#w=298&h=531) In Stage 2, you will go one step further and allow the user to view movie trailers, read reviews, and select favorites. ![pop-movies-detail](//lh3.googleusercontent.com/BTqI5BekJulDrHapAT5-CvikbF_3M9BBs3bkGuoiWtx0fOt7SqHZ_1jVLtV8OqLura1nShr12VwJ-LGsEb0=s0#w=301&h=535) Lastly, you will take the entire end-to end-user interaction flow, including what you built in Stage 1, and optimize it to work on tablets. ![pop-movies-tablet](//lh3.googleusercontent.com/tAclxudKqI9TYmjPBUSBTFxCJhvukWcshhW0IYeOmSkkirh-7R38g0nYw5BHPWbOWoLF6sRNeW6CzKFeVyTE=s0#w=624&h=468) ## What Will I Learn After Stage 2? * You will build a fully featured application that looks and feels natural on the latest Android operating system (Lollipop, as of May 2015). * You will optimize the UI experience for both phones and tablets. ## How Will I Complete this Project? ### Supporting Course Materials You should have the skills you need to complete this project after completing the Developing Android Apps course, focusing on Lessons 4 and 5. You are expected to have passed the Popular Movies, Stage 1 project prior to beginning this project. ### Implementation Guide Just like in Stage 1, we've come up with a set of milestones that will help structure your development and ensure that you reach the final product smoothly. These milestones are listed in the Stage 2 Implementation Guide. ## Project Rubric Your project will be evaluated by a Udacity Code Reviewer according to this rubric. Be sure to review it thoroughly before you submit. All criteria must "meet specifications" in order to pass. ## Submission and Evaluation Your project will be evaluated by a Udacity Code Reviewer according to the rubric in the previous node. Be sure to review it thoroughly before you submit. All criteria must "meet specifications" in order to pass. **Note**: Please make sure you **clean** your project before creating a zip file or pushing code to a GitHub repository. You can clean your project by following the instructions given in **[this](https://goo.gl/8lgeV5)** link. If you are using GitHub to host your projects, please make sure the code you want to submit for review is in the **master** branch of your repository. **IMPORTANT: If you're submitting via a public Github repository, please make sure any external API key that you utilize, has been removed from your code.** It's highly unsafe (and often breaks the Terms of Service) to include API keys in public repos, so you need to remove yours. You can add a note in a README file where a reviewer should go to insert their API key. Reviewers have been trained to expect this situation. When you're ready to submit your project, click on Udacity in the navigation bar at the top your screen to return to your Udacity Home. Then, locate and expand the project you'd like to submit. Click on the button to submit your project. You can view the submission process in more detail here. If you have any problems submitting your project, please email us at **android-project@udacity.com**. Due to the high volume of submissions, the turnaround for your project can take **up to a week**. Each Android ND project will be reviewed against the Common Project Requirements, in addition to its project-specific rubric. ================================================ FILE: deprecated/projects/android/QuizApp.md ================================================ # Overview The Quiz App project is a chance for you to combine and practice everything you learned in this section of the Nanodegree program. You will be making your own Android app - taking it from the idea stage to building out the full app. You can share your app with family and friends, as well as with other students in this course. The goal is to create an educational app that quizzes a user about a certain topic of your choice. We want you to be creative about how you accomplish this. It’s up to you what the quiz questions will be about and how you want to present them to your user. (We recommend about 5-10 quiz questions for a reasonable scope of your app). If you are subscribed to the paid Nanodegree program, coaches will be available in the Coaches Lounge to help guide you through the final project. You will receive feedback after submitting your project and a verified certificate after successfully finishing this project. If you are enrolled in the free version of this course, the [project rubric](https://review.udacity.com/#!/rubrics/158/view) and all of the project details are available to you. Either way, we would love to see a description and link to your app on the discussion forum. # Why this project? So far in this Nanodegree program, we’ve built three apps together: the Happy Birthday, Court Counter and Just Java apps. At this point, we believe that you’re now ready to create your own app. You will have full ownership over the creative vision, planning, and development of the app. From what we’ve seen in the discussion forums, you each have a wealth of different experiences and unique areas of expertise. We would like to see that shine through in the app that you create. # What Will I Learn? This project is about combining various ideas and skills we’ve been practicing throughout the course. They include: * Planning your app design before coding. * Taking an app layout from drawing to XML code. * Creating, positioning, and styling views. * Creating interactivity through button clicks and Java code. * Commenting and documenting your code. ================================================ FILE: deprecated/projects/android/ReportCard.md ================================================ # Project Overview This project is a chance for you to combine and practice everything you learned in this section of the Nanodegree program. You will be creating a single file this time - a custom class to represent a report card. The goal is to design and create the structure of a ReportCard Class which would allow a school to store a student’s grades for a particular year. This project will be just a java class, rather than a full Android app. If you are subscribed to the paid Nanodegree program, coaches will be available in the Coaches Lounge to help guide you through the final project. You will receive feedback after submitting your project and a verified certificate after successfully finishing this project. If you are enrolled in the free version of this course, the [project rubric](https://review.udacity.com/#!/rubrics/160/view) and all of the project details are available to you. Either way, we would love to see a description and link to your app on the discussion forum. # Why this project? In the most recent portion of the Nanodegree program, you learned about custom classes, which are critical to every object-oriented program you will build going forward. It is vital to be able to think about how to design objects which interact with each other and model real-world concepts. # What Will I Learn? This project is about combining various ideas and skills we’ve been practicing throughout the course. They include: * Designing a custom class * Creating that class in Java code. * Storing information in an array * Looping through an array ================================================ FILE: deprecated/projects/android/SpaceKerfuffle!.md ================================================ # Project 2: Space Kerfuffle! ## Project Description ### Project Overview Space Kerfuffle! is a top down, starfighter combat game. Players assume the role of an intrepid spacefighter pilot flying headlong into a swarm of aliens or robots or something else evil that wants to destroy humanity, probably. Players control a spacecraft and fire projectiles at oncoming enemies who do the same. Explosions happen. Numbers go up. See our prototype of the game here for inspiration. Note that your game doesn’t have to function exactly like this! You can be creative and use your own design ideas. Make sure to read and review the project rubric before submitting, however. (No aliens or robots were harmed in the creation of this Nanodegree program.) ### Why this project? In How to Build a Platfroming Using LibGDX, you built GigaGal, an old-school action platformer. Rather than recreating a similar project here, making Space Kerfuffle! will give you a chance to explore yet another classic arcade game genre. You will get a chance to apply the skills you learned in class, but also stretch your wings (no pun intended!) a bit and design a complex game on your own. When you're done, you'll have a way-cool space combat game to add to your portfolio. ### What will I learn? This project provides an opportunity to practice many of the core skills of 2D game development: key-frame animation, 2D collision detection, asset loading and management, level design and loading, and efficiently structuring a game with many objects spawning, getting destroyed, and flying across the screen. More important than any individual skill is the knowledge that you can make a complex game like this yourself. Complete this project, and you will be able to apply the same skills to making a variety of 2D games--including ones you design yourself. ### Why is this project meaningful to my career? Top-down fighter plane games are a classic arcade game genre, and they employ complicated game mechanics and animation. Completing this project demonstrates a strong command of essential 2D game development skills. You can also show potential employers or collaborators that you can make an intensive game that runs on desktop or mobile (or as a browser game). This project is an excellent way to display a wide range of technical 2D game development ability. ## Completing the Project ### Getting Started First, you will need to create a project using the LibGDX project generator tool. If you need a refresher on how to use the project generator, check out this video from the 2D Game Development course. Once you have your project set up, you will need one class that extends Game, and one class that implements Screen or extends ScreenAdapter. For a model on how to set this up, look at how we made the GigaGal game in the second course. Create an ExtendViewport, just like we did for GigaGal, but this one will extend vertically rather than horizontally. Once you have a Game, a Screen or ScreenAdapter, and a Viewport, you’re ready to start rendering your game. ### Importing Assets We provide a bunch of art assets for Space Kerfuffle!, which you can download here. These include animation frames for multiple ship types while firing, moving left, and moving right, animation frames for a big bad boss ship, as well as a bunch of projectiles and powerups that you can use. It’s up to you what sprites you use for what parts of the game, and you are free to use your own if you or any of your friends do game art. Loading all of these assets individually would be sub-optimal, so you will load them all at once using a TexturePacker. See Level 2-1: Sprites and Animations from How to Build a Platformer Using LibGDX for an example of how to use the built in LibGDX TexturePacker tool. This will pack all the sprite you want to use into a single image called an asset. Inside your game, you will access images from this atlas. To access things from your TextureAtlas, you need to create an instance of the AssetManager class. You can then access individual images from your atlas using the findRegion() method. Instead of using the findRegion() method of the TextureAtlas class at runtime, which is slow, you should load all the textures into memory ahead of time, and save them as final variables somewhere. ### Classes for the Player, Enemies, and Projectiles It’s up to you what classes you make for SpaceKerfuffle!, but we recommend at least making a class for the player’s ship, one for enemy ship, and one for projectiles. You may choose to employ some inheritance here, as many of these objects share certain properties. These classes should manage the position and state of these entities on the screen, and also know how to draw these objects. You may want to implement methods such as `render()` or `update()`. Inside the player ship class, or elsewhere, you will need to get input from the player themselves. The player must be able to move their ship using the arrow keys on the desktop backend, and the ship should follow their finger on mobile. There should be a button for firing projectiles on desktop, and we recommend having your ship perpetually firing on mobile. In games like this, many players will be mashing the shoot button anyway! For making the player and defining controls, you might want to review Level 1-6: User Input from 2D Game Development with LibGDX and Level 2-2: The Player from How to Build a Platformer Using LibGDX. For inspiration on creating enemy classes, check out Level 2-5: The Enemies. You will also need to make a boss battle to come at the end of your level, so a class (or several!) for the boss is recommended. It’s up to you how the boss behaves, but a good boss battle has phases and forces the player to react to the boss’ tactics. Be creative! ### Rendering Your Objects We recommend that you have some sort of Level class that keeps track of the player, enemies, and projectiles using data structures such as arrays. You can iterate through these arrays and render each individual object in a render method that you can call from the render method of your Screen object. In order to animate your objects in real time, you will need to put together the textures you extracted from your atlas into Animation objects, and use the getKeyFrame() method of the Animation class to get the appropriate frame for any given moment. See how we animated GigaGal in Level 2-2: The Player for an example of how to do this. You will also need to implement a collision detection mechanic that tests whether entities in your game have been hit by projectiles, removing entities that are destroyed, and spawning explosion animations. You can check out Level 2-6: The Bullets for inspiration here. ### Other Requirements Your game must load level data from a file rather than hard-coding it all. See Level 2-7: Level Loading (_coming soon_) for a model on how to accomplish this. We recommend using the Overlap2d or Tile map editors to create a JSON, which you can then parse using LibGDX’s built-in JSON parsing classes. Additionally, you will need to render a HUD that displays the player’s score, which should increase as they destroy enemies. If the player runs out of lives, a Game Over message should be displayed. If the player defeats the boss, a You Win! message should be displayed along with their final score. ## Submitting Your Project Before submitting your project for evaluation, we recommend that you check that each of the following is true: * Your app compiles & runs as expected * You are proud of your app and its output * You completed your project according to the instructions * You checked your project against [the rubric](https://review.udacity.com/#!/projects/5761872486/rubric) ================================================ FILE: deprecated/projects/android/StockHawk.md ================================================ ## Project Overview You will productionize an app, taking it from a functional state to a production-ready state. This will involve finding and handling error cases, adding accessibility features, allowing for localization, adding a widget, and adding a library. ## Why this Project? Stock Hawk gives you an opportunity to diagnose problems and practice improving apps. These skills are vital to building apps users will love. Diagnosing issues with existing apps is key to working on large apps or continuing projects in Android. Being aware of the common pitfalls in app design frees a developer to produce novel app experiences without making the same mistakes over and over. ## What Will I Learn? In this project, you will: * Diagnose existing issues with an app. * Make an app accessible to sight-impaired users. * Allow your app to be localized for distribution in other countries. * Handle error cases in Android. * Add a widget to your app experience. * Leverage the functionality of a library in your app. ## How Will I Complete this Project? You will improve the Stock Hawk app for this project. You can download the starting code for Stock Hawk in the Downloadables section. The app currently finds stock prices from the internet and allows users to add stocks to track. Your job will be to take the user feedback in the UX Review and implement changes that will make the app production ready. All of the issues you **need** to address to meet specifications are hinted at in the UX Review. There are also a few optional ways in which the apps can be improved that are not mentioned in the UX Review. ### Supporting Courses You should have the skills you need to complete this app after completing Developing Android Apps and Advanced Android App Development. ### Required Tasks * Download a zip file of the app code from the Downloadables section. * Read the UX Review in the next node. * Spend time exploring the current state of the app, looking for ways they could be improved. Be sure to look specifically at issues called out in the UX Review. * Execute the improvements! * For Nanodegree students: Make a single GitHub repo with your code for both apps, and submit through the Nanodegree portal. See the Submission and Evaluation node for detailed instructions. For detailed information on how your project will be assessed, see the Rubric node. ## Project Rubric Your project will be evaluated by a Udacity Code Reviewer according to this rubric. Be sure to review it thoroughly before you submit. All criteria must "meet specifications" in order to pass. Continue to the next node for submission and evaluation instructions. ## Submission and Evaluation Your project will be evaluated by a Udacity Code Reviewer according to the rubric in the previous node. Be sure to review it thoroughly before you submit. All criteria must "meet specifications" in order to pass. **Note**: Please make sure you **clean** your project before creating a zip file or pushing code to a Github repository. You can clean your project by following the instructions given in **[this](https://goo.gl/E7aBxo)** link. If you are using Github to host your projects, please make sure the code you want to submit for review is in the **master** branch of your repository. **IMPORTANT: If you're submitting via a public Github repository, please make sure any external API key that you utilize, has been removed from your code.** It's highly unsafe (and often breaks the Terms of Service) to include API keys in public repos, so you need to remove yours. You can add a note in a README file where a reviewer should go to insert their API key. Reviewers have been trained to expect this situation. When you're ready to submit your project, click on Udacity in the navigation bar at the top your screen to return to your Udacity Home. Then, locate and expand the project you'd like to submit. Click on the button to submit your project. You can view the submission process in more detail here. If you have any problems submitting your project, please email us at **android-project@udacity.com**. Due to the high volume of submissions, the turnaround for your project can take **up to a week**. Each Android ND project will be reviewed against the Common Project Requirements, in addition to its project-specific rubric. ================================================ FILE: deprecated/projects/android/TourGuide.md ================================================ # Project Overview The final project is a chance for you to combine and practice everything you learned in this section of the Nanodegree program. You will be making your own multi-screen Android app to share your knowledge about a city you are very familiar with. The goal is to create a tour guide app which presents relevant information to a user who’s visiting your city. The app can list top attractions, restaurants, public places, or events for the city. It can contain all the best known secrets that only locals know. It’s up to you which categories you want to provide, as well as what information to provide in each category. If you are subscribed to the paid Nanodegree program, coaches will be available in the Coaches Lounge to help guide you through the final project. You will receive feedback after submitting your project and a verified certificate after successfully finishing this project. If you are enrolled in the free version of this course, the [project rubric](https://review.udacity.com/#!/rubrics/161/view) and all of the project details are available to you. Either way, we would love to see a description and link to your app on the discussion forum. # Why this project? In the most recent portion of the Nanodegree program, you worked to build the Miwok language app, which taught you how to present information in a multi-screen app to your users. Now, you will practice that skillset by presenting information that you care about in your own life to a user. Your Tour Guide app will be unique to your city, your life, and your interests. # What Will I Learn? This project is about combining various ideas and skills we’ve been practicing throughout the course. They include: * Planning your app design and navigation before coding. * Selecting proper data structures to store lists of information. * Building layouts to display those lists of data. * Navigating between those lists using either a ViewPager or intents and multiple Activities. * Creating your own custom classes. * Properly handling images or audio (if applicable). ================================================ FILE: deprecated/projects/android/YourFirstApp.md ================================================ Beginning Android Project 1: Your First App ## Project Overview Design and implement a single screen app that displays information about a small business that you are closely familiar with. Here are some app ideas to help brainstorm: - Details about a small business in your neighborhood - Contact info and description about your workplace or school - Info about a special interest group (like a club or sports team) you’re part of and how new members can sign up Your design should include: - at least one photo representing the business - Name - Description - Phone Number - Address - Website (optional) - Hours of Operation (optional) Note: Be sure to check with the business for permission to use their name and details before you share your work publicly. ## Why this project? This project is a way for students to demonstrate the concepts they learned in the Developing Android Apps course by building out the design. ## What will students learn? Students will learn how to: * Use View Groups, Image Views, Text Views, and Button Views to display a screen on an Android application ## How do students complete this project? 1. Complete the Beginning Android Development course. 2. Students will create an open-ended project following the Project Description and Rubric shown here. 3. The project must: * Import and build on the latest version of Android Studio (Eclipse users take note) * Be entirely self-contained on an Android device (No external devices/bluetooth peripherals). * Include only safe-for-work content in your app * Meet specifications on all required components of the rubric ## How Grading Works We have created a document that gives rubric specific instructions to help grade Developing Android Apps projects. You can access the document here: Android Apps Grading- Best Practices It is VERY IMPORTANT that you read this document before you begin evaluating projects. ================================================ FILE: deprecated/speedrun-practice/README.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: - [Algorithms and Data Structures](./algorithms.md) - [Android](./android.md) - [Frontend Web Development](./frontend-dev.md) - [Fullstack Web Development](./fullstack-dev.md) - [Game Development](./game-dev.md) ================================================ FILE: deprecated/speedrun-practice/algorithms.md ================================================ # Algorithms and Data Structures - Speedrun / Practice ## Notes The following is a list of practice problems for studying algorithms and data structures. Recommendation: select one programming language and complete all of the problems using that language. If you want to add an additional language, complete them all in the language you selected first, then repeat them with your second language choice. Good choices for a first language are C++ (runs fast) and Python (fast to code), though any language will work (yes, including JavaScript). ## Projects - [ ] [Google Code Jam 2015 - Qualification Round](https://code.google.com/codejam/contest/6224486/dashboard) - [ ] [Google Code Jam 2015 - Round 1A](https://code.google.com/codejam/contest/4224486/dashboard) - [ ] [Google Code Jam 2015 - Round 1B](https://code.google.com/codejam/contest/8224486/dashboard) - [ ] [Google Code Jam 2015 - Round 1C](https://code.google.com/codejam/contest/4244486/dashboard) - [ ] [Google Code Jam 2015 - Round 2](https://code.google.com/codejam/contest/8234486/dashboard) - [ ] [Google Code Jam 2015 - Round 3](https://code.google.com/codejam/contest/4254486/dashboard) - [ ] [Google Code Jam 2015 - World Finals](https://code.google.com/codejam/contest/5224486/dashboard) - [ ] [Google Code Jam 2016 - Qualification Round](https://code.google.com/codejam/contest/6254486/dashboard) - [ ] [Google Code Jam 2016 - Round 1A](https://code.google.com/codejam/contest/4304486/dashboard) - [ ] [Google Code Jam 2016 - Round 1B](https://code.google.com/codejam/contest/11254486/dashboard) - [ ] [Google Code Jam 2016 - Round 1C](https://code.google.com/codejam/contest/4314486/dashboard) - [ ] [Google Code Jam 2016 - Round 2](https://code.google.com/codejam/contest/10224486/dashboard) - [ ] [Google Code Jam 2016 - Round 3](https://code.google.com/codejam/contest/3224486/dashboard) - [ ] [Google Code Jam 2016 - World Finals](https://code.google.com/codejam/contest/7234486/dashboard) - [ ] [Google Code Jam 2017 - Qualification Round](https://code.google.com/codejam/contest/3264486/dashboard) - [ ] [Google Code Jam 2017 - Round 1A](https://code.google.com/codejam/contest/5304486/dashboard) - [ ] [Google Code Jam 2017 - Round 1B](https://code.google.com/codejam/contest/8294486/dashboard) - [ ] [Google Code Jam 2017 - Round 1C](https://code.google.com/codejam/contest/3274486/dashboard) - [ ] [Google Code Jam 2017 - Round 2](https://code.google.com/codejam/contest/5314486/dashboard) - [ ] [Google Code Jam 2017 - Round 3](https://code.google.com/codejam/contest/8304486/dashboard) - [ ] [Google Code Jam 2017 - World Finals](https://code.google.com/codejam/contest/6314486/dashboard) ## Prep If you need to study before diving in: ### Prep - Intro for beginners - [ ] Course: [CS for All](https://www.cs.hmc.edu/csforall/) - [ ] Challenges: [Code Fights Arcade Challenges](https://codefights.com/arcade/) - [ ] Move on to one of the language specific paths below ### Prep - Python version - [ ] Course: [Introduction to Computer Science and Programming Using Python](https://www.edx.org/course/introduction-computer-science-mitx-6-00-1x-11) - [ ] Course: [Single Variable Calculus](https://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/) - [ ] Course: [Introduction to Computational Thinking and Data Science](https://www.edx.org/course/introduction-computational-thinking-data-mitx-6-00-2x-6) - [ ] 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: [Introduction to Algorithms](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/index.htm) (requires book purchase) or Book - [Open Data Structures](http://opendatastructures.org/ods-python.pdf) - [ ] Challenge: [Python Interview Prep](https://www.hackerrank.com/chingu-challenge-3) ### Prep - Java version - [ ] Book: [Think Java - How to Think Like a Computer Scientist](http://greenteapress.com/wp/think-java/) - [ ] Course: [Single Variable Calculus](https://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/) - [ ] Course: [Software Construction](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-005-software-construction-spring-2016/index.htm) - [ ] 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) - [ ] Book - [Open Data Structures (in Java)](http://opendatastructures.org/ods-java.pdf) - [ ] Course: [Algorithms, Part I](https://www.coursera.org/learn/algorithms-part1) - [ ] Course: [Algorithms, Part II](https://www.coursera.org/learn/algorithms-part2) - [ ] Challenge: [Java Interview Prep](https://www.hackerrank.com/chingu-challenge-3-java-interview-prep) ### Prep - C++ Version - [ ] Course: [Introduction to Computer Science - CS50](https://www.edx.org/course/introduction-computer-science-harvardx-cs50x#!) - [ ] Course: [Single Variable Calculus](https://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/) - [ ] Course: [Introduction to C and C++](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-s096-introduction-to-c-and-c-january-iap-2013/index.htm) - [ ] 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) - [ ] Lessons: [Basic Programming](https://www.hackerearth.com/practice/basic-programming/input-output/basics-of-input-output/tutorial/) - [ ] Lessons: [Data Structures](https://www.hackerearth.com/practice/data-structures/arrays/1-d/tutorial/) - [ ] Book - [Open Data Structures (in C++)](http://opendatastructures.org/ods-cpp.pdf) - [ ] Practice: [C++ Interview Prep](https://www.hackerrank.com/chingu-challenge-10-c-interview-prep) ### Prep - JavaScript Version - [ ] Course: [Introduction to Computer Science - CS50](https://www.edx.org/course/introduction-computer-science-harvardx-cs50x#!) - [ ] Course: [Single Variable Calculus](https://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/) - [ ] Book: [YDKJS](https://github.com/getify/You-Dont-Know-JS) - [ ] 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) - [ ] Book: [JavaScript Allongé, the "Six" Edition](https://leanpub.com/javascriptallongesix/read) - [ ] Course: [Khan Academy - Computer Science](https://www.khanacademy.org/computing/computer-science) - [ ] Book - [Open Data Structures](http://opendatastructures.org/ods-python.pdf) - [ ] Practice: [JavaScript Interview Prep](https://www.hackerrank.com/chingu-challenge-9-javascript-prep) ### Prep - Mathematics / Algorithms to go with any other language of your choice - [ ] Pick a language and find an online resource for learning the basics of that language - [ ] Course: [Single Variable Calculus](https://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/) - [ ] 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) - [ ] Book - [Open Data Structures](http://www.aupress.ca/books/120226/ebook/99Z_Morin_2013-Open_Data_Structures.pdf) - [ ] Practice: [HackerRank Data Structures Section](https://www.hackerrank.com/domains/data-structures/) - [ ] Practice: [HackerRank Algorithms Section](https://www.hackerrank.com/domains/algorithms/) ### Advanced Mathematics / Algorithms (addon to any of the other preps if you want to dive even deeper) - [ ] Course: [How to Win Coding Competitions: Secrets of Champions](https://www.edx.org/course/how-win-coding-competitions-secrets-itmox-i2cpx-1) Optional - only if it's in session - [ ] Course: [Multivariable Calculus](https://ocw.mit.edu/courses/mathematics/18-02sc-multivariable-calculus-fall-2010/) - [ ] Course: [Linear Algebra - Foundations to Frontiers](https://www.edx.org/course/linear-algebra-foundations-frontiers-utaustinx-ut-5-04x#!) - [ ] 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/) Requires textbook purchase (Cormen) - [ ] Course: [Advanced Algorithms](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-854j-advanced-algorithms-fall-2008/index.htm) - [ ] Course: [Advanced Data Structures](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-851-advanced-data-structures-spring-2012/index.htm) ================================================ FILE: deprecated/speedrun-practice/android.md ================================================ # Android Development - Speedrun / Practice ## Notes The following is a list of practice projects for android development intended to be used as ideas for portfolio projects or for use in a speedrun (set aside a month or two and speed through as many as you can in that time - as an intensive hands on practice.) Always find or make your own open source assets when doing any clone, and attribute your sources. Don't get sued for copyright violation. Feel free to code these in native Android or pick a framework/library of your choice (Ionic, React Native, etc). ## Projects - [ ] Project: Build a Single Screen App - [ ] Project: Score Keeper App - [ ] Project: Quiz App - [ ] Project: Musical Structure App - [ ] Project: Report Card - [ ] Project: Tour Guide App - [ ] Project: Book Listing App - [ ] Project: News App - [ ] Project: Habit Tracker App - [ ] Project: Inventory App - [ ] Project: Popular Movies - [ ] Project: Build it Bigger - [ ] Project: Make Your App Material - [ ] Advanced Project: Your choice - ideas listed below - [ ] Project: Outbreak - [ ] Project: Space Kerfuffle - [ ] Advanced Project: Your choice - ideas listed below - [ ] Advanced Project: Your choice - ideas listed below - [ ] Advanced Project: Your choice - ideas listed below - [ ] Advanced Project: Your choice - ideas listed below - [ ] Advanced Project: Your choice - ideas listed below - [ ] Advanced Project: Your choice - ideas listed below * [Quick Prep](#quick-prep) * [Helpful links](#helpful-links) * [Project Details](#project-descriptions) + [Build a Single Screen App](#build-a-single-screen-app) + [Score Keeper App](#score-keeper-app) + [Quiz App](#quiz-app) + [Musical Structure App](#musical-structure-app) + [Report Card](#report-card) + [Tour Guide App](#tour-guide-app) + [Book Listing App](#book-listing-app) + [News App](#news-app) + [Habit Tracker App](#habit-tracker-app) + [Inventory App](#inventory-app) + [Popular Movies](#popular-movies) + [Build it Bigger](#build-it-bigger) + [Make Your App Material](#make-your-app-material) + [Outbreak](#outbreak) + [Space Kerfuffle](#space-kerfuffle) * [Advanced Projects](#advanced-projects) + [Project ideas](#project-ideas) ## Quick Prep If you want to quickly get up to speed with the minimum courses necessary beforehand so you can hit the ground running: - [ ] Course: [Java Programming Basics](https://www.udacity.com/course/java-programming-basics--ud282) - [ ] Course: [Developing Android Apps](https://www.udacity.com/course/new-android-fundamentals--ud851) - [ ] Course: [Advanced Android App Development](https://www.udacity.com/course/advanced-android-app-development--ud855) - [ ] Course: [Android Performance](https://www.udacity.com/course/android-performance--ud825) ## Helpful links - [ ] [Java SE8 API Specification](http://docs.oracle.com/javase/8/docs/api/index.html) - [ ] [Android API Guides](https://developer.android.com/guide/index.html) ## Project Details ### Build a Single Screen App Design and implement a single screen app that displays information about a fictional small business. Think along the lines of your favorite coffeeshop, local restaurant, or that gem of a store that sells those rare comic books or records. Suggested App Ideas - Details about a small business in your neighborhood - Contact info and description about your workplace or school - Info about a special interest group (like a club or sports team) you’re part of and how new members can sign up Your design must include: - Business name - At least one photo representing the business - Two or more other pieces of information, such as: - Contact information for the business (eg phone number, email address, website) - Address of the Business - Description of business - Hours of operation #### Supporting Courses - [ ] Course: [Java Programming Basics](https://www.udacity.com/course/java-programming-basics--ud282) - [ ] Course: [Android Basics: User Interface](https://www.udacity.com/course/android-basics-user-interface--ud834) ------- ### Score Keeper App The goal is to create an Score Keeper app which gives a user the ability to keep track of the score of two different teams playing a game of your choice. To build this project, you can follow along with the practice set and customize the Court Counter app to track scores from a different sport. (court counter app may be found in the supporting course) #### Supporting Courses - [ ] Course: [Android Basics: User Input](https://www.udacity.com/course/android-basics-user-input--ud836) ------- ### Quiz App The goal is to create an educational app that quizzes a user about a certain topic of your choice. We want you to be creative about how you accomplish this. It’s up to you what the quiz questions will be about and how you want to present them to your user. (We recommend about 5-10 quiz questions for a reasonable scope of your app). See [here](https://review.udacity.com/#!/rubrics/158/view) for project rubric #### Supporting Courses - [ ] Course: [Android Basics: User Input](https://www.udacity.com/course/android-basics-user-input--ud836) ------- ### Musical Structure App The goal is to design and create the structure of a Music app which would allow a user to play audio files. There are many music player apps, and they make a wide variety of design choices. It will be your job to decide what kind of music app your structure would turn into and build out that structure using intents. Will you build an app to play music from the user’s library of music? Will you build an app to stream random songs from a database? Will you build a musical suggestion engine? Those choices are up to you! See [here](https://review.udacity.com/#!/rubrics/159/view) for project rubric #### Supporting Courses - [ ] Course: [Android Basics: Multiscreen Apps](https://www.udacity.com/course/android-basics-multiscreen-apps--ud839) ------- ### Report Card The goal is to design and create the structure of a ReportCard Class which would allow a school to store a student’s grades for a particular year. This project will be just a java class, rather than a full Android app. See [here](https://review.udacity.com/#!/rubrics/160/view) for project rubric #### Supporting Courses - [ ] Course: [Android Basics: Multiscreen Apps](https://www.udacity.com/course/android-basics-multiscreen-apps--ud839) ------- ### Tour Guide App The goal is to create a tour guide app which presents relevant information to a user who’s visiting your city. The app can list top attractions, restaurants, public places, or events for the city. It can contain all the best known secrets that only locals know. It’s up to you which categories you want to provide, as well as what information to provide in each category. See [here](https://review.udacity.com/#!/rubrics/161/view) for project rubric #### Supporting Courses - [ ] Course: [Android Basics: Multiscreen Apps](https://www.udacity.com/course/android-basics-multiscreen-apps--ud839) ------- ### Book Listing App You will be making a book listing app using an API query and a ListView. The goal is to design and create the structure of a Book Listing app which would allow a user to get a list of published books on a given topic. You will be using the google books api in order to fetch results and display them to the user. See [here](https://review.udacity.com/#!/rubrics/164/view) for project rubric #### Supporting Courses - [ ] Course: [Android Basics: Networking](https://www.udacity.com/course/android-basics-networking--ud843) ------- ### News App You will be making your own app that connects to the Internet to provide news articles on a topic of your choice. The goal is to create an News feed app which gives a user regularly-updated news from the internet related to a particular topic, person, or location. The presentation of the information as well as the topic is up to you. See [here](https://review.udacity.com/#!/rubrics/165/view) for project rubric #### Supporting Courses - [ ] Course: [Android Basics: Networking](https://www.udacity.com/course/android-basics-networking--ud843) ------- ### Habit Tracker App You will be making a habit tracking app using an SQLite table. The goal is to design and create the structure of a Habit Tracking app which would allow a user to store and track their habits over time. See [here](https://review.udacity.com/#!/rubrics/162/view) for project rubric #### Supporting Courses - [ ] Course: [Android Basics: Data Storage](https://www.udacity.com/course/android-basics-data-storage--ud845) ------- ### Inventory App You will be making an inventory app for a small business using an SQL table and a number of CRUD commands. The goal is to design and create the structure of an Inventory App which would allow a store to keep track of its inventory of products. The app will need to store information about price, quantity available, supplier, and a picture of the product. It will also need to allow the user to track sales and shipments and make it easy for the user to order more from the listed supplier. See [here](https://review.udacity.com/#!/rubrics/163/view) for project rubric #### Supporting Courses - [ ] Course: [Android Basics: Data Storage](https://www.udacity.com/course/android-basics-data-storage--ud845) ------- ### Popular Movies In this project, you’ll build an app to allow users to discover the most popular movies playing. We will split the development of this app in two stages. Stage 1. In this stage you’ll build the core experience of your movies app. You app will: - Present the user with a grid arrangement of movie posters upon launch. - Allow your user to change sort order via a setting: - The sort order can be by most popular or by highest-rated - Allow the user to tap on a movie poster and transition to a details screen with additional information such as: original title - movie poster image thumbnail - A plot synopsis (called overview in the api) - user rating (called vote_average in the api) - release date See [here](https://docs.google.com/document/d/1ZlN1fUsCSKuInLECcJkslIqvpKlP7jWL2TP9m6UiA6I/pub?embedded=true) for more specific details See [here](https://review.udacity.com/#!/rubrics/66/view) for project rubric Stage 2, add additional functionality to the app you built in Stage 1. Add more information to your movie details view: - allow users to view and play trailers ( either in the youtube app or a web browser). -allow users to read reviews of a selected movie. - allow users to mark a movie as a favorite in the details view by tapping a button(star). This is for a local movies collection that you will maintain and does not require an API request*. - modify the existing sorting criteria for the main view to include an additional pivot to show their favorites collection. - optimize your app experience for tablet. See [here](https://docs.google.com/document/d/1ZlN1fUsCSKuInLECcJkslIqvpKlP7jWL2TP9m6UiA6I/pub?embedded=true#h.7sxo8jefdfll) for more specific details See [here](https://review.udacity.com/#!/rubrics/67/view) for project rubric #### Supporting Courses - [ ] Course: [Developing Android Apps](https://www.udacity.com/course/new-android-fundamentals--ud851) ------- ### Build it Bigger Create an app with multiple flavors that uses multiple libraries and Google Cloud Endpoints. The finished app will consist of four modules: - A Java library that provides jokes - A Google Cloud Endpoints (GCE) project that serves those jokes - An Android Library containing an activity for displaying jokes - An Android app that fetches jokes from the GCE module and passes them to the Android Library for display See [here](https://github.com/udacity/ud867/tree/master/FinalProject) for more specific details See [here](https://review.udacity.com/#!/rubrics/61/view) for project rubric #### Supporting Courses - [ ] Course: [Gradle for Android and Java](https://www.udacity.com/course/gradle-for-android-and-java--ud867) ------- ### Make Your App Material Improve an app: * XYZ Reader: A mock RSS feed reader featuring banner photos and shocking headlines! Download the code here. The app is currently functional, and work in most cases for most users. Your job will be to take the user feedback, and implement changes that will improve the UI and make it conform to Material Design. * Download a zip file of the app. * Read the UI Review. * Spend time exploring the current state of the app, looking for ways it could be improved. The app will need multiple improvements. Be sure to look specifically at issues called out in the UI Review. * Execute the improvements! User Feedback for XYZ Reader: Lyla says: “This app is starting to shape up but it feels a bit off in quite a few places. I can't put finger on it but it feels odd.” Jay says: “Is the text supposed to be so wonky and unreadable? It is not accessible to those of us without perfect vision." Kagure says: “The color scheme is really sad and I shouldn't feel sad.” See [here](https://review.udacity.com/#!/rubrics/63/view) for project rubric #### Supporting Courses - [ ] Course: [Developing Android Apps](https://www.udacity.com/course/new-android-fundamentals--ud851) - [ ] Course: [Advanced Android App Development](https://www.udacity.com/course/advanced-android-app-development--ud855) - [ ] Course: [Material Design for Android Developers](https://www.udacity.com/course/material-design-for-android-developers--ud862) ------- ### Outbreak For this project, you will make a simple game reminiscent of classic Atari arcade game Breakout. Players will control a platform at the bottom of the screen that moves from side to side to intercept a ball that will bounce on impact. The goal is to stop the ball from falling past your platform and deflect it into various blocks in the upper half of the screen. When the ball collides with a block, the block is destroyed. You will create a LibGDX project, implement a Screen, draw the game objects using a ShapeRenderer, and program the controls and real-time motion of the ball. Completing the project consists of the following tasks: - Make a LibGDX project using the project generator tool. - Create a play screen using the Game class and Screen interface. - Write a render loop that displays all the game objects, including the player's platform, the ball, and the blocks, using ShapeRenderer. - Program the gameplay, including: - Polling for input to move the platform (arrow keys for the desktop build, and using the accelerometer on Android). - Moving the ball in real time and programming its bounce behavior. - Collision detection that makes the ball bounce when hitting a wall or block or the player platform, and destroying blocks on hit. Bonus challenges - Implement a Score that goes up as the player destroys blocks. - Add a start screen, Game Over screen, and/or win screen. - Implement different difficulty settings (eg the ball moves faster, there is a time limit, blocks take multiple hits). #### Supporting Courses - [ ] Course: [2D Game Development with libGDX](https://www.udacity.com/course/2d-game-development-with-libgdx--ud405) ------- ### Space Kerfuffle Space Kerfuffle! is a top down, starfighter combat game. Players assume the role of an intrepid spacefighter pilot flying headlong into a swarm of aliens or robots or something else evil that wants to destroy humanity, probably. Players control a spacecraft and fire projectiles at oncoming enemies who do the same. Explosions happen. Numbers go up. Create a Galaga or Space Invaders type game, either creating your own assets or using ones with the appropriate copyright for you to use them legally. #### Supporting Courses - [ ] Course: [How to Make a Platformer Using libGDX](https://www.udacity.com/course/how-to-make-a-platformer-using-libgdx--ud406) ------- ## Advanced Projects ### 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 #### Supporting Courses - [ ] Course: [Advanced Android App Development](https://www.udacity.com/course/advanced-android-app-development--ud855) - [ ] Course: [Intro to Artificial Intelligence](https://www.udacity.com/course/intro-to-artificial-intelligence--cs271) - [ ] 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) ================================================ FILE: deprecated/speedrun-practice/frontend-dev.md ================================================ # Frontend Web Development - Speedrun / Practice ## Notes The following is a list of practice projects for frontend development intended to be used as ideas for portfolio projects or for use in a speedrun (set aside a month or two and speed through as many as you can in that time - as an intensive hands on practice.) Always find or make your own open source assets when doing any clone, and attribute your sources. Don't get sued for copyright violation. ## Projects - [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) - pick 1 of the 100 and implement it - [ ] 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) - [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) - pick 1 of the 100 and implement it - [ ] 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. - [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) - pick 1 of the 100 and implement it - [ ] Project: [CSS Zen Garden](http://www.csszengarden.com/) - implement your own CSS design for the competition - [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) - pick 1 of the 100 and implement it - [ ] 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) - [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) - pick 1 of the 100 and implement it - [ ] 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. - [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) - pick 1 of the 100 and implement it - [ ] 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) - [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) - pick 1 of the 100 and implement it - [ ] 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. - [ ] 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) - [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) - pick 1 of the 100 and implement it - [ ] 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. - [ ] 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) - [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) - pick 1 of the 100 and implement it - [ ] 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. - [ ] Project: Clone [this](https://blackrockdigital.github.io/startbootstrap-clean-blog/) blog template - note that there are multiple pages ## Helpful links - 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) - [surge.sh](https://surge.sh/) - [Learn to Code HTML & CSS](http://learn.shayhowe.com/html-css/) - [Learn to Code Advanced HTML & CSS](http://learn.shayhowe.com/advanced-html-css/) - [Getting Sassy with CSS](http://www.sassshop.com/#/) - [Programming for the Web with JavaScript](https://www.edx.org/course/programming-web-javascript-pennx-sd4x) - [Data Visualization and D3.js](https://www.udacity.com/course/data-visualization-and-d3js--ud507) - [YDKJS](https://github.com/getify/You-Dont-Know-JS/) - For when you need assets/ideas - [pixabay](https://pixabay.com/) - [Unsplash](https://unsplash.com/) - [Pexels](https://www.pexels.com/) - [LibreStock](http://librestock.com/) - [Google Fonts](https://fonts.google.com/) - [FlatIcon's Free Icon Sets](https://www.flaticon.com/packs?license=selection&order_by=1) - Official Docs - [MDN HTML](https://developer.mozilla.org/en-US/docs/Web/HTML) - for exploring all that HTML has to offer - [MDN CSS](https://developer.mozilla.org/en-US/docs/Web/CSS)- for exploring all that CSS has to offer - [MDN JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript)- for exploring all that JavaScript has to offer - [Sass](http://sass-lang.com/guide) - supercharged CSS - [D3](https://d3js.org/) - for creating awesome graphs and charts - [Angular](https://angular.io/) - option for creating single page apps on the frontend - [React](https://reactjs.org/) - option for creating single page apps on the frontend - [Vue](https://vuejs.org/) - option for creating single page apps on the frontend - [Redux](http://redux.js.org/) - for managing state in a single page app - [Mocha](https://mochajs.org/) - venture into testing - [Karma](https://karma-runner.github.io/1.0/index.html) - venture into testing - [Jest](https://facebook.github.io/jest/) - venture into testing - [Webpack](https://webpack.github.io/) - module bundler for use in your build process (so you can minify your HTML/CSS/JavaScript among other things and deliver an optimized build to production) - [Babel](http://babeljs.io/) - makes the new JavaScript work on old browsers (or node versions for that matter) - [Gulp](https://gulpjs.com/) - for automating your workflow - [ESLint](https://eslint.org/) - for helping to keep your code clean - [Prettier](https://prettier.io/) - more help keeping your code clean - [Travis](https://travis-ci.org/) - continuous deployment (how to trigger a build/deploy whenever you commit your changes via git) ================================================ FILE: deprecated/speedrun-practice/fullstack-dev.md ================================================ # Fullstack Web Development - Speedrun / Practice ## Notes The following is a list of practice projects for full stack development intended to be used as ideas for portfolio projects or for use in a speedrun (set aside a month or two and speed through as many as you can in that time - as an intensive hands on practice.) Always find or make your own open source assets when doing any clone, and attribute your sources. Don't get sued for copyright violation. ## Projects - [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) - pick 1 of the 100 and implement it - [ ] 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) - [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) - pick 1 of the 100 and implement it - [ ] 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. - [ ] Project: Build a full stack flashcards app, pre-populated with flash cards for JavaScript review. - [ ] Project: Full stack project of your choice (ideas: clone Facebook, Reddit, Netflix, Slack) - Consider building it as a Chrome Extension, Mobile, or Electron App. - [ ] Project: [CSS Zen Garden](http://www.csszengarden.com/) - implement your own CSS design for the competition - [ ] Project: Enhance your flash cards app with another deck of cards for an additional topic of your choosing. - [ ] Project: Full stack project of your choice (ideas: clone Facebook, Reddit, Netflix, Slack) - Consider building it as a Chrome Extension, Mobile, or Electron App. - [ ] Project: Clone Twitter using the language/framework of your choice on the backend, and your frontend framework/library of choice. Include all basic features: signup/login/logout, follow user, search, tweet, like/retweet, home page with stream of recent tweets. - [ ] 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) - [ ] Project: Enhance your flash cards app with another deck of cards for an additional topic of your choosing. - [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) - pick 1 of the 100 and implement it - [ ] 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. - [ ] Project: Full stack project of your choice (ideas: clone Facebook, Reddit, Netflix, Slack) - Consider building it as a Chrome Extension, Mobile, or Electron App. - [ ] Project: Enhance your flash cards app with another deck of cards for an additional topic of your choosing. - [ ] 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) - [ ] Project: [100 Days of CSS](https://codepen.io/collection/AVPPQq/) - pick 1 of the 100 and implement it - [ ] 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. - [ ] Project: Enhance your flash cards app with another deck of cards for an additional topic of your choosing. - [ ] Project: Clone Medium. Include: create account, create post, publish post, edit post, add topic to post, follow user, follow topic, cheer for post, and home page with feed of recent posts, followed users, and followed topics. ## Helpful links - 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) - [surge.sh](https://surge.sh/) - [heroku](https://www.heroku.com/) - [Glitch](https://glitch.com/) - [MDN](https://developer.mozilla.org/en-US/) - [Learn to Code HTML & CSS](http://learn.shayhowe.com/html-css/) - [Learn to Code Advanced HTML & CSS](http://learn.shayhowe.com/advanced-html-css/) - [Getting Sassy with CSS](http://www.sassshop.com/#/) - [Programming for the Web with JavaScript](https://www.edx.org/course/programming-web-javascript-pennx-sd4x) - [Data Visualization and D3.js](https://www.udacity.com/course/data-visualization-and-d3js--ud507) - [YDKJS](https://github.com/getify/You-Dont-Know-JS/) - For when you need assets/ideas - [pixabay](https://pixabay.com/) - [Unsplash](https://unsplash.com/) - [Pexels](https://www.pexels.com/) - [LibreStock](http://librestock.com/) - [Google Fonts](https://fonts.google.com/) - [FlatIcon's Free Icon Sets](https://www.flaticon.com/packs?license=selection&order_by=1) - Official Docs - [MDN HTML](https://developer.mozilla.org/en-US/docs/Web/HTML) - for exploring all that HTML has to offer - [MDN CSS](https://developer.mozilla.org/en-US/docs/Web/CSS)- for exploring all that CSS has to offer - [MDN JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript)- for exploring all that JavaScript has to offer - [Sass](http://sass-lang.com/guide) - supercharged CSS - [Node.js](https://nodejs.org/en/docs/) - should be your primary reference for building backend projects - [Express](https://expressjs.com/) - an excellent framework to accompany Node.js on the backend - [MongoDB](https://docs.mongodb.com/) - for storing data - [Mongoose](http://mongoosejs.com/) - access to MongoDB from Node.js made easy(er) - [Passport.js](http://passportjs.org/) - remember this link when you have to setup a login system - [D3](https://d3js.org/) - for creating awesome graphs and charts - [Angular](https://angular.io/) - option for creating single page apps on the frontend - [React](https://reactjs.org/) - option for creating single page apps on the frontend - [Vue](https://vuejs.org/) - option for creating single page apps on the frontend - [Redux](http://redux.js.org/) - for managing state in a single page app - [Mocha](https://mochajs.org/) - venture into testing - [Karma](https://karma-runner.github.io/1.0/index.html) - venture into testing - [Jest](https://facebook.github.io/jest/) - venture into testing - [Webpack](https://webpack.github.io/) - module bundler for use in your build process (so you can minify your HTML/CSS/JavaScript among other things and deliver an optimized build to production) - [Babel](http://babeljs.io/) - makes the new JavaScript work on old browsers (or node versions for that matter) - [Gulp](https://gulpjs.com/) - for automating your workflow - [ESLint](https://eslint.org/) - for helping to keep your code clean - [Prettier](https://prettier.io/) - more help keeping your code clean - [Travis](https://travis-ci.org/) - continuous deployment (how to trigger a build/deploy whenever you commit your changes via git) ================================================ FILE: deprecated/speedrun-practice/game-dev.md ================================================ # Game Development - Speedrun / Practice ## Notes The following is a list of practice projects for game development intended to be used as ideas for portfolio projects or for use in a speedrun (set aside a month or two and speed through as many as you can in that time - as an intensive hands on practice.) Always find or make your own open source assets when doing any clone, and attribute your sources. Don't get sued for copyright violation. ## Projects - [ ] Game: Galaga Clone - [ ] Game: Breakout Clone - [ ] Game: Asteroids Clone - [ ] Game: Frogger Clone - [ ] Game: PacMan Clone - [ ] Game: Donkey Kong Clone - [ ] Game: Super Mario Bros Clone - [ ] Game: Zelda Clone - [ ] Game: Final Fantasy Clone - [ ] Game: Your choice - personal project - [ ] Game: Your choice - personal project - [ ] Game: Your choice - personal project - [ ] Game: Your choice - personal project - [ ] Game: Your choice - personal project - [ ] Game: Your choice - personal project ## Helpful links Although I've added links to Phaser here, feel free to use any language / framework you prefer. - [ ] 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) - 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) - [surge.sh site](https://surge.sh/) ================================================ FILE: deprecated/topic-guides/vue.md ================================================ # Vue - Topic Deep Dive The following is a deep dive, designed to familiarize you thoroughly with Vue. It is not the "easy path to just learning 'enough'" - it aims far higher, combining thorough study of the official docs, regular practice projects, comprehensive exploration of Vue's ecosystem and hands on non-Vue JavaScript practice to ensure a rock solid foundation in everything Vue. ## Tier 0 - reference only if you need pre-Vue basics - [ ] Course: [Introduction to Computer Science - CS50](https://www.edx.org/course/introduction-computer-science-harvardx-cs50x#!) (If you want more confidence programming) - [ ] Articles: 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) (You want to be using git, read these to get up to speed.) - [ ] Course: [Learn to Code HTML & CSS](http://learn.shayhowe.com/html-css/) (Intro, to get you started with HTML and CSS) - [ ] Course: [Learn to Code Advanced HTML & CSS](http://learn.shayhowe.com/advanced-html-css/) (Additional HTML and CSS instruction) - [ ] Course: [Getting Sassy with CSS](http://www.sassshop.com/#/) (Dip into Sass, try to hit this before you finish the guide) - [ ] Book Series: [YDKJS](https://github.com/getify/You-Dont-Know-JS/) (You need to KNOW JavaScript, not just sorta-know JavaScript, if you haven't studied these books, do yourself a favor and study them alongside whatever else you might be doing) - [ ] Official Docs: [ESLint](https://eslint.org/) - thoroughly review the User Guide - [ ] Official Docs: [Axios npm package](https://www.npmjs.com/package/axios) - thoroughly review, you'll want this for making API calls ## Tier 1 - basics Study each item thoroughly. Type the code. Understand how it works. Yes, the whole thing. **You NEED to know JavaScript** - if you're shaky on JavaScript, do yourself a favor and hit MDN and study, especially ES6 features - and hit YDKJS. ### For each project: * Use a git workflow (If you wonder what this is, read the articles in Tier 0) ### For at least one project: * Code all CSS yourself * Use Bootstrap ---- - [ ] Official Docs: [Vue.js Guide](https://vuejs.org/v2/guide/) - All sections in Essentials - [ ] Official Docs: [Flexbox](https://developer.mozilla.org/en-US/docs/Learn/CSS/CSS_layout/Flexbox) - [ ] 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 an Vue application with it as your inspiration (do not use its assets) - [ ] Official Docs: [Vue DevTools](https://github.com/vuejs/vue-devtools) - [ ] Official Docs: [Vue.js Style Guide](https://vuejs.org/v2/style-guide/) - Priority A Rules - [ ] Official Docs: [CSS Grid Layout](https://developer.mozilla.org/en-US/docs/Web/CSS/CSS_Grid_Layout) - [ ] 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 an Vue application with it as your inspiration (do not use its assets) - [ ] Official Docs: [Vue.js Examples](https://vuejs.org/v2/examples/) - Review all examples and pick one to implement yourself - [ ] Official Docs: [Vue Loader](https://vue-loader.vuejs.org) - [ ] 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 an Vue application with it as your inspiration (do not use its assets) - [ ] Official Docs: [vue-test-utils](https://vue-test-utils.vuejs.org/en/) - [ ] Project: [CodeWars](https://www.codewars.com/) - complete 10 problems using JavaScript - [ ] 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 an Vue application with it as your inspiration (do not use its assets) - [ ] Official Docs: [JavaScript Guide on MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide) study thoroughly three chapters # Tier 2 - beyond basics Study each item thoroughly. Type the code. Understand how it works. Yes, the whole thing. ### For each project: * Use a git workflow * Include at least 20 automated tests ### For at least one project: * Code all CSS yourself * Use Bootstrap ----- - [ ] Official Docs: [Vue.js Guide](https://vuejs.org/v2/guide/) - All sections in Transitions & Animation - [ ] Official Docs: [Vue.js Guide](https://vuejs.org/v2/guide/) - All sections in Reusability & Composition - [ ] Project: [CodeWars](https://www.codewars.com/) - complete 20 problems using JavaScript - [ ] 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 an Vue application with it as your inspiration (do not use its assets) - [ ] Official Docs: [Vue.js Guide](https://vuejs.org/v2/guide/) - All sections in Tooling - [ ] Official Docs: [Vue.js Style Guide](https://vuejs.org/v2/style-guide/) - Priority B Rules - [ ] 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 an Vue application with it as your inspiration (do not use its assets) - [ ] Official Docs: [Vue.js Examples](https://vuejs.org/v2/style-guide/) - Review all examples and pick one to implement yourself - [ ] Official Docs: [Vue Router](https://router.vuejs.org/en/) - [ ] Project: Select an API from [Todd Motto's API List](https://github.com/toddmotto/public-apis) and build an Vue application powered by data fetched from the API you chose. - [ ] Project: [CodeWars](https://www.codewars.com/) - complete 20 problems using JavaScript - [ ] Official Docs: [Jest Docs](https://facebook.github.io/jest/docs/en/getting-started.html) - [ ] 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 an Vue application with it as your inspiration (do not use its assets) - [ ] Official Docs: [JavaScript Guide on MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide) study thoroughly three chapters # Tier 3 - intermediate Study each item thoroughly. Type the code. Understand how it works. Yes, the whole thing. ### For each project: * Use a git workflow * Include at least 20 automated tests * Utilize Sass * Implement end-to-end testing ### For at least one project: * Code all CSS yourself * Use Bootstrap ----- - [ ] Official Docs: [Vue.js Guide](https://vuejs.org/v2/guide/) - All sections in Scaling Up - [ ] Official Docs: [Vue.js Guide](https://vuejs.org/v2/guide/) - All sections in Internals - [ ] 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 an Vue application with it as your inspiration (do not use its assets) - [ ] Official Docs: [Vue.js Style Guide](https://vuejs.org/v2/style-guide/) - Priority C Rules - [ ] Official Docs: [Vue.js Examples](https://vuejs.org/v2/style-guide/) - Review all examples and pick one to implement yourself - [ ] 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 an Vue application with it as your inspiration (do not use its assets) - [ ] Official Docs: [Vue.js API](https://vuejs.org/v2/api/) - All sections - [ ] Official Docs: [Webpack Docs](https://webpack.js.org/concepts/) - [ ] Official Docs: [RxJS Docs](http://reactivex.io/rxjs//) - [ ] Official Docs: [Gulp Docs](https://gulpjs.com/) - [ ] Project: [Google Code Jam](https://code.google.com/codejam/past-contests) - complete the qualifying round of any past contest using JavaScript - [ ] Project: Select an API from [Todd Motto's API List](https://github.com/toddmotto/public-apis) and build an Vue application powered by data fetched from the API you chose. - [ ] Official Docs: [Jest API](https://facebook.github.io/jest/docs/en/api.html) - [ ] Official Docs: [MDN Client-side storage](https://developer.mozilla.org/en-US/docs/Learn/JavaScript/Client-side_web_APIs/Client-side_storage) - [ ] Project: Select an API from [Todd Motto's API List](https://github.com/toddmotto/public-apis) and build an Vue application powered by data fetched from the API you chose. - [ ] Project: [CodeWars](https://www.codewars.com/) - complete 20 problems using JavaScript - [ ] Official Docs: [JavaScript Guide on MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide) study thoroughly three chapters # Tier 4 - beyond intermediate Study each item thoroughly. Type the code. Understand how it works. Yes, the whole thing. ### For each project: * Use a git workflow * Include at least 20 automated tests * Utilize Sass * Implement end-to-end testing ### For at least one project: * Code all CSS yourself * Use Bootstrap * Implement state using Vuex * Implement state using Redux On two projects of your choice - use no CLI or boilerplate created by someone else. Setup the project from scratch using npm init. Setup your own build process. Include only what you need from npm. Know precisely what everything in the setup is doing because you put it there, on purpose, yourself. ----- - [ ] Official Docs: [Vue.js Style Guide](https://vuejs.org/v2/style-guide/) - Priority D Rules - [ ] Project: Select an API from [Todd Motto's API List](https://github.com/toddmotto/public-apis) and build an Vue application powered by data fetched from the API you chose. - [ ] Official Docs: [Vue.js Examples](https://vuejs.org/v2/style-guide/) - Review all examples and pick one to implement yourself - [ ] Project: Select an API from [Todd Motto's API List](https://github.com/toddmotto/public-apis) and build an Vue application powered by data fetched from the API you chose. - [ ] Official Docs: [Webpack Template](https://vuejs-templates.github.io/webpack/) - [ ] Project: [CodeWars](https://www.codewars.com/) - complete 20 problems using JavaScript - [ ] Official Docs: [Vuex](https://vuex.vuejs.org/en/) - [ ] Project: Select an API from [Todd Motto's API List](https://github.com/toddmotto/public-apis) and build an Vue application powered by data fetched from the API you chose. - [ ] Official Docs: [Vue.js Server-Side Rendering Guide](https://ssr.vuejs.org/en/) - [ ] Project: [Google Code Jam](https://code.google.com/codejam/past-contests) - complete one round of any past contest using JavaScript - [ ] 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 an Vue application with it as your inspiration (do not use its assets) - [ ] Official Docs: [Redux docs](https://redux.js.org/) - [ ] Project: Select an API from [Todd Motto's API List](https://github.com/toddmotto/public-apis) and build an Vue application powered by data fetched from the API you chose. - [ ] 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 an Vue application with it as your inspiration (do not use its assets) - [ ] Project: Select an API from [Todd Motto's API List](https://github.com/toddmotto/public-apis) and build an Vue application powered by data fetched from the API you chose. - [ ] Official Docs: [JavaScript Guide on MDN](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide) study thoroughly three chapters - [ ] Project: Utilize everything you've learned to create a comprehensive portfolio that showcases your ability with Vue, refactoring earlier projects as necessary to bring them up to the standard of your current abilities. ## Bonus - advanced - [ ] Official Docs: [Weex official documentation](http://weex.apache.org/guide/) Study thoroughly, then refactor any previous project into a mobile app using Weex - [ ] Project: Make an open source contribution to a project you use - [ ] Project: [Google Code Jam](https://code.google.com/codejam/past-contests) - complete one round of any past contest using JavaScript - [ ] Official Docs: [MDN Accessibility](https://developer.mozilla.org/en-US/docs/Learn/Accessibility) - [ ] Project: Clone a substantial production website (on the level of Medium, Twitter, etc) - [ ] Write an extensive tutorial on Vue - post it publicly - [ ] Project: Make an open source contribution to a project you use - [ ] Project: [Google Code Jam](https://code.google.com/codejam/past-contests) - complete one round of any past contest using JavaScript - [ ] Study a comprehensive text on Data Structures and Algorithms (such as Cormen or Sedgewick, or the freely available Open Data Structures book) and implement all data structures and algorithms in JavaScript - [ ] Project: Make an open source contribution to a project you use - [ ] Project: [Google Code Jam](https://code.google.com/codejam/past-contests) - complete one round of any past contest using JavaScript - [ ] Project: Make an open source contribution to a project you use - [ ] Project: [Google Code Jam](https://code.google.com/codejam/past-contests) - complete one round of any past contest using JavaScript - [ ] Project: Make an open source contribution to a project you use - [ ] Project: [Google Code Jam](https://code.google.com/codejam/past-contests) - complete one round of any past contest using JavaScript - [ ] Project: Make an open source contribution to a project you use - [ ] Project: Make an open source contribution to a project you use - [ ] Project: Make an open source contribution to a project you use - [ ] Project: Make an open source contribution to a project you use - [ ] Project: Make an open source contribution to a project you use - [ ] Project: Make an open source contribution to a project you use - [ ] Project: Make an open source contribution to a project you use ## Helpful links - 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) - [surge.sh](https://surge.sh/) - [Learn to Code HTML & CSS](http://learn.shayhowe.com/html-css/) - [Learn to Code Advanced HTML & CSS](http://learn.shayhowe.com/advanced-html-css/) - [Getting Sassy with CSS](http://www.sassshop.com/#/) - [Programming for the Web with JavaScript](https://www.edx.org/course/programming-web-javascript-pennx-sd4x) - [Data Visualization and D3.js](https://www.udacity.com/course/data-visualization-and-d3js--ud507) - [YDKJS](https://github.com/getify/You-Dont-Know-JS/) - For when you need assets/ideas - [pixabay](https://pixabay.com/) - [Unsplash](https://unsplash.com/) - [Pexels](https://www.pexels.com/) - [LibreStock](http://librestock.com/) - [Google Fonts](https://fonts.google.com/) - [FlatIcon's Free Icon Sets](https://www.flaticon.com/packs?license=selection&order_by=1) - Official Docs - [MDN HTML](https://developer.mozilla.org/en-US/docs/Web/HTML) - for exploring all that HTML has to offer - [MDN CSS](https://developer.mozilla.org/en-US/docs/Web/CSS)- for exploring all that CSS has to offer - [MDN JavaScript](https://developer.mozilla.org/en-US/docs/Web/JavaScript)- for exploring all that JavaScript has to offer - [Sass](http://sass-lang.com/guide) - supercharged CSS - [D3](https://d3js.org/) - for creating awesome graphs and charts - [Vue](https://vuejs.org) - option for creating single page apps on the frontend - [Karma](https://karma-runner.github.io/1.0/index.html) - venture into testing - [Jest](https://facebook.github.io/jest/) - venture into testing - [Webpack](https://webpack.github.io/) - module bundler for use in your build process (so you can minify your HTML/CSS/JavaScript among other things and deliver an optimized build to production) - [Babel](http://babeljs.io/) - makes the new JavaScript work on old browsers (or node versions for that matter) - [Gulp](https://gulpjs.com/) - for automating your workflow - [ESLint](https://eslint.org/) - for helping to keep your code clean - [Prettier](https://prettier.io/) - more help keeping your code clean - [Travis](https://travis-ci.org/) - continuous deployment (how to trigger a build/deploy whenever you commit your changes via git) ================================================ FILE: deprecated/wd-cs.md ================================================ # Web Development with Computer Science Foundations - 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 - get 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: Portfolio from the frontend section of FCC - [ ] 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: Clone [this](https://creativemarket.com/ikonome/686585-Material-Resume-Blue/screenshots/#screenshot2) online resume template - [ ] 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 - [ ] Project: Pick a template from [here](http://www.free-css.com/free-css-templates) and create a new template with it as your inspiration (do not use its assets) ## Tier 2 - strengthen your foundation - [ ] 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: Read up on [Gulp](http://gulpjs.com/) - try to incorporate it into your workflow if you aren't using it regularly already - [ ] Project: Read up on [Mocha](https://mochajs.org/) - try to use it to test your JavaScript, every chance you get - [ ] 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) - [ ] Project: Build the Pomodoro project from the FCC frontend curriculum - [ ] 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 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: Complete all Classic Puzzles - Easy on [CodinGame](https://www.codingame.com/) in JavaScript - [ ] Book: [Open Data Structures](http://www.aupress.ca/books/120226/ebook/99Z_Morin_2013-Open_Data_Structures.pdf) - [ ] Project: Complete all challenges from the [Code Jam Qualification Round 2015](https://code.google.com/codejam/contest/6224486/dashboard) - [ ] Project: Pick a template from [here](http://www.free-css.com/free-css-templates) and create a new template with it as your inspiration (do not use its assets) ## Tier 3 - build on the foundation - [ ] 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 Classic Puzzles - Medium on [CodinGame](https://www.codingame.com/) in JavaScript - [ ] 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 [this](https://blackrockdigital.github.io/startbootstrap-clean-blog/) blog template - note that there are multiple pages - [ ] Book: [Functional Light JS](https://github.com/getify/Functional-Light-JS) - [ ] Visit the Angular, React and Vue web pages, work through their tutorials, and get a sense of how they differ and which you prefer. From here on out, try to use one of them on each frontend where it makes sense to do it as a single page app. Lean towards your favorite on most projects, but use each of the other two in at least one project before finishing the guide. - [ ] Project: Pick a template from [here](http://www.free-css.com/free-css-templates) and create a new template with it as your inspiration (do not use its assets) - [ ] Project: Clone Reddit - [ ] Project: Complete all ES6 Katas [here](http://es6katas.org/) - [ ] Course: [Multivariable Calculus](https://ocw.mit.edu/courses/mathematics/18-02sc-multivariable-calculus-fall-2010/) - [ ] Project: Complete all Classic Puzzles - Hard on [CodinGame](https://www.codingame.com/) in JavaScript - [ ] Project: Clone [this Admin template](http://rubix410.sketchpixy.com/ltr/dashboard) - [ ] Project: Pick a template from [here](http://www.free-css.com/free-css-templates) and create a new template with it as your inspiration (do not use its assets) - [ ] Course: [Agile Software Development](https://www.edx.org/course/agile-software-development-ethx-asd-1x) - [ ] Project: Clone the Netflix interface- pulling data from [the Movie DB API](https://www.themoviedb.org/documentation/api) or an API in a backend you create yourself. - [ ] Course: [Software Architecture & Design](https://www.udacity.com/course/software-architecture-design--ud821) - [ ] Project: Write the CSS Necessary to create your own 12 column based grid layout - see [here](http://960.gs/) for an example - [ ] Project: Pick a template from [here](http://www.free-css.com/free-css-templates) and create a new template with it as your inspiration (do not use its assets) - [ ] Project: Clone 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 fullfill. ## Tier 4 - polish the rough edges - [ ] Project: Read up on [Travis CI](https://travis-ci.org/) - try to incorporate it into any project in active development or which you intend to keep running on the web - [ ] Course: [Linear Algebra - Foundations to Frontiers](https://www.edx.org/course/linear-algebra-foundations-frontiers-utaustinx-ut-5-04x#!) - [ ] Project: Clone Twitter - yes, all the functionality - [ ] 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#!) - [ ] 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. - [ ] Project: Complete all Classic Puzzles - Very Hard on [CodinGame](https://www.codingame.com/) in JavaScript - [ ] Project: Create a node module that will convert markdown to properly formatted html - [ ] 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 - [ ] Project: Clone [Learn Harmony](http://learnharmony.org/#/?_k=0okjs7) - [ ] 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. ================================================ FILE: v4/README.md ================================================ # Computer Science and Programming - Version 4.0 **NOTE: I will be doing a major overhaul to Version 5.0 this summer. Over the past year, a number of resources I once relied on have sundowned and I am in the process of revamping from scratch to include new material (and perhaps change the format a bit to make progression a big clearer.)** Please read the [FAQ](./faq.md) and note that there are [Tier Project Ideas](./project_ideas.md) to help you select projects. **Note:** Prior guides have been deprecated but are still available [here](./deprecated/README.md) ## Table of Contents ### Junior developer If you want to develop the skills necessary to be 'job ready' for a junior developer position - complete tier X, 0, and 1. - [tier X - Math Prep](#tier-x---math-prep) - [tier X - Programming Prep Prep](#tier-x---programming-prep-prep) - [tier 0 - Programming Prep](#tier-0---web-development---fullstack-bootcamp---app-academy-open) - [tier 1 - Getting Started](#tier-1---getting-started) ### Intermediate developer If you want to develop the skills necessary to move beyond junior to intermediate developer - once you've finished tiers X, 0 and 1, proceed to complete tiers 2 and 3. - [tier 2 - Develop More Expertise](#tier-2---develop-more-expertise) - [tier 3 - Add More Rigor](#tier-3---add-more-rigor) ### Advanced developer If you want to develop the skills necessary to move beyond intermediate to advanced developer - once you've finished tiers X, 0, 1, 2, and 3, proceed to complete tiers 4 and 5. - [tier 4 - Polish the Rough Edges](#tier-4---polish-the-rough-edges) - [tier 5 - Specialize](#tier-5---specialize) ### Specializations Each tier has a 'specialization' based capstone which involves further study and extensive practice in an area of your choosing. [Web Development - Fullstack Bootcamp - App Academy Open](./specializations/app_academy_open.md) is highly recommended (but not required) as the first specialization. Beyond that, feel free to complete a different specialization each tier, or dive deeply into a specialization by selecting it during multiple tiers to explore it in greater detail and further develop your specialized profile. - [Web Development - Fullstack Bootcamp - App Academy Open](./specializations/app_academy_open.md) (recommended, but not required, first specialization) - [Web Development - Deep Dive Into Modern Web Development - Full Stack Open 2020](./specializations/full_stack_open_2020.md) - [Web Development - Fullstack Bootcamp - The Odin Project - Full Stack Ruby on Rails](./specializations/the_odin_project_ruby.md) - [Web Development - Fullstack Bootcamp - The Odin Project - Full Stack JavaScript](./specializations/the_odin_project_javascript.md) - [Web Development - Frontend](./specializations/frontend.md) - [Web Development - Backend](./specializations/backend.md) - [Mobile App Development](./specializations/mobile.md) - [Game Development](./specializations/games.md) - [Open Source Contributions](./specializations/open_source.md) ### Advanced Specializations The following specializations rely on knowledge gained in earlier tiers. Additionally, they are typically 'more difficult' or will require more work than those listed above. - [Computer Science - Algorithms](./specializations/algorithms.md) -Suggested for Tier 2 or later - [Computer Science - Advanced Algorithms](./specializations/advanced-algorithms.md) - Computer Science - Algorithms is a pre-requisite - [Computer Science - Intensive](./specializations/computer_science.md) - Suggested for Tier 4 or later - [Data Science I](./specializations/data-science-i.md) - Suggested for Tier 2 or later - [Data Science II](./specializations/data-science-ii.md) - Data Science I is a pre-requisite ### Tier Programming Projects Both tiers and specializations will require 'Tier Programming Projects', you are free to select any programming project you want. To help combat the 'but I don't know what I want' roadblock, [Tier Programming Project Ideas](./project_ideas.md) lists a variety of ideas. **Note:** In specializations, the Tier Programming Projects might have extra criteria (such as 'if you're doing a mobile app development specialization your projects must be mobile apps') ## Junior developer ### Tier X - Math Prep Math will be relevant throughout the guide. Begin it as you start the guide, and incrementally work through it alongside the guide. (You need not finish this before moving to tier 0, or tier 1, but be actively working on it alongside them.) | Courses | Status | Evidence | | :------------------------------------------------------------ | :----: | :------: | | [Algebra I](https://www.khanacademy.org/math/algebra) | | | | [Algebra II](https://www.khanacademy.org/math/algebra2) | | | | [Trigonometry](https://www.khanacademy.org/math/trigonometry) | | | | [Precalculus](https://www.khanacademy.org/math/precalculus) | | | ### Tier X - Programming Prep Prep A very gentle introduction, complete if feel you would benefit from it, skip if you'd rather dive right into tier 0 | Courses | Status | Evidence | | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------: | :----------: | | [Intro to JS: Drawing & Animation](https://www.khanacademy.org/computing/computer-programming/programming) | | | | [Intro to HTML/CSS: Making webpages](https://www.khanacademy.org/computing/computer-programming/html-css) | | | | [Intro to SQL: Querying and managing data](https://www.khanacademy.org/computing/computer-programming/sql) | | | | [Advanced JS: Games & Visualizations](https://www.khanacademy.org/computing/computer-programming/programming-games-visualizations) | | | | [HTML/JS: Making webpages interactive](https://www.khanacademy.org/computing/computer-programming/html-css-js) | | | | **Capstone** | **Status** | **Evidence** | | Create a website highlighting what you learned and built during this tier. Use this as an opportunity to create a portfolio of your projects, notes, blog posts, etc. | | | ### Tier 0 - Web Development - Fullstack Bootcamp - App Academy Open Complete the [App Academy Open](https://open.appacademy.io/) free online Fullstack Bootcamp. See [FAQ](./faq.md) for alternatives. | Courses | Status | Evidence | | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------: | :----------: | | Welcome To Coding | | | | Full Stack Online - Intro to Programming | | | | Full Stack Online - Software Engineering Foundations | | | | Full Stack Online - Ruby | | | | Full Stack Online - SQL | | | | Full Stack Online - Rails | | | | Full Stack Online - JavaScript | | | | Full Stack Online - React | | | | Full Stack Online - Full Stack Project | | | | Full Stack Online - MERN Stack Curriculum | | | | Full Stack Online - Job Search | | | | Full Stack Online - Docker | | | | Full Stack Online - GraphQL | | | | Full Stack Online - Data Structures and Algorithms | | | | **Capstone** | **Status** | **Evidence** | | Create a website highlighting what you learned and built during this tier. Use this as an opportunity to create a portfolio of your projects, notes, blog posts, etc. | | | ### Tier 1 - Getting Started Deepen understanding of Web Development and begin learning Computer Science topics. If you didn't do App Academy Open in Tier 0, please consider doing it as your Specialization in this Tier. | Courses | Status | Evidence | | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------: | :----------: | | [CS50's Introduction to Computer Science](https://www.edx.org/course/cs50s-introduction-computer-science-harvardx-cs50x) | | | | [How to Learn Math: For Students](https://www.edx.org/course/how-to-learn-math-for-students-2) | | | | [CS50's Web Programming with Python and JavaScript](https://www.edx.org/course/cs50s-web-programming-with-python-and-javascript) | | | | Do this: [Single Variable Calculus](https://ocw.mit.edu/courses/mathematics/18-01sc-single-variable-calculus-fall-2010/) (more rigorous) | | | | Or, this: [Khan Academy Calculus I](https://www.khanacademy.org/math/calculus-1) and [Khan Academy Calculus II](https://www.khanacademy.org/math/calculus-2) (a more gentle introduction) | | | | [Algorithms](https://www.khanacademy.org/computing/computer-science/algorithms) | | | | [Software Debugging](https://www.udacity.com/course/software-debugging--cs259) | | | | [Software Testing](https://www.udacity.com/course/software-testing--cs258) | | | | [CS50's Mobile App Development with React Native](https://www.edx.org/course/cs50s-mobile-app-development-with-react-native) | | | | **Reading** | **Status** | **Evidence** | | [MDN HTML - Advanced topics](https://developer.mozilla.org/en-US/docs/Web/HTML#Advanced_topics) | | | | [MDN CSS - Reference - Key Concepts](https://developer.mozilla.org/en-US/docs/Web/CSS#Reference) | | | | [MDN JavaScript - Tutorials - JavaScript Guide](https://developer.mozilla.org/en-US/docs/Web/JavaScript#JavaScript_guide) | | | | [You Don't Know JS: Get Started](https://github.com/getify/You-Dont-Know-JS/tree/2nd-ed/get-started) | | | | [You Don't Know JS: Scope & Closures](https://github.com/getify/You-Dont-Know-JS/tree/2nd-ed/scope-closures) | | | | [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) | | | | **Practice** | **Status** | **Evidence** | | Complete all Classic Puzzles - Easy on [CodinGame](https://www.codingame.com/) | | | | Complete [Google Kick Start 2018](https://codingcompetitions.withgoogle.com/kickstart/archive/2018) | | | | Tier Programming Project | | | | Tier Programming Project | | | | **Specialization** | **Status** | **Evidence** | | Complete a [Specialization](#specializations) - note: you may elect to complete another round of a specialization you selected in a prior tier, or branch out and complete a different specialization. | | |

## Intermediate Developer ### Tier 2 - Develop More Expertise Dive deeper into the Computer Science topics which will prove useful throughout all programming | Courses | Status | Evidence | | :----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------: | :----------: | | [Mathematics for Computer Science](https://ocw.mit.edu/courses/6-042j-mathematics-for-computer-science-fall-2010/) | | | | [Introduction to Computer Science and Programming in Python](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-0001-introduction-to-computer-science-and-programming-in-python-fall-2016/) | | | | [Introduction to Computational Thinking and Data Science](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-0002-introduction-to-computational-thinking-and-data-science-fall-2016/) | | | | [CS50's Introduction to Artificial Intelligence with Python](https://www.edx.org/course/cs50s-introduction-to-artificial-intelligence-with-python) | | | | [Software Construction](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-005-software-construction-spring-2016/) | | | | [Intro to Algorithms](https://www.udacity.com/course/intro-to-algorithms--cs215) | | | | [Introduction to Algorithms](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-006-introduction-to-algorithms-fall-2011/) | | | | **Reading** | **Status** | **Evidence** | | [MDN JavaScript - Tutorials - Advanced](https://developer.mozilla.org/en-US/docs/Web/JavaScript#Advanced) | | | | [MDN HTTP - Tutorials](https://developer.mozilla.org/en-US/docs/Web/HTTP#Tutorials) | | | | [MDN Web Components](https://developer.mozilla.org/en-US/docs/Web/Web_components) | | | | [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) | | | | [You Don't Know JS: Async & Performance](https://github.com/getify/You-Dont-Know-JS/blob/1st-ed/async%20&%20performance/README.md#you-dont-know-js-async--performance) | | | | [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) | | | | [JavaScript Allongé, the "Six" Edition](https://leanpub.com/javascriptallongesix) | | | | [D3 Tips and Tricks v3.x](https://leanpub.com/D3-Tips-and-Tricks/read#leanpub-auto-acknowledgements) | | | | **Practice** | **Status** | **Evidence** | | Complete all Classic Puzzles - Medium on [CodinGame](https://www.codingame.com/) | | | | Complete all ES6 Katas [here](http://es6katas.org/) | | | | Complete [Google Kick Start 2017](https://codingcompetitions.withgoogle.com/kickstart/archive/2017) | | | | Complete [Google Code Jam 2018](https://codingcompetitions.withgoogle.com/codejam/archive/2018) | | | | Complete [Meta Hacker Cup 2017](https://www.facebook.com/codingcompetitions/hacker-cup/2017) | | | | Tier Programming Project | | | | Tier Programming Project | | | | **Specialization** | **Status** | **Evidence** | | Complete a [Specialization](#specializations) - note: you may elect to complete another round of a specialization you selected in a prior tier, or branch out and complete a different specialization | | | ### Tier 3 - Add More Rigor Dive deeper yet, exploring algorithms and different programming paradigms | Courses | Status | Evidence | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------: | :----------: | | [Software Architecture & Design](https://www.udacity.com/course/software-architecture-design--ud821) | | | | [Multivariable Calculus](https://ocw.mit.edu/courses/mathematics/18-02sc-multivariable-calculus-fall-2010/) (more rigorous) or [Khan Academy Multivariable Calculus](https://www.khanacademy.org/math/multivariable-calculus) (a more gentle introduction) | | | | [Structure and Interpretation of Computer Programs](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-001-structure-and-interpretation-of-computer-programs-spring-2005/) | | | | [Design and Analysis of Algorithms](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-046j-design-and-analysis-of-algorithms-spring-2015/) | | | | [Linear Algebra](https://ocw.mit.edu/courses/mathematics/18-06sc-linear-algebra-fall-2011/) | | | | [Computability, Complexity & Algorithms](https://www.udacity.com/course/computability-complexity-algorithms--ud061) | | | | [Artificial Intelligence](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-034-artificial-intelligence-fall-2010/index.htm) | | | | **Reading** | **Status** | **Evidence** | | Official docs for [Angular](https://angular.io/docs), [React](https://reactjs.org/docs/getting-started.html), or [Vue](https://vuejs.org/v2/guide/) | | | | [Jest Official Docs](https://jestjs.io/) | | | | [JavaScript Design Patterns](https://addyosmani.com/resources/essentialjsdesignpatterns/book/) | | | | [Understanding ECMAScript 6](https://leanpub.com/understandinges6/read) | | | | [Professor Frisby's Mostly Adequate Guide to Functional Programming](https://mostly-adequate.gitbooks.io/mostly-adequate-guide/) | | | | [Functional Light JS](https://github.com/getify/Functional-Light-JS) | | | | [Essential TypeScript](https://leanpub.com/essentialtypescript/read) | | | | **Practice** | **Status** | **Evidence** | | Complete all Classic Puzzles - Hard on [CodinGame](https://www.codingame.com/) | | | | Write the CSS Necessary to create your own 12 column based grid layout - see [here](http://960.gs/) for an example | | | | Study [The official Sass docs](https://sass-lang.com/) and convert your 12 column based grid layout to Sass | | | | Complete All Tracks (Basic Programming, Data Structures, Algorithms, Math, Machine Learning, and Python) on [HackerEarth](https://www.hackerearth.com/practice/) | | | | Complete [Google Kick Start 2016](https://codingcompetitions.withgoogle.com/kickstart/archive/2016) | | | | Complete [Google Code Jam 2017](https://codingcompetitions.withgoogle.com/codejam/archive/2017) | | | | Complete [Meta Hacker Cup 2016](https://www.facebook.com/codingcompetitions/hacker-cup/2016) | | | | Tier Programming Project | | | | Tier Programming Project | | | | **Specialization** | **Status** | **Evidence** | | Complete a [Specialization](#specializations) - note: you may elect to complete another round of a specialization you selected in a prior tier, or branch out and complete a different specialization | | |

## Advanced Developer ### Tier 4 - Polish the Rough Edges Wrap up by taking a look at some specific areas of computing to complete a breadth of knowledge that can be leveraged regardless of specialty | Courses | Status | Evidence | | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------: | :----------: | | [Computation Structures](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-004-computation-structures-spring-2009/index.htm) | | | | [Intro to Relational Databases](https://www.udacity.com/course/intro-to-relational-databases--ud197) | | | | [Differential Equations](https://ocw.mit.edu/courses/mathematics/18-03sc-differential-equations-fall-2011/) | | | | [Database Systems Concepts & Design](https://www.udacity.com/course/database-systems-concepts-design--ud150) | | | | [Computer System Engineering](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-033-computer-system-engineering-spring-2018/) | | | | [Performance Engineering of Software Systems](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-172-performance-engineering-of-software-systems-fall-2018/) | | | | [Mining Massive Datasets](https://online.stanford.edu/courses/soe-ycs0007-mining-massive-data-sets) | | | | [Compilers](https://online.stanford.edu/courses/soe-ycscs1-compilers) | | | | **Reading** | **Status** | **Evidence** | | [How to Design Programs](https://htdp.org/) | | | | [97 Things Every Programmer Should Know - Extended](https://leanpub.com/97-Things-Every-Programmer-Should-Know-Extended) | | | | [Think Java - How to Think Like a Computer Scientist](http://greenteapress.com/wp/think-java/) | | | | [Open Data Structures](http://www.aupress.ca/books/120226/ebook/99Z_Morin_2013-Open_Data_Structures.pdf) | | | | [Node.js Docs](https://nodejs.org/en/docs/) | | | | **Practice** | **Status** | **Evidence** | | Complete all Classic Puzzles - Very Hard on [CodinGame](https://www.codingame.com/) | | | | Study [The Google Android Developer Guide](https://developer.android.com/guide) and build the Android App of your choice | | | | Complete [Google Kick Start 2015](https://codingcompetitions.withgoogle.com/kickstart/archive/2015) | | | | Complete [Google Code Jam 2016](https://codingcompetitions.withgoogle.com/codejam/archive/2016) | | | | Complete [Meta Hacker Cup 2015](https://www.facebook.com/codingcompetitions/hacker-cup/2015) | | | | Tier Programming Project | | | | Tier Programming Project | | | | **Specialization** | **Status** | **Evidence** | | Complete a [Specialization](#specializations) - note: you may elect to complete another round of a specialization you selected in a prior tier, or branch out and complete a different specialization | | | ### Tier 5 - Specialize Wrap up by diving more deeply into your specialization(s). If you haven't already done an [Advanced Specialization](#advanced-specializations), strongly consider including it in this tier. Beyond that, feel free to laser focus on one specialization, practicing more in that area, or branch out and develop expertise across multiple specializations. | **Practice** | **Status** | **Evidence** | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------: | :----------: | | Complete a [Specialization](#specializations) | | | | Complete a [Specialization](#specializations) | | | | Complete a [Specialization](#specializations) | | | | Complete a [Specialization](#specializations) | | | | Complete a [Specialization](#specializations) | | | | **Capstone** | **Status** | **Evidence** | | Create a website highlighting what you learned and built during this specialization. Use this as an opportunity to create a portfolio of your projects, notes, blog posts, etc. | | | ================================================ FILE: v4/faq.md ================================================ # About this guide - FAQ ## Who is this guide for? This guide is for anyone who wants to learn a fair amount of computer science while also gaining practical hands on experience building projects. Whether you're just starting out, or already have some experience, you can tailor the guide to suit your needs by starting either earlier or later in the tiers. ## Why did you write this guide? My primary goal is to save aspiring programmers the time of vetting the litany of resources available so they can spend more time learning and less time deciding what to learn. The internet is vast and chock full of tutorials and 'one off' courses and a significant amount of them only teach material at the surface level. I wanted there to be a resource that would go deeper, teach foundations, then build on those foundations for folks who want dive deep and aspire to go beyond 'good enough'. ## Do I really have to do App Academy Open in Tier 0? Why should I waste time on Ruby? If you want a bit tougher intro, please feel free to substitute with [Web Development - Deep Dive Into Modern Web Development - Full Stack Open 2020](./specializations/full_stack_open_2020.md). This, will result in you learning "about the same" amount as you would with App Academy, however the content will begin at a more advanced level so you'll need a higher degree of determination and "grit" to make the most of it. If "but am I wasting my time learning Ruby" is causing you anxiety that is preventing you from progressing in your learning journey, feel free to substitute with [Web Development - Fullstack Bootcamp - The Odin Project - Full Stack JavaScript](./specializations/the_odin_project_javascript.md). Note, this option will result in you learning less than you would have with App Academy Open but it's still a viable path in which you will learn a lot. Note 2: You're really not wasting your time learning Ruby. The language used isn't what's important here. The important part is the foundational concepts that will illuminate all of your future learning, regardless of language. ## Why did you deprecate all the other guides and condense everything down into just one guide? This guide is a restructuring of previous iterations of multiple guides in order to solve two issues: 1. _Which guide should I choose?_ This question comes up all the time. With this restructure the answer becomes consistent - 'this guide'. This guide contains the core content within tiers, then asks you to pick a 'specialization' as your capstone for the tier. Within the specialization, you'll have an opportunity to dive more deeply in the areas of most interest to you and complete a number of specialization specific projects. 2. _X course is paywalled or no longer available, what do I do?_ This has been a recurring issue as Coursera and edX try to settle on a sustainable business model. There are still awesome courses there, and I'll leave my prior guides available in the 'deprecated' section should you want to look into them, but for now, I'm going to focus on much less volatile resources. _Why? Coursera and edX have continually ramped up 'paywall' efforts over the past couple years, thus rendering many of the 'open' (as in free) course options available on their platforms increasingly unavailable for those without the funds to do more than audit._ ## What if I just want to specialize and don't want all that extra 'fluff' that's not pertinent to my specialization in a tier? I believe that 'fluff' is important. However, you know your goals, they are yours. YOLO. You do you. I would suggest that, when you're considering skipping something, you pause and consider that there's nothing I added to the guide without the intention of providing a resource that will help you grow your skills and career as a programmer. ## What about CS50? It is awesome! CS50 remains in the guide, however, the sequence beyond has been re-evaluated to use courses unlikely to hit the paywall issues. There are now a couple of courses listed which may require the purchase or borrowing of a book, but the majority of the courses are self-contained and books (like Cormen's Algorithms) should be freely available from your public library. ## What about the 'How to Code' series of courses? They are awesome! They are unfortunately behind a paywall now. You will find, however, that the book on which the courses are based is now included in Tier 4. ## Why so many courses in a row without any projects? You'll note that each tier has Courses, Reading, and Practice sections It appears that Readings come after Courses, and Practice comes after Reading - but you need not take that literally. Take the Courses in order, stopping to Read or Practice as you like, aiming to finish everything in the tier before moving to the next tier. Most tiers end with a Capstone 'specialization' which will contain much more hands-on coding via projects. ## What are the Tier Programming Projects? Both tiers and specializations will require 'Tier Programming Projects', you are free to select any programming project you want. To help combat the 'but I don't know what I want' roadblock, [Tier Programming Project Ideas](./project_ideas.md) lists a variety of ideas. Note: In specializations, the Tier Programming Projects might have extra criteria (such as 'if you're doing a mobile app development specialization your projects must be mobile apps') **An important note about Programming Projects** - you may elect to clone templates, apps, or games for your programming projects. When doing so, always use your own assets (images, audio, etc.) or assets you know are legal to use, and mark your project as 'inspired by' the original, giving full credit to the original author. Don't try to put their ideas off as your own, or (worse yet) try to put your project up on app stores as an original app. These are practice projects - don't go out and clone Tetris, toss it up on the app store, and get sued for copyright infringement and blame me - I warned you. ## Why switch from simple checkboxes to a tabular format? While the checkboxes made for easily checking items off as you complete them, I've found that using a table where it's easier to mark both what you're working on and what you've completed, plus add links to any projects you completed or other 'evidence' type materials, gives a much more meaningful progress indication. Plus, it builds in the process of linking to anything you create along the way which will put everything right at your fingertips should you later wish to create a portfolio or highlight prior work. ## Do I really have to create a separate 'highlights' site for each tier? No, you don't. You may either create a separate site for each tier or maintain one site which you create in the first tier and update as you progress through subsequent tiers. ================================================ FILE: v4/project_ideas.md ================================================ # Tier Programming Project Ideas Both tiers and specializations will require 'Tier Programming Projects', you are free to select any programming project you want. To help combat the 'but I don't know what I want' roadblock, this section lists a variety of ideas. Note: In specializations, the Tier Programming Projects might have extra criteria (such as 'if you're doing a mobile app development specialization your projects must be mobile apps') **Note:** Your projects can be any programming project you wish: web development, mobile development, games, applications, command line utilities, browser extensions, compilers, _anything_. They can be small to large endeavors. Pick something you want to code, that will provide you practice with existing skills or stretch you to grow new skills. Ideas: clone a popular website, clone a website template, create or clone a game, build a command line utility, enter a hackathon/programming competition. Many other ideas are listed below but keep in mind that they are only ideas - you are completely free to either use one of the ideas listed below or an idea of your own. - [Tier Programming Project Ideas](#tier-programming-project-ideas) - [To Practice Frontend Web, Mobile App, or Desktop Development](#to-practice-frontend-web-mobile-app-or-desktop-development) - [To Practice Algorithms and Data Structures](#to-practice-algorithms-and-data-structures) - [To Practice working with others](#to-practice-working-with-others) - [Game Programming ideas](#game-programming-ideas) ## To Practice Frontend Web, Mobile App, or Desktop Development **Complete any of the free challenges on [Frontend Mentor](https://www.frontendmentor.io/challenges) as a web, mobile or desktop app.** **Clone one or more of the following Website Templates (or the frontend of any website or theme you like) as a web or mobile app:** Note: Either use the theme as inspiration, coding similar features but using your own typography, images, and design ideas, or fully attribute the original theme and note yours as a clone - or both. The intention is to gain practice coding, not to get sued for copyright infringement. Give attribution to your sources. - [this theme](https://startbootstrap.com/previews/landing-page/), include all features (hover effects, animations, pages, etc) - [this theme](https://startbootstrap.com/previews/agency/), include all features (hover effects, animations, pages, etc) - [this theme](https://startbootstrap.com/previews/resume/), include all features (hover effects, animations, pages, etc) - [this theme](https://startbootstrap.com/previews/stylish-portfolio/), include all features (hover effects, animations, pages, etc) - [this theme](https://webthemez.com/demo/ballet-one-page-free-website-template/), include all features (hover effects, animations, pages, etc) - [this theme](https://webthemez.com/demo/delta-corporate-material-design-bootstrap-html-template/index.html), include all features (hover effects, animations, pages, etc). - [this theme](https://startbootstrap.com/previews/creative/), include all features (hover effects, animations, pages, etc) - [this theme](https://startbootstrap.com/previews/coming-soon/), include all features (hover effects, animations, pages, etc) - [this theme](https://webthemez.com/demo/lookup-interior-design-bootstrap-website-template/), include all features (hover effects, animations, pages, etc) - [this theme](https://webthemez.com/demo/flavour-restaurant-html5-responsive-web-template/), include all features (hover effects, animations, pages, etc) - [this theme](https://webthemez.com/demo/fine-best-app-landing-page-free-web-template/), include all features (hover effects, animations, pages, etc) - [this theme](https://webthemez.com/demo/startup-multi-purpose-responsive-html5-bootstrap-template/), include all features (hover effects, animations, pages, etc) **Clone a Web Application as a Web, Mobile, or Desktop App:** - Twitter - Snapchat - Instagram - Uber - Netflix - Medium - Trello - Slack - Facebook **Create a new Web, Mobile, or Desktop App in a typical category:** - Blog - Forum - Todos - Notepad - E-commerce - Product - Restaurant - Real Estate - School - Festival - Tech News - Fitness - Tutorial - Flash Cards - Recipes - Document Editor - Support Tickets - Community Chat **Clone a favorite game (or create a new one) as a Web, Mobile, or Desktop App** ## To Practice Algorithms and Data Structures **Complete any of the following archived coding competitions prior to 2015:** - [Facebook Hacker Cup]([https://www.facebook.com/hackercup/past_rounds/228440181128818/](https://www.facebook.com/codingcompetitions/hacker-cup)) - [Google Kick Start](https://codingcompetitions.withgoogle.com/kickstart/archive) - [Google Code Jam](https://codingcompetitions.withgoogle.com/codejam/archive) - [Google Hash Code](https://codingcompetitions.withgoogle.com/hashcode/archive) **Complete a [CodinGame](https://www.codingame.com) Sponsored Contest** **Complete one or more sections on [HackerRank](https://www.hackerrank.com)** ## To Practice working with others **Contribute to Open Source** - [CodeTriage](https://www.codetriage.com/) - [First Timers Only](http://www.firsttimersonly.com/) [This site](https://opensource.guide/how-to-contribute/) has a ton of information about how to break into open source. **Enter a hackathon** - [list on devpost](https://devpost.com/hackathons?utf8=%E2%9C%93&search=&challenge_type=online&sort_by=Submission+Deadline) - [HackerRank Contests](https://www.hackerrank.com/contests) - [Itch.io Game Jams](https://itch.io/jams) ## Game Programming ideas Clone one of the following (note, do NOT publish as your own, you'll get sued) - 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 players, with an option for multiplayer or AI opponent) - Pokemon - Monopoly (1-4 players, with an option for multiplayer or AI opponent) - Bomberman - Diablo - Zelda - Scythe - Minecraft - Risk - Lunar Lander - Streetfighter - Castlevania ================================================ FILE: v4/specializations/advanced-algorithms.md ================================================ # Computer Science - Advanced Algorithms Specialization Pick this specialization to focus on higher level mathematics and algorithms and gain practice with data structures and algorithms of the type one might find in coding competitions or in whiteboard interviews. **Note:** This is a more advanced specialization. [Computer Science - Algorithms](./algorithms.md) should be considered a pre-requisite. **Note:** This specialization is more involved and will require more effort than some of the other specializations. | Courses | Status | Evidence | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------: | :----------: | | [Advanced Algorithms](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-854j-advanced-algorithms-fall-2008/) | | | | [Advanced Data Structures](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-851-advanced-data-structures-spring-2012/index.htm) | | | | **Reading** | **Status** | **Evidence** | | [Competitive Programming on HackerEarth](https://www.hackerearth.com/getstarted-competitive-programming/) | | | | [Competitive Programming Tutorials on TopCoder](https://www.topcoder.com/community/competitive-programming/tutorials/) | | | | **Practice** | **Status** | **Evidence** | | Complete sections 1 through 18 of [CodeMonk](https://www.hackerearth.com/practice/codemonk/) on HackerEarth | | | | Complete all sections of [The HackerRank Interview Preparation Kit](https://www.hackerrank.com/interview/interview-preparation-kit) | | | | Complete 5 Easy problems of your choice on [TopCoder](https://arena.topcoder.com/#/u/practiceProblemList) | | | | Complete 5 Easy problems of your choice on [LeetCode](https://leetcode.com/problemset/algorithms/) | | | | Complete 5 Easy problems of your choice from the [HackerRank Artificial Intelligence](https://www.hackerrank.com/domains/ai) section | | | | Complete 10 Medium problems of your choice on [LeetCode](https://leetcode.com/problemset/algorithms/) | | | | [Google Code Jam](https://codingcompetitions.withgoogle.com/codejam/archive) year of your choice | | | | Complete 10 Medium problems of your choice on [TopCoder](https://arena.topcoder.com/#/u/practiceProblemList) | | | | Complete 10 Medium problems of your choice from the [HackerRank Artificial Intelligence](https://www.hackerrank.com/domains/ai) section | | | | [Meta Hacker Cup](https://www.facebook.com/codingcompetitions/hacker-cup) year of your choice | | | | Complete 10 Hard problems of your choice on [LeetCode](https://leetcode.com/problemset/algorithms/) | | | | Complete 10 Hard problems of your choice on [TopCoder](https://arena.topcoder.com/#/u/practiceProblemList) | | | | Complete 10 Hard problems of your choice from the [HackerRank Artificial Intelligence](https://www.hackerrank.com/domains/ai) section | | | | [Google Code Jam](https://codingcompetitions.withgoogle.com/codejam/archive) year of your choice | | | | [Meta Hacker Cup](https://www.facebook.com/codingcompetitions/hacker-cup) year of your choice | | | | **Capstone** | **Status** | **Evidence** | | Create a website highlighting what you learned and built during this specialization. Use this as an opportunity to create a portfolio of your projects, notes, blog posts, etc. | | | ================================================ FILE: v4/specializations/algorithms.md ================================================ # Computer Science - Algorithms Specialization Pick this specialization to gain a ton of practice with data structures and algorithms of the type one might find in coding competitions or in whiteboard interviews. Note: this has value outside interviews, it will help you learn to solve complex problems efficiently which is a valuable skill throughout your programming career. **Note:** This is a more advanced specialization which will rely on knowledge introduced in tier 2 and reinforced in tier 3, so it would be best to wait until one of those tiers to tackle it. **Note:** If you elect to select this specialization in multiple tiers, select a different language per tier to get the experience of how solutions are implemented in various languages. | **Practice** | **Status** | **Evidence** | | :--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------: | :----------: | | Pick: Study [C](https://www.geeksforgeeks.org/c-programming-language/) and then complete all [Quizzes ](https://www.geeksforgeeks.org/quizzes-on-programming-languages-gq/) for that language | | | | or Pick: Study [C++](https://www.geeksforgeeks.org/c-plus-plus/) and then complete all [Quizzes ](https://www.geeksforgeeks.org/quizzes-on-programming-languages-gq/) for that language | | | | or Pick: Study [Java](https://www.geeksforgeeks.org/java/) and then complete all [Quizzes ](https://www.geeksforgeeks.org/quizzes-on-programming-languages-gq/) for that language | | | | or Pick: Study [Python](https://www.geeksforgeeks.org/python-programming-language/) and then complete all [Quizzes ](https://www.geeksforgeeks.org/quizzes-on-programming-languages-gq/) for that language | | | | Review [Algorithms](https://www.geeksforgeeks.org/fundamentals-of-algorithms/) | | | | Review [Data Structures](https://www.geeksforgeeks.org/data-structures/) | | | | Study [Design Patterns](https://www.geeksforgeeks.org/software-design-patterns/) | | | | Do [Must Do Coding Questions Company-wise](https://www.geeksforgeeks.org/must-coding-questions-company-wise/) for Google | | | | Do [Must Do Coding Questions Company-wise](https://www.geeksforgeeks.org/must-coding-questions-company-wise/) for Facebook | | | | Do [Must Do Coding Questions Company-wise](https://www.geeksforgeeks.org/must-coding-questions-company-wise/) for Microsoft | | | | Do [Must Do Coding Questions Company-wise](https://www.geeksforgeeks.org/must-coding-questions-company-wise/) for Adobe | | | | Do [Must Do Coding Questions Company-wise](https://www.geeksforgeeks.org/must-coding-questions-company-wise/) for an additional company of your choice | | | | [Google Code Jam](https://codingcompetitions.withgoogle.com/codejam/archive) year of your choice (that you haven't previously completed) | | | | [Google Code Jam](https://codingcompetitions.withgoogle.com/codejam/archive) year of your choice (that you haven't previously completed) | | | | [Meta Hacker Cup](https://www.facebook.com/codingcompetitions/hacker-cup) year of your choice (that you haven't previously completed) | | | | [Meta Hacker Cup](https://www.facebook.com/codingcompetitions/hacker-cup) year of your choice (that you haven't previously completed) | | | | **Capstone** | **Status** | **Evidence** | | Create a website highlighting what you learned and built during this specialization. Use this as an opportunity to create a portfolio of your projects, notes, blog posts, etc. | | | ================================================ FILE: v4/specializations/app_academy_open.md ================================================ # Web Development - Fullstack Bootcamp - App Academy Open Specialization Complete the [App Academy Open](https://www.appacademy.io/course/app-academy-open) free online Fullstack Bootcamp. You may elect to complete this specialization only once. | Courses | Status | Evidence | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------: | :----------: | | Welcome To Coding | | | | Full Stack Online - Intro to Programming | | | | Full Stack Online - Software Engineering Foundations | | | | Full Stack Online - Ruby | | | | Full Stack Online - SQL | | | | Full Stack Online - Rails | | | | Full Stack Online - JavaScript | | | | Full Stack Online - React | | | | Full Stack Online - Full Stack Project | | | | Full Stack Online - MERN Stack Curriciulum | | | | Full Stack Online - Job Search | | | | Full Stack Online - Docker | | | | Full Stack Online - GraphQl | | | | Full Stack Online - Data Structures and Algorithms | | | | **Reading** | **Status** | **Evidence** | | [Official React Docs](https://reactjs.org/docs/getting-started.html) | | | | **Capstone** | **Status** | **Evidence** | | Create a website highlighting what you learned and built during this specialization. Use this as an opportunity to create a portfolio of your projects, notes, blog posts, etc. | | | ================================================ FILE: v4/specializations/backend.md ================================================ # Web Development - Backend Specialization Pick a backend language and library/framework and complete the following: **Note:** include complementary technologies related to your choice: for instance, if you chose Python, consider the entire ecosystem of developing Python applications, including a framework such as Flask or Django. **Note:** Pick any Backend language you like, some ideas include - Golang, Rust, Elixir, JavaScript, Java, C#, Python, PHP, Ruby **Note:** All Projects should use your selected language and framework/library You may elect to complete this specialization more than once by selecting it as your capstone for multiple tiers. | Courses | Status | Evidence | | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------: | :----------: | | [M001: MongoDB Basics](https://university.mongodb.com/courses/catalog) | | | | [M220J, M220JS or M220P](https://university.mongodb.com/courses/catalog) | | | | [M310: MongoDB Security](https://university.mongodb.com/courses/catalog) | | | | **Reading** | **Status** | **Evidence** | | [TravisCI](https://docs.travis-ci.com/) | | | | [Docker](https://docs.docker.com/) | | | | [Kubernetes](https://kubernetes.io/docs/home/) | | | | **Practice** | **Status** | **Evidence** | | Study all docs for your chosen language and its ecosystem | | | | Tier Programming Project | | | | Tier Programming Project | | | | Identify blogs and Twitter users to follow to stay up to date on your chosen language and its ecosystem and begin 'reading up' on a weekly basis to stay current | | | | Tier Programming Project | | | | Tier Programming Project | | | | Tier Programming Project | | | | Tier Programming Project | | | | Participate in the community surrounding your chosen language and its ecosystem - begin regularly interacting on twitter and other's blogs, and posting relevant content yourself | | | | Tier Programming Project | | | | Tier Programming Project | | | | Tier Programming Project | | | | Tier Programming Project | | | | **Capstone** | **Status** | **Evidence** | | Create a website highlighting what you learned and built during this specialization. Use this as an opportunity to create a portfolio of your projects, notes, blog posts, etc. | | | ================================================ FILE: v4/specializations/computer_science.md ================================================ # Computer Science - Intensive Specialization This specialization dives deep into computer science from algorithms and data structures all the way through databases, compilers, operating systems, and other advanced topics. It is best attempted as the capstone to tier 4 as it reinforces the breadth of knowledge built in that tier. **Note:** Though this list may seem far shorter than other specializations, this specialization is actually far more work. There is a LOT of study involved. | **Practice** | **Status** | **Evidence** | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------: | :----------: | | Study all topics for [Graduate Aptitude Test in Engineering](https://www.geeksforgeeks.org/gate-cs-notes-gq/) | | | | Take the exam found in the [2018 Paper](https://www.geeksforgeeks.org/original-gate-previous-year-question-papers-cse-and-it-gq/) and grade it according to the 2019 Keys or [take the exam online](https://www.geeksforgeeks.org/gate-cs-2018/) | | | | Study all topics for [Graduate Aptitude Test in Engineering](https://www.geeksforgeeks.org/gate-cs-notes-gq/) this time creating a comprehensive set of 'last-minute notes' similar to what is [found here](https://www.geeksforgeeks.org/lmns-gq/) | | | | Thoroughly study/review your 'last-minute notes' with the goal of attaining the best score possible on the next exam | | | | Take the exam found in the [2019 Paper](https://www.geeksforgeeks.org/original-gate-previous-year-question-papers-cse-and-it-gq/) and grade it according to the 2019 Keys or [take the exam online](https://www.geeksforgeeks.org/gate-cs-2019/) - closed book | | | | If you did not pass the exam with at least 80% correct, repeat the study process and then take the 2017 test as an open book exam. Then, retake the 2019 exam closed book. | | | | **Capstone** | **Status** | **Evidence** | | Create a website highlighting what you learned and built during this specialization. Use this as an opportunity to create a portfolio of your projects, notes, blog posts, etc. | | | ================================================ FILE: v4/specializations/data-science-i.md ================================================ # Data Science I Specialization Expand beyond Computer Science into Statistics, Probability and Data Science **Note:** The data science specializations are more involved and will require more effort than some of the other specializations. | Courses | Status | Evidence | | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------: | :----------: | | [Data Science](https://cognitiveclass.ai/learn/data-science/) | | | | [M001: MongoDB Basics](https://university.mongodb.com/courses/catalog) | | | | [Applied Data Science with Python](https://cognitiveclass.ai/learn/data-science-with-python/) | | | | [Deep Learning](https://cognitiveclass.ai/learn/deep-learning/) | | | | [M220P](https://university.mongodb.com/courses/catalog) | | | | Take this: [Introduction to Probability and Statistics](https://ocw.mit.edu/courses/mathematics/18-05-introduction-to-probability-and-statistics-spring-2014/index.htm) (more rigorous) | | | | or this: [Khan Academy Probability and Statistics](https://www.khanacademy.org/math/statistics-probability) (a more gentle introduction) | | | | **Reading** | **Status** | **Evidence** | | [Think Python](http://greenteapress.com/thinkpython2/thinkpython2.pdf) | | | | [Pandas Docs](http://pandas.pydata.org/pandas-docs/stable/) | | | | [Think Stats](http://greenteapress.com/thinkstats2/thinkstats2.pdf) | | | | [Numpy Docs](https://docs.scipy.org/doc/numpy/user/index.html) | | | | [An Introduction to Statistical Learning](http://www-bcf.usc.edu/~gareth/ISL/ISLR%20Sixth%20Printing.pdf) | | | | [Think Bayes](http://www.greenteapress.com/thinkbayes/thinkbayes.pdf) | | | | **Practice** | **Status** | **Evidence** | | Do 10 problems (of your choice) on [Rosalind](http://rosalind.info/problems/locations/) | | | | Complete one competition of your choice from [Crowd Analytix](https://www.crowdanalytix.com/community) | | | | Complete one [Bot Programming Competition on CodinGame](https://www.codingame.com/multiplayer/bot-programming) | | | | Complete [Deep Learning - TensorFlow on CodinGame](https://www.codingame.com/ide/puzzle/deep-learning-tensorflow) | | | | Do 20 problems (of your choice) on [Rosalind](http://rosalind.info/problems/locations/) | | | | Complete the [Digit Recognizer](https://www.kaggle.com/c/digit-recognizer) competition on Kaggle | | | | Complete the [Hackerrank Probability Challenges](https://www.hackerrank.com/domains/mathematics/probability) | | | | Complete the [Hackerrank Linear Algebra Foundations Challenges](https://www.hackerrank.com/domains/mathematics/linear-algebra-foundations) | | | | Complete one competition of your choice from [Crowd Analytix](https://www.crowdanalytix.com/community) | | | | Complete one competition of your choice from [Analytics Vidhya](https://datahack.analyticsvidhya.com/contest/all/) | | | | Complete one competition of your choice from [Driven Data](https://www.drivendata.org/competitions/) | | | | Complete one competition of your choice on [Kaggle](https://www.kaggle.com/competitions?sortBy=prize&group=active&page=1&pageSize=20) | | | | **Capstone** | **Status** | **Evidence** | | Create a website highlighting what you learned and built during this tier. Use this as an opportunity to create a portfolio of your projects, notes, blog posts, etc. | | | ================================================ FILE: v4/specializations/data-science-ii.md ================================================ # Data Science II Specialization Expand beyond Computer Science into Statistics, Probability and Data Science **Note:** The data science specializations are more involved and will require more effort than some of the other specializations. | Courses | Status | Evidence | | :---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------: | :----------: | | [Big Data](https://cognitiveclass.ai/learn/big-data/) | | | | [Statistics for Applications](https://ocw.mit.edu/courses/mathematics/18-650-statistics-for-applications-fall-2016/index.htm) | | | | [Data Science](http://cs109.github.io/2015/) | | | | [Convex Optimization](https://lagunita.stanford.edu/courses/Engineering/CVX101/Winter2014/about) | | | | [Probabilistic Systems Analysis and Applied Probability](https://ocw.mit.edu/courses/electrical-engineering-and-computer-science/6-041sc-probabilistic-systems-analysis-and-applied-probability-fall-2013/) | | | | [Hadoop](https://cognitiveclass.ai/learn/hadoop/) | | | | **Reading** | **Status** | **Evidence** | | [Think Complexity](http://greenteapress.com/complexity2/thinkcomplexity2.pdf) | | | | [Matplotlib Tutorials](https://matplotlib.org/tutorials/index.html) | | | | [The Quest for Artificial Intelligence](http://ai.stanford.edu/~nilsson/QAI/qai.pdf) | | | | [Multiagent Systems](http://www.masfoundations.org/download.html) | | | | [scikit-learn](https://scikit-learn.org/stable/documentation.html) | | | | [Differential Equations in Data Science](https://nbviewer.jupyter.org/github/URXtech/techblog/blob/master/continuousTimeMarkovChain/markovChain.ipynb) | | | | [A Course in Machine Learning](http://ciml.info/) | | | | [Probabilistic Programming and Bayesian Methods for Hackers](https://nbviewer.jupyter.org/github/CamDavidsonPilon/Probabilistic-Programming-and-Bayesian-Methods-for-Hackers/blob/master/Prologue/Prologue.ipynb) | | | | **Practice** | **Status** | **Evidence** | | Do 10 problems (of your choice) on [Rosalind](http://rosalind.info/problems/locations/) | | | | Complete one competition of your choice from [Crowd Analytix](https://www.crowdanalytix.com/community) | | | | Complete one [Bot Programming Competition on CodinGame](https://www.codingame.com/multiplayer/bot-programming) | | | | Complete one competition of your choice on [Kaggle](https://www.kaggle.com/competitions?sortBy=prize&group=active&page=1&pageSize=20) | | | | Complete the [Hackerrank Artificial Intelligence Challenges](https://www.hackerrank.com/domains/ai) | | | | Complete one competition of your choice from [Crowd Analytix](https://www.crowdanalytix.com/community) | | | | Complete one competition of your choice from [Analytics Vidhya](https://datahack.analyticsvidhya.com/contest/all/) | | | | Complete one competition of your choice from [Driven Data](https://www.drivendata.org/competitions/) | | | | Do 20 problems (of your choice) on [Rosalind](http://rosalind.info/problems/locations/) | | | | Complete one [Bot Programming Competition on CodinGame](https://www.codingame.com/multiplayer/bot-programming) | | | | Complete one competition of your choice on [Kaggle](https://www.kaggle.com/competitions?sortBy=prize&group=active&page=1&pageSize=20) | | | | **Capstone** | **Status** | **Evidence** | | Create a website highlighting what you learned and built during this tier. Use this as an opportunity to create a portfolio of your projects, notes, blog posts, etc. | | | ================================================ FILE: v4/specializations/frontend.md ================================================ # Web Development - Frontend Specialization Pick a frontend library/framework (Angular, React, Vue) and complete the following: **Note:** include complementary technologies such as TypeScript, NgRx, and RxJS for Angular, Redux and React Router for React, etc. **Note:** All Projects should use your selected framework/library You may elect to complete this specialization more than once by selecting it as your capstone for multiple tiers. | **Reading** | **Status** | **Evidence** | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------: | :----------: | | [FireBase](https://firebase.google.com/docs/) | | | | [WebPack](https://webpack.js.org/concepts) | | | | **Practice** | **Status** | **Evidence** | | Study all docs for the library/framework of your choice | | | | Tier Programming Project | | | | Tier Programming Project | | | | Identify blogs and Twitter users to follow to stay up to date on your chosen framework/library and begin 'reading up' on a weekly basis to stay current | | | | Tier Programming Project | | | | Tier Programming Project | | | | Tier Programming Project | | | | Tier Programming Project | | | | Participate in the community surrounding your chosen framework/library - begin regularly interacting on twitter and other's blogs, and posting relevant content yourself | | | | Tier Programming Project | | | | Tier Programming Project | | | | Tier Programming Project | | | | Tier Programming Project | | | | **Capstone** | **Status** | **Evidence** | | Create a website highlighting what you learned and built during this specialization. Use this as an opportunity to create a portfolio of your projects, notes, blog posts, etc. | | | ================================================ FILE: v4/specializations/full_stack_open_2020.md ================================================ # Web Development - Deep Dive Into Modern Web Development - Full Stack Open 2020 Specialization Complete the [Deep Dive Into Modern Web Development - Full Stack Open 2020](https://fullstackopen.com/en) free online Fullstack course. You may elect to complete this specialization only once. | Courses | Status | Evidence | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------: | :----------: | | Fundamentals of Web apps | | | | Introduction to React | | | | Communicating with server | | | | Programming a server with NodeJS and Express | | | | Testing Express servers, user administration | | | | Testing React apps | | | | State management with Redux | | | | React router, custom hooks, styling app with CSS and webpack | | | | GraphQL | | | | Typescript | | | | **Reading** | **Status** | **Evidence** | | [Official React Docs](https://reactjs.org/docs/getting-started.html) | | | | [Official Express Docs](https://expressjs.com/) | | | | **Capstone** | **Status** | **Evidence** | | Create a website highlighting what you learned and built during this specialization. Use this as an opportunity to create a portfolio of your projects, notes, blog posts, etc. | | | ================================================ FILE: v4/specializations/games.md ================================================ # Game Development Specialization Pick your targeted platform, programming language, and related framework and complete the following: **Note:** Choices include, but are not limited to - JavaScript/TypeScript using the Phaser framework targeting Android, iOS, and/or Web - C# using Unity targeting Android, iOS, and/or Web - C++ using Unreal Engine targeting Android, iOS, and/or Web **Note:** Each Tier Programming Project in this tier should be a game you create - it can be a clone or a new idea, but the deliverable for each project is a completed game. Do not deploy non-original (clone) games to app stores - you'll get sued - you've been warned. You may elect to complete this specialization more than once by selecting it as your capstone for multiple tiers. | **Practice** | **Status** | **Evidence** | | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------: | :----------: | | [CS50's Introduction to Game Development](https://www.edx.org/course/cs50s-introduction-to-game-development) | | | | Study all docs for your chosen platform and its ecosystem | | | | Tier Programming Project | | | | Tier Programming Project | | | | Identify blogs and Twitter users to follow to stay up to date on your chosen platform and its ecosystem and begin 'reading up' on a weekly basis to stay current | | | | Tier Programming Project | | | | Tier Programming Project | | | | Tier Programming Project | | | | Participate in the community surrounding your chosen platform and its ecosystem - begin regularly interacting on twitter and other's blogs, and posting relevant content yourself | | | | Tier Programming Project | | | | Tier Programming Project | | | | Complete [an Itch.io Game Jam](https://itch.io/jams) | | | | Tier Programming Project | | | | Tier Programming Project | | | | Complete [an Itch.io Game Jam](https://itch.io/jams) | | | | **Capstone** | **Status** | **Evidence** | | Create a website highlighting what you learned and built during this specialization. Use this as an opportunity to create a portfolio of your projects, notes, blog posts, etc. | | | ================================================ FILE: v4/specializations/mobile.md ================================================ # Mobile App Development Specialization Pick your targeted mobile platform and complete the following: **Note:** All Projects should target your selected mobile platform **Helpful Links** - [Nativescript](https://www.nativescript.org/) for iOS or Android - [React Native](https://facebook.github.io/react-native/) for iOS or Android - [Ionic](https://ionicframework.com/) for iOS or Android - [Xamarin](https://visualstudio.microsoft.com/xamarin/) for iOS or Android - [Swift](https://developer.apple.com/swift/) and [iOS](https://developer.apple.com/develop/) - [Kotlin](https://kotlinlang.org/) and [Android](https://developer.android.com/) You may elect to complete this specialization more than once by selecting it as your capstone for multiple tiers. | **Reading** | **Status** | **Evidence** | | :-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | :--------: | :----------: | | [FireBase](https://firebase.google.com/docs/) | | | | Study all docs for your chosen platform and its ecosystem | | | | **Practice** | **Status** | **Evidence** | | Tier Programming Project | | | | Tier Programming Project | | | | Identify blogs and Twitter users to follow to stay up to date on your chosen platform and its ecosystem and begin 'reading up' on a weekly basis to stay current | | | | Tier Programming Project | | | | Tier Programming Project | | | | Tier Programming Project | | | | Tier Programming Project | | | | Participate in the community surrounding your chosen platform and its ecosystem - begin regularly interacting on twitter and other's blogs, and posting relevant content yourself | | | | Tier Programming Project | | | | Tier Programming Project | | | | Tier Programming Project | | | | Tier Programming Project | | | | **Capstone** | **Status** | **Evidence** | | Create a website highlighting what you learned and built during this specialization. Use this as an opportunity to create a portfolio of your projects, notes, blog posts, etc. | | | ================================================ FILE: v4/specializations/open_source.md ================================================ # Open Source Contributions Specialization Pick one or more Open Source projects and contribute to them. Follow each project's contribution guidelines. Either tackle existing feature requests or bug reports on the project or propose, then once approved, add your own features. | **Practice** | **Status** | **Evidence** | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------: | :----------: | | Study [This site](https://opensource.guide/how-to-contribute/) | | | | Open Source Contribution | | | | Open Source Contribution | | | | Open Source Contribution | | | | Open Source Contribution | | | | Open Source Contribution | | | | Open Source Contribution | | | | Open Source Contribution | | | | Open Source Contribution | | | | Open Source Contribution | | | | Open Source Contribution | | | | Open Source Contribution | | | | Open Source Contribution | | | | **Capstone** | **Status** | **Evidence** | | Create a website highlighting what you learned and built during this specialization. Use this as an opportunity to create a portfolio of your projects, notes, blog posts, etc. | | | ================================================ FILE: v4/specializations/the_odin_project_javascript.md ================================================ ### Web Development - Full Stack JavaScript- The Odin Project Specialization Complete [The Odin Project - Full Stack JavaScript](https://www.theodinproject.com/paths/full-stack-javascript) free online Fullstack Bootcamp. You may elect to complete this specialization only once. | Courses | Status | Evidence | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------: | :----------: | | Fundamentals | | | | JavaScript | | | | HTML and CSS | | | | JavaScript | | | | NodeJS | | | | **Capstone** | **Status** | **Evidence** | | Create a website highlighting what you learned and built during this specialization. Use this as an opportunity to create a portfolio of your projects, notes, blog posts, etc. | | | ================================================ FILE: v4/specializations/the_odin_project_ruby.md ================================================ ### Web Development - Full Stack Ruby on Rails - The Odin Project Specialization Complete [The Odin Project - Full Stack Ruby on Rails](https://www.theodinproject.com/tracks/full-stack-ruby-on-rails) free online Fullstack Bootcamp. You may elect to complete this specialization only once. | Courses | Status | Evidence | | :------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | :--------: | :----------: | | Fundamentals | | | | Ruby Programming | | | | Databases | | | | Ruby on Rails | | | | HTML and CSS | | | | JavaScript | | | | **Capstone** | **Status** | **Evidence** | | Create a website highlighting what you learned and built during this specialization. Use this as an opportunity to create a portfolio of your projects, notes, blog posts, etc. | | |