In the year 2010, I will post a simple text-only tic-tac-toe application in a different programming language every week.

I’m not sure where precisely the inspiration for this arose, but I know I’ve been fascinated with the variety in programming languages for as long as I’ve been exposed to them. Even more than most human languages, a programming language shapes the sorts of ideas it even occurs to you to express, and I believe that to call yourself a professional, you ought to know more than one, more than those you make your living off of, and preferably one or two from each of the high-level language families. This might have a practical benefit if it leads to the next paycheck, but more interesting is the “cross-training” that learning an unfamiliar modality brings. While straining to learn a truly novel abstract concept, I find it’s almost as if I can feel the new neural pathways forming. I may not be able to directly use, say, monads in my day job, but learning how they work changes how I think about state.

But this project is not really about that. This is at once more extreme, and less serious. Call it adventures in programming dilettantism. A breadth-first exploration of the brilliance and madness our arcane art has to offer.

I chose tic-tac-toe (noughts and crosses) because it’s easy to understand what it should do, complex enough to hit on a variety of language features, yet simple enough to implement that I can reasonably churn them out at a pace of one a week while remaining happily married and employed.

But I need your help. I’ve assembled a partial list of the 52 languages, grouped into categories, but as you can see, there are still empty slots, and room for a few alternates. Let me know what you think should fill them, and I’ll update the list. The only restriction for now is that I must be able to obtain a legal, zero-cost implementation. I’ve already implemented a few “in reserve.”

UPDATE: Thanks for the great suggestions, everyone. I reserve the right to swap things in if the insane ones kill me. 🙂

Mainstream

Ruby Python Java C# PHP C C++ Javascript Perl Objective-C Scala Visual Basic x86 Assembly JVM Opcodes

Academic or Niche

Common Lisp Scheme Haskell Ocaml Prolog APL (or J) Smalltalk Eiffel Erlang Oz Cobra Falcon Rebol Clojure Ada Dylan factor

Obsolescent (?)

COBOL Fortran Simula Pascal Basic (Old School) Hypercard

Insane

brainf*ck Whitespace LOLCODE Piet

Misc/Other

MySQL Procedure Language Awk Lua Self Go Io Logo Bash PowerShell D Joy Applescript CoffeeScript