**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, learning Erlang. * _Write an application in an object-oriented language_, PHP (web app), C# (Unity/Mono game dev), Java (Ugh!) * _Write an application in a prototype-based language_, JavaScript. I hate prototypal inheritance. :\ * Write an application in a logic programming language * Write an application using the Actor model, learning Erlang. * Write an application in Forth **Experience the ins and outs of programming for different platforms:** * _Write a nontrivial web app_, PHP. Written lots. * 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 * Attend a [code retreat](http://coderetreat.com/ "Code Retreat with Corey Haines") * 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_, founder of vancouver PHP group (years ago). Gave talks. * Present at a conference * Deliver a training course * _Publish a tutorial_, Published for Zend. Long time ago. :) * Publish a constructive code review of an open source project * Write a programming book