Skip to content

Instantly share code, notes, and snippets.

@fredgalvao
Forked from blaix/about.md
Created September 21, 2011 03:14
Show Gist options
  • Save fredgalvao/1231139 to your computer and use it in GitHub Desktop.
Save fredgalvao/1231139 to your computer and use it in GitHub Desktop.
Programming Achievements: How to Level Up as a Developer

Programming Achievements: How to Level Up as a Developer

  1. Select a particular experience to pursue.
  2. Pursue that experience to completion. (Achievement unlocked!)
  3. Reflect on that experience. Really soak it in. Maybe a blog post would be in order?
  4. Return to Step 1, this time selecting a new experience.

This gist is a fork of the gist from this blog post.

Current in bold. Completed in strikethrough.

Learn a variety of commonly-used programming languages:

  • Write a program in Ruby
  • Write a program in Python
  • Write a program in C
  • Write a program in C++
  • Write a program in Java
  • Write a program in Groovy
  • Write a program in Objective-C
  • Write a program in C#
  • Write a program in PHP 5
  • Write a program in Perl
  • Write a program in Javascript
  • Write a program in Shell Script

Learn a variety of not commonly-used programming languages:

  • Write a non-trivial program in Brainfuck
  • Write a program in Lua
  • Write a program in Scala
  • Write a program in Clojure
  • Write a program in Groovy++

Learn a variety of frameworks:

  • Write a web application with EJB/JSF
  • Write a web application with Rails
  • Write a web application with Grails
  • Write a web application with Django
  • Write a program with .Net
  • Write a program with OpenGL
  • Write a program with DirectX
  • Write a program with Cocoa

Learn the principles

  • Demonstrate in code with detailed comments on these principles, their benefits and pitfalls

    DRY

    KISS

    Favor Composition over Inheritance

    Law of Demeter

    Single Responsibility

    Fail-fast

    Defensive Programming

    Principle of Good Enough

    Principle of Least Astonishment

    Liskov Substitution

    Garbage in, Garbage out

    Hybrid Coupling

    Open-Closed

Learn a variety of editors/IDEs:

  • Use vim extensively for a month
  • Use TextMate extensively for a month
  • Use emacs extensively for a month
  • Use NetBeans extensively for a month
  • Use Visual Studio extensively for a month
  • Use IntellijIDEA extensively for a month
  • Use Eclipse extensively for a month

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
  • Write an application in a concatenative language (e.g. Joy)
  • Write an application in a strict design-by-contract language (e.g. Eiffel)

Learn more math and statistics

Learn more about AI/ML

  • Read "Clever Algoriths"
  • Read "Collective Intelligence"
  • Read "Genetic Algorithms"
  • Read "Paradigms of AI Programming"
  • Read "AI: A Modern Approach"
  • Write a simple game AI
  • Write an NLP app

Get comfortable in multiple operating systems:

  • Use OSX exclusively for development for a month
  • Use Linux exclusively for development for a month
  • Use Windows exclusively for development for a month

Experience the ins and outs of programming in multiple fields:

  • 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 my 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
  • Write an operating system

Enlighten myself 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 on 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

Read!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment