*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 PHP 5 * 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 netbeans exclusively for a month * Use Visual Studio exclusively for a month * Use XCode exclusively for a month Learn a variety of programming paradigms: * 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 * Write an application in a concatenative language (e.g. Joy) * Write an application in a strict design-by-contract language (e.g. Eiffel) Get comfortable in multiple operating systems: * ~~Use OSX exclusively for development for a month~~ * Use Linux exclusively for development for a month * Use Windows exclusively for development for a month Experience the ins and outs of programming in multiple fields: * ~~Write a nontrivial web app~~ * Write a nontrivial desktop app * Write a nontrivial mobile app * **Write a nontrivial game** * Write an embedded app * Write a realtime system Enhance my 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 * Write an operating system Enlighten myself 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 * 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~~ * ~~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 on open source project Learn by teaching others: * Present a lightning talk * ~~Present at a local user group~~ * Present at a conference * Deliver a training course * Publish a tutorial * Publish a constructive code review of an open source project * Write a programming book