raganwald
(This is a snapshot of my old weblog. New posts and selected republished essays can be found at raganwald.com.)

Tuesday, October 10, 2006
  What colour is your parachute?


You know the old saying:
A mind is like a parachute: it works better when it's open.
So: what's with the black-and-white sounding statements I make about subjects like people ("no methodology can save a project staffed with under-performers") or local variables ("bad") or even static typing ("useful, but it doesn't prevent errors that endanger my projects")?

My World

I write about my experience, what has worked for me and what I think will continue to work for me. I'm not presenting a unified theory of everything. I know for a fact that my world is different from your world.

Case in point: everything I write is from the perspective of small teams of skilled practitioners. Yes, I know that there are people who try to build big pieces of software with one hundred and eighty programmers. I'm not one of them. Furthermore, I have absolutely no interest in trying to find techniques or tools that "scale" to hundreds of programmers.

I assume you have a modicum of intelligence and an open mind. I assume you will temper my blacks and whites, you will think them over, and you will figure out whether or how they apply to you.

I did some programming in Scheme a long time ago. Then I learned Java. One day I was responsible for writing approximately four hundred classes in a Struts application. I wrote a code generator that wrote the classes for me. The code generator actually worked off of an Excel spreadsheet that some business analyst used for writing business rules.

Java and Scheme are different worlds. But if you squint a little, and tilt your head just so, you might see some common ground.

Bippety Bop, Bang!

When I write something and say "this is a guideline, use it in these situations but eschew it in these other situations, and temper it with this technique," everyone reads it, nods, and forgets about it. No impact. No passion.

When I say "this is bad, and that is good," I get fan mail. I get hate mail. I get flowers at work. I get dog poop in a burning paper bag on my door step. (Well, not enough fan mail, no flowers, and hardly any hate mail. I'm not that good at writing.) But I get one more thing that I can't ignore: the posts incite debate. People argue for and against. With themselves. With me. With each other.
Because "considered harmful" essays are, by their nature, so incendiary, they are counter-productive both in terms of encouraging open and intelligent debate, and in gathering support for the view they promote. In other words, "considered harmful" essays cause more harm than they do good...
"Considered Harmful" Essays Considered Harmful

And to me, that's the point. If you are motivated enough to say, "Reg, your idea is no damned good because of A, B, and C," I think we're making some progress. We're talking. We're thinking for ourselves. We don't have some corporation with a billion dollar marketing budget telling us how to program and what's important in our lives.

Do you really think there are no mutable local variables in my code? Come on. But... don't you think I sincerely try to use alternatives whenever I can do so without crippling the code? Yes, I use alternatives in most cases.

University Politics

Sometimes the debates over these things get heated. This is a problem. I think it happens because people have difficulty understanding and articulating their own values. So I say something about static and dynamic typing, and I get people saying I'm stupid or a poor poor programmer (both possibly true).

What's going on? I think that people have some personal investment in these things. We're a little tribal. We think that because we have stars on our bellies, we're better than those without stars. Then someone says "stars are no dammed good."


What happens? We get hot and bothered, because we think that person was really saying "you and your entire value system are no dammed good." But we can't say that, because we're pretending this is about productivity, and methodology, and scaling to two hundred programmers.

That's a shame, because getting in touch with what's really important to us and shaping our lives around it is so incredibly important. I really wish more people could be like this fellow a few desks away from me who programs in .NET because that's where he thinks the money is.

Flames

I had a manager once. He was my boss's boss. When someone presented him with an idea, he would ask for proof it would work. If you wanted to try anything new, he demanded that it be risk-free. You could spend months getting the kind of data he demanded to prove that you couldn't fail.

Now, I don't think he was a malicious man. I doubt he even knew that he was the organization's number one idea shooter-downer. Too bad.

Anyways, a lot of people do this. If they see something new, they seize upon its flaws at once. They point out the missing bits. "It's just superstition, there's no proof that Ruby is more productive or that smaller programs are less buggy, or that static typing eliminates critical bugs, or, ..."

Well maybe so, but do you really think the people complaining about Cargo Cult Programming are rigorous scientists when they look at their own practices? No, they have a blind spot. The finicky rejection of ideas only applies to other ideas, new ideas.

And especially ideas that question some of the ideas that they already have.

Labels:

 

Comments on “What colour is your parachute?:
In general I agree with you, but I think there are limits to how far this idea stretches. "The controversy sparks insightful conversation" is a classic defense of trolling, and is (in my mind) something akin to a broken window fallacy.

That said, it can work. I doubt that Ruby would have made so much progress towards a faster VM if people didn't constantly harp on that point. Anger and frustration at "stupid" people can be powerful motivators.

The more interesting question, in my mind, is "At what point do we go from "constructive" criticism/debate generation to trolling?" That seems to mostly be a social problem though, and I try to avoid those if at all possible. Just let me write code, let the managers deal with the really messy stuff. ;)
 
I personally think trolling stops where sincerity begins. I only write what I know and believe. There are no straw men here.

That being said, I agree that constructive debate is more valuable than anger and frustration with the stupid points I raise.

I will be happy if I can get people from "you are stupid" to "that idea is stupid", then to "that idea won't work here" and then finally to "if we changed this about ourselves and that about the idea, it would work for us."
 
I think your opening quote really says it all.
"A mind is like a parachute: it works better when it's open."
As a generalization (because other wise I would get the hate mail) most people are closed minded and choose to see only that which is in front of them. They see the world in very black and white terms. It has been my experience that very very very few people see the world in the shades of gray that it actually is. I am unclear if this is because they choose to only see ones and zeros or if it is that way because it makes some peoples life more quiet and controlled. In the end however this black and white thinking leads to what you say - people not thinking 'deeper' and looking for ways to apply the writing and knowledge to their OWN situation rather then lambasting you.
 
One thing I haven't heard anyone bring up is that it's really only the handful of fundamentalists that choose to be totally starred or totally non-starred. Most rational people see languages as tools, and they choose the right tool for the job. Sometimes I'm a sneech with a star, sometimes I'm not. All programming paradigms have trade-offs, we just choose which ones annoy us the least and go with them.
 




<< Home
Reg Braithwaite


Recent Writing
Homoiconic Technical Writing / raganwald.posterous.com

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

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

Beauty
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?

Work
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

Management
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

Notation
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

Opinion
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

Whimsey
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

History
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 /