Project Ideas
This page has a list of ideas for projects of varying difficulties. It is by no means exhaustive and is mainly meant to provide inspiration. If an idea here catches your interest, we recommend trying to make something related to it and you have the freedom to explore, problem solve, and be creative with what you make. There's no one right or wrong way to do anything in computer science, try things and have fun!
Each of these can vary in difficulty and you have a lot of freedom over how much you try to do and how challenging you want to make it for yourself. You also have complete freedom over design and what exactly you want to build. This page is meant to be a source of inspiration rather than a list of projects to make.
Videogames and Graphics
- Snake game
- Tetris
- Minesweeper
- Hangman
- Tic-Tac-Toe
- Hard mode: Ultimate Tic-Tac-Toe
- Battleships
- Write a raytracer[1]
- Make a platformer game
- Tower defense game
- DOOM clone
- Blackjack
- Mancala
- Single-player survival game
- Dungeon crawler console game[2]
- Breakout game
- Cookie clicker-like game
Applications and Tools
- Text editor
- To-do list
- Calendar
- Version control system (like git)
Algorithmic and Number Crunching
- Prime number checker
- Sieve of Eratosthenes
- Rubix Cube solver
- Pi calculator
- Test the Collatz Conjecture for large numbers
- Bonus: Make a visual representation of the iterative steps
- Mandelbrot set fractal
- Julia set fractal
- Maze solver
- Maze generator
- Traveling salesman problem
- Data compression[3]
- Nonogram generator
- Sudoku solver
- Chess engine
- Given an amount of money, convert it to the fewest number of bills and coins
- Caesar cipher encoder/decoder
- Bonus: Make an auto-decoder which makes guesses based on frequency analysis
Scientific Computing and Simulation
- Electrical circuit simulator
- Simulate collisions of a bunch of balls
- N-body simulation
- Agent-based simulation[4]
- Fluid simulation[5]
Cellular Automata
Data Structures
- Linked list
- Dynamic array / vector
- Binary tree
- Explore traversing the tree (pre-order, in-order, post-order)
- Implement a binary search tree
- Hash table
- LRU cache (a fixed size cache which evicts the oldest items when needed)
Concurrency and Parallelism
- Spin lock
- Thread pool
- Message passing interface
- Parallel matrix multiplication algorithms
- Explore x86 SIMD
- Explore CUDA
Parsers, Compilers, and Interpreters
- CSV parser
- JSON parser
- Parse and evaluate simple math formulas (e.g.
1 + 2 * 3)[6] - BrainF*ck interpreter
- For extra challenge: Create an optimized interpreter or JIT compiler
- Create a simple interpreter or compiler
- Check out Crafting Interpreters for a great tutorial on relevant concepts
- Also check out out list of Compiler Development Resources
- Lisp interpreter
- Lua interpreter
- Regular expression parser / evaluator
Systems Programming
- 8 bit computer emulator, e.g. for CHIP-8[7]
- Implement a simple malloc
- Write a Shell
- Disassembler
- Assembler
- Simple operating system kernel
Networking
- Simple chat application over TCP
- Implement a simple HTTP server
- Implement the RCON protocol (used for issuing commands to some game servers, like Minecraft)
Problem Sets
- Project Euler
- http://nifty.stanford.edu/
- https://github.com/practical-tutorials/project-based-learning
For an introduction to concepts see Ray Tracing in One Weekend
↩︎NOTE
We never recommend following tutorials line for line, this results in not having to grapple with design decisions or as much problem solving yourself. Instead, we recommend the tutorial for a high-level overview and intro to the relevant mathematics.
This is a good challenge from a software design, game dev, and algorithmic standpoint. You have a lot of creative freedom with what you make but we have some suggestions to get started:
We recommend exploring unicode box-drawing characters and make sure you use a terminal that supports UTF-8.
↩︎Box characters reference: ╔═╦═╗ ║ ║ ║ ╠═╬═╣ ║ ║ ║ ╚═╩═╝ Possible game screen: ╔═══════════════════════════════╦════════╗ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ║ ╠═══════════════════════════════╣ ║ ║ player info etc ║ ║ ║ HP: XXX / XXX MP: XX / XX ║ ║ ║ Items: [][][][][][][][][] ║ ║ ╚═══════════════════════════════╩════════╝Hint: Start with learning about Huffman Coding ↩︎
For inspiration see videos like
- Simulating the Evolution of Aggression
- Swarm intelligence simulation
- Simulating an Ecosystem
- Ant and Slime Simulations
For inspiration and an introduction to some relevant concepts see Simulating Fluids. ↩︎
Hint: It may be helpful to learn about Reverse Polish Notation and the Shunting yard algorithm. It may also be helpful to learn about precedence climbing. ↩︎
Here's a helpful guide to get started with CHIP-8: https://tobiasvl.github.io/blog/write-a-chip-8-emulator/ ↩︎
