- *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 non-trivial program in Lua
- * Write a non-trivial program in Haskell
- * Write a non-trivial program in Scheme
- 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