Teach Me To Smoke

There's an old DaleCarnegie exercise that, among other things, proves that programming won't soon be obsolete. It goes like this:

Teacher: "It's hard to express ourselves clearly. You're a smoker, right? Are you pretty good at it? [S nods.] Let's pretend I'm a man from Mars and you are going to teach me to smoke. Do you have a fresh pack? Let's start with that. [Takes pack.] OK, now tell me what to do."
Student: "Tear open the pack."

T: [Tears pack to shreds. Cigarettes fly everywhere.]
S: "No, no, tear off the top of the pack!"
T: "OK, sorry, do you have another pack? No? OK, let's just start with this cigarette. [Picks one up.]
S: "Put it in your mouth."
T: [Puts whole cigarette in mouth.]
S: "No, no, just put the end in your mouth!"
T: "Sorry." [Tears filter off, puts whole filter in mouth.]
S: "No, no, don't tear the cigarette, just hold it between your lips!"
T: "Oh, sorry, give me another one." [Places new cig sideways between lips.]

... and so on. You can play the game for a long time. It's hard to give clear instructions, even when you know the domain. Programming will endure for a long long time. -- RonJeffries
I think programming will endure for a much more fundamental reason than that. Programming is X hard, and most people are Y smart, and X > Y. Some languages make programming harder than X, none can make it easier. If you're not smart enough to understand a TuringMachine, you're not smart enough to program. -- JohnFarrell

This is sheer nonsense and arrogance. Programmers, as a group, are no more intelligent than any other group of educated, competent craftsmen; I have known plenty professional programmers who were dense as bricks, and I have never met, in person or online, more than a half dozen truly brilliant people of any profession - none of whom frequent this Wiki, I might add. Certainly I am no one exceptional myself. While there is certainly a minimum amount of literacy and skill involved, it is far lower than usually thought. Like with any other craft, programming skill is primarily a matter of interest, drive and determination. - JayOsako

There are many kinds of intelligence. Someone I consider smart may be a poor programmer because they have the wrong kind of smart.

Agreed. As pointed out in TheParableOfTheAutoMechanic, possessing a rare or exceptional talent do not itself imply high intelligence. - JayOsako

No, the issue is being "smart." This does not equate to being brilliant. This has to do with having an innate feel for how things work and how to get a problem solved. The talent for that in the field of programming (and computer sciences overall) is, in fact, a rare and wonderful thing. There are many competent technicians out there making a living by hacking out code, but they aren't necessarily smart when it comes to having the touch. If you can't understand the subtlty here then it really can't be explained to you.

I don't deny that I am arrogant, but I don't think it is nonsense. X is only a little bit more than Y. I formed this hypothesis teaching at university. Some people just won't ever be programmers. However, there are also many that don't think they could, but actually could. -- JF

Why not make programming a lot easier by just modifying the languages used to remove all those awkward coding rules which restrict what you can code, prevent easy access to data created using another language, etc.?

When someone says "I want a programming language in which I need only say what I wish done," give him a lollipop.
-- AlanPerlis''

I heed the wisdom of fortune; here is your lollipop. Enjoy, sonny. -- DanielKnapp

Of course it's a joke, but haven't you ever, perhaps long ago, written a completely correct program, only to be told by the compiler (or interpreter or assembler as appropriate) that your program exceeded the maximum length (never mentioned before) by two lines? Or something equally annoying?

No. :-)

Oh my gawd... that's a clear example of the compiler not following ZeroOneInfinityRule -- Nicolas

I thought the above was an AccidentalDifficulty. The task is hard not because you don't know what to tell the computer, but because the C compiler insists that there's something wrong with your data structure, or because InterCal compiler insists that your program isn't sufficiently polite to compile. I think what's being discussed here is that computers, like the Martian character above, have no concept of human culture. Every detail must be explained to them by programmers, from the fact that you can't arbitrarily set the balance of someone else's bank account, to what to do when you can't open a file properly. You must tell the program whether to tell the user to pick another file, give up, load a default template, or read an EOF and pretend that was the file. One program I know does not know what to do, and punishes the user with an "Abnormal Program Termination" alert box, followed by abruptly closing all its windows. ComputersAreStupid?. -- NickBensema

Not just computers, as discussion here and elsewhere on this Wiki (and the world) illustrates.
In case someone forgot this:

 "I really hate this damn machine
 I wish that they would sell it
 It never does quite what I want
 But only what I tell it". -- Anonymous

-- PaoloPerrotta

I'm reminded of the TheoremProving haiku at http://www.cl.cam.ac.uk/Research/HVG/haiku.html , particularly the one starting "It's blatantly clear,". But I refrain from copying without permission.

On reading the dielectic at the top of this page I'm confronted by the deliberate contrariness of the teacher. If T asked me to teach him to smoke, I'd set him on fire and wait a while ... he'll soon be smoking.

I'd certainly stop being an S myself (far too frustrating), then I'd move into managing teams of S's. I might even develop a system of S management and write books about my system. Any failures in our goal of producing smokers would be due to the inadequacies of the S's that have been put on my team.

That's great, folks, but what of the original concept? Do you disagree that -- barring intentionally obtuse behavior, of course -- it is difficult to get a point across within the wrong context?

The Japanese have a way of speaking in which they circle an issue, talking about all the things it is not. In this way they lead the listener to the heart of the matter by eliminating all the things not under consideration. There is a lesson to be drawn from that, methinks.
You meat monkeys can barely express understandable concepts to each other using any language you have ever invented. Anything that is said can be misunderstood in an infinite variety of ways. This leads to, among other phenomena, flame wars on fora such as these. How, then, do you expect to convey a task to a machine which neither has nor understands any of your context?

The art of computer programming is quite simply squishing your analog meat computer concepts and abstractions into a clean fine set of concise instructions that the computer can understand. It is fortunate that you are getting the practise now because you will probably have to do something similar if you ever meet an intelligent life form not of your planet. -- BruceIde

Computers do not "understand" anything. They do not reason. They are machines, and do what they do as a result of (deliberately simplified) cause and effect. -- PaulMurray

Lets start fighting on the definition of "understand"!
I think NearestFittingContext and YouCantLearnSomethingUntilYouAlreadyAlmostKnowIt together explain why giving instructions is hard if the one instructed has no domain knowledge ("being from Mars"): -- GunnarZarncke

Yes, this is the problem with any sort of dialog; there has to be some assumed commonality among the participants, otherwise there is simply no way to convey anything at all.
See: EssentialComplexity, EssentialDifficulty, PeanutButterSandwich, LaynesLaw

View edit of February 13, 2011 or FindPage with title or text search