**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 - [ ] 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 an 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