Home

Becoming a better programmer

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.

ConceptLanguage to learn it in
Concurrency (Agents, STM, Futures)Clojure
Multimethods/pattern matchingClojure
Functional, HOF, MapReduceClojure
MonadsClojure
MacrosClojure
MetadataClojure
Fast, CompiledClojure, Java
Declarative, Dataflow, Cell, Reactive, EventClojure (Dataflow contrib, newman.cells)
Query, Rule, Logic, ConstraintClojure (Datalog contrib)
StatsClojure (Incanter)
MathClojure (Clojuratica/Mathematica)
DynamicClojure
StaticJava
OOJava
OO PatternsJava
PrototypeJavascript
Web ClientJavascript
Shell scriptingBash
Stack, ConcatenativeFactor
High Performance ComputingClojure (Colt, Hadoop, Mahout)
ContinuationsJavascript
CoroutinesJavascript
Closures (anon func that capture environment variables)Clojure
Message PassingClojure (dataflow)
AspectJava
IntegrationClojure/Java (Maven)
QuickCheck, Test Anything ProtocolClojure (ClojureCheck)
FunctorsClojure
Variants (i.e. Algebraic Data Types)Clojure
Generics (Parametric polymorphism)Clojure
Array programming languageJ
RelationalSQL, 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.
blog comments powered by Disqus