Hacker News new | past | comments | ask | show | jobs | submit login
Computer programming is somewhat like getting an imbecile to play bridge (johndcook.com)
44 points by B-Con on Jan 24, 2013 | hide | past | favorite | 19 comments



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.


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.)


"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


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


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


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

Get a dozen, not a dozen more.


  cart.addJugs(1);
  if (haveEggs)
    cart.addJugs(12);
Now the cart has 13 jugs.


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"


This is why we don't program in English.


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


"get a dozen" implies "jugs += 12"


A rather unpleasant and inaccurate metaphor.


s/imbecile/idiot savant


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

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


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.


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.)


Languages make no difference at all.

'All invoices need a corresponding purchase order number'

except when the CEO asks for one because they need to submit an invoice in the next 10 minutes or it won't get paid for 2 months... what do you mean you're a computer and don't understand that basic request from your CEO?


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


>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.




Consider applying for YC's Fall 2025 batch! Applications are open till Aug 4

Guidelines | FAQ | Lists | API | Security | Legal | Apply to YC | Contact

Search: