Learn a variety of programming languages
Write a program in Python
Write a program in C
Write a program in Java (Android)
Write a program in JavaScript (CoffeeScript, Node.js)
Write a program in Objective-C
Write a program in Erlang
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:
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 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
##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 CI server