If you have any questions, be sure to check the FAQ. 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
- Course: Introduction to Computer Science - CS50
- Project: Google Code Jam 2008 - Qualification Round (language of your choice)
- Article: Read Project Specification Documents 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
- Project: Google Code Jam 2009 - Qualification Round (language of your choice)
- Course: How to Code: Simple Data
- Project: Google Code Jam 2010 - Qualification Round (language of your choice)
- Book: Precalculus
- Course: How to Code: Complex Data
- Project: Google Code Jam 2011 - Qualification Round (language of your choice)
- Project: Google Code Jam 2008 - Round 1A (language of your choice)
- Video Series: Essence of Calculus
- Course: Single Variable Calculus
- Book: Think Java - How to Think Like a Computer Scientist
- Project: Google Code Jam 2009 - Round 1A (language of your choice)
- Course: Software Construction: Data Abstraction
- Project: Google Code Jam 2010 - Round 1A (language of your choice)
- Book: Introducing Java 8
- Course: Software Construction: Object-Oriented Design
- Project: Google Code Jam 2011 - Round 1A (language of your choice)
- Project: The Java Tutorials Work through all of the tutorials
- Project: Spring 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.
- Book: Object-Oriented vs. Functional Programming
- Course: Software Engineering: Introduction
- Project: Google Code Jam 2008 - Round 1B (language of your choice)
- Book: Java Structures
- Article: Read Algorithms and Flowcharts and then familiarize yourself with Pencil ... start flowcharting complex portions of your code logic as part of your documentation
- Book: Docker for Java Developers
- Course: Software Development Capstone Project
- Project: Google Code Jam 2008 - Round 1C (language of your choice)
- Course: Mathematics for Computer Science
- Course: UX Design for Mobile Developers
- Docs: Kotlin Work though all Reference and Tutorials
- Book: Don't Panic: Mobile Developer's Guide to The Galaxy
- Project: Google Code Jam 2009 - Round 1B (language of your choice)
- Book: Open Data Structures
- Project: Google Code Jam 2009 - Round 1C (language of your choice)
- Course: Algorithms, Part I
- Project: Google Code Jam 2010 - Round 1B (language of your choice)
- Book: Applied Discrete Structures
- Project: Google Code Jam 2010 - Round 1C (language of your choice)
- Course: Algorithms, Part II
- Project: Google Code Jam 2011 - Round 1B (language of your choice)
- Project: Google Code Jam 2011 - Round 1C (language of your choice)
- 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.
- Book: Professor Frisby's Mostly Adequate Guide to Functional Programming
- Project: Google Code Jam 2008 - Round 2(language of your choice)
- Book: Microservices for Java Developers
- Course: Software Testing
- Project: Google Code Jam 2008 - Round 3 (language of your choice)
- Book: Calculus
- Course: Software Debugging
- Project: Google Code Jam 2009 - Round 2(language of your choice)
- Course: Multivariable Calculus
- Project: Google Code Jam 2009 - Round 3 (language of your choice)
- Course: Software Architecture & Design
- Course: Classical Mechanics
- Book: Modern Java EE Design Patterns
- Project: Google Code Jam 2010 - Round 2(language of your choice)
- Course: Databases
- Project: Google Code Jam 2010 - Round 3 (language of your choice)
- Course: Agile Software Development
- Course: Introduction to Cloud Infrastructure Technologies
- Course: Intro to Theoretical Computer Science
- Project: Google Code Jam 2011 - Round 2(language of your choice)
- Course: Introduction to Probability - The Science of Uncertainty
- Project: Google Code Jam 2011 - Round 3 (language of your choice)
- Video Series: Essence of Linear Algebra
- Course: Linear Algebra - Foundations to Frontiers
- Course: Cryptography I
- Book: Cryptography: An Introduction
- Course: Cryptography II
- 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.
- Course: Computer Architecture
- Project: Google Code Jam 2008 - World Finals (language of your choice)
- Book: Information Theory, Inference, and Learning Algorithms
- Course: Introduction to Cyber Security
- Project: Google Code Jam 2009 - World Finals (language of your choice)
- Book: Foundations of Computer Science
- Course: Differential Equations
- Course: Computer Graphics
- Project: Google Code Jam 2010 - World Finals (language of your choice)
- Book: The Quest for Artificial Intelligence
- Course: Artificial Intelligence
- Project: Google Code Jam 2011 - World Finals (language of your choice)
- Course: Machine Learning
- Book: Deep Learning
- Project: Google Code Jam 2012 All Rounds
- Book: The Philosophy of Computer Science
- Course: Operating Systems and System Programming
- Project: Google Code Jam 2013 All Rounds
- Book: Numeric Algorithms
- Book: Basics of Compiler Design
- Course: Compilers
- Project: Google Code Jam 2014 All Rounds
- Course: Introduction to Natural Language Processing
- Project: Google Code Jam 20152 All Rounds
- Course: Computer Networks
- Project: Google Code Jam 2016 All Rounds
- Course: Parallel Computer Architecture and Programming
- Project: Google Code Jam 2017 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.