- *Current in **bold**. Completed in ~~strikethrough~~.*
- ## Learn a variety of programming languages
- * Write a program in Python
- * Write a program in C
- * ~~Write a program in AS3~~
- * ~~Write a program in JavaScript~~
- * Write a program in Ruby
- ## 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
- ## 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") **(2)**
- * ~~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
- * Read and understand [TAOCP](http://en.wikipedia.org/wiki/The_Art_of_Computer_Programming "The Art of Computer Programming - Wikipedia")
- ## 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
- ##Learn about algorithms:
- * Determine the asymptotic running time of an algorithm
- * Implement basic Sorting Algorithms:
- Bubblesort, Heapsort, Quicksort... Understand their tradeoffs.
- * Implement basic Graph algorithms: Prim, Kruskal, Dijkstra, A*...
- * Create and implement a dynamic programm
- * Proof a problem NP Complete
- * Understand the halting problem
- ##Learn tools:
- * ~~Try a different SCMs for a projects (Git/Mercurial...)~~
- * ~~Try a different IDEs for a projects~~
- * ~~Set up a project with a Build Tool (Make, Rake, SBT, Ant, Maven...)~~
- * ~~Set up a project on a CI server~~