A while back, I found this excellent post by my colleague @jasonrudolph. I'm finally going to tackle this because I've got a little bit of non-work time right now. Follow along with my unedited and likely embarrassing approach to learning.
- I will be digging into everything I'm not completely convinced I could explain without fault to a co-worker, colleague, friend, or newbie. Thus, you'll likely see items in the "Digest" lists that make you question if I know anything at all. I'm taking some great advice from @r00k and I'm gonna say "I don't know that" when I only have a rough idea about something. This will no doubt slow my journey but the goal here is to understand as much as possible. I don't want to leave this experience with a bunch of "I sort of know that"-s.
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
- Complete the programming koans for a language that you want to learn
- Attend a code retreat
- Read SICP 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 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