What are your favorite code kata [1]?
We already know Jeff Atwood's answers [2].
Take a look at Larry O'Brien's 15 Exercises to Know A Programming Language [1].
For example the first exercise is:
Write a program that takes as its first argument one of the words 'sum,' 'product,' 'mean,' or 'sqrt' and for further arguments a series of numbers. The program applies the appropriate function to the series.
Educational goals of exercise 1:
Requires basic control flow, basic operators, and the math library. (Complex numbers available?)
What are arrays like?
What about parsing / implicit conversion?
Are functions first-class (availability of Map() and Apply())?
Error handling: What happens on invalid data?
The exercises often build on themselves and use code or data from previous tasks. The exercises in general tend to be much more practical and less "puzzley" than Project Euler
[1] http://www.knowing.net/index.php/2006/06/16/15-exercises-to-know-a-programming-language-part-1/I pick up some excercises from Project Euler when I can:
Project Euler is a series of challenging mathematical/computer programming problems that will require more than just mathematical insights to solve. Although mathematics will help you arrive at elegant and efficient methods, the use of a computer and programming skills will be required to solve most problems.
Etudes for Programmers [1] is quite outdated, and the etudes may be too large to be "kata", but its Russian translation was quite an inspiration for me when I was learning to code.
[1] http://rads.stackoverflow.com/amzn/click/0132918072Well, I'm biased, but I like my http://codingkata.org *g*
Topcoder [1] practice rooms and challenges
[1] http://www.topcoder.com/wiki/display/tc/Sample+Problem+StatementsI found a link to Project Euler [1] last night through XKCD's blag [2] [sic]. I like his suggestion that:
"it’s a great way to learn a language; I started picking up Python last year by doing the first couple dozen Project Euler problems in it." source [3]
I'm trying to work through them from a Test Driven Development perspective myself, as a way of reinforcing the fundamentals.
[1] http://projecteuler.net/For pure problem-solving and algorithm skills, try the IOI [1] problems - they're great fun, and come with some evil test data. If you catch it at the same time as the contest itself, they often hold an online contest where you can try the questions in more realistic conditions.
Note: the 2008 website is incredibly ropy, if you're after this year's questions.
[1] http://en.wikipedia.org/wiki/International_Olympiad_in_InformaticsWhat do you do to practice software development?
Lead a team that builds real-world production software that are used by thousands everyday.
Where do you go to find new small projects to practice?
My very own machine. Every now and then I find something on my machine that annoys me or requires a few steps to accomplish, I then set out to write a program that would deal with the annoyance and/or reduce steps to accomplish some tasks.
.
BATch files and powershell scripts are good "small project" practice from time to time as well as rolling/maintaining your own "AutoHotkey" scripts. And since I am a command line junkies, I have a lot of ideas for console applications as well.
.
And there are all the puzzles, just go to some online browser-game like Neopets [1] and try to write a program that solves one of their minigames efficiently.
best kata is fizzbuzz! to solve in 15minutes with OCP rules
I provided some twists to the FizzBuzz kata to the kata catalog at http://www.codingdojo.org which adds a generalization, which makes it my current favourite. The Texas Hold'm kata is also a good one, although a bit tedious and large if you want to finish it.