**Learn a variety of [programming paradigms](http://en.wikipedia.org/wiki/Programming_paradigm "Programming paradigm - Wikipedia"):** * [ ] Write a program in assembly language * [ ] Write a program in an imperative 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 a concatenative language * [ ] Write a data definition and data access layer for a complex domain **Learn a variety of not commonly-used programming languages:** * Write a non-trivial program in Brainfuck * **Write a program in Lua** **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 a nontrivial game * [ ] 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\)) * [ ] 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] * [ ] 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 [already read SICP, did some exercises, there are too many of them :p] **Program in the open:** * [x] Contribute to an open source project * [x] Have a patch accepted * [ ] Earn commit rights on a significant open source project * [x] Publish an open source project * [ ] Perform a [Refactotum](http://thinkrelevance.com/blog/2007/04/03/twir.html "Refactotum") of an open source project **Learn by teaching others:** * [x] Present a lightning talk * [x] Present at a local user group * [x] Present at a conference * [ ] Deliver a training course * [x] Publish a tutorial * [-] Publish a constructive code review of an open source project * [ ] Write a programming book