Become a fan of Slashdot on Facebook

 



Forgot your password?
typodupeerror
×

Why Software is Hard 409

GoCanes writes "Salon's Scott Rosenberg explains why even small-scale programming projects can take years to complete, one programmer is often better than two, and the meaning of 'Rosenberg's Law.' After almost 50 years, the state of the art is still pretty darn bad. His point is that as long as you're trying to do something that has already been done, then you have an adequate frame of reference to estimate how long it will take/cost. But if software is at all interesting, it's because no one else has done it before."
This discussion has been archived. No new comments can be posted.

Why Software is Hard

Comments Filter:
  • by alshithead ( 981606 ) * on Saturday February 03, 2007 @06:00PM (#17876530)
    "But if software is at all interesting, it's because no one else has done it before."

    "Interesting" to me means something new and/or unknown...mostly. There are exceptions. Treading new ground always requires greater effort. If I cut a my way through virgin jungle then those who follow have a path.
  • Programmers (Score:5, Insightful)

    by bendodge ( 998616 ) <bendodge@bsgproY ... s.com minus poet> on Saturday February 03, 2007 @06:00PM (#17876532) Homepage Journal
    One programmer is better than two for the same reason that one woman in the kitchen is better than 2. You have to get on a pretty large scale before you need multiple cooks/programmers.

    Software programming in general is hard for 2 reasons:
    1. Computers aren't built for interfacing with humans, thus UI us terribly time-consuming.
    2. The environments people like to drop an app into can be so bizarre, that rock-solid stability is very difficult to achieve.
  • by petes_PoV ( 912422 ) on Saturday February 03, 2007 @06:04PM (#17876560)
    Mostly programmers are trained in the technical details of languages and the libraries/APIs associated with them. They don't gain skills in knowing what users really want and are hurried into producing barely-working stuff, fast.

    Whatever testing is done often only tests that the product produces the correct answers when feed the proper input - no account is taken for how the program reacts to incorrect or incomplete data.
    Changes are requested faster than they can be implemented and often are not communicated very well.

    In short there are systemic failures throughout the whole process, from inception through to delivery. There is no single answer to why software is hard and there won't be until the industry matures and people start to get thrown out of the business for acting unprofessionally

  • by mrjb ( 547783 ) on Saturday February 03, 2007 @06:10PM (#17876624)
    Yes, writing software is hard, especially writing good software. The hardest part is to make things simple, even harder is to make things simple AND flexible. The need for a thorough analysis is greatly underappreciated.

    Incompetent developers tend to make things more complex than necessary. From that point on, under economic pressure, workarounds are needed to get things done. This in turn makes things even more complex than necessary. THAT is what makes writing software hard. The problem is, it is difficult to be aware of the skills that we lack. As such, a lot of programmers with a huge ego don't deserve one.

    I'm not into Extreme Programming per se, but I've noticed that if multiple people look at a piece of software, chances of problems going undetected get smaller and smaller. Yes, even if you, a master programmer, show your code to a rookie, the chance of bugs going undetected will reduce. In fact, it will inevitably result in more bugs being detected before rolling them out to customers.
  • by Hoi Polloi ( 522990 ) on Saturday February 03, 2007 @06:24PM (#17876748) Journal
    I think one thing they all have in common is that they are always custom jobs. It isn't like going to a car dealership and asking for model X in dark blue. Software is more like "I'd like a car with extra wheels on top in case it flips and purple stripes and only 1 door...". Standardization is very limited.
  • by alshithead ( 981606 ) * on Saturday February 03, 2007 @06:24PM (#17876754)
    "Ideas are not the product of labor."

    Respectfully, I have to disagree. Some of my best ideas have come from pondering over a problem. Pondering can be effort. It's not like daydreaming. To think about a problem and apply logic to try and come up with a resolution requires effort in many, if not most, cases.
  • My theory (Score:0, Insightful)

    by The_Abortionist ( 930834 ) on Saturday February 03, 2007 @06:26PM (#17876776) Homepage
    SO many points of failure.

    At the lowest level, there are bugs made by the programmer. There can be misunderstanding also, especially if there is cultural differences in the organisation.

    When multiple programmers are involved there are even more points of failure relating to the interface. Does the module behave as expected? Is the documentation accurate?

    At the highest level, is the design accurate enough? Do we even know exactly what we have to do? Do we have the resources or is there wishful thinking involved?

    And then, because it can take such a long time to write software, specs change during development. There is people turnover, changing customer need, chainge in direction, etc.

    The points of failure are incalculable. The thing to do is adhere to best practices and then take the estimated amount of time to develop and multiply by 2 (in some places, experience will show 3).

    And most importantly, don't lose any sleep because of this. Don't want to die at 60 of a hard attack because of software development.
  • by malraid ( 592373 ) on Saturday February 03, 2007 @06:27PM (#17876784)
    This is also a problem with some programmers. Most geeks place more emphasis in the tools than on the objectives. Some don't even care about the objectives (basically the need of the users) and just want to use a shiny new tool. Or they want to do whatever task in the same tool no matter what (there is a saying that a determined Fortran programmer can write Fortran programs in any language).
  • by zymurgy_cat ( 627260 ) on Saturday February 03, 2007 @06:36PM (#17876820) Homepage
    Unlike most engineering projects that are completed and done, most programming is a living growing process that is constantly changed modified and improved.

    Most engineering projects (and software projects...hell, any project) are like children. They're never completed and done. Once you give birth to one, you're stuck with it for a long time....
  • by edittard ( 805475 ) on Saturday February 03, 2007 @06:43PM (#17876874)

    You wouldn't let a journalist build a space shuttle or a car now would you? But software? Sure, software is easy, anyone can do it.
    [PHB] Heck, what's the difference? Journalism, programming, they both look like a load of typing to me! [/PHB]
  • by alshithead ( 981606 ) * on Saturday February 03, 2007 @06:48PM (#17876930)
    "What I did not say is that thinking is easy."

    No you didn't. You said, "Ideas are not the product of labor."

    Definition of labor according to Merriam-Webster, just the first/primary definition:

    Main Entry: 1labor
    Pronunciation: 'lA-b&r
    Function: noun
    Etymology: Middle English, from Anglo-French labur, from Latin labor; perhaps akin to Latin labare to totter, labi to slip -- more at SLEEP
    1 a : expenditure of physical or mental effort especially when difficult or compulsory

    Please note: "physical or mental effort". I'm not trying to nitpick. Just disagreeing on our definition of the word "labor".
  • by Bright Apollo ( 988736 ) on Saturday February 03, 2007 @06:54PM (#17876978) Journal
    Implementing a good design is usually half the battle. Creating a good design is usually the other half, but in practice, a solid design is almost always the part that gets skipped. Let me bore you with a brief anecdote.

    I have a large, global project underway. User requirements are done and have been done, and we're turning those requirements into things we can code or deliver ("View a workorder", "Print asset detail", "Group revisions into single document"). Of that, we have 150 odd deliverable items, not to mention all the fit/ finish work we may have to do, and all of this barely touches on reports, security roles for users, etc.

    The reason we're going to make our date, despite the 1280 discrete requirements we need to test, is that we've taken the time to look at the requirements from a few different angles and come up with a solid design plan, before even thinking about implementation. Each piece will build on another, really hard parts are identified early, blockers and such are flagged ASAP. We know things will emerge that we didn't expect, but we've got the biggest chunks identified and working together on paper. We have the flows mapped out, exceptions and variations listed, and a user group that has to sign off on every iteration of the incremental build (we're spiraling out functions and features).

    The only thing "hard" about all of this is the incessant thinking about the details, and discipline required to focus on the un-fun part of software construction, i.e. the planning and design walkthroughs. The itch to code something already is growing, but delayed gratification means that when the time comes to actually write something, the design will almost certainly lead to a working, if not optimal, solution. We can refactor as we go, but it needs to work completely before it can work efficiently.

    I've been following Chandler off and on, somewhat through Spolsky's references to it and some stray links around the web, and sounds like design didn't go deep enough into what it'll really take to build some of the pieces.

    -BA

  • by Anonymous Coward on Saturday February 03, 2007 @06:59PM (#17877004)
    Many of the "software engineering" textbooks out there, even those written by "respected" authors, are complete trash.

    A large number of the modern books suggest UML as a solution. Anyone who has actually employed UML knows that it's virtually nothing but hype. Yes, a UML class diagram may be somewhat useful when demonstrating how existing code is structured, and a sequence diagram may prove helpful in showing the flow of messages between objects. But it's unsuitable when used for the design of a large-scale system. One you get beyond 10 or so classes, UML diagrams become too complex to work with, and are basically useless.

    The same goes for software patterns. Many do make sense on a small scale. But then the designers of systems try too hard to use patterns wherever possible, the application becomes unnecessarily complex, and failure is often the end result.

    Fred Brooks is one of the few authors who has made any real contribution. Of course, that's because he actually had years of experience working on some of the largest, most important and most widely used systems of his time. Even years after some of his writings were first published, they remain one of the most useful guides when it comes to software project management and development. So while some authors babble on about UML and patterns, we need to listen to what Brooks said. Mainly, we need to realize that the main factor is the people who are working on the software, more specifically their knowledge and experience. Solid developers will produce solid software.
  • Once again... (Score:5, Insightful)

    by etnu ( 957152 ) on Saturday February 03, 2007 @07:02PM (#17877018) Homepage
    Why doesn't anyone complain about how hard brain surgery is? Why doesn't anyone complain about how hard building space exploration vehicles is? Why doesn't anyone complain about how hard creating a successful marketing campaign is? Software engineering is difficult because it's a complex subject that takes a combination of intelligent people and training to produce good results. Just because businesses are too stupid to realize this doesn't make the problem go away. You can't throw complex projects at untrained, stupid, incompetent people and expect them to produce quality software. You can't just invent some magic formula for software development that will work 100% of the time to maximize efficiency. Software engineering is NOT manufacturing. Accept it and move on for fuck's sake.
  • by alshithead ( 981606 ) * on Saturday February 03, 2007 @07:25PM (#17877150)
    "Just disagreeing on our definition of the word "labor".

    That's what I was doing; and within the context of a specific provided example.

    Think about it. It might take some effort."

    Okay troll, right. I've put some effort into it and I'm still clueless. Are you talking about "Ideas may come in a flash, or evade forever."? If so, I consider that a partial truism. Ideas also come about from a slow, plodding, methodical effort. Your generalization is half-assed. If you've got a point to make, please do so. You haven't stated how you disagree with my (and the general use) definition of "labor" and you certainly haven't clearly provided your interpretation of the context involved in the "specific provided example".
  • by iminplaya ( 723125 ) on Saturday February 03, 2007 @07:30PM (#17877178) Journal
    If I cut a my way through virgin jungle then those who follow have a path.

    And copyright puts in the toll booth.
  • by ComputerSlicer23 ( 516509 ) on Saturday February 03, 2007 @07:33PM (#17877200)

    I believe his point isn't that you're not doing work, but rather that scheduling pondering is impossible. Otherwise give me a fairly firm estimate of when you will either prove P = NP, or that you can prove that P < NP. Logical deduction isn't precisely the same as "resolving the unknown". One doesn't provide a time table for when the Twin Prime conjecture will be solved. I can apply logic deduction to lots of problems, but I can't necessarily provide a firm estimate of when I'll find the solution to a problem.

    Any time you provide an estimate of the time it will take to do anything in "problem solving", you are using statistical conjecture about how long you think it should taken given that you've solved other similar issues. How long will it take me to resolve a logic puzzle. How long will it take to construct a proof to show something? You think logically on those, but you don't provide a schedule. If you tell me, I'm going to give you 30 different distance, rate, time story problems that are geared for a high school freshmen, I can tell you that I'll be done in about an hour. If you tell me that you'd like me to prove Fermat's last theorem without using reference material. I know it's true, and I know that I can't provide a schedule for it. It's highly unlikely that if I took the rest of my life I couldn't do it. Both require deduction and logical thought. One is an entirely different scale then the other.

    When working in the unknown, you can't provide a schedule. Otherwise, you'd be working either in the known, or very close to the edge of known.

    Kirby
  • by Anonymous Coward on Saturday February 03, 2007 @07:44PM (#17877272)
    Finally, a period of benchmarking can identify the bottlenecks which can be refactored one last time
    "one last time"? - I admire your optimism
  • by Evil Pete ( 73279 ) on Saturday February 03, 2007 @08:03PM (#17877390) Homepage

    I read somewhere that in science fiction writing this is called "The Tooth Fairy Principle". Don't introduce more than one exotic technology or idea. I immediately realised that it applied even more strongly to software development. New areas represent areas of high risk, adding even a few to a project can change the risk from moderate to very high. I've participated in a few projects who broke this principle ... as usual commenting on the risk that this implied only made me sound like a Cassandra when eventually the prediction bore fruit.

    However, the major reasons I see for software projects becoming late are: clients repeatedly wanting to change design after the design phase (in one surreal case we had a client change a fundamental design issue 24 hours before going live!), poor resource allocation (a very large subject), management saying yes to unrealistic deadlines, bleeding edge technology (Tooth Fairy Principle - high buzzword compliance).

  • by Anonymous Coward on Saturday February 03, 2007 @08:10PM (#17877446)

    Mostly programmers are trained in the technical details of languages and the libraries/APIs associated with them. They don't gain skills in knowing what users really want and are hurried into producing barely-working stuff, fast.
    Well, are you implying that they train to be psychics or prognosticators? Because a lot of the time users don't know what they really want either, at least until well into the process.
  • by MindStalker ( 22827 ) <mindstalker@[ ]il.com ['gma' in gap]> on Saturday February 03, 2007 @08:24PM (#17877534) Journal
    Its esentially the problem with any large company. Any project coming out of a large company spends 90% of its time in committee and debates, and generally gets watered down to the few things those committees can agree on. Personally I disagree on the idea that two coders arn't as good as one. One coder rarely has the motivation as well as the insight to see clearly his way through a project (getting stuck on a problem and having another viewpoint is ALWAYS helpful). But there is definatly a deminishing return as project teams get larger.
  • by Lazerf4rt ( 969888 ) on Saturday February 03, 2007 @08:33PM (#17877558)

    You are right on the money. Programmers tend to try put more priority on building re-useable components (tools, modules, etc.) than on actually building the damn product. I know I've been as guilty of that as anyone.

    We're all taught that re-useability, modularity and portability are great ideas. But if you look around at many software projects, these principles are often given top priority, and the cart goes squarely in front of the horse. Few people realize that early architecting can be as evil as early optimization.

    How often have you heard of a programmer building a widget system instead of building a widget? Creating a render library instead of creating graphics? Creating an engine instead of an application? Even OOP tells us that we must write a class before writing a function (sorry, method). Anyone remember coding in straight C? It worked. And if you wanted to re-use any of it, it wasn't impossible.

    You get the feeling that the quest for productivity becomes a drain on productivity, which, in turn, makes the quest for productivity even more attractive. Then we all wonder why writing software is so hard.

  • Re:Programmers (Score:2, Insightful)

    by arminw ( 717974 ) on Saturday February 03, 2007 @08:53PM (#17877676)
    ......Software programming in general is hard for 2 reasons......

    Actually there is only one master reason. So far, there is no mathematical way to prove that a given non trivial software program will actually work as intended. When designing a physical thing, such as a bridge, machine or electrical circuit, there are precise mathematical formulas which can be applied that give a reasonable expectation that the building or machine etc. will perform according to expectations. There are no mathematics that can be applied that will show to even a ballpark accuracy that a given complex software system, such as an OS, will perform as its designers hoped. That is why there are alpha, beta and all sorts of other test versions where users are asked to try out the programs. My theory is that this is so, because software is not physical, but a pure product of mind to which different rules apply. Human minds do not operate nor communicate with the mathematical precision that computers and machines do. This is in fact what makes us human. All software begins in a human mind which operates in a much different manner than computers. Translating one human language to another human language is hard. Translating human thought patterns into computer instructions, which then have to usually interact with other human thought patterns is even harder.
  • Re:Programmers (Score:2, Insightful)

    by that this is not und ( 1026860 ) on Saturday February 03, 2007 @09:00PM (#17877706)
    Which real world? In this era of multiculturalism, we need to learn to accept that there are places where women essentially never leave the kitchen. We must respect this and fein that we admire it so as not to offend.
  • by Tablizer ( 95088 ) on Saturday February 03, 2007 @09:14PM (#17877802) Journal
    The housing and construction business has professional estimators. Perhaps the software biz needs the same thing. However, if one is not familiar with the domain (type of biz), then such can be difficult. Thus, the estimators may need to be industry-specific: fashion software, accounting software, medical software, etc.
  • Mythical Man Month (Score:5, Insightful)

    by tedgyz ( 515156 ) * on Saturday February 03, 2007 @09:29PM (#17877874) Homepage
    Read it. Know it.

    Why must we rehash this over and over again.

    If it were easy, then yes, we would have push-button frameworks that magically created programs. What bothers me more than the ignorance of the "no silver bullet" mindset, are the pushers of programming environments that supposedly will solve all our problems. Bullshit. Corba sucks. EJBs suck. All these things suck. Just write good software and stop looking for the golden chalice.
  • Re:Programmers (Score:3, Insightful)

    by tedgyz ( 515156 ) * on Saturday February 03, 2007 @09:37PM (#17877924) Homepage
    Perhaps the more generic saying is appropriate here: Too many cooks in the kitchen spoil the broth.

    The Mythical Man Month has a better principal. One really good programmer is more productive than 10 mediocre programmers. Or something to that effect.
  • by CastrTroy ( 595695 ) on Saturday February 03, 2007 @11:04PM (#17878318)
    I think this is one of the biggest problems with software today. Too many untrained/undertrained people working on too much software that they are not qualified to be working on. The only reason the term software engineering is a joke to most people is that most people who work on software do anything but engineering. It's not just me either. Everybody I talk to works with people who have no idea what they are doing, and should not be working in the software field. Granted, neither I nor any of my friends that work with these people are perfect, but some of the stories i've heard are almost unbelievable. I'm surprised software ends up working at all in most cases.
  • by Coryoth ( 254751 ) on Saturday February 03, 2007 @11:56PM (#17878554) Homepage Journal

    Now imagine if every single weld was a unique, custom job that had never been done before, and if any of them are imprefect, the car crashes.
    Right, because there are absolutely no "standard recipes" in software. There just isn't anything you could describe as a "Cookbook" [atomz.com] providing standard solutions to common problems that make up the basic nuts, bolts and welds of a lot of software.
  • by arminw ( 717974 ) on Sunday February 04, 2007 @12:20AM (#17878694)
    ..... Software is still an extremely new field. I'm not sure if things will get more reliable in my lifetime, but I'm sure that eventually we'll get stuff figured out, just like we have for bridges.......

    It is true that software and computers are relatively new compared to bridges. However, because software is immaterial, it is fundamentally different. There are NO fundamental immutable laws of physics that govern software production. Software is a pure product of mind only. That is the primary reason why software engineering isn't really engineering in bridge or machine building sense. Making good software, especially the kind that interacts with people is a art form rather than engineering a bridge.
  • by ralphdaugherty ( 225648 ) <ralph@ee.net> on Sunday February 04, 2007 @06:03AM (#17879940) Homepage
    If some barrier would have kept CPU speeds below 100Mhz then I imagine that by now people would be developing very efficient code and that we would still have the same level of application performance that we enjoy today with our dual core 2Ghz processors.

          Sorry to break this to you, but apps today are not faster than the ones they replaced. We used to write more efficient code, and had more spartan interfaces, because we had to. But I don't think Microsoft Office today is noticably faster than the WordPerfect / Lotus 1-2-3 type apps we wrote in assembler under DOS. All that extra CPU power is more than eaten up by layer upon layer of slower and slower software.

          All this allegedly to make programmers more productive. I haven't seen that either.

      rd

"Look! There! Evil!.. pure and simple, total evil from the Eighth Dimension!" -- Buckaroo Banzai

Working...