*Current in **bold**. Completed in ~~strikethrough~~.* Learn a variety of commonly-used programming languages: * Write a program in Ruby * **Write a program in Python** * Write a program in C * ~~Write a program in C++~~ * ~~Write a program in Java~~ * Write a program in Objective-C * ~~Write a program in C#~~ * ~~Write a program in Clojure~~ * Write a program in Perl * Write a stand-alone program in Javascript Learn a variety of not commonly-used programming languages: * Write a non-trivial program in Brainfuck * Write a program in Lua Learn a variety of frameworks: * Write a web application with Rails * ~~Write a web application with Django~~ * Write a program with .Net * Write a program with OpenGL * Write a program with DirectX * Write a program with Cocoa Learn a variety of editors/IDEs: * ~~Use vim exclusively for a month~~ * Use TextMate exclusively for a month * Use emacs exclusively for a month * ~~Use Visual Studio exclusively for a month~~ * ~~Use Eclipse exclusively for a month~~ * Use XCode exclusively for a month Learn a variety of [programming paradigms](http://en.wikipedia.org/wiki/Programming_paradigm "Programming paradigm - Wikipedia"): * Write a program in assembly language * ~~Write an application in a functional language~~ * ~~Write an application in an object-oriented language~~ * ~~Write an application in a prototype-based language~~ * Write an application in a logic programming language * Write an application using the Actor model * Write an application in Forth Experience the ins and outs of programming for different platforms: * **Write a nontrivial web app** * Write a nontrivial desktop app * Write a nontrivial mobile app * Write an embedded app * Write a realtime system Enhance your understanding of the building blocks that we use as developers: * ~~Write a networking client (e.g., HTTP, FTP)~~ * Write a device driver * Write a B-tree database * Wrap an existing library to provide a better (more pleasant) user experience * Write an application or framework that provides a plugin model * Write a testing framework * Write a programming language Enlighten yourself with koans, katas, and the wisdom of ages: * Complete five [code katas](http://en.wikipedia.org/wiki/Kata_\(programming\) "Kata (programming) - Wikipedia") * ~~Complete the [programming koans](http://sett.ociweb.com/sett/settJan2011.html "Learning Programming Languages with Koans - Object Computing, Inc.") for a language that you want to learn (Clojure)~~ * Read [SICP](http://mitpress.mit.edu/sicp/ "SICP web site") and complete all the exercises Program in the open: * **Contribute to an open source project** - Mozilla Firefox [my tickets on bugzilla](https://bugzilla.mozilla.org/buglist.cgi?emailassigned_to1=1;emailreporter1=1;emailtype1=exact;email1=samdgarrett%40gmail.com;field0-0-0=bug_status;type0-0-0=notequals;value0-0-0=UNCONFIRMED;field0-0-1=reporter;type0-0-1=equals;value0-0-1=samdgarrett%40gmail.com;list_id=2709917) * ~~Have a patch accepted~~ * Earn commit rights on a significant open source project * Publish an open source project * Perform a [Refactotum](http://thinkrelevance.com/blog/2007/04/03/twir.html "Refactotum") of an open source project