Skip to content

Instantly share code, notes, and snippets.

@GrooveStomp
Forked from jasonrudolph/about.md
Last active August 29, 2015 14:07
Show Gist options
  • Save GrooveStomp/42e766c877c1c5f85a8d to your computer and use it in GitHub Desktop.
Save GrooveStomp/42e766c877c1c5f85a8d to your computer and use it in GitHub Desktop.

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
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment