Kindling projects
Created 3 January 2015, last updated 1 October 2024
New programmers often need small projects to work on as they hone their skills. Exercises in courses are too small, and don’t leave much room for self-direction or extending to follow the interests of the student. “Real” projects, either in the open-source world or at work, tend to be overwhelming and come with real-world constraints that prevent experimentation and pure coding practice.
Kindling projects are meant to fill this gap: simple enough that a new learner can take them on, but with possibilities for extension and creativity. Large enough that there isn’t one right answer, but designed to be hacked on by a learner simply to flex their muscles.
This is a list of ideas, and pointers to lists of ideas, of projects that beginners can tackle. If you have an idea to add, send it in. I don’t personally have experience with most of these pointers, so if you have a strong opinion about one, I’d be interested to hear it.
Lists of projects
Other peoples’ lists of project ideas. A word of warning: the lists can be overwhelming. Don’t try to take them all in: scan the list until you find one that seems good to you, and forget the rest.
- The Big Book of Small Python Projects: Al Sweigart’s book of 81 explained projects, free to read online.
- App Ideas Collection: Florin Pop’s list of ideas for applications to build, categorized into Beginner, Intermediate, and Advanced.
- The 20 Games Challenge: Learn game development in small steps by recreating some classics. You don’t have to finish 10 games, even one or two will teach you something useful.
- Mega Project List: Karan Goel has a list of project ideas, with solutions in separate repo. These range from very simple (FizzBuzz) to very difficult (SQL Query Analyzer).
- Rosetta Code: A collection of programming tasks, with solutions in many languages. These tend to be smaller exercises.
- Build Your Own X: A list of links to tutorials about how to build lots of different software projects. Want to make your own programming language? Voxel engine? Game? Something in here will get you started.
- Boston Python Puzzles: puzzles written to be solved by writing Python programs.
- Rosalind: A site devoted to teaching bioinformatics skills, with exercises in Python.
- The Programming Historian: tutorials that help humanists, especially historians, learn digital techniques, including programming.
- Programming Koans:
“Clone a GitHub repository that has 200 or so failing test cases. Then, you
work your way through the test cases, writing functions and filling in the
blanks, getting the tests to pass one by one. The first few tests are very
basic and assume no prior knowledge of the language, and then they build on
each other, moving to more advanced topics.”
- The original site is gone, but an archive exists
- Python Koans
- JavaScript Koans
- Bash Koans
- Git Koans
- Vim Koans
- Programming Praxis: “This blog publishes new programming exercises weekly, at least, so that savvy programmers can maintain their skills by working the exercises and thinking outside their normal skill set, whatever that is.”
- CodeKata: “A kata is an exercise in karate where you repeat a form many, many times, making little improvements in each. The intent behind code kata is similar. Each is a short exercise (perhaps 30 minutes to an hour long). Some involve programming, and can be coded in many different ways. Some are open ended, and involve thinking about the issues behind programming. These are unlikely to have a single correct answer.”
- Project Euler: A collection of math/programming problems. Many require math expertise to solve.
- CodeChef: Practice problems and competitions.
- CSES (Code Submission Evaluation System): A collection of algorithmic problems with timed submissions and statistics.
Projects
Individual project ideas.
- Mad Libs: a simple text-based game with lots of possibilities for features.
- Re-implement a Unix command to work the way you want. Find, grep, and ls are good options.
- Username generator: purely random? Based on a dictionary? Random but pronounceable? Lots of possibilities.
- Poker game: start with code to rank hands, then add features until you have a playable poker game. Different poker games have different rules. This could keep you busy for a long time.
- Look at some algorithmic art
and get inspired to make your own computer-generated images. Some possibilities:
- Mandelbrot set, the world’s most famous fractal.
- Spirograph, the classic kids toy.
- It’s a bit of a cliche, but: implement a blog. The good news is, you already know how it should work.
- Write a static site generator: start with whatever input format you like, and create a pile of static HTML pages from it.
- Anagram generator. Eric Hanchrow has a collection of them written in many languages.
- A chat bot: who doesn’t want to write their own bot? Pick a chat app you like and use their API if they have one. For older technologies like IRC, you have a choice: low-level direct with sockets (difficult to get exactly right), or higher-level with a framework like Twisted (harder to get started, but lots of details handled for you).
- Twitter bot: watch a Twitter stream, make new tweets. Watch for certain words, transform tweets into other tweets, come up with something creative. Look into how ELIZA worked to produce interactions with simple logic.
- Game of Life: a classic computer science toy. Simple implementations aren’t difficult to implement, faster ones can become very involved. You have a choice of how to produce output: terminal, curses, GUI, etc.
- Write a simple Markdown to HTML converter. Start simple, and add more features until you get tired of it!
Challenges
These are series of exercises designed to teach a particular set of concepts. They are much more guided than projects, but can also be a good way to level-up your skills.
- interactive-coding-challenges: a set of Jupyter notebooks with algorithmic coding challenges and solutions.
- Advent of Code: 25 fun Christmas-themed challenges every year during December. Previous years are all available year-round. Each has two parts, often requiring refactoring.
- Matasano Crypto Challenges: learn cryptography concepts by working through a series of challenges and exercises.
- The Eudyptula Challenge: a series of programming exercises for the Linux kernel, conducted over email, just as Linux kernel development is.
- The Python Challenge: an old online puzzle requiring small amounts of coding, and outside-the-box puzzle solving.
Other
These are more-polished practice sites, some for pay, some not.
- r/dailyprogrammer: A sub-reddit with three programming problems each week: easy, intermediate, and hard. Each problem then gets a discussion with solutions if you want them.
- CodinGame: Slick coding games and programming challenges, including competitive coding tournaments.
- Codewars: a gamified coding dojo: “Kata are real code challenges focused on improving skill and technique. Some train programming fundamentals, while others focus on complex problem solving. Each kata is crafted for and by the community.”
- CheckiO: a game that develops coding skills as you progress.
- exercism.io: programming challenges, with discussion about the code.
- HackerRank: challenges categorized by language, domain, and difficulty.
- Interview Cake: a pay site that offers practice coding problems of the kind you might find in a coding interview.
BTW: comments are welcome. Comments suggesting new links will be incorporated and deleted.
Comments
An implementation of AKS, although it might be a bit math-heavy
https://en.wikipedia.org/wiki/AKS_primality_test
Add a comment: