Monday, August 28, 2006
  Causality? Or Correlation?
There's an interesting thread on Ward's Wiki: Could Extreme Programming Have Arisen Without SmallTalk? (for those who didn't know this, the earliest use of Extreme Programming was on a commercial SmallTalk project.)

Looking over the discusion, I notice that is heavily weighted towards arguing cause-and-effect. The abridged version is: SmallTalk has these properties, which lead you to these practices, which are codified as XP. The implication is that if everyone had been using SmallTalk (perhaps because it had "won the war with VB"), XP would have been independently discovered/invented dozens or hundreds of times.

Cascade, originally uploaded by raganwald.

I am unconvinced. Instead, I suggest that both SmallTalk and XP are common effects of a hidden variable. They are correlated.

The kind of people that chose SmallTalk for an enterprise application at a time when OOP was considered an unproven language paradigm, and at a time when running "serious" applications on a virtual machine was considered "unprofessional," are the kind of people that will discover or invent new ways to do things.

Paul Graham said similar thing in his Python Paradox essay: if a company chooses to write its software in a comparatively esoteric language, they'll be able to hire better programmers, because they'll attract only those who cared enough to learn it.

What I like about this quote is that it says nothing about whether the "esoteric language" is more productive. It simply says something about the kind of person who learns an esoteric language. And likewise, you can infer something about the kind of project that is implemented in a comparatively esoteric language.

I conclude that the relationship between SmallTalk and XP is one of correlation, not causality. In my opinion, radically different practices like XP are most likely to be discovered/invented by people who are willing to bet on radically different tools like (at the time) SmallTalk.

Comments on “Causality? Or Correlation?:
"esoteric langauge" should be "esoteric language", I think.
language it is, thanks!!

<< Home
Reg Braithwaite

Recent Writing
Homoiconic Technical Writing / raganwald.posterous.com

What I‘ve Learned From Failure / Kestrels, Quirky Birds, and Hopeless Egocentricity

rewrite_rails / andand / unfold.rb / string_to_proc.rb / dsl_and_let.rb / comprehension.rb / lazy_lists.rb

IS-STRICTLY-EQUIVALENT-TO-A / Spaghetti-Western Coding / Golf is a good program spoiled / Programming conventions as signals / Not all functions should be object methods

The Not So Big Software Design / Writing programs for people to read / Why Why Functional Programming Matters Matters / But Y would I want to do a thing like this?

The single most important thing you must do to improve your programming career / The Naïve Approach to Hiring People / No Disrespect / Take control of your interview / Three tips for getting a job through a recruiter / My favourite interview question

Exception Handling in Software Development / What if powerful languages and idioms only work for small teams? / Bricks / Which theory fits the evidence? / Still failing, still learning / What I’ve learned from failure

The unary ampersand in Ruby / (1..100).inject(&:+) / The challenge of teaching yourself a programming language / The significance of the meta-circular interpreter / Block-Structured Javascript / Haskell, Ruby and Infinity / Closures and Higher-Order Functions

Why Apple is more expensive than Amazon / Why we are the biggest obstacles to our own growth / Is software the documentation of business process mistakes? / We have lost control of the apparatus / What I’ve Learned From Sales I, II, III

The Narcissism of Small Code Differences / Billy Martin’s Technique for Managing his Manager / Three stories about The Tao / Programming Language Stories / Why You Need a Degree to Work For BigCo

06/04 / 07/04 / 08/04 / 09/04 / 10/04 / 11/04 / 12/04 / 01/05 / 02/05 / 03/05 / 04/05 / 06/05 / 07/05 / 08/05 / 09/05 / 10/05 / 11/05 / 01/06 / 02/06 / 03/06 / 04/06 / 05/06 / 06/06 / 07/06 / 08/06 / 09/06 / 10/06 / 11/06 / 12/06 / 01/07 / 02/07 / 03/07 / 04/07 / 05/07 / 06/07 / 07/07 / 08/07 / 09/07 / 10/07 / 11/07 / 12/07 / 01/08 / 02/08 / 03/08 / 04/08 / 05/08 / 06/08 / 07/08 /