things that I've added in bold
Learn a variety of programming paradigms:
Write a program in assembly language
- Write a program in an imperative 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 a language supporting the Actor model
- Write an application in a concatenative language
- Write an application in a array-oriented language
- Write a data definition and data access layer for a complex domain
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 a nontrivial game
- 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 an interpreted programming language
- Write a compiled programming language
- Write a logic-based programming language
- Write an operating system kernel
- Write a text editor
- Write a game engine
Get your hands dirty with hardware:
- Write some code for a single-board computing system
- Write a CPU emulator
- Target that same CPU on a FPGA
- Build that same CPU from discrete parts
- Build a small machine around your CPU
- Write a program for your machine
- Build a robot
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
- Contribute to a standard
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