Created 3 January 2015, last updated 3 September 2020
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.
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 strikes your fancy, and forget the rest.
- 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.
- 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.”
- 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.
- Python Practice Projects: a short list of detailed project descriptions, if you want specific instructions.
Individual project ideas.
- Madlibs: 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.
- 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.
- An IRC bot: who doesn’t want to write their own IRC bot? You have a choice here: 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.
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. 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.
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.
- 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.