Forgot your password?
typodupeerror
Programming

The Ways Programming Is Hard 278

Posted by Soulskill
from the or-annoying-or-frustrating-or-etc dept.
An anonymous reader writes "Those of us who spend our days sitting in front of a screen trying to make computers do our bidding know how difficult programming can be. But from an outside perspective, there's not much to indicate difficulty. Most of us have heard somebody compare our job to digging ditches, or some other manual labor, meant to contrast easy (sitting around and typing) versus hard (muscle-wearying work). Now, Peter Welch has written an amusing essay to help combat that point of view, titled Programming Sucks. He compares bridge building to a big software project. Here's a small part of it:

'You start by meeting Mary, project leader for a bridge in a major metropolitan area. Mary introduces you to Fred, after you get through the fifteen security checks installed by Dave because Dave had his sweater stolen off his desk once and Never Again. Fred only works with wood, so you ask why he's involved because this bridge is supposed to allow rush-hour traffic full of cars full of mortal humans to cross a 200-foot drop over rapids. Don't worry, says Mary, Fred's going to handle the walkways. What walkways? Well Fred made a good case for walkways and they're going to add to the bridge's appeal. Of course, they'll have to be built without railings, because there's a strict no railings rule enforced by Phil, who's not an engineer. ... Would you drive across this bridge? No. If it somehow got built, everybody involved would be executed. Yet some version of this dynamic wrote every single program you have ever used, banking software, websites, and a ubiquitously used program that was supposed to protect information on the internet but didn't.' Welch goes on to gripe about all the ways in which programming is almost awesome, but ends up being annoying."
This discussion has been archived. No new comments can be posted.

The Ways Programming Is Hard

Comments Filter:
  • by KingOfBLASH (620432) on Wednesday April 30, 2014 @02:59AM (#46875969) Journal

    Well that's not completely true. I'm quite sure an intelligent person could learn how to be a bricklayer if they really wanted to. I'm not quite as sure that an uneducated brick layer could learn to code if they really wanted to.

    Although that's not to say a highly intelligent individual might not decide to become a bricklayer instead of a programmer [wikipedia.org].

    Case in point: how many people who are not in construction go to Home Depot on the weekend as a sort of entertainment. It's interesting to figure out how to build something, and a form of entertainment (and pride) to be able to put something together. How many people can you say that about programming?

  • Re:Perfect example (Score:5, Interesting)

    by Anonymous Coward on Wednesday April 30, 2014 @05:30AM (#46876463)

    The article is very funny, and makes a lot of good points, but it's not really addressing the question. It gives reasons software projects are difficult. Not why programming as such is. The engineering part, if you will.

    The reason programming is difficult is because it's discrete. Whereas most (all?) other engineering is continuous.

    If you try to bend a steel rod, there's going to be a range of strain for which nothing will happen, another where it will flex and recover, another where it will flex permanently, and finally a point where it will fail. This is all contiguous, and you can reduce it to a few numbers that will accurately predict the behavior of identical rods. Depending on the expected load, and the desired behavior, you can then pick the right rod, that will behave the way you need it to, with a good and predictable safety margin, because you know when what will happen.

    Software, on the other hand, is discrete. That linked list can behave correctly as you add elements, then remove them, all good, then fail when you remove the last one and it (should) become empty again. There's no hint of that unless you test the very specific condition. There is no failure progression. There is no concept of safety margin.

    That's why software regularly blows up. That's why it's difficult to make it not blow up. It's always on the edge.

PLUG IT IN!!!

Working...