views:

4472

answers:

11

What are the best toy projects to improve generalised programming skills? I'm talking small programs that you build from scratch and play with yourself to develop skills in a given area or areas. For example, you might put together a very simple notepad-type application, or a simple calculator program.

For example, what is the best project to:-

  • Develop architectural skills
  • Develop algorithmic skills
  • Develop object orientation skills
  • etc. etc.
+9  A: 

I believe you're looking for code katas

Jason Baker
A: 

I don't enjoy writing software nobody is going to use. I think more than anything it's important to choose projects you're interested in, and can be proud of. The best way to learn a new API or get better at one you know is to think of something experimental or exciting to do with it. Stretch its limits, try things that seem crazy, and see what you can get away with. By this I mean to prototype for fast feedback, of course -- not to make huge designs and then be disappointed when they don't work out far down the line.

Nick Retallack
+2  A: 

My tip is to try and make some simple roguelike nethack style games. Using the console as the gui makes it really easy to get up and running and you spend most of the time writing "real" code instead of tweaking the interface.

Roguelikes are full of algorithms (map generation, field-of-view, path finding, AI) and also map very well to object oriented programming.

RogueBasin and rec.games.roguelike.development are great places to get to get started and you can implement the game in any programming language you feel like.

Claes Mogren
A: 

There are quick problem sets like the Valladolid programming contest problemsets, and Project Euler which give you short problems to work on your skills. While they won't teach you a new language or API, they are useful for working on your skills when you don't necessarily have the time to get into a big project.

Zxaos
A: 

Create another StackOverflow :)

Marcio Aguiar
+7  A: 

Project Euler is a great place to ramp up on a language. I know of numerous people who've started there when wanting to learn a new program (e.g. Randall Munroe)

Stephen Johnson
+1  A: 

Project Euler is great if you like solving puzzles.

If you want to program something a bit less abstract and a bit more substantial, here a few ideas:

A Sudoku solver (good for experimenting with different algorithms - brute force, back-tracking, dancing links).

A simple web server (good for learning concurrency and I/O in your chosen language).

A simple blog engine.

A poker hand-evaluator. Given 5 cards, determine the rank of the hand. Once you've built a 5-card evaluator, try building a 7-card evaluator (best 5-card hand from seven cards). Try to make it fast (millions of hands-per-second).

A Markov Chain nonsense generator (as discussed previously by Jeff).

Solve some problem of your choice using a genetic algorithm.

Dan Dyer
A: 

When I needed to do this to learn Java and Swing, I wrote a program to play Othello. Turn-based games that don't involve chance have a fairly easy recursive move selection algorithm called Min/Max, and the state evaluation function for Othello is fairly straightforward (+1 for each space of your color, -1 for each space of their color, but multiply edge spaces by 10 and corners by 500).

nsayer
A: 

The Sphere Online Judge is particularly useful to develop algorithmic skills. Unlike Topcoder or Uva which only let you submit on a handful of languages, Sphere supports 35. You can practice algorithmic skills on haskell, prolog, ruby, python, php, lisp, perl, scheme, nice, and even assembly.

I think the tutorial problems collection is useful for picking a new language. As those problems are based on well known algorithms, the focus would be mainly on the language you're solving them.

I'm currently doing TDBFS in Java & Haskell :)

omgzor
A: 

Python Challenge

Learn to program by solving nice little tasks...funny and entertaining. You can solve the problems with several programming languages.

If you think your solution is great..post it in Challenge Forum...there are a lot of great and of course friendly Coders.

bastianneu
+1  A: 

Something else to consider is downloading the source code of an open source project. Read the code, watch it run and if you're feeling confident, become a submitter.

Matthew Sposato