How programming is different from everything else

A story about a rather computer-challenged person was posted on the TheDailyWTF forums and that story found itself of prc. I read the story, found it funny like everybody else and I went to read the comments on reddit and one caught my eye:

“My brother in law apparently made several unsuccessful attempt to “learn programming” by opening up exes in Notepad.”

Hey, only real programmers write binaries with notepad. I’d be in awe.

I could be wrong, I haven’t asked any non-programmer for their point of view (because I’m anti-social and people hate me), but I think that this thought process of opening an executable file in a text editor to see how it works and fiddle with it makes sense.

Programming is a discipline where the thing you manipulate is completely different from the end result. A painter’s source code editor is his canvas and his executable program is the canvas, albeit in a different state. It’s the same with pottery, cooking, writing, knitting, etc. What you manipulate is your end result.

In the world of programming, you write words to describe how a process works, you pass those words into a machine (compiler, interpreter) and this machine creates another machine that does what the words you wrote told it too. I’m hard pressed to find a non-computer field where you have such a process. I have never heard of a cook putting his lasagna recipe (the actual page with the ingredients and manipulations) into the oven and the oven magically transforms it into his meal.

Us computer folks often sigh when people ask why their computer is slow to boot even though they have high speed Internet, but it seems to me that computing has no point of reference. You cannot say “oh this works kind of like this.” The entire experience is different from anything people have ever experienced.

9 Responses to “How programming is different from everything else”

  1. John Cowan Says:

    Knitting isn’t programming, no. But inventing and recording knitting patterns, *that* is programming. And a knitting pattern, unlike a sewing pattern, is code: it is not isomorphic to the result, but an algorithm that abstractly specifies the process required to reach the result. The “computer” in this case is the actual knitter.

    Look at one of the PDFs at http://www.knittingpatterncentral.com/directory/bags_totes_purses.php , to choose a knitting-pattern page at random.

  2. LninYo Says:

    Perhaps “programming” needs to move in the direction where it is more like the rest of the world? as opposed to celebrating this contrived “difference” and become even more weird as time passes?

    Current programming is an evolved form of cable pushing and toggle button switching which was happening in the days of Eniac. We have come a long way on the hardware side (perhaps) but the software side is still stuck in 1945 ! We don’t have actual mess of cables which glorified operators (who like to call themselves “programmers” these days) like to move around physically, but they do the equivalent on an editor, and that is exactly what we’re doing.

    It should be just as easy to open up “the program” and make changes to it. Also, I think the DWTF article is a fabrication. But that is just me.

  3. LninYo Says:

    1. ENIAC
    2. “… just as easy to open up “the program” as this person’s brother in law did…”

  4. Pavel Says:

    Well, if you are using an interpreted language like Python, then you actually can open the executable in an editor, fiddle with stuff, save it and expect it to work.

    And it is like many other things. When you cook, there is no obvious connection between stuff you put in the pot and the sense of taste and filled stomach you get as a result. Same goes for making medicine, or making a car.

  5. Michael Campbell Says:

    Lose the full justification. It looks awful; even ……… your ……… title……….. suffers………………. because……………… of………….. it.

  6. Jay Says:

    “Perhaps “programming” needs to move in the direction where it is more like the rest of the world? as opposed to celebrating this contrived “difference” and become even more weird as time passes?”

    “Current programming is an evolved form of cable pushing and toggle button switching which was happening in the days of Eniac. We have come a long way on the hardware side (perhaps) but the software side is still stuck in 1945 ! We don’t have actual mess of cables which glorified operators (who like to call themselves “programmers” these days) like to move around physically, but they do the equivalent on an editor, and that is exactly what we’re doing.”

    Don’t you think the fact that programming hasn’t changed in over 50 years is pretty good evidence that it will likely not change into the foreseeable future? It’s not that people haven’t tried. It’s that they’ve tried and have never succeeded. People have created all sorts of thing to try and make programming a drag ‘n drop process. This is called the inner-platform effect (http://en.wikipedia.org/wiki/Inner-Platform_Effect).

    Programming is hard. Tools can mitigate the accidental complexity but can never remove the inherent complexity. Programming is non-human. Humans operate in a very fuzzy way. We change, evolve, learn things over time. We’re heavily based on pattern matching. We make mistakes and we forget things. We do things computers are good at.

    Give a person some input. Say, add these numbers up. The output is the summation. What is the probability of 1,000 people all getting the same answer. What if they are to add the numbers up 1,000 times each. It’s not a survival skill and was never selected for.

    Telling a human how to do something and telling a computer how to do something are two totally different things. The first is an innate human ability. It is required for us to survive and was naturally selected for. The second, to be able to explicitly spell out how to do something in minute detail, was not. Humans are able to infer things, ask questions when you don’t explain something correctly. We operate on heuristics and patterns. Computers operate on absolute logic.

    So, the hard part of programming is not the syntax or typing things out. The hard, non-human part is dissecting a problem that can be reproducible over and over again without human assumptions or intervention.

  7. gnuvince Says:

    Michael: I am not paying for CSS control, so you’ll have to deal with it. Install Firebug or Web Developer and disable it if you use Firefox.

  8. LninYo Says:

    @Jay:

    I think you just re-iterated and elaborated upon my thesis.

    Some thoughts:

    1. Just because something hasn’t changed in the past doesn’t mean one should give up. Physics didn’t change for a thousand years, if Einstein and Newton had followed your advice we’d still be riding in horse buggies.

    2. Yes, it is hard, and it shouldn’t be, and it is nothing to be proud of. Stop explaining and excusing away YOUR (rhetorically speaking) inadequacies as a programmer as some kind of immutable physical law of the universe. It makes one sound like an old fart COBOL fogey.

    3. Re: “programming is Non-human” This is ABSURD! out of all living beings, only Humans are the ones who have just managed to figure out principles of general purpose programming of digital/analog computers and you are audacious enough to posit that it is Non-Human? I would posit that it is Uniquely Human.

    4. Humans are not computers in the same sense that internal combustion engines are not Horses. However, every living being is an information processing system which keeps entropy at bay by processing information. This starts at the single cell level. There is more computation going on inside a cat’s brain than all the computers on all the inter-tubes combined. We can leave humans out of it for now.

    The point isn’t just that programming is “hard” as it stands today, but that it can be and must be made much easier — and no, it’s not some advocacy for “drag and drop” techniques . What stands in the way is stubborn ignorance of self-appointed a-la carte “experts”, and then just plain ignorance.

    Ultimately, “we” as you describe us, are computers in the sense that we are information processing systems from the single cell up. So, if billions of years of chance encounters can create a magnificent system like a mouse or a cat or a human, then surely, we can at least study the information processing mechanisms and create something LIKE what we see in biological system of information processing.

    The way computers are designed right now, a nano-second in the history of anything, operate on primitive and crude “logic principles”. And the situation won’t change until people stop making excuses for status quo and start taking some psychological risks with information processing.

    The problem is not a technical one, it is a psychological one.

  9. Jay Says:

    “Re: “programming is Non-human” This is ABSURD! out of all living beings, only Humans are the ones who have just managed to figure out principles of general purpose programming of digital/analog computers and you are audacious enough to posit that it is Non-Human? I would posit that it is Uniquely Human.”

    By non-human I mean programming is not an innate skill. Most people do not seem to have the ability to program. And the majority that do aren’t very good at it.

    I absolutely cannot do physics or higher level math. This is the same thing. There seems to be a predisposition to certain things like art, math, science, etc. Do you think if you just tried hard enough you could write a grand symphony?

    All humans are, however, equipped with those things that contributed to their survival. Seeing, hearing, matching patterns, recognizing faces, color, etc. Every human can do these things. It is what we are born into the world to be able to do.

    Just like nobody comes out of the womb able to read. It is a learned skill and some people do it better than others. Programming is no different. Some are better than others and that will never change.

    Sure, more software may be “programmable” going into the future. People do that all the time in Excel. Granted, if they’re able to get their head around an if clause in Excel, they’re probably better than the general population. But that doesn’t make them a programmer. No more than me playing chopsticks on the piano makes me a pianist. Just like I would fall down when I got to something more complex, my previous fictional Excel user would most likely not be able to understand things like inheritance, composition, or meta programming.

    So no, programming is not a human skill. It is merely a product of our ability to create ideas and things we were not born with innately. Science, art, music, and other things are also products. Nobody is born with these. This process is what is uniquely human. What it has created is secondary.

Leave a Reply