Becoming a better programmer
Table of Contents
Great videos
Philosophy
Instead of focusing on learning many programming languages in order to become a better programmer, where most of the effort is generally spent learning equivalent function names and class libraries, I favor first identifying the programming concepts that are useful and will make you a better programmer, and then identifying the languages that support those concepts, and selecting a few languages that allow you to explore most of those concepts.
Concepts
Here's my list of important concepts and languages to learn. If you don't like Clojure, no worries, substitute whatever language you prefer.
| Concept | Language to learn it in |
|---|---|
| Concurrency (Agents, STM, Futures) | Clojure |
| Multimethods/pattern matching | Clojure |
| Functional, HOF, MapReduce | Clojure |
| Monads | Clojure |
| Macros | Clojure |
| Metadata | Clojure |
| Fast, Compiled | Clojure, Java |
| Declarative, Dataflow, Cell, Reactive, Event | Clojure (Dataflow contrib, newman.cells) |
| Query, Rule, Logic, Constraint | Clojure (Datalog contrib) |
| Stats | Clojure (Incanter) |
| Math | Clojure (Clojuratica/Mathematica) |
| Dynamic | Clojure |
| Static | Java |
| OO | Java |
| OO Patterns | Java |
| Prototype | Javascript |
| Web Client | Javascript |
| Shell scripting | Bash |
| Stack, Concatenative | Factor |
| High Performance Computing | Clojure (Colt, Hadoop, Mahout) |
| Continuations | Javascript |
| Coroutines | Javascript |
| Closures (anon func that capture environment variables) | Clojure |
| Message Passing | Clojure (dataflow) |
| Aspect | Java |
| Integration | Clojure/Java (Maven) |
| QuickCheck, Test Anything Protocol | Clojure (ClojureCheck) |
| Functors | Clojure |
| Variants (i.e. Algebraic Data Types) | Clojure |
| Generics (Parametric polymorphism) | Clojure |
| Array programming language | J |
| Relational | SQL, Clojureql |
Languages to learn
- Clojure
- Java
- Javascript
- Bash
- SQL
- J
- Factor
Tools
- IDE I think it's good to learn what IDE's have to offer and how to use a good debugger.
- Emacs/VIM
- XML, JSON
- CSS, HTML
- SQL
Rant
Instead of learning the same language with five different syntaxes you'd be better off learning clojure (functional), java (oo), C (procedural, lower-level), j (array), prolog (logic), sql (relational), bash/perl (scripting), factor (stack), math (mathematica), and stats (R, incanter).
Date: 2010-04-22
Contact me by email at my first name at my last name dot com.