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 using template metaprogramming
- Write an application in a strict design-by-contract language (e.g. D or Eiffel)
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
- Write an application for massively parallel architecture (e.g. CUDA)
Learn a variety of frameworks:
- Write a program with .Net
- Write a program with OpenGL
- Write a program with DirectX
- Write a program with Cocoa
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 file-system
- Write a B-tree database
- Wrap an existing library to provide a better (more pleasant) user experience
- Write a library
- Write an application or framework that provides a plugin model
- Write a testing framework
- Write a programming language
- Write a distributed system
- Write an operating system
- Learn Java in and out JLS7 notes
Enlighten yourself with koans, katas, and the wisdom of ages:
Go through:
By going through I mean reading, completing all the examples and exercises at minimum as well as at least attempting to provide proof of the presented theorems.
Read and review great papers from the field of Computer Science:
Read and review papers about Google technologies:
Read and review articles:
Read and reflect on:
Program in the open:
- Contribute to an open source project
- ✔ Have a patch accepted guava, node-covershot, socketstream
- 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