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 in Erlang
- 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 multi-platform app
- Write a realtime system
- Write a native application on at least two different operating systems
- Write a 3D graphics application using pixel and vertex shaders
Concurrency, Parallelism and Distributed Programming:
- Write a multi-threaded application with shared mutable state
- Write a multi-threaded application using software transactional memory
- Write a multi-threaded application using mutexes and other locks
- Write an application using a messaging queue
- Write an application using the actor model
- Parallelize a segment of an application
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 compiler
- Write a programming language virtual machine
- Write an emulator
- Write an API
- Write a client for your API
Supporting Software:
- Benchmark a program on multiple, different data sets. (ie., really large, really small, entirely made up of edge cases.)
- Profile an application to find performance bottlenecks
- Report a bug in an external library
- Write readable, usable, accurate documentation for a program
- Write tests for a piece of software where they are lacking
- Write unit tests, functional tests and integration tests for an application
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:
- Use a different SCM for a Project (Git/Mercurial...)
- Use a different IDE for a Project
- Set up a project with a Build Tool (Make, Rake, SBT, Ant, Maven...)
- Set up a CI server