views:

746

answers:

14
+10  Q: 

Project Suggestions

I'd like suggestions for a small project to work on this fall. Something I can work on a few hours a week that will keep me entertained and help me learn new things about a particular language, coding style, etc.

I like to program in PHP and Java but am very interested in coding something using Python or Perl. Any good ideas?

+4  A: 

I'd recommend reading and doing the examples in Programming Collective Intelligence. It covers many excellent AI algorithms with real-world examples and APIs (e.g., making recommendations for users based on what they tag on delicious), and is all done in Python.

Chris Bunch
+3  A: 

I would suggest a small game, like a card game or a simple board game of some kind (chess or checkers for example). It would be good practice.

If you have done Java GUI programming at all, then I would also suggest trying out Jython, or even JRuby. They give the power of the scripting language, along with the power of the rich Java libraries, which lets you learn the new language and still utilize your existing API knowledge.

Mike Stone
+1  A: 

I learned a lot by writing a mini-lisp interpreter. The syntax is simple, so there's not a lot of busywork to parse. As you parse, you build a tree that represents the expression, and then executing the expression is a simple matter of walking the tree from the top down. It was fun, educational, and quite satisfying.

Mark Harrison
+4  A: 

Another idea is to go to project euler and start solving problems. It is a website with a lot of math problems that are computable in a minute if you can find the right algorithm. The questions get more and more challenging, and it's a great way to boost your programming skills and problem solving skills in your language of choice.

Mike Stone
+2  A: 

Past year's ICFP contests have interesting problems. 2006's is quite a lot of fun and has lots of different problems to work on, from building your own VM to coding in a 2D circuit language.

Patrick
+2  A: 

Building a Sudoku solver was something that kept me entertained a few summers ago.

For smaller chunks, consider looking at some of the "classic" computer science problems, like 8 Queens, and so forth.

Another option might be to find a podcast of a Computer Science course, and follow through what they do. I plugged the Berkeley CS61A course in another thread, if you are at all interested in learning Functional Programming, then this is a great one.

Matthew Schinckel
+2  A: 

If you are looking for shorter programs, definitely go for Project Euler.

Otherwise, check out some Open Source projects and try to contribute!

EndangeredMassa
+1  A: 

I often find that recreating some of your favorite programs can end up being a fun and educational experience. For instance you could create your own version of Tetris in almost no time, but probably will end up customizing or enhancing your version for hours. I know that I usually learn more than a few things by recreating a programs and I end up with one of my favorite programs custom tailored to fit me. The downside to recreating programs is you will probably be reinventing the wheel and would be far more productive doing something else. Here are some programs I suggest to make:

  • Tetris
  • Mario style platformer
  • 20 Questions
  • Self Learning Tic Tac Toe

Although I suggested all games, any program you enjoy and would like to customize would be beneficial to recreate.

Anton
+2  A: 

I think this might be better (read more useful) as a language agnostic question. Say you want to start learning a new language, any language, what are some good smaple projects to learn with? I'd imagine the answers would be quite different for, say, C than they would be for Ruby.

shsteimer
+14  A: 

Like others, I also suggest making a game as a small project. Games usually exercise lots of different programming skills (from AI algorithms to GUIs), are fun and interesting to make, and give you an end product that you and others can enjoy. Here are some suggestions:

  • Experiment with the minimax algorithm:
    • Tic Tac Toe AI (simple)
    • Connect Four AI
    • Checkers AI
    • Othello AI
  • Simulation: Conway's Game of Life
  • Make an interface for a classic board game (A lot of these exist online, but most of the interfaces stink. You can do better, just try not to put your game on Facebook and give it a name too close to Scrabble):
    • Backgammon
    • Cribbage
    • Go
    • Pente (one of my favorites)
  • Make a web version of a pencil and paper game:
  • Make an action game: pygame is a free, open source, cross platform set of libraries that make it easy to create traditional 2D video games.
  • Make a 3D game: Panda3D is a free, open source, cross platform, 3D game engine that lets you write entire games using Python.
  • Better than all of these: come up with your own game idea and implement it.

You might consider implementing your game using Google App Engine. This will give you good exposure to Python and other modern web technologies, and will make it even easier to share what you create with others (potentially the rest of the world).

Jason Pratt
+3  A: 

If you're looking for an interesting project to work on, why not spend the time contributing to one of your favorite open source projects? They can always use the help.

bcwood
A: 

If you do consider implementing a game, I would recommend the lostgarden site. The author supplies some great free graphics for you to use in building a game. He often sets prototyping challenges so you can compare you work with other peoples too.

Jamie
+1  A: 

If you decide to implement your own Tetris, I'd recommend reading Colin Fahey's Tetris article. It contains a "Standard Tetris" specification.

Theine
A: 

Work a few problems from the UVa Online Judge or Sphere Online Judge

unclerojelio