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 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.

Projects

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.
  • 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.

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.

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.
  • 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

[gravatar]
EricH 1:18 AM on 9 Nov 2015

An enigma machine -- juuuust hard enough to be interesting; and simple enough to be doable. I humbly point out my attempt: https://github.com/offby1/doodles/blob/master/python/enigma.py

[gravatar]
Perry Grossman 5:20 PM on 3 Feb 2016

Maybe do a data science project through Datakind:
http://www.datakind.org/

[gravatar]
Perry Grossman 5:23 PM on 3 Feb 2016

Also, this tutorial, developing a Python data app on Heroku with Bokeh and Flask:
http://blog.thedataincubator.com/2015/09/painlessly-deploying-data-apps-with-bokeh-flask-and-heroku/

I am working through it now, but am getting a bit stuck.

Add a comment:

name
email
Ignore this:
not displayed and no spam.
Leave this empty:
www
not searched.
 
Name and either email or www are required.
Don't put anything here:
Leave this empty:
URLs auto-link and some tags are allowed: <a><b><i><p><br><pre>.