
Computer programming is somewhat like getting an imbecile to play bridge - B-Con
http://www.johndcook.com/blog/2013/01/24/teaching-an-imbecile-to-play-bridge/
======
mtrimpe
I was once talking with a professional negotiator (and a great story-teller)
and when trying to explain what was so hard about programming, I said that it
was like getting a nearly unlimited amount of incredibly stupid people to work
together to do exactly what you need.

He then told me the story of his brother with Down syndrome who was once
weaving a carpet and who happened to make two black spots right in the middle
of the big white center of the carpet. When asked why he made that mistake the
brother proudly proclaimed that it wasn't a mistake at all, ran to his pattern
book and showed the pattern.

It was perforated on those spots.

------
tikhonj
Ah something I have personal experience with: I was taught bridge in fourth
grade. I'm sure my teacher then would make a great programmer :P.

That said, I'm not sure I would use this analogy myself. "Imbecile" evokes the
image of somebody either making bad decisions or not cooperating with the
teacher. The computer does neither--in essence it makes _no_ decisions and
cooperates _too much_. After all, the problem with the computer is not that it
does something you didn't tell it to or something you told it not to but that
it does _exactly_ what you told it to do.

Do you know how some people sometimes act passive-aggressively and take
everything you say completely literally? It's annoying. That's what
programming is like.(Except, of course, I usually don't find programming
annoying.)

~~~
bentcorner
"Go the store and pick up a jug of milk. If they have eggs, get a dozen."

 _Programmer returns home with 13 jugs of milk_

~~~
groby_b
Seriously? An ancient programming joke, with a gratuitous off-by-one error?

~~~
chimeracoder
It's not gratuitous. One jug + one dozen = 13 jugs.

~~~
mbatanian
jugs = 1; if (have eggs) { jugs = 12; }

Get a dozen, not a dozen more.

~~~
T-hawk

      cart.addJugs(1);
      if (haveEggs)
        cart.addJugs(12);
    

Now the cart has 13 jugs.

~~~
wlesieutre
I'd say that "get a dozen" implies "jugs = 12" and not "jugs += 12". If you
wanted to get a dozen more, you'd say "get a dozen more"

~~~
pash
This is why we don't program in English.

~~~
fnordfnordfnord
And why it is so hard to write a good specification.

------
quasque
A rather unpleasant and inaccurate metaphor.

~~~
angersock
s/imbecile/idiot savant

------
bcbrown
Has anyone read the book the quote came from, "Data and Reality"? It looks
intriguing.

<http://www.amazon.com/gp/product/1935504215/>

------
islon
That's why higher level languages are so important, as computers always get
faster (but not smarter) it's up to languages and libraries be smarter. Anyway
the old debate 'fast languages' vs 'high level languages' will never die.

~~~
bunderbunder
Evetually it will, around about the point that either (a) speed becomes the
norm in high-level languages or (b) we're forced to concede that the two are
allies: Higher-level languages are implemented using lower-level languages,
and the main thing you do with lower-level languages is implement higher-level
languages.

(For the latter option, especially if you use the word language somewhat
loosely - e.g., a TCP stack isn't a programming language, but TCP is a
somewhat higher-level abstraction, and it's best implemented using lower-level
languages.)

------
richeyrw
If someone is curating a list of brilliant CS quotes, this should be added...

------
youngerdryas
>It can be done, provided you know how to exploit the imbecile’s limited
talents, and are willing to have enormous patience with his inability to make
the the most trivial common sense deductions on his own.

Well this leaves out one critical piece that is a big draw to programming.
Unlike the imbecile, the computer will do exactly what you tell it every time.

