Examples of paralyzing choice in programming systems
As people like 37Signals have pointed out, excessive choice can be quite paralyzing. Here are a few I’ve come across in the last few years.
- Version control systems. Choosing to be centralized or distributed narrows things down a lot, and if you go centralized you’re probably settling on Subversion or a good commercial one like Perforce. But what happens when you hear about distributed version control systems: Monotone? GNU arch? Git? Mercurial? Darcs? Bazaar? What are the benefits and tradeoffs of each? Does it really matter?
- Scheme implementations. Do you want to choose PLT Scheme, which has good libraries and a good modular code-sharing system à la Python eggs and Ruby gems? How about SISC, which claims to be efficient, have excellent R5RS support, and runs on the JVM? How about scsh/Scheme48, which some awesome hackers use and has neat Unix systems programming stuff? And that’s just some of the more popular ones.
- Functional programming languages for mind-expanding after-work/after-school tinkering. Haskell? Standard ML? Scala? F#? OCaml? Lisp? Scheme? Erlang? Oz? Prolog? You don’t have time to master more than one or two of them. Blub programmers have it so much easier: all the languages they come across are so devoid of innovation that you can pick them up in a few days to a week and the vast majority of the learning curve is in over-engineered frameworks and toolchains. No brain, no pain.