Sharpening the Saw

I like to practice my craft. I enjoy participating in Code Retreats. I enjoy facilitating Code Retreats. I like working on kata and koans. And a lot of what I talk about includes references to these practices. We at LeanDog are always on the lookout for people who are passionate about improving their own craft. I thought I'd start a blog entry where I catalog resources that might be of interest to others looking for ways to sharpen their saw.

Please feel free to reply to this post with other resources I don't have listed. I will try to keep it up to date as I discover more.


Programming Exercises

Pragmatic Programmers Code Kata

A collection of Kata from the folks over at Pragmatic. As of 24-Jan-2011, there are 21 different kata listed on the site.

You can also find information about kata, koans, kumite, and the Dreyfus model. All interesting topics and worth looking at.

Coders Dojo

There are no kata listed on this site, but if you are interested in kata, you need to know about this one. Coders Dojo provides an on-line live dojo for Ruby. You can execute the kata in the browser. Alternatively, you can run the kata on your local machine. In either case, you can then share the kata with other members of the site and get feedback. They have support for several other languages.

CodingDojo

There are approximately 25 different exercises on this site. They are broken down into categories; Algorithmic, Game Modeling, Math Oriented, String Manipulation, and Specific Technologies.

Coding Kata

Over 20 kata are listed here. This site is nice for the beginner. The first kata is a Hello World that walks you through the steps of setting up a java development environment. They provide steps for several languages, all of which run on the JVM. You can choose from Java, Groovy, Scala, Clojure, JavaFX, Jython, and JRuby. They also have a javascript option.

Ruby Quiz

While listed as the Ruby Quiz, the problems listed here can be done in any language.

There are 156 challenges listed here, so there is plenty to keep you busy for quite a while. Many of them are also available on other sites.

Project Euler

Taken Directly from the Project Euler site:

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.

Programming Praxis

The sub-title of the programming praxis site is "Sharpen your saw". I discovered this after I named this post.

There are over 200 programming challenges on this site. You can find listings in chronological order, by themes, or through a search mechanism. Much of what is compiled here is available on other sites as well, but there are several unique challenges to be found here.

Sphere - the mother of them all?

There are over 8200 various programming challenges on this site. This is by far the most comprehensive collection of programming challenges I've found thus far.

TDD Problems

Thanks to George Dinwiddie for pointing this one out. TDD Problems is a listing of approximately 30 (so far) that, according to the site's authors, meet the following criteria:

  • they are real-world, not just toys
  • they are targeted towards learning TDD (that is: they are small and easy enough to work out in say half a day)
  • they don't involve any of the harder-to-test application development areas: GUI, database or file I/O. (since those topics are considered too hard for the TDD-beginner)
  • they have been solved by a TDD-practitioner previously, proving their appropriateness for [the] site

Carnegie Mellon Craftsmanship Katas

This list of kata is from the Carnegie Mellon University - Silicon Valley curriculum. If you are not familiar with this program, I suggest you look into it. If you've a child considering a major in computer science, this unique program is teaching students how modern software is developed.

The Gilded Rose Kata

This kata made the rounds on the Software Craftsmanship Google group. It is in C#, but could easily be recreated in your language of choice. You will want to get the source for the kata off of NotMyself's github account.

There is another version of The Gilded Rose Kata available from Terry Hughes.

Code Brawl

CodeBrawl is a series of coding contests. You can subscribe to the feed and get notified when the next contest starts. If you prefer to take your own sweet time, you are free to try out any of the prior contest challenges; create your own testing library, a diff tool, or a command line todo tool among others.

Koans

A koan is part of the Zen Buddhist lore and history. It is essentially a question or story that is not understandable through rational thought, but may be through intuition. Teachers of Zen practices may ask students about the koan practices through checking questions. These questions are intended to validate insight or awakening. - borrowed liberally from wikipedia.

As far as I know, EdgeCase was the first to create a set of programming koans. Today, there are koans available in numerous languages. These are all entertaining and educational.

Ruby Koans

The Koans walk you along the path to enlightenment in order to learn Ruby. The goal is to learn the Ruby language, syntax, structure, and some common functions and libraries. We also teach you culture. Testing is not just something we pay lip service to, but something we live. It is essential in your quest to learn and do great things in the language. - from the EdgeCase Ruby Koans site.

Clojure Koans

One of the first in a series of functional koans, this was started by Aaron Bedra at CodeMash 2010. Now maintained by Colin Jones, the Clojure Koans are the work of several excellent contributors.

JavaScript Koans

Inspired by the Ruby Koans, Liam McLennan brings us the koans for JavaScript. The JavaScript koans go on to cover equality & “truthyness”, assignment, control structures, strings, numbers, objects, arrays, scope, and regular expressions.

OCaml Koans

The koans here are in a significantly different format from the Ruby and Functional koans already listed. This is a page of koans in the more classic sense. There are stories that are intended to help one learn functional programming concepts.

Smalltalk Koans

Thanks to Steve Kim (@skim) for pointing these out and even more so for authoring them. If you are not familiar with smalltalk, you might want to give it a look. What excites you about modern day languages like Ruby or Python can likely be found in smalltalk.

Testing Exercises

It is awfully difficult to deliver good software without testing; "nigh impossible", one might say. Actually, I don't really know anyone who would say that, but it doesn't make it any less valid. Thanks to Markus Gärtner for giving me the first two entries for this section. I hope to add more.

Testing Dojos

This site is designed to help you run a testing dojo. It provides details on the equipment, roles, and mechanics. It covers types of dojos and discusses the value of reflection at the end of each dojo. There is also a small list of Public Dojos available. The dojo list is segregated into conferences (short-term) and locations (long-term).

Testing Challenges

There are more than 50 different testing challenges available on this site. The setup and description for most of the challenges is pretty brief, but it is sufficient to get you started. There are links to sites with more details and/or the code that will be under test. One especially nice feature is the "Similar" button on each page; click it and get a listing of exercises that are similar in style or approach to the one you are currently viewing.

9 comments:

  1. I recommend the coding katas over at uncle bob's blog, for example the bowling game kata http://butunclebob.com/ArticleS.UncleBob.TheBowlingGameKata

    Project Euler is awesome, especially when you use a function ideas to solve them

    ReplyDelete
  2. This comment has been removed by a blog administrator.

    ReplyDelete
  3. I heard you speak about Project Euler on Dot Net Rocks.

    You pronounced it "Yule-Er". Leonhard Euler is my favorite mathematician. Allow me to be pedantic and point out that his name is pronounced "OIL-ER". As in, Leonhard Oiler.

    It was a great interview, though. Thanks for taking the time to speak.

    ReplyDelete
  4. Forrest:

    Thank you. I've been pronouncing it incorrectly for quite some time. I will not do that again.

    - Doc

    ReplyDelete
  5. Heard of this list from the DotNetRocks podcast. Great list! The Codingkatas.org link is incorrect. Should be http://codingkata.org/katas/

    ReplyDelete
  6. If want to really "see" how it's done, this site has Vimeo movies of people solving Katas while explaining what they're doing. http://katacasts.com/

    ReplyDelete
  7. Michael, I believe koans came into our programming world via Ara Howard in this RubyQuiz, http://www.rubyquiz.com/quiz67.html. Given that Ara is a Buddhist it makes perfect sense. I know that Jim gives Ara credit in RubyKoans so I suspect that is where they took inspiration.

    ReplyDelete
  8. There are also Koans for Clojure:
    https://github.com/functional-koans/clojure-koans

    ReplyDelete
  9. Python koans here: https://bitbucket.org/gregmalcolm/python_koans/wiki/Home

    ReplyDelete