The Ways Programming Is Hard
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."
'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."
he's right it does suck
Of why programmers can't be engineers. It's even worse in open source where people really can get away with doing whatever the fuck they want.
Only complete idiots/tools think this way about any profession. Brick laying looks easy, but I wouldn't trust someone who's never picked up a trowel in their life before to put up a brick wall. Anyone 'outside the profession' should only be concerned that the code works, is maintainable, and is to spec, along with passing a security audit.
Wimp working for an excessively-large company with rules that might allow "casual Fridays" with strict dress codes. He's whining about corporate culture, not programming. The "Neo" problem that first gave you the hint that he wasn't an actual hacker, just some script kiddy in a minimum-wage cubicle farm.
problem of "other peoples' code" is an actual problem?
Because if so, I think you may be the script kiddy in a minimum-wage cubicle farm.
STOP . AMERICA . NOW
It's a good article, and all too true. Software is a house of cards at best, with your boss shaking the table, the hackers throwing ping-pong balls at the house, and the NSA coming down the hallway with a baseball bat.
I do not fail; I succeed at finding out what does not work.
Compare this to digging a ditch, which is hard labor, but provides almost instant gratification (you can always look at how much of the ditch you've already dug), and you're not likely to fail completely (unless you're trying to dig in solid rock).
Every programmer starts out writing some perfect little snowflake like this. Then they're told on Friday they need to have six hundred snowflakes written by Tuesday, so they cheat a bit here and there and maybe copy a few snowflakes and try to stick them together or they have to ask a coworker to work on one who melts it and then all the programmers' snowflakes get dumped together in some inscrutable shape and somebody leans a Picasso on it because nobody wants to see the cat urine soaking into all your broken snowflakes melting in the light of day.
If you start cutting corners, you're going to end up with a mess. If you're a good programmer, you know how to write solid code even under time constraints. If you're having trouble with it, then you should probably look into the YAGNI principle, or get better at estimating how long your tasks will take. Because those are the two things that seem to afflict programmers who are chronically behind schedule.
Don't write bad code though, because you'll need to maintain it.
"First they came for the slanderers and i said nothing."
The author has a great sense of humor, and ripostes some of programmings possible pitfalls into clever and hilarious absurdities. However, I strongly refute that this article is a remotely accurate portrayal of programming, and I hope it is not taken as such by prospective coders on the fence. In my view, programming is possibly one of the few havens of relative sanity available (although with wood-working and pure mathematics probably have it beat). The true insanity is HUMANS TRYING TO COLLABORATE WITH OTHER HUMANS. If in doubt, please re-read the article with that in mind, and I think you'll find all the admittedly hilarious conceptions boil down to that issue, and that issue is pervasive in nearly any job you could name. Programming is an oasis from insanity, not ground zero.
What I struggle with is translating badly worded/badly thought through/incomplete business requirements into program logic. All too often something which seems straight forward to a business person is a can of worms when it comes to implementing it.
I want a list of atrocities done in your name - Recoil
Programmer insanity is why I read BOFH !!! I chuckle at some of the Simon and PFY exploits. Other are starting to sound like good ideas.
Treat your systems and network guys like (possibly evil) minor gods. Ply them with drink and goodies
Just answer their questions honestly and try not to annoy them during non scheduled hours or their lunch (or post lunch nap) and you might survive the project.
and remember nobody uses tapes anymore, but tape cabinets are priceless.
Why does every description and story I've ever heard related to programming use such excessive hyperbole? Where are all the honest, adjective-free post-mortems of projects that actually go into technical detail with code examples of how they managed to tackle difficult problems and what sorts of areas they had to compromise and weren't happy with but couldn't come up with a solution?
Why is everybody an idiot that didn't write it exactly like you would have (why didn't you just do it if you're going to be so picky?) -- especially when the compiler ends up optimizing it to be the same thing anyway?
I've been programming since I was six years old and I'm getting really sick of the human element of working with overly emphatic, emotional programmers...
Writing a piece on how programming sucks, in a typeface that hurts my eyes to read.
Portable toilet cleaner ...
Sewers cleaner
Animal masturbator
Janitor at a porno theater
Programming is bonanza
(Wait, did I just hear you denying that the general) problem of "other peoples' code" is an actual problem?
Because if so, I think you may be the script kiddy in a minimum-wage cubicle farm.
Bonus points for realizing that your own code from three months ago is also "other peoples' code".
The best part is when you find out that the "other guy" who put in the stupid code is you from months or years ago. You start to get incensed and rant about what idiot would write such awful code, check the commit logs, then facepalm as you realize it was you.
I occasionally wonder if that kind of thing would happen less frequently if our profession wasn't so quick to fire the guys whose gems turned black.
"They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety."
When people work in a group as a team this inevitably happens and that's all right. Building a perfect software that satisfies everyone is a hard NP problem. What's the point of being perfectionist if that 10% you wish to polish it going to consume 90% of your time and money.
Fred only works with wood?
Perhaps he should consult a physician.
The comparison that has been coming to my head, regardless of whether I was self- or otherwise- employed is: coders are the plumbers of the Internet age. Furthermore, we are the electricians, the elevator drivers, the janitors, the security guards, the dealers, the cops, the architects. All generalized comparisons apply, because the Net is a representation of the world. Slightly skewed, a representation nonetheless.
I am proud of the being an Internet plumber and cheers to others who spend their days trying make it work smoothly.
From what I've heard, actual construction engineering is typically not that far removed from the description in the article.
Sure, the designs in construction engineering are way better proven and tested than the designs in software engineering, but the building process is in many ways still a trial and error affair where things can and usually will go wrong. Then the post mortems sometimes come with literal post mortems attached to them. How well do you think those engineers sleep at night?
One nice thing about computers is that they usually have nowhere near enough mass to crush a person to death.
a} Clueless psychopathic suits in management, who make impossible schedule demands, and have no programming background themselves.
b} The use of popular, but garbage programming languages. C++, PHP and Perl are probably the main three culprits here. Dishonourable mention also goes to XML, JavaScript, and the XHTML Document Object Model. I have never encountered a "Web application," yet, which wasn't a disorganised, bloated, CPU hogging abomination.
For the last two months I've been economically forced to use a dual core 1.5 ghz laptop with 2 gb of RAM, and it can only barely keep up with the inefficient, JavaScript-infested obscenity that the Web has become. Virtually none of said JavaScript ever provides truly valuable functionality, either; most of it is just trackers of various kinds.
It's also purely due to Capitalism; all of it. Why have Red Hat had Lennart try and force systemd, GNOME, and the rest of their corporate crapware on Linux users? Their desire for a corporate monopoly, that's why.
What caused the UNIX wars? Corporations wanting to add their own non-standard extensions, to ensure their coveted Unique Selling Positions.
We must get rid of the suits.
Newsflash: We're living in the first world. If you want different problems, you have to move.
Not going to? Gee, wonder why. Could it be that you prefer having first world problems?
We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
I'm glad I'm not the only one who hates that patronising phrase. You're not dying of starvation or disease so you should be happy all the time.
Thinking is hard, but there is a kind of thinking that is harder.
Rough order of thing (easiest to hardest).
1) lounging around doing nothing (easiest)
2) doing what you are told to do without physical exertion (menial white-collar work)
3) doing what you are told to do with physical exertion (menial blue-collar work)
4) independent thinking about things not involving organising other humans (programming, painting, composing music, solving systems of equations)
5) independent thinking about things involving organising other humans (managing programers)
6) independent thinking about things involving organising other humans who are in turn doing independent thinking involving organising other humans (hardest)
I'm glad he's not bitter about that shit!
also reminds me that people always want to assert how important, difficult and taxing their profession and job is, regardless of what it is they do.
I'm an egotistical programmer who can't conceive of anyone position but my own. They should pay me more.
</rant> tag was not correctly open... I got down reading the whole article, but that thing crashed me!
It has nothing to do with programming, but everything to do with POLITICS.
Programming is hard because most people doing the programming have not learned mathematics.
Mathematics is hard because of the necessary attention to detail. Most people are not good at mathematics because the find it boring. They don't like to focus really HARD on details of what they are doing.
The rest of the problem is caused by "point and click" environments that do not allow access to the necessary details, and the side effects of what they are doing.
The difference between building a bridge and building software is that an engineering company will build a model of the bridge, the client will look at it (and possibly several other models), say "Yes, that's what they want. How long?" The engineering company will say "2 years" and the client will probably say "OK".
In software, you build a model showing the menus, dialogs and screens, present it to the client, who then says "That's right, but it needs just this one more thing." We can have it by next Thursday, right?
Because a model bridge is patently not the real thing, but model software is virtually identical to the only parts of the system that most people will ever see.
This has nothing to do with programming but rather requirements and design. While I'm a "developer" and I do "devOps", there are plenty of "programmers" who never want to get involved in overall system design and shouldn't get involved because they want and should be doing what they do best... programming. The example given is a problem with customer requirements and management. Simple.
And can I get the header in cornflower blue?
"If any question why we died, Tell them because our fathers lied."
If you had any knowledge of the world at large, you would know that second and third world countries also have computer programmers who have to deal with crappy programming.
Full world ignorance....
Yes, and wherever that experience is lacking because the progress and rate of change are related by a differential equation, what type of engineer manufactures the expanding putty? The Roman engineer or the von Neumann engineer?
Young engineers heap success. Old engineers bleed failure.
I became a programming loving code and loving make computer dance. After 25 years I left I this thoroughly insane industry run by lunatic doomed to repeat crazy behaviors that the economy reward. I believe i suffer PTSD from those, of a sort. I wrote rather live under a bridge that program for a "market-drived" company again.
That was a pretty good rant, but if you want a true description of the mind-melting Lovecraftian horror that is programming (from a Microsoft distributed systems engineer, no less), there is no better read than this article.
I don't care if it's 90,000 hectares. That lake was not my doing.
I just don't get this bridge thing... I know cars drive on them but how does that relate to anything!?
Or as so nicely put in The Codeless Code:
http://thecodelesscode.com/cas...
Bad code keeps many, many, many people fully employed at good hourly rates. So be thankful for it.
slashdotting is apparently still easy :)
This is part of why I got out of programming. I saw this coming a long, long time ago. I loved programming all alone. Creating clean, neat, tidy code with excellent, efficient data usage and easy to work with user interfaces that followed good standards and human interface dynamics.
But that has all changed. Coding has become like working with zoning regulators and legislators who know nothing about the rules or environments they deal with.
Now I just code for myself. I still get the enjoyment of it and don't have the hassle or stress.
One happy programmer.
Actually, it is more like solving a huge jigsaw puzzle, but without an actual picture of how it is supposed to look when it is completed, and with a picture that changes while trying to put it together.
Nah, I usually like my code from 3 months ago.
Three years ago, however, that is 'someone else's code.
Therac-25.
Dallas Airport Luggage System.
Look them up.
And the compiler was written by yet another person and may or may not optimize them to be the same thing depending on the exact construction of the code.
Additionally, there are issues with the maintainability of the code. You may understand a 6 function lambda expression, but if I need to change it, where would I start?
Thank You - Please Drive Through
http://gamearchitect.net/Artic... By Kyle Wilson ... But the nature of software is that the problems are always different. You never have to solve the exact problem that someone's solved before, because if software already existed that solved your need, you wouldn't have to write it. Writing software is expensive. Copying software is cheap. Scott Rosenberg coins this as Rosenberg's Law: Software is easy to make, except when you want it to do something new. The corollary is, The only software that's worth making is software that does something new."
""Software is hard," reads the quote from Donald Knuth that opens Scott Rosenberg's Dreaming in Code. The 400 pages that follow examine why: Why is software in a never-ending state of crisis? Why do most projects end up horribly over-budget or cancelled or both? Why can't we ship code without bugs? Why, everyone asks, can't we build software the same way we build bridges?
See also the book http://www.dreamingincode.com/ by Scott Rosenberg:
"Dreaming in Code: Two Dozen Programmers, Three Years, 4,732 Bugs, and One Quest for Transcendent Software sets out to understand why, through the story of one software project -- Mitch Kapor's Chandler, an ambitious, open-source effort to rethink the world of e-mail and scheduling. I spent three years following the work of the Chandler developers as they scaled programming peaks and slogged through software swamps. In Dreaming in Code I tell their stories."
I doubt it mentions how I wrote to the Chandler Project early on about using ideas like triples from my Pointrel project but did not get much of a reply... :-) Still my own project has been ongoing for decades. It's surprisingly difficult just to store and synchronize versions of data in useful ways when faced with uncertainties about future needs.
My latest attempt of many, many:
https://github.com/pdfernhout/...
"This stores snippets of HTML entered in a text area in a local IndexedDB database in your browser. These snippets can be displayed in a list below the edit box. TiddlyWiki was a bit of an inspiration for that list display. This is intended to support "bootstrapping" more a more complex system, such as Doug Engelbart worked toward to support a co-evolution of tools, knowledge, community, and processes."
Git is remarkable in that way in fitting into current practices of using hierarchical files changed by desktop tools. Still, it misses a lot as far as references to data items that can be exchanged globally (needing longer hashes), or dealing with large binary files (constantly rechecking stuff, but with workarounds), or dealing with rapid collaboration by several people such as to create shared drawings. But it is still awesome as far as it goes.
"Dat" is another up-and-coming approach I wish well, started by Max Ogden:
http://www.knightfoundation.or...
http://dat-data.com/
"Dat seeks to increase the traction of the open data movement by developing better tools for collaboration."
A 21st century issue: the irony of technologies of abundance in the hands of those still thinking in terms of scarcity.
The main story is an interesting opinion piece.
But further down he represents facts that i dont believe. Citation needed.
Tell me more about the "two lines of code that parse two lines of embedded comments in the code to read the Mayan numbers representing the individual ASCII characters that make up the magazine title, rendered in 90-degree rotated ASCII art." program. I cant find it on the internet.
Hivemind harvest in progress..
in my case it is code from 2 weeks ago but I am old.
To that i say "To facilitate comprehensible opportunities, you have to limit options.".
This goes for game level design, the Apple ecosystem, jigsaw puzzles for toddlers, and the kind of focus that i only see in broke entrepreneurs that reboot their career.
Hivemind harvest in progress..
I was having a conversation earlier today about this with a friend. Clearly this guy finds programming overwhelming, is likely to write hacky code, deals with pressure the wrong way, and concludes that everything is just broken. Maybe he's just too immature and it'll get better later, maybe he would just be happier in another field. A good engineer should not deal with the code quality vs time tradeoff by writing crappy code all the time. If he can't write maintainable code in the given timeframe, then either he is too slow or not standing up for the quality of the codebase. Either way, bad outcome. It seems to me that behind the hyperbole, he really has this view that is more appropriate to hacking away in the college computer lab than to real engineering. I don't particularly want to hire someone who dreams in code or works 80-hour weeks and cuts corners until his code is a mess. I would rather hire someone who gets the big picture of engineering. I think if he worked in a real coding shop (one where there are code reviews, and issues of style differences never even enter into the picture because you follow the group's coding style) he would get a better picture. But I guess when 9 out of 10 startups do embody the culture he describes... Thing is, 9 out of 10 startups also fail. When he described the failed bridge project- that kind of attitude doesn't cut it for long in software engineering either. But since he believes that's inevitable, it makes me think that's how he'd act.
While you guys are trying to build a brand new sky scrapper type bridge, I worked on the old one that runs alongside that trains go across, which does about 80 percent of the work. That's what I was doing all those years
Some programming languages require that you know the equivalent of material sciences in engineering in order not to make a mistake c and c++ are prime examples of this. Imagine that the engineers of the bridge needed to note the exact formula for the steel and other materials that they wanted to use on the bridge for every different component in every section, and they had to remember to put instructions in to stop using that particular formula and change to a new one where the properties were slightly different. Rather than the existing being able to pick grades of materials that have well known properties.
This is what happens with things like malloc and free in c and c++. Suddenly, not only do you need to be designing your bridge, but you also need to be taking extreme care that you're using exactly the correct quantities for each rivet and I beam to make it precisely the right length and strength.