Slashdot Mirror


Explaining Complexity in Software Development?

BMazurek asks: "I'm stumped by how to explain software development complexity (not theoretical big-O notation, that's easy) to non-developers. When it comes to people who aren't in the code, my explanations fall flat. It's not that the people I'm talking to are stupid, they're quite honestly people at the top of their respective (non-tech) fields. How do -you- explain software development complexity to non-developers? What analogies do you use?" "I often try the famous Fred Brooks, Jr. quote (seldom to much success):
'Software entities are more complex for their size than perhaps any other human construct because no two parts are alike (at least above the statement level). If they are, we make the two similar parts into a subroutine--open or closed. In this respect, software systems differ profoundly from computers, buildings, or automobiles, where repeated elements abound.'

202 comments

  1. I don't (anymore) by yagu · · Score: 3, Interesting

    Spanning 20+ years in computer programming I've stopped trying to explain what it is like and how it is done. Heck, we can't even clearly explain to peer programmers why vi is better than emacs, XP is better than Linux, Gimp is better than Photoshop (NOTE: these do not necessarily reflect my opinion, FTR, I prefer: vim; Linux; and Photoshop)

    I shrug my shoulders and explain it's mostly dull. It's kind of like doing Math homework, except I have to do it every day for my job. It's always about solving and debugging, and people's eyes glaze when I begin poking programming nuance with a ten-foot pole.

    Fortunately I find most people don't really care. (Also for those who would "get it", my experience has been they are ones who dabble and experiment in it anyway already.)

    (Aside: as for the original poster, congratulations on being able to explain "big O notation". I sometimes suspect my girlfriend of faking it.)

    1. Re:I don't (anymore) by Ithika · · Score: 4, Funny

      (Aside: as for the original poster, congratulations on being able to explain "big O notation". I sometimes suspect my girlfriend of faking it.)

      The mind boggles... you make a sensible and sincere compliment, in which is also hidden a secret double-meaning, and at the same time you make claims of having a girlfriend. I'm impressed at your literary prowess! ;-)

    2. Re:I don't (anymore) by Rosco+P.+Coltrane · · Score: 5, Funny

      Heck, we can't even clearly explain to peer programmers why vi is better than emacs

      Well, you can't because they're not the same thing: vi is a text editor, emacs is an operating system.

      --
      "A door is what a dog is perpetually on the wrong side of" - Ogden Nash
    3. Re:I don't (anymore) by notyou2 · · Score: 1
      Says yagu:
      (Aside: as for the original poster, congratulations on being able to explain "big O notation". I sometimes suspect my girlfriend of faking it.)

      I'm sure I could take that sentence out of context and make a joke about it. Lucky for you, I'd never do such a thing.
    4. Re:I don't (anymore) by SpacePunk · · Score: 1

      I found his post to be almost believable up untill the part about the girlfriend. This Slashdot, after all.

    5. Re:I don't (anymore) by Anonymous Coward · · Score: 0

      If emacs is an OS why does RMS care if linux is not called GNU/linux? Is he planning on using the OS kernel from emacs for Hurd?

    6. Re:I don't (anymore) by DahGhostfacedFiddlah · · Score: 1

      Are any other real geeks worried about that "Informative" rating?

    7. Re:I don't (anymore) by Sigma+7 · · Score: 2, Informative
      Heck, we can't even clearly explain to peer programmers why vi is better than emacs, XP is better than Linux, Gimp is better than Photoshop


      This is mainly because the best programs are Notepad, MacOS X, and Corel Draw.

      On a serious note, you can't explain these examples clearly to peer programmers because software is not a black and white world. While Windows 95 makes hardware access much easier because of the driver-based architecture, you can guess what happens when you install it on your 386.

      I shrug my shoulders and explain it's mostly dull. It's kind of like doing Math homework, except I have to do it every day for my job.


      A slightly better explaination is that it's more like building a car, "hot-rod" style. In this case, it sounds much more impressive than it really is - as well shows the correctness of the situation.

      Programming is developing individual software components (e.g. an engine, muffler, etc.), and assembling them into a large application (e.g. the car itself.) It's straight forward and accurrate - some software components are stock, some are custom-built for a specific application. The result is that applications generally do the same thing, but have slightly different internal workings, in the same way that cars do.

      It's a straight forward explaination as long as you stick to the cliched analogy of cars.
    8. Re:I don't (anymore) by poot_rootbeer · · Score: 1

      vi is a text editor, emacs is an operating system.

      Can't be. Last I hurd, RMS has never released an operating system.

    9. Re:I don't (anymore) by mysticwhiskey · · Score: 1
      I'm sure I could take that sentence out of context and make a joke about it. Lucky for you, I'd never do such a thing

      Don't worry, the original poster already made the joke before you. ;)

      --

      Stuck down a hole! In the middle of the night! With an owl!

    10. Re:I don't (anymore) by dubl-u · · Score: 1

      I've stopped trying to explain what it is like and how it is done.

      I agree with that. The way I communicate the level of complexity is generally through estimates.

      Most things are so unlike software development that metaphors are actively misleading. Our profession still struggles massively with the mistaken analogies with constructing buildings or manufacturing widgets.

    11. Re:I don't (anymore) by WebfishUK · · Score: 1

      One must consider the possibility that this guy isn't using the term 'girlfriend' in any colloquial sense but rather is simply refering to a female friend. More specifically the term 'friend' does not necessarily exclude 'relative'. So indeed he could be refering to his mother.

      Ehhhhhhhhhhhhhhhhh you weirdo.

      --
      -- "Can't sleep, clowns will eat me!"
    12. Re:I don't (anymore) by Senzei · · Score: 2, Funny
      I found his post to be almost believable up untill the part about the girlfriend. This Slashdot, after all.

      You fail to understand that fantastic results can be achieved by redefining your concept of "girlfriend".

      --
      Slashdot: Where anecdotes and generalizations can be freely substituted for facts, logic, or intelligence
    13. Re:I don't (anymore) by Senzei · · Score: 1
      A slightly better explaination is that it's more like building a car, "hot-rod" style.

      ...or like building a bike on American Choppers. At that point I worry that my boss would take things too seriously, grow a giant moustache, and start yelling at all of us to go get some work done.

      Seriously though, the analogy is pretty good. It gets better when you look at things like body work where parts have to be designed before they can even be fabricated.

      --
      Slashdot: Where anecdotes and generalizations can be freely substituted for facts, logic, or intelligence
    14. Re:I don't (anymore) by NateTech · · Score: 1

      Much of the software created today is the huge-project type that really does fit your "hot-rod" analogy. It has more bells, whistles, horsepower, and "stuff" that's completely unnecessary (but required by the customer for so-called "ease of use") than required to do the job.

      Data entry, and then post-processing into text files and possibly graphs for mathmatical stuff is still the raw "guts" of the real world of heavy-duty computing that actually MAKES MONEY. (Think billing systems, big batch processes for warehouses/inventory, etc.)

      The "personal computer" crazy companies that want pretty GUI's, rediculous features that have nothing to do with the job actually being accomplished, etc... are most of the "problem" with "software projects" today.

      You prove it by saying that Notepad (a simple text editor), Mac OS X (a Unix - text-based OS with a decent user GUI over the top and a few "common" applications bundled in for free), and Corel Draw (that graphics thing... if you need it)... are the three apps you use.

      Most of this other CRAP companies build could be better done on a series of dumb terminals, a Unix box, and maybe ... just maybe... and RDBMS and associated front-end. All text. The JOB would get done, but no one would LIKE it, or like working on it.

      --
      +++OK ATH
  2. My favorite: A Christmas Carol by Marxist+Hacker+42 · · Score: 3, Interesting

    Easiest way I've found- though it's begining to get a bit outdated thanks to bloatware. Charles Dicken's famous novel is about 100k. This makes it easy to estimate source code in terms of number of copies of that novel. The quarter-million lines of code project I'm currently working on takes about 25 MB to store- 25000k, or 250 copies of A Christmas Carol.

    --
    SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
  3. Thoughts by Xugumad · · Score: 1

    Tell them to imagine something constructed from LOC pieces of Lego.

    More usefully, try explaining why code is complex. Focus on the idea that you have an insane number of moving parts (effectively), but modifying is nearly free, which is why it works at all. Also mention things like spending most of your time writing error handling (well, I do, anyway :) )...

    1. Re:Thoughts by Anonymous Coward · · Score: 0

      "More usefully, try explaining why code is complex. Focus on the idea that you have an insane number of moving parts (effectively), but modifying is nearly free, which is why it works at all"

      Well, that's O-notation, in a sense.

      There's the old (french) anecdote about the pharao asking Euclides about teaching him maths. Then he pointed out to his geom book. The pharao said it seemed too difficult, so he asked for a shortcut. Sir, there's no shortcuts even for kings.

      Software is difficult because it's made up from "bricks" which can interact almost freely with each other; that makes the top number of interactions up to 2^n, where only one being "correct". The task of the programmer is not only to build the bricks, but to find the one way out of 2^n to mount all the pieces.

      If someone is not even able to understand this, he shouldn't be out of a charity for mentally unfitted.

  4. madlibs! by conJunk · · Score: 4, Insightful
    :) i used to teach english to native japanese speakers, and that's really not any different from trying to explain bayseian spam filters to my non-technical boss.

    pictures help, metaphores help, madlibs help

    by madlibs, i mean things like "think of [concept] as like a [cute noun (bunnies, kittens, etc.)]"... draw funny pictures, and connect them up with arrows... you can't over simplify enough, and the more fun you make it, the easier time the audience will have following you

    remember that 9 times out of 10 you aren't explaining it to these people because they need to understand, you're explaining it so they have confidence that you know what you're doing and that the outcome will reflect well on themselves

    1. Re:madlibs! by Rosco+P.+Coltrane · · Score: 3, Funny

      i used to teach english to native japanese speakers, and that's really not any different from trying to explain bayseian spam filters to my non-technical boss.

      Here's a challenge: try to explain bayesian filters to a non-technical native japanese speaking boss.

      --
      "A door is what a dog is perpetually on the wrong side of" - Ogden Nash
    2. Re:madlibs! by tacocat · · Score: 1

      I had to actually do this!!!

      I just layed out two very short examples of spam and good email, 20-30 words each, and had him identify which was the spam. Easy enough and the interaction got me 30 seconds into the presentation and he was still with me.

      It got a bit trickier when I hit the conclusion that I was not using Bayes theorem for identification of spam but to qualify logged events in a 37GB log file. Talk about bloat! But he understood well enough that my identification of a word/phrase worked the same way that he would qualify the word cialis and that was all that mattered.

      I found graphical representations using either analogous formats or simplified images, with an option for light humour, work effectively. But you have to use things in their world and minimize your own terminology. The terminology is something that will inherently bring fear into their hearts and that will turn them away.

  5. Brooks explained it: It's the programmers' fault! by Swave+An+deBwoner · · Score: 1

    I often try the famous Fred Brooks, Jr. quote (seldom to much success):

    'Software entities are more complex for their size than perhaps any other human construct because no two parts are alike (at least above the statement level). If they are, we make the two similar parts into a subroutine--open or closed. In this respect, software systems differ profoundly from computers, buildings, or automobiles, where repeated elements abound.'

    See, that's the problem, and it's the programmers that caused it. Stop making subroutines. Monolithic code be da shizzle on da bizzle.

  6. I say something like... by voxel · · Score: 2, Informative

    For the generic question, "What is programming?"...

    I say along the lines: "Think of programming like any job, where you have employees and you need them to do things for you to make your business work. You usually give your employees a list of instructions, things to do. They do what you tell them to and then come back to you for more instructions. Computer programming is similar, inside that box under your desk are a bunch of employees. Without a boss, they don't know what to do. So, what I do, is I tell each component inside there what to do. I tell the video card to turn on so you see stuff on your monitor as one example. I tell the main processing unit (think of it as the manager of the office, where as I am the big-cheese boss)) to run the "office" while I am away. I give the main manager, or CPU a big huge list of instructions that say this is how we run the place. The CPU (or manager) then follows my instruction sheet and tells all the other components inside the computer how to act, behave and what to do. We do it this way because it take months to write the instruction sheet out for the CPU, but the CPU can execute that instruction list super fast, much faster than if I were telling each component (e.g. employee) what to do directly...".

    I actually just came up with this example right now on the fly... I never use the same example, I always think about what that person does for a living, spare time, hobbey, and I can almost always draw parallels that make them say "Ahhh, I wish someone else would of explained it that way before".

    I've even explained how interrupt handlers work in regards to a USB joystick to a Lawyer... He was so happy in the way I explained it to him, he kept asking more and more questions until I told him I have to go :P

    --
    Modesty is one of life's greatest attributes
    1. Re:I say something like... by elronxenu · · Score: 1
      I've even explained how interrupt handlers work in regards to a USB joystick to a Lawyer...

      I can just imagine you telling it in terms of Plaintiff and Defendant and an "Emergency Request for Permission to file an overlength memorandum in support of SCO's new Renewed Motion to compel discovery" to which the Judge must respond immediately.

    2. Re:I say something like... by avalys · · Score: 1

      Good for you. That's an explanation of how computers work. It's not an explanation of how complex software systems are.

      --
      This space intentionally left blank.
  7. Stupid quote by 2nd+Post! · · Score: 2, Insightful
    The quote you use is pretty bad, especially for people that don't know software:

    'Software entities are more complex for their size than perhaps any other human construct because no two parts are alike (at least above the statement level). If they are, we make the two similar parts into a subroutine--open or closed. In this respect, software systems differ profoundly from computers, buildings, or automobiles, where repeated elements abound.'


    What you want to convey, to the non software initiated, is why software is difficult, why it is complex, and why it is hard.

    I would put it this way; software is really "soft", being only instructions a computer reads and interprets. A physical analogy is perhaps clay, something equally analogously soft, malleable, and easy to work with. Now imagine another physical analogy; take that clay, and then try to build a car out of it. A working car. Ignore the physical impossibilities, like combusion temperatures, but make the point that each component first has to be designed then baked, and that each component has to be integrated with each other component.

    So that is what software is like. They may ask, "Why?", and here are a few reasons:
    1) Software is easily copied, not easily designed. The hard part is making the first copy, as in the car example. Once you get one product finished, you can copy quite easily, but actually designing and building is not necessarily easy.
    2) Software is REALLY malleable. You can continuously change the design as you are working, not unlike building an entire car out of soft clay.
    3) Because software is so malleable, each time you discover a new problem you discover a new solution. In other words, the second car you make will be totally different than the first car because instead you will be going from a car to a boat or a train or a helicopter.
    4) Also because software is malleable, every "customer" with different requirements brings in new design directions. Imagine if every person working on the car, viewing the car, and interacting the car wants a totally different car? You aren't designing one car, now, you are designing 17 or 18 cars; trucks, vans, compacts, sedans, and sports cars. Now take all these vehicles and merge them into a single multipurpose vehicle.
    1. Re:Stupid quote by Beryllium+Sphere(tm) · · Score: 1

      >each component first has to be designed then baked, and that each component has to be integrated with each other component

      "Windows XP has 65 million lines of programming instructions. They all have to work together. Imagine a jigsaw puzzle with 65 million pieces. Better, imagine that the puzzle is three dimensional."

      "Windows XP has 65 million lines of programming instructions which have to work together for a common goal. Imagine managing a bureaucracy with 65 million employees and getting it to work reliably."

    2. Re:Stupid quote by Anonymous Coward · · Score: 0

      What's that? XP Works now? How come that isn't on the front page? :)

    3. Re:Stupid quote by iomanip · · Score: 3, Funny

      Please, whatever you do, no more software-car analogies!!!!

    4. Re:Stupid quote by tacocat · · Score: 1

      At first I was thinking the clay idea wasn't too bad, especially when you consider how much clay will move when you fire it. This means that high precision products made of clay cannot be manufactured without some extra steps to polish the post-fired product to tolerances.

      But you more you talk of malleability the more I think of Silly Putty. Sure you can shape it to stand up tall, but it creeps and falls over given time. Which is a horrible analogy to software because it implies that software isn't stable.

      Software isn't complex. Software is actually really simple once you understand the language(s) involved. To state the Software Engineering is complex means you don't understand the concept. There might be a lot of steps to it, but it's never hard.

      What is difficult is trying to get Software to represent an accurate mathematical model of the real world as we understand it. And this takes us back to the Charles Dickens novels or even the Bible or other fundamental publication of a major Religion.

      People interpret their world differently. Given the same book they will create different meanings. If this weren't true there would still be only one Christian based Church and only one Mulsim based Religion (maybe not, it's about prophets not publications but I don't know enough to be sure). If you could get everyone to agree on the definition and meaning and behaviour of their modelled world then software becomes easy. But that's rarely the case.

      Where software becomes difficult is trying to define this modelled universe. In the real world there are certain rules that you simply can't violate (at least under Newtonian Physics) and those rules form the basis of our world. Mechanical Engineering would be pretty screwed if they had to work in a world of Quantum Physics and String Theory. Cars would be scarey to drive! But most of Mechanical Engineering falls into a handful of Rules to live by.

      But when someone tries to map a Business Model to a Mathematical Model they tend to violate these simple rules to present a simpler business model. Ever heard the phrase, "An Exercise for the Reader"? My experience has shown that too often the Business Model as layed out to the software people is poorly constructed with holes and contradictions galore and no interest to fix let alone recognize them. And it's left to the software dude, who has no idea what's really going on as a Business Model, to guess which way to procede. Almost appears like someone is introducing Quantum Probability into a Business Model. Unfortunately with 100 million lines of code you get a lot of guesses and a lot of unexpected behaviour.

    5. Re:Stupid quote by Senzei · · Score: 1
      Software isn't complex. Software is actually really simple once you understand the language(s) involved. To state the Software Engineering is complex means you don't understand the concept. There might be a lot of steps to it, but it's never hard.

      I think you are confusing software with code. Writing code is not very hard. Software is a purpose manifest in code, which is difficult. In the face of choosing which algorithm to write actually writing the algorithm itself is not that difficult. As computers become faster and storage (in all forms) becomes more available we can afford simpler algorithms for most situations. Look at all the tricks people went through trying to cram functionality into 640k of ram, or 2mhz of processor speed. In most applications that kind of stuff is no longer necessary.

      My point is that while the actual process of writing code seems to be getting easier all the time, I think the design problems are getting harder. Both are a requirement for writing software, so I would say that it isn't really all that easy.

      --
      Slashdot: Where anecdotes and generalizations can be freely substituted for facts, logic, or intelligence
  8. use acronyms by saturnism · · Score: 1

    say a sentence constructed full of acrynoms that describes are you build your system

    --
    it is me
  9. Depends on the audience by nosredna · · Score: 3, Interesting

    As with explaining the complexity of anything, you have to try thinking either in terms that are completely universal, or in terms that the person you're explaining it to will understand from their field (assuming you know enough about their field to make an analogy, of course).

    I usually end up rambling on until the listener's eyes glaze over, but I've had some success with demonstrating some relatively simple things with a deck of cards... sort and random algorithms are especially well suited to this type of explanation, for obvious reasons.

    Anything that doesn't have an easy analogy in common knowledge, I don't generally worry about explaining beyond some noncommital answer involving a basic description of the task, then asking the listener to think about breaking it down into simple parts, with directions that a six-year old could follow. Generally works, and gives an idea for the complexity of a program, at least sufficient to give somebody who doesn't really need to know everything about the programming side an idea of the work involved.

  10. I like legal analogies by sedyn · · Score: 2, Funny

    Imagine having a huge legal contract. Then, add in a huge, convoluted yet intertwined legal system.

    Furthermore, imagine that instead of writing this legal mumbo-jumbo in english, you use a language that is extremely strict and math-based.

    This would be a fraction of the real complexity (mutiple threads/processes anyone? How about poor documentation?) but it starts the ground work.

    To be honest, this way of thinking sounded better when I first started, and I'm kind of disapointed with my end product.

    --
    Am I open minded towards open source, or closed minded towards closed source?
    1. Re:I like legal analogies by ceoyoyo · · Score: 1

      It's too bad lawyers DON'T write things in a strict language. With syntax checkers.

    2. Re:I like legal analogies by mOdQuArK! · · Score: 2, Interesting

      I thought it would be interesting if it were required that all legal documents be written in an unambiguous computer-parseable language.

      Decision points where ambiguity had to be resolved would be referred to human actors (judges, government officials, etc) who would have to provide their decisions in terms of data that was unambiguously interpreted (in terms of the legal language).

      Couple of benefits that I can think of (aside from reducing the number of arguments about what the laws actually mean):

      1) Trials could be reduced to a "legal" computer, where the prosecutors & defense lawyers write their cases in terms of the legal language, feed it into the computer, the computer asks the judge & juries to make decisions at key points, then renders the verdict.

      The more interesting possibility was being able to "test" the effects of new laws by running through large population "simulators", and try to forecast how they might affect your society.

      I discussed my brilliant idea with my brother (a lawyer), who laughed at me and told me to get a life. *sigh*

    3. Re:I like legal analogies by ceoyoyo · · Score: 1

      What your brother (a lawyer) really meant was "please don't tell anybody who might think that's a good idea because then my expensive degree will be worthless."

      He's safe though -- most politicians are lawyers too.

      I think it's funny that the system that holds our society together and governs its interactions requires interpretation, judgments and a large group of people to discuss and explain it all to the rest of it. Hm... kind of sounds like religion actually.

    4. Re:I like legal analogies by eddeye · · Score: 2, Insightful

      What your brother (a lawyer) really meant was "please don't tell anybody who might think that's a good idea because then my expensive degree will be worthless."

      Actually what he meant was "Law can't be pinned down to precise language out of necessity. Specifying exact rules to cover every particular case is an impossible task. You can't foresee every possibility and even if you could there are too many factors to account for. It's an infinitely larger search space than chess, which is itself completely unmanageable. Hence law mostly relies on relatively short rules and human intelligence to apply them correctly in each situation." Where 'short' means someone who knows where to look can process the relevant ones in finite time.

      I'm a programmer and a law student. Trust me, precise grammars are not an option.

      --
      Democracy is two wolves and a sheep voting on lunch.
    5. Re:I like legal analogies by ceoyoyo · · Score: 1

      I think there are different types of law. A VERY precise language should be required for contracts, for instance. In other areas, the Latin and ye olde English provide an artificially high bar for laymen, and should be eliminated in favour of a more human readable format.

    6. Re:I like legal analogies by eddeye · · Score: 1
      I think there are different types of law. A VERY precise language should be required for contracts, for instance.

      That's a nice idea, but in practice it just wouldn't work. Courts have explicitly rejected the notion for a number of reasons:

      • the number of things you can contract to do is unlimited. if you can think of it, you can contract for it. about the only exceptions are violations of an inalienable right or public policy.
      • many, perhaps most contracts are not drafted by lawyers. a lot of contracts aren't even drafted. contracts can be formed based on oral agreements, informal agreements, even inferred from a pattern of behavior. when two people agree to do something and each receives a benefit, it's a contract.
      • basically, contracts just enforce business relationships. making those relationships harder, slower, and more expensive to enter into stifles commerce. imagine having to read and sign a contract just to pick up a pack of smokes at the corner store.

      In other areas, the Latin and ye olde English provide an artificially high bar for laymen, and should be eliminated in favour of a more human readable format.

      Definitely. Law has been doing exactly that pretty strenuously for the past 15 years. Schools don't even teach most of the old latin/saxon terms anymore. The only holdup is old-school lawyers and judges, and they'll disappear over time. But while the terms now have descriptive names in modern English, they still carry special meaning in the field. Every field has terms of art: a layman won't understand stacks and queues and binary trees just by knowing the words. There's no way to overcome that problem.

      --
      Democracy is two wolves and a sheep voting on lunch.
    7. Re:I like legal analogies by Senzei · · Score: 1
      To be honest, this way of thinking sounded better when I first started, and I'm kind of disapointed with my end product.

      Ah, now I know you obviously must be a programmer.

      --
      Slashdot: Where anecdotes and generalizations can be freely substituted for facts, logic, or intelligence
    8. Re:I like legal analogies by cavemanf16 · · Score: 1

      He laughed because I would estimate that 100% of all legalese is designed to mitigate the risk of "user error", and as we all know in computing, "user error" is the one thing you cannot truly design around to completely mitigate all risk in the system. Being a lawyer and writing legal documents is more akin to playing with statistics than it is writing computer code. In other words, there's always that 0.01% chance that a hole could be poked somewhere in the legalese, no matter how well-written the legal document is. The trick is to shrink that chance as much as possible with good legal language, and some lawyers and politicians are better than that than others - hence the reason we have crap laws like the DMCA.

    9. Re:I like legal analogies by ceoyoyo · · Score: 1

      Limit things to written contracts, leases, etc. I didn't suggest having MORE contracts, just making the formal ones a little, well, clearer. If it were done properly I think you could set it up so that they were easier to write, not harder.

      For example, I recently reviewed an IP transfer contract. The terms stated that party A would pay party B $50,000 for every $1,000,000 of gross sales. 5% right? Nope. Anywhere from 0% up to 5%, depending on exactly how much gross sales are. That sort of misleading language should be banned.

      Every field has it's jargon, but the examples you gave from computer science are English words picked to name specific things and the English words are actually good descriptions of those things. There are a few fields that purposely use foreign languages (especially dead languages!) to name things.

    10. Re:I like legal analogies by mOdQuArK! · · Score: 1
      In other words, there's always that 0.01% chance that a hole could be poked somewhere in the legalese, no matter how well-written the legal document is.

      At least part of that problem is due to the ambiguity of the "programming language" that the law is written in, however, which is exactly why I was suggesting requiring that legal documents be written in a machine-parseable unambiguous "legal" language.

      If the language were not ambiguous, then legislators could turn their attention to "debugging" (law doesn't do what they intended) or design (law doesn't have the effect that they intended). In either case, being able to "run" the new law against various population simulations would be a useful way for them (the legislators) to determine the probable effects of any legislation (one more alternative viewpoint rather than trusting to gut-level or ideological forecasting).

  11. Re:My favorite: A Christmas Carol by Anonymous Coward · · Score: 1, Insightful

    LOC != complexity.

  12. My analogy by Rosco+P.+Coltrane · · Score: 4, Interesting

    When it comes to people who aren't in the code, my explanations fall flat.

    Before I changed line of work (I'm not a computer professional anymore thank goodness), I used to explain my work like this:

    See, what I do is programming. Programming is like writing a cooking recipe, only slightly more complex but not much more. But it's a very large recipe, and it relies upon many more recipes to make an actual dish (the program). Many cooks write recipes in different languages separately, and all we cooks have to coordinate to prepare the final dish. So we need chief cooks (managers) that call meetings and prepare Gantt charts to do that. Then sometimes a cook writes a recipe that has the wrong combination of ingredients, or that make no sense to describe how to prepare food (bugs), so we need tasters (QA) to tell us busy cooks if the overall result will be pleasing to the restaurant's customers. In the end, you get a huge dish that has some nasty morsels in it, as well as tasty ones. We then have to refine the dish so the nastyness goes away and more goodness goes in (new versions). etc etc...

    The cooking recipe analogy has always worked great to explain what I did.

    --
    "A door is what a dog is perpetually on the wrong side of" - Ogden Nash
    1. Re:My analogy by Mignon · · Score: 3, Insightful

      I know exactly what you mean. My customers come to me and say, "I'm hungry and I want a healthy meal! I like ice cream, cookies and liverwurst. To eat it, I've brought my favorite chopsticks and a slotted spoon. Oh, and can I get that to go?" And after I make it, they point out how they're allergic to milk products.

    2. Re:My analogy by BMazurek · · Score: 1

      Thanks. This is the first response I've seen that is at least along the lines of the response I was hoping to get. My problem with these sorts of explanations, is it still doesn't capture the complexity.

      When you're writing code that you've never seen anyone do before. Doing things across multiple languages, building infrastructure. But because you've never seen anything like this, and certainly never looked at the code for anything similar, how do you explain why your time estimates can be so off?

      Alternatively, why does the industry have so much difficulty with deadlines? What makes development complexity defy good planning? Are we really an entire industry of bad planners? Not all software projects take longer than expected to develop, but those are either relatively simple or relatively straightforward. When software becomes complex and / or more researchy, it appears the complexity overtakes our ability to propertly estimate.

      Why?

      The best example I had (especially for the more R&D-y projects) was this: you're given a vague drawing of a scene. It's a relatively tight photograph. You think the scene is in L.A. (or some other sufficiently large city). Go find the photograph. All you have is a vague out-of-focus sense of what it is you're looking for.

      Now some people might complain that what I'm describing is a poorly designed system or poorly described requirements. That may be partially true, and that may be the case for the more straight-forward projects. But when you're doing something relatively unique, all you have is a known destination (an in-focus picture), not the actual location (where the photo was taken).

    3. Re:My analogy by pete-classic · · Score: 1

      You forgot the part where if you put the paprika in one step too soon it will kill everyone who eats it and put you out of business.

      Oh, and that it is often not obvious just when is too soon, so you have to find out experimentally.

      Why yes, yes I do work in QA.

      -Peter

    4. Re:My analogy by dheltzel · · Score: 1
      Before I changed line of work (I'm not a computer professional anymore thank goodness)

      Wow, no wonder you changed your line of work. Personally, I like using the Gantt charts to choke the tasters, then blame it on the chief cooks so you can go get some actual work done.

      I realized that comment was in bad taste (and probably tastes bad). I would never actually do those things or otherwise condone workplace violence. (It's such a pain to post non-AC)

    5. Re:My analogy by Senzei · · Score: 1
      I know exactly what you mean. My customers come to me and say, "I'm hungry and I want a healthy meal! I like ice cream, cookies and liverwurst. To eat it, I've brought my favorite chopsticks and a slotted spoon. Oh, and can I get that to go?" And after I make it, they point out how they're allergic to milk products.

      So that's where my boss goes for lunch all the time.

      --
      Slashdot: Where anecdotes and generalizations can be freely substituted for facts, logic, or intelligence
    6. Re:My analogy by Anonymous Coward · · Score: 0

      That is so wrong and confusing I think people are just agreeing with you to get you to be quiet.

    7. Re:My analogy by Anonymous Coward · · Score: 0

      Besides being a poor analogy, you are misapplying the internals of the recipes/dishes scenario. It takes one recipe to make one dish. A large recipe is just a complex dish. You don't explain what having the wrong combination of ingredients equates to. You make an incorrect correlation between an incomprehensible recipe and defects. An incomprehensible recipe would equate to poor or non-existant specification. Your analogy is so infuriatingly poor I can't keep my composure to even finish replying to it.

    8. Re:My analogy by SauroNlord · · Score: 0

      How often do you rewrite the recipe? What about make it operable with other recipes?coding a large software system is like building a tourist resort or at least a Building. Writing is a bad analogy

  13. it's like serving food at a restaurant by silvermorph · · Score: 3, Interesting

    If you're looking for the perfect 4-course meal at a fancy restaurant, you need to match flavors, textures, and colors from a lengthy menu, weigh the transitions from appetizer to main course(s) to desert, and fit in the perfect glass of wine and the ideally sized, shaped, and sweetened dessert.

    Only it's a 100-course meal, the menu is 1000 items long, there's a cellar full of wines (most of them are unpronounceable) and it takes months to find a sequence that people will even TRY to eat all the way through.

    And even then, they probably won't be satisfied enough to tip you very well, so you keep making slight tweaks to the courses until someone finally gives you the tip you want. At that point it's good enough, but everyone knows it's never perfect. (And they call you on it, too.)

    As soon as someone notices that you're making a decent tip, the owner invariably decides they're going to serve Chinese food instead, so you start over.

    1. Re:it's like serving food at a restaurant by eddeye · · Score: 1

      Only it's a 100-course meal, the menu is 1000 items long, there's a cellar full of wines (most of them are unpronounceable) and it takes months to find a sequence that people will even TRY to eat all the way through.

      Nice try, we know who you really are.

      --
      Democracy is two wolves and a sheep voting on lunch.
    2. Re:it's like serving food at a restaurant by Jakeypants · · Score: 1

      And of course, when dinner is served, the person eating the food is going to ignore the eating instructions, stab themself in the face with their fork, throw their food all over the place, and complain to you about it.

  14. Re:My favorite: A Christmas Carol by elronxenu · · Score: 1

    Not only that, but 250 copies of A Christmas Carol where if you get a word wrong, the whole novel may crash and burn.

  15. Re:My favorite: A Christmas Carol by Clueless+Moron · · Score: 2, Insightful
    Well, you could do that. You could also compare it to the Bible, which is about 4M.

    Or you could compare it to a DVD of "Dumb and Dumber", which at 4.7G is 188 times bigger than your 25M quarter-million line code project.

    In short, bulk? Don't go there.

  16. Re:My favorite: A Christmas Carol by Marxist+Hacker+42 · · Score: 1

    True- but novels= complexity in people's minds, and they're always measured in numbers of words. Note- I only put forth my quarter-million lines of code project as an example- the real comparison is space taken up by the source code of both the novel and the project. 25 MB is 250x 100kbytes....

    --
    SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
  17. Teach them to program. by DrJimbo · · Score: 1
    As you have discovered, it is not possible to teach people about abstract concepts in terms of other abstract concepts they don't already understand.

    You time will be better spent teaching them the basics of programming that will give them something concrete upon which to build abstractions.

    I suggest using an elementary teaching aid such as the Cardiac Cardboard Computer. You can still buy them or you can download pdf's and make your own. I don't know about the legality of the downloads.

    --
    We don't see the world as it is, we see it as we are.
    -- Anais Nin
  18. Re:My favorite: A Christmas Carol by ceoyoyo · · Score: 1

    Not only that, but misspellings and grammar mistakes are the least of your worries. More important is that everybody reading it interprets the meaning of the sentence/chapter/paragraph in exactly the same way you do.

    If that were the case imagine how many English degrees there wouldn't be.

  19. Re:My favorite: A Christmas Carol by Rosco+P.+Coltrane · · Score: 4, Funny

    Easiest way I've found- though it's begining to get a bit outdated thanks to bloatware. Charles Dicken's famous novel is about 100k.

    You're way behind my friend: data bloat has grown so much these days it isn't measured in Charles Dickens units anymore, it's measured in tax code units:

    - 1 tax code = 25MB
    - 1 tax code table of content = 300KB (to measure smaller data units)

    And no, I'm not kidding, the complete internal revenue code really is that big.

    --
    "A door is what a dog is perpetually on the wrong side of" - Ogden Nash
  20. Re:My favorite: A Christmas Carol by frosty_tsm · · Score: 1

    Actually... it's pretty close, but not for the same reason.

    Roughly speaking, adding more lines of code (or compressing what should be multiple lines into one) adds more complexity to the application (when you look at debugging, maintaining, and improving it). It is not a measure of value, but can demonstrate how complex an application has become.

  21. Software as a machine by Profane+MuthaFucka · · Score: 5, Insightful

    Make a rough analogy. Every line of code is a part of a machine. It interconnects to other parts.

    -A mouse trap has maybe 4 or 5 parts.
    -A transistor radio has perhaps 100 parts.
    -A 35 MM camera has maybe 200 parts.
    -What does a car have? 10,000 - 50,000 parts?
    -An airplane? 200,000 parts?

    -A smallish computer program has between 10,000 and 50,000 lines of code.
    -Something like an OS kernel might be between a million and 50,000,000 lines of code
    -A typical commercial billing application might have 300,000 lines of code.
    -A nice set of apps to run telephony switches might have 10,000,000 lines of code.
    -Even your stupidest sort of hackish utility has 100 lines of shell script.

    Programs are gigantic machines - you just can't see them or weigh them.

    --
    Fascism trolls keeping me up every night. When I starts a preachin', he HITS ME WITH HIS REICH!
    1. Re:Software as a machine by Snowhare · · Score: 1

      Bingo.

      The last sentence is the whole thing in the most concise form I have ever seen it stated.

    2. Re:Software as a machine by Surt · · Score: 1

      The boeing 747 is composed of roughly 6 million parts.
      http://www.boeing.com/news/feature/747evolution/74 7facts.html

      I can't find a cite, but I'd guess you are off by an order of magnitude on the car as well.

      --
      "Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
    3. Re:Software as a machine by WedgeTalon · · Score: 1

      Exact accuracy in number of parts is not needed. Rough numbers work good as the examples are only given to show relative complexity of different well-known machines.

    4. Re:Software as a machine by Surt · · Score: 1

      Yes, though I thought there was a clear implication that the author thought our work was more complicated than the work that goes into an airplane by a wide margin, my point was to make people aware of just how complex a beast an airplane really is, and that most of us will never work on a program quite that complicated.

      --
      "Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
    5. Re:Software as a machine by Profane+MuthaFucka · · Score: 1

      I was thinking of a smaller airplane, but adding the 747 data point is good. It shows an approximate upper limit to the number of parts on a modern airplane.

      --
      Fascism trolls keeping me up every night. When I starts a preachin', he HITS ME WITH HIS REICH!
    6. Re:Software as a machine by ElderKorean · · Score: 1

      -A mouse trap has maybe 4 or 5 parts.
      -A transistor radio has perhaps 100 parts.
      -A 35 MM camera has maybe 200 parts.
      -What does a car have? 10,000 - 50,000 parts?
      -An airplane? 200,000 parts?


      I liked your examples, but there is another side to comment on.
      What about approx. useable life (mostly guesses + personal experience)?

        Airplane - 10-20+ years
        Car - 5-10+ years
        35MM Camera - 3-10 years
        Transistor radio 2-5 years
        Mouse trap - 1 year

      assuming everyday use.

      Planes and cars get regular service and preventative maintenance. (my car doesn't)
      That one thing alone helps them outlast the much simpler devices.

    7. Re:Software as a machine by CaseyB · · Score: 1
      I think that vastly oversimplifies the complexity of building a real machine.

      A "line of code" contains 3-10 operations, each of which require no further elaboration -- they are perfectly discrete, ideal parts that always work exactly the same way, even when used in completely different situations.

      For a real machine, on the other hand, each part requires a complete design and build cycle of its own. How many "operations" would it take to describe the shape and material of a single part? Hundreds if not thousands.

      Manufacture is also an analogue process, with varying tolerances and margins of error. Even simple things like screws and bolts can be hard to deal with, when you have to worry about their performance at extreme temperatures or under unexpected loads. Also, unlike bits, they age. So you also have to account for their decreased performance and eventual failure modes. Once you start having to machine complex custom parts, these problems increase exponentially.

      Comparing the manufacture of a 100,000 part machine with a program of 100,000 lines is laughable.

    8. Re:Software as a machine by Profane+MuthaFucka · · Score: 1

      I'm not talking about manufacturing, so I don't really know what you're talking and laughing about.

      Get a blueprint of an airplane with a half million parts. Get a half million lines of code. I'm just saying that the effort to understand either system in your brain is going to be about the same.

      --
      Fascism trolls keeping me up every night. When I starts a preachin', he HITS ME WITH HIS REICH!
    9. Re:Software as a machine by Profane+MuthaFucka · · Score: 1

      An analogy is just an illustration of an idea, not the idea itself. I am not saying that a computer program operates just like a machine, or that the example applies in all situations, rigorously.

      The question was how do I explain this thing to people. That calls for an example - an analogy. The analogy of a computer program to a machine is a good way to illustrate the concept that programming is more than just typing on a keyboard.

      --
      Fascism trolls keeping me up every night. When I starts a preachin', he HITS ME WITH HIS REICH!
    10. Re:Software as a machine by Anonymous Coward · · Score: 0

      what about embedded systems

      you get the complexities of both, i have done a little development with them, a little daunting to say the least

    11. Re:Software as a machine by Profane+MuthaFucka · · Score: 1

      As I said before, an analogy is not an argument. I wasn't intending for it to be a bulletproof, watertight analogue of computer systems that hold up to every conceivable argument and angle of attack.

      The analogy is an illustration. Since the original request was how to give complete noobs something of an idea of why computer systems are so complicated to work on, I came up with an analogy. For giving noobs that picture which might illustrate the point, my analogy seems to work. For arguing about the finer points of priority inversion in operating system schedulers, it's obviously useless.

      --
      Fascism trolls keeping me up every night. When I starts a preachin', he HITS ME WITH HIS REICH!
  22. Spaghetti by Zork+the+Almighty · · Score: 1

    I tell them it's like chopping up your bowl of spaghetti and trying to build a model ship.

    --

    In Soviet America the banks rob you!
    1. Re:Spaghetti by Blakey+Rat · · Score: 1

      How are those two things related? Or do you mean building the model ship *from* the spaghetti? ;)

  23. Easy. by Anonymous Coward · · Score: 1, Informative

    The difficulty arises when a programmer tries to teach someone that isn't even computer savvy programming in two minutes or less. It'll never work! Instead of trying to teach programming, simply explain the level of difficulty.

    They usually have an intimate understanding of their field of expertise. Pick a complex process from that field and ask them to detail it mathematically. Or better yet, ask them to detail it using nothing but ones and zeros.

    They'll think it's a joke at first but, assuring them that you're serious and that it is that complex, they'll start to understand. They'll also probably not need the lesson in programming to understand that it's complex.

    Otherwise, you could just piss them off by using the standard line; 'It's technical. Someone like you really wouldn't understand.' Then stand back and watch their blood boil.

    1. Re:Easy. by koreaman · · Score: 0

      I've never heard of a programmer who actually uses the cliched "ones and zeroes". You're lying to make programming sound harder than it is.

    2. Re:Easy. by Blakey+Rat · · Score: 1

      In one of the Red Mars books, a scientist was dedicating the remainder of his life to solving the problem of human immortality, and there's a passage in the book that's very similar to what you just typed. How there are millions of miles of blood vessels, thousands of chemical reactions, millions of brain cells all firing at just the right moment... and the more you know about how the human body works, the more amazed you are that it works at all.

      I think that applies to everything. I'm constantly amazed that the Internet hasn't collapsed under its own weight yet. And thinking about how a car basically powers itself by *exploding* a hundred times a second, and yet the engine will run for decades without major maintenance, blows my mind.

  24. Re:My favorite: A Christmas Carol by Anonymous+Crowhead · · Score: 1

    I disagree. What's more complex? A 100 line verbose function or one that does the same thing using recursion but is only 10 lines. A trash novel or a haiku?

  25. feh by bunions · · Score: 1

    "Software entities are more complex for their size than perhaps any other human construct because no two parts are alike"

    I don't believe this. I think developers think that's true because they haven't been exposed to other large constructs.

    I tend to think it's complex because we haven't figured out a really good way to do software engineering yet. Just like every car was handmade and fragile when horseless carriages were first concieved of, software today is handmade and fragile. Someone, somewhere will eventually figure out how to grow it or make it on assembly line or whatever.

    --
    there is no need to sign your posts. this isn't usenet. your username is right there above your post. stop it.
    1. Re:feh by epee1221 · · Score: 1

      Someone, somewhere will eventually figure out how to grow it or make it on assembly line or whatever.
      A car is a replicable solution to a common problem. Thus cars can be mass-produced (manufactured).
      A specific piece of software may be a replicable solution to a common problem (MS Word fills the common need for a word processor) or a specific solution to a relatively unique problem (some billing application fills a company's need to automate its own billing procedures). Software of the first type already is mass-produced (copied onto millions of disks). Software of the second type is not mass-produceable like cars are because each piece of software is made to solve a problem so specific that it is not likely to appear again.

      --
      "The use-mention distinction" is not "enforced here."
    2. Re:feh by bunions · · Score: 1

      "Software of the first type already is mass-produced (copied onto millions of disks)"

      The idea that you're 'mass producing' software because you press a lot of CDs is preposterous. By 'mass production' I mean some production methodology like an assembly line or similar industrial process.

      "Software of the second type is not mass-produceable like cars are because each piece of software is made to solve a problem so specific that it is not likely to appear again."

      No, but eventually someone will figure out how to do software engineering that produces software components people will put together in the same way people put together hardware today.

      --
      there is no need to sign your posts. this isn't usenet. your username is right there above your post. stop it.
    3. Re:feh by GuyWithLag · · Score: 1

      Sigh. What you describe already exists - look up compiler, assembler and linker.

    4. Re:feh by bunions · · Score: 1

      Sigh. That's not what I'm talking about. As a programmer for the past 10 years, I am familiar with compilers, linkers and even assemblers.

      What I'm saying is that the idea that software is the most complex structure built by man is just a programmers vanity, compounded by the fact that we haven't figured out how to build large applications in the same systematic, stuctured way we build real-world objects. At some point, someone will figure out what the software analogue to an assembly line is, and programs will become far more inexpensive and reliable.

      --
      there is no need to sign your posts. this isn't usenet. your username is right there above your post. stop it.
    5. Re:feh by phlamingo · · Score: 1

      Wrong.

      Comparing software development to automobile mass-production is like comparing automobile design to pressing CDs that contain software. They are at different ends of the process.

      And if you think that automobile design is a solved problem, you haven't been paying attention to recalls.

      Software design and development is a Hard Problem. Designing and developing anything well (including software) requires smart people to work very hard.

      --
      I had forgotten how much cooler teenagers look when they are smoking. Oh, wait ...
    6. Re:feh by bunions · · Score: 1

      "Software design and development is a Hard Problem. Designing and developing anything well (including software) requires smart people to work very hard."

      I never said otherwise. What I did say was that it was not necessarily any more complex than building any other large structure. Further, I believe a lot of the complexity is an artifact of our poor understanding of good ways of doing software development, and that at some point, someone will figure out A Right Way to do things.

      --
      there is no need to sign your posts. this isn't usenet. your username is right there above your post. stop it.
    7. Re:feh by epee1221 · · Score: 1

      The Escort owned by the family next door is basically the same car as the Escort owned by the family across the street. The copy of Microsoft Word used by the family next door is basically the same as the copy of Microsoft Word used by the family across the street. These are mass-produceable products.
      The billing software used by the employer of the phone technician who lives next door is quite different from that used by the employer of the gas station attendant who lives across the street across the street. These are not mass-produceable products.

      The idea that you're 'mass producing' software because you press a lot of CDs is preposterous. By 'mass production' I mean some production methodology like an assembly line or similar industrial process.
      Then the idea that you're 'mass producing' cars because you make a lot of Escorts is also preposterous.

      No, but eventually someone will figure out how to do software engineering that produces software components people will put together in the same way people put together hardware today.
      There are these things called "libraries." They are basic software components which can be put together by a software developer.

      --
      "The use-mention distinction" is not "enforced here."
  26. Re:My favorite: A Christmas Carol by Marxist+Hacker+42 · · Score: 1

    I think I'll use that at our next team meeting when the project manager asks why something breaks every time we fix something else.

    --
    SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
  27. Pretty easy by c0d3h4x0r · · Score: 1

    Think about how complicated a car is.

    Think about how difficult it must be to design something that complex.

    Computer programming is thousands of times more complicated than that.

    --
    Moderator hint: a comment is neither "Flamebait" nor "Troll" if it is true.
    1. Re:Pretty easy by witte · · Score: 1

      Nonsense.
      (...although I can understand why this would be a popular thing to say around here.)

      Programming only has to be complex if you don't invest some of your time preparing, structuring, and planning before you start coding. (at least 10% of your time, >30% for complicated systems.)
      Cars and their production lines are not puzzled together on the fly without proper analysis, architecturing, process design, etc. When creating a complex piece of software, the same applies.

      Of course, you may choose to proceed without thinking about what you are doing, and go Rambo-style in you programming environment. Although this is a pretty stupid thing to do, it is certainly a way to make programming more difficult than designing a car :)

  28. Program Complexity != Word Count by Rob_Warwick · · Score: 1
    At University, during the end of the semester when my friends were all writing essays like mad, or in my case writing code, I ran into the disconnect that exists between programming and some other disciplines.

    First off, friends would say that they had four essays, with exact word lengths for all of them. In the course of talking about what we all had to do I got asked how many pages my final project was supposed to be. Naturally I said that I didn't have a set page length, as long as it worked and was written efficiently and with good form.

    Programming can't be correlated to word counts. Talented programmers can do stuff with less code. Bad programmers can do stuff with much, much more code. Clever programmers can do the same stuff with tiny amounts of code, but $DEITY help the poor guy who has to maintain it.

    If you're just trying to get across a general idea of how complex code is, I'm somewhat fond of the 'full course meal' analogy. It's like cooking anything from a snack to a twelve course meal for a large number of people. Even though each dish is independent (if you do it right, I'd hate to see a dinner without good division between the dishes), each of them affects the meal as a whole as well.

    1. Re:Program Complexity != Word Count by hackwrench · · Score: 1

      Yeah, and you can submit the same essay to more than one class!

  29. design and mapping by Darth_Burrito · · Score: 3, Insightful

    Software development is hard because at its core it's as much about design and invention as it is about implementation. Implementation, in the general sense of the word, is often fairly easy. You have a plan, possibly a well known and understood plan, you can track progress, things are more predictable. With design and invention, you are often in unexplored territory so it's hard to tell where your next steps should take you and it's hard to track the progress you've made to date. What makes software development even harder, is often that the customers don't actually know what they want nor can they really be expected to know what they want. Problems are often not well understood.

    One analogy that I've always liked is to look at software development as a mapping problem. When you start, you're pretty much dropped in the middle of nowhere without much understanding of the surrounding terrain. You then have to go exploring the area around, get an understanding of the feature space. Maybe the best approach is to climb a mountain or a hill, implement or design a major well understood component, and see what you can see about the area around you from that peak. You make little scribbles and notes on your makeshift map outlining what you've seen from the top of your mountain. Later, you climb a different mountain and all of a suddent everything looks completely different from the new perspective and you realize large parts of your old scribbled map are wrong. Maybe walking in between mountains one day you discover a large impassable ravine that was masked from above by foliage. Your in unexplored territory and there can be lots of surprises and setbacks.

    Only, I think this kind of mapping analogy really falls short because it only takes into account a single perspective, that of the developer, and it assumes there is some well defined terrain that just needs to be discovered. In reality, the terrain being explored is much more mercurial. Much of it is visible only through the inconsistant and confused descriptions of customers or other developers. It's quite possible that the mountain you climbed yesterday, and the things you saw from the top, will not exist tomorrow.

    Anyways, that's the best I've got at the moment. It probably doesn't make much sense, but then, what does?

  30. I like the cooking analogy, but also stress DESIGN by arete · · Score: 3, Insightful

    I like your cooking analogy, but there's one thing missing:

    One thing I can't stress enough to people is that programming is all DESIGN/ARCHITECTURE. The "do" part is essentially instantaneous. You figure out how to do something and write it down, in every minute detail (in code) and it's basically done. Then you compile it (or not even for some things). This process is nearly instantaneous (perhaps minutes but never days for almost any project, and never something you need to do yourself...)

    To expand your cooking analogy, it would be like you work really hard on these recipies, but whenever you want you can "zap" create a new set of dishes. (Except that then you have to taste them all again to make sure your changes are ok..)

    This is fundamentally different from the construction of anything else ever in my opinion. Code is akin to a recipe or blueprint. The "compile" part of programming, which takes zero work on the part of the programmer, replaces what is one of the longest and most costly parts of developing anything else.

    Furthermore, it replaces the only part that you can reliably predict the duration of - making it very, very difficult to predict how long it will take to develop a piece of software.

    I think it's important to realize that this makes software much faster to develop - if less predictable - but therefore we develop much more complex things in software. So to borrow from another analogy I saw here - because we don't have to physically build them, the expectation when building a car is that it'll have every feature of any car, boat, bicycle or plane that ever existed.

    (The other important ramification is that it never saves developer time to remove an existing feature - and in an agile development process it may take more time to DECIDE whether a feature is important than it would have to simply implement it.

    --
    Looking for freelance Actionscript (Flash/Flex) or ColdFusion work and/or freelance developers. Email me, put Slashdot
  31. moving parts by museumpeace · · Score: 1

    A lot more people know something about cars than about software. There is an old rule of thumb that a line of code adds about as much complexity [design complexity, implementation complexity, maintenance complexity] as adding one moving part to a mechanical system...and cars are the one mechanical system most people have experience. [just pray they don't ask about the computer chip in todays cars...which in general, has saved detroit from a horrendous complexity of mechanical feedback systems that would otherwise accomplish pollution control] Cars also have subsystems, eg electrical, transmission is a complex gizmo in its own right etc. so composition of systems from subsystems...one of the essential aspects of modern software, has a good analogy in the automobile. And besides...nobody likes to sound stupid: they might be ok with saying your explaination of software is confusing but they won't admit the car analogy is over their heads...just talk, they'll nod and shut up and leave you alone pretty soon so you can go back to coding.

    --
    SLASHDOT: news for people who can't concentrate on work or have no life at all and got tired of yelling back at the TV.
  32. why it's not like building a house by davez0r · · Score: 2, Insightful

    if someone building a house does something the same way more than once, it's a good idea. they use what they know works, and apply it over and over again. maybe some variations on a theme, maybe add another story here or a differently angled roof there.

    but software is different. if you're doing something the same way more than once, it's generally a warning sign that you could be doing it better somehow. following that to its logical conclusion, a good programmer will never do the exact same thing twice. meaning that, as a good programmer, you're always doing something you've never done before.

    that is why programming is hard.

    it's like being an automobile manufacturing plant that never produces the same car twice. one day it's a civic hybrid, the next day it's an M1A1 tank, and the day after that you need two vespas, one that runs on gas and one that runs on fryer oil.

    1. Re:why it's not like building a house by Aceticon · · Score: 2, Insightful

      but software is different. if you're doing something the same way more than once, it's generally a warning sign that you could be doing it better somehow. following that to its logical conclusion, a good programmer will never do the exact same thing twice. meaning that, as a good programmer, you're always doing something you've never done before.

      Strangelly enough i have two counter arguments at different levels:

      1) Purelly in a programmer as coder sense, a good programmer will do the same thing EXACTLY twice. At that point said good programmer figures out he/she is doing duplicate code and moves that code to a separate method/class which gets called from both places.

      2) At the higher, designer level, it's my experience that most software is composed of parts/features which are conceptually the same as those used in other, apparently unrelated applications. Things like persistent data storage (usually a db) and how to access it, configuration, error handling, administration user interfaces, user roles, validation of user input, interface adaptors and much more, are recurrent themes in most software. The small details vary but the patterns of how to do/use these things are most of the time the same.
      Because of this, design level solutions that work can be used over and over again - only the coding might be different, and even at code level, the commonalities can be detected and extracted to an external library/framework (for example a database access framework), and only the glue and situation specific code has to be (re)implemented.

      The idea of always doing things anew because each time you know more than the last one is complete nonsense IMHO. To be a beter programmer it's much more important to be able to do more stuff and bigger stuff as seen from the point of view from the users/clients (ie software features, NOT lines of code) than it is to rewrite something from stratch in order to shave 2ms of generating a web-page to show to an user.

      In my experience, rewriting something because of the gains you get from your increased experience is only worth it when you either have little experience or are doing something completly new for the second or third times.

  33. Complexity by Anonymous Coward · · Score: 1, Funny

    I tell people to imaging drawing a simple window on the screen
    with text. Now your job is to make any one line of text
    slide right when you hold down any one key. simple, right?

    Ok, here's a sheet of paper that has text on it.
    And here is a Royal mechanical typewriter.
    Modify the typewriter to slide the text right when i hold down
    the L key.

    Oh, and I need it working by tomorrow.

  34. Re:I like the cooking analogy, but also stress DES by Eneff · · Score: 1

    In other words, the better the kitchen, the more reliable the dishes will be, and the faster the cooks will be.

  35. Why is software complex? by maxume · · Score: 2, Interesting

    Because it interfaces the most complex product of evolution(people) with the most complex creations of those people(computers and software). Computers are utterly rigid in what they do, and humans are nearly infinitely variable. Dealing with the differences, with a comparitivly small amount of experience, is hard.

    Some software is pretty simple, because it solves simple problems. Is it any wonder that it often takes a complicated system to solve a complex problem?

    --
    Nerd rage is the funniest rage.
  36. For the visual folks... by kschendel · · Score: 2, Insightful

    I've had some success illustrating the challenges of programming to the more visual or artistic types with this. Then you tell them to multiply that by tens of thousands, at least.

  37. Re:My favorite: A Christmas Carol by Anonymous Coward · · Score: 0

    In general, more lines(useful, functional lines) = more complex, simply because there will be more than what we can hold in our conscious memory at one time. Extremely slimmed-down, tweaked, and optimized code can become nasty, too, but it will usually take more developer time to make the code that small than to do it in a naive, straightforward way, get it "good enough to use," and then move on.

    One of the reasons higher-level languages are always touted as being better for rapid, maintainable development is because they can use fewer LOC in almost every area, from the heading boilerplate to the number of expressions used in each algorithm.

    So yes, I would say that LOC are a good way to go about explaining it to the layman. The per-line complexity is merely a technicality if you're talking about any sort of sizable project, because it will almost always average out to some medium-low level of complexity, even if some bits are very clever. (though as the project gets bigger the average complexity is likely to creep upwards as features start conflicting with each other)

  38. Software is Communication -- that's why it's hard. by Anonymous Coward · · Score: 1, Insightful

    Ask them if they've ever seen a foreign movie with really bad subtitles. Ask them why something that seems so easy is so badly done. Ask them if they've ever had to explain something to a child who's only response is "Why?".

    Everything that goes wrong with software is a result of miscommunication. From failed projects, to difficult algorithms, to null pointers. Programming is taking difficult to communicate ideas and concepts of human creation and translating them into the most literal and OCD afflicted of entities -- a computer.

    You can talk about system size, deadlines, complexity, etc., but it all really boils down to communication. UML, JavaDoc, unit tests, forms, screens, blah blah blah. "Exactly what I asked for and not what I wanted."

    Communication is difficult enough between two intelligent adults sharing the same goals. Now imagine trying to explain something to a machine.

  39. obligatory... by jannesha · · Score: 3, Funny

    emacs would make a *great* operating system, if only it came with a decent text editor.

    (I'm sure you've all heard that one before)

    1. Re:obligatory... by Jesus_666 · · Score: 1

      Maybe one could modify emacs to use vi as the editor...

      --
      USE HOT GRITS WITH STATUE OF NATALIE PORTMAN (NAKED AND PETRIFIED)
    2. Re:obligatory... by Anonymous Coward · · Score: 0

      You know, emacs does come with a perfectly fine vi implementation built-in. Type esc-x viper to start it up.

    3. Re:obligatory... by brunson · · Score: 1

      M-x vi-mode

      vi is such a trivial subset of the functionality of emacs that it's have a vi mode for well over 15 years.

      --
      09F911029D74E35BD84156C5635688C0
      Jesus loves you, I think you suck
    4. Re:obligatory... by Anonymous Coward · · Score: 0

      Of course, when people say vi, they think of vim, which of course beats the living daylight bazookawhore monkeyfuckingpoo out of emacs. So there.

    5. Re:obligatory... by Anonymous Coward · · Score: 0

      Monkeypoo, I say!

  40. Think of this by GWBasic · · Score: 1

    Think of every if statement and loop as a moving part. Using the analogy, a computer program is like a machine with thousands of moving parts.

  41. Think Geek T-Shirt... by __aaclcg7560 · · Score: 1

    How do -you- explain software development complexity to non-developers? What analogies do you use?

    There's a T-shirt that sums it up nicely: I See Dumb People

  42. Easy. by Kaenneth · · Score: 2, Interesting

    "The main processing unit in a computer has Millions of transistors, which are like little switches, turning on and off. These switches flip automatically Billions of times a second. Every second Quadrillions of switches flip, and if a single one goes wrong the computer 'crashes'. That's not even counting the Memory, or the Graphics card, or all the extra devices from Hard Drives to Tempurature sensors that are hooked in. All of these switches are controlled by programs that were written by the combined efforts of thousands of people, most of whom have never met each other. I'm continually amazed every second that a modern computer keeps running."

  43. Why are you doing this? by twitter · · Score: 0
    I can't tell you how to explain software complexity until you tell me why you are doing this, who your are trying to convince and what aspect of "complexity" you want to relate. My general answer is that software is no more complex than any other practical task. My specific answer varies by audience. Talking to people who have never done a practical thing in their lives is different from talking to tradesmen or engineers. Most importantly, what you are really trying to achieve makes a difference. Why are you doing this?

    I can think of a few legitimate reasons and many less honest goals. The world is awash with non-free propaganda, which is designed to make the user feel helpless. "Here there be dragons, trust us and stay out," they tell us at every turn right before blowing their horn about how many million lines of code they have bought and hacked together. Raise my spirits with a story of educational and respectful conversation. I'd love to hear about it.

    --

    Friends don't help friends install M$ junk.

    1. Re:Why are you doing this? by Anonymous Coward · · Score: 0
      Who modded this up??

      Talking to people who have never done a practical thing in their lives

      What? And who the heck would that be? What do you mean? How can you write something so meaningless? To pad your post?

      My general answer is that software is no more complex than any other practical task.

      You have it wrong, this is about software development, an activity that is obviously completely alien to you. It's not about telling people where the "exit" button is in KDE, it's about writing the exit button (or whatever).

      The world is awash with non-free propaganda

      What? What the hell does that have to do with anything? Are you back to the old "evangelizing" thing? Please don't start comparing the Gestapo or the Chinese secret police with Microsoft here, OK?

    2. Re:Why are you doing this? by BMazurek · · Score: 1
      • I can think of a few legitimate reasons and many less honest goals. The world is awash with non-free propaganda, which is designed to make the user feel helpless.


      My wife would like to understand. :) Is it legitimate? Certainly. Is it less than honest. I don't think so. She's definitely non-technical, but exceptionally smart. Her reaction is generally "just plan better". I argue that the industry has been struggling with this issue for decades. I don't think we're all morons to have built so much infrastructure and come so far, but we still can't solve the simple parts like accurately identifying how long it will take us to accomplish our goal.

      My wife is just one of several I'd like to talk to about it. They're mostly other non-technical people, although a couple may have engineering or physics backgrounds.

      • Raise my spirits with a story of educational and respectful conversation. I'd love to hear about it.


      Hopefully, your spirits have been raised. Now soar...

  44. Relationships in the modern era... by hackwrench · · Score: 1

    Given the dying state of society, I find anyone suspect when they claim to have a boyfriend or girlfriend. If people against homosexuality spent as much time helping people get together as they did harping against homosexuality, I wonder if there wouldn't be as much homosexuality because it seems some of it is due to lack of options.

    1. Re:Relationships in the modern era... by SpacePunk · · Score: 1

      Bah, there are always options. You just fail to recognize them for what they are.

    2. Re:Relationships in the modern era... by hackwrench · · Score: 1

      Fine, I'll just tell that to my imaginary friends, as those are the only kind you can meet these days.

    3. Re:Relationships in the modern era... by SpacePunk · · Score: 1

      LOL, ok Exidor.

    4. Re:Relationships in the modern era... by SpacePunk · · Score: 1

      But, seriosly, remember that girl that smiled at you today (yes, it happens every day)... you could have your face between here tits, shakin yer head, making "bbbbbbbbbbb" noises in less than a week if you recognized her smiling at ya. If not, well you need to get out of the basement.

  45. It's not horribly complex. by SanityInAnarchy · · Score: 2, Insightful

    Ok, it's complex enough. But, the examples I'm seeing in these comments, while they will impress people, are just a bit extreme.

    For instance, the analogies around building a car. No, software is all about design. When building a car, you have to deal with real, physical possibilities and impossibilities. In software, if your design is good, the components are flawless.

    Also, abstraction helps. A lot. The example of 25 megs of source vs a 100k Charles Dickins novel isn't relevant unless I actually have to work on all 25 megs -- that, and english can often be much more compact. I often make a point of showing people Bash one-liners as an example of good abstraction -- probably millions of lines of code went into what I just did, but I only needed one line of code to make all that other code work together.

    When it comes to explaining program complexity, it really depends what misconception the person has. The most common one is that computers are capable of some form of human-like thought -- the form varying from person to person. However, it's usually easier to convince people that something isn't possible than that something is possible, because people are used to thinking of computers as huge, complex, rigid, and buggy.

    Honestly, though, the best way to teach someone why programming is hard is to teach them to program. Second-best way is to teach them philosophy. Third-best is to teach them Calculus.

    --
    Don't thank God, thank a doctor!
    1. Re:It's not horribly complex. by 2nd+Post! · · Score: 1

      The problem with your statement, "If your design is good, the components are flawless," is that design is an activity that defines both the problem and the solution. If your problem is ill stated or unexplored, your solution is equally ill stated and unexplored.

      There are several analogies that apply to software: It is complex because it is self similar, so that the lowest level of design is about as complex as the highest levels of design, or it is complex because humans are not naturally gifted at translating between reality (the problem space) and language (the design space and the communication space).

      Unless you are simultaneously the customer and the implementor, you will have to struggle to get the right problems first, then the right solutions, and then the right implementations from the right people.

    2. Re:It's not horribly complex. by Kjella · · Score: 2, Interesting

      Well, part of it is that there are 25 millions line of code, you just don't interact with them. Recovering from an error is like a red light flashing in a 747, except you need to build in the intelligence to handle it. And while you have multiple redundant systems for physical failure, you only have one application (although it can have multiple threads etc) so there's no "ignore and continue", unless it's a specificly handled condition.

      The second part is that the computer will do *exactly* what you tell it to do, which you have to specify exactly. That is much harder than people think, because even a dog has more basic intelligence (or at least self-preservation instincts) than a computer, not to mention a basic understanding of objects (ball, stick etc), impossible states (no, I can't fetch the ball, it's on the roof) and so on. For a computer, nothing exists that hasn't been defined to exist.

      --
      Live today, because you never know what tomorrow brings
    3. Re:It's not horribly complex. by Anonymous Coward · · Score: 0

      For some reason many CS faculties don't teach their students to program (expecting them to pick it up on their own), and they don't teach the students philosophy, but at least they do insist on teaching CS students calculus. Go figure.

  46. I say.. by Anonymous Coward · · Score: 1, Interesting

    Imagine a very complicated machine, like the Boeing 777 airplane, which took years to design and build, and has millions (? actually not sure) of parts.

    Imagine that each of those parts can directly affect 2-3 other parts.. the ones that it is connected to physically or electrically, etc. That gives you a huge set of possibilities for parts to fit wrong, or wear out in unexpected ways, or otherwise fail.

    That's a pretty complex system, right? In fact, it's almost amazing that human minds can conceive, let alone build and deploy, such a complex system.

    Now.. imagine that you've got millions of parts, and each part can potentially interact with EVERY OTHER PART. Also, imagine, because it's such a young field, there really isn't much common vocabulary or theory, and incompetent practitioners pretty much have the same power as seasoned veterans (perhaps more so in some cases). So things are designed and built in an ad-hoc manner rather than with careful engineering discipline.

    That's what programming is like. So don't complain when Windows crashes or you can't get to your favorite web site.

  47. Re:My favorite: A Christmas Carol by heinousjay · · Score: 1

    Just say the magic words: 'tight coupling'

    --
    Slashdot - where whining about luck is the new way to make the world you want.
  48. Explain by analogy/example by (Score.5,+Interestin · · Score: 2, Interesting

    If I've got 5-10 minutes, I use a simple exercise of getting them to sketch out a program for a humanoid robot to set the table, i.e. to carry cutlery and food from the kitchen to the dining table. Before they begin, they consider it a trivial task. After about 5-10 minutes, they accept that even this "trivial" task is close to impossible. Here's an example: First, you have to get the thing to walk from the kitchen to the table. So you have to teach it to walk. Then you have to teach it to avoid obstacles. I tell them that their robot has just crushed the cat (it's not a chair or table, which was their understanding of an obstacle). So they modify it to avoid small furry objects... and kill the dog, which is large and furry. So they modify it again, and find that it's frozen in front of a throw rug, which is small and furry. So they modify it again, and find that it's been halted by a sleeping cat. Then you throw in exception conditions, e.g. a fire, or even just the phone ringing so the robot has to clear the way for someone to get the phone... it's fairly easy to demonstrate that even the apparently most trivial task is in fact incredibly complex once you have take all the different conditions into account, and depending on how much time you have (and how long they take to convince) you can keep throwing hurdles at them almost indefinitely.

  49. Well, you wanted a MADlib... by Anonymous Coward · · Score: 0

    > Here's a challenge: try to explain bayesian filters to a non-technical native japanese speaking boss.

    I think you'd say something like, filling in the blanks as required:

    "Battousai-chan no jutsu ____ na shime wa kokorono. Hikariga to ____ fuiteru Kwabaru-baka na Kagome-sama de arimasu."

    Don't worry if their eyes glaze over and they look *REALLY* confused. That's perfectly normal... :-)

    1. Re:Well, you wanted a MADlib... by Anonymous Coward · · Score: 0

      Deijii wa masu-masu tsuyoku-deru youni natte-imashita.

    2. Re:Well, you wanted a MADlib... by Anonymous Coward · · Score: 0

      I say this with the most kind and warm intentions, but both of you make me ashamed to even let this site's HTML even digitally enter my home. Please redirect yourselves back to Inuyasha or whatever it is you, and again, no offense, freaks watch these days.

    3. Re:Well, you wanted a MADlib... by Anonymous Coward · · Score: 0

      Well, I'm just not as adept at Japlish as they are at Engrish, so I could only scramble the words (and I use that term VERY loosely...) so badly... :)

      For the record, that broken and insensible text was at least in part inspired by Rurouni Kenshin.

  50. Re:I like the cooking analogy, but also stress DES by Anonymous Coward · · Score: 0

    Well, there's zapping and there's zapping. Our full clean build takes the best part of 18 hours on the fastest dedicated hardware we can get.

  51. are you sure it's that complex? by Anonymous Coward · · Score: 0

    This is kind of contrarian, but I don't agree with the premise that software is really that complicated. I am an embedded software engineer at a medium sized American company. I work in a group with about 30 other programmers, but the company as a whole must have more than 1000 people that write software. It's easy to sit back and think, "Wow, I'm really smart so this stuff must be hard." But certainly most of the people I work with _aren't_ so smart, they're just run of the mill college graduates with engineering degrees. Basically, given a progamming problem, it is solvable by about anyone who knows about programming. Sure, the solutions vary in elegance, code size, defect rates, etc., but it's kind of like every other engineering job. There are a few small engineering tradeoffs, you get more experience as you do it so you make better decisions, and everything else is economics - based on how long something takes to code up, will customers pay enough to generate a profit?

    The only thing I can think of that might make it seem like software is complicated is that it is error-prone. But this is by choice, people are just lazy :-) But seriously, if you treat it like a discipline and not an art, the number of mistakes you make as an individual programmer should go down over time to basically nothing. (No, I'm not there yet... I am currently porting code from one embedded platform to another, and I am definitely introducing mistakes :-)).

    If I had to list some great software and think about how complex it is...
    google maps... cool idea, fantastic implementation, but complex? It's a freakin' map with an API
    The linux kernel - fantastic open source, but isn't writing an OS something you do as a sophomore in college? again, not rocket science.
    gcc - actually, writing gcc would be pretty hard. But have you seen how badly it optimizes? The hard parts aren't done yet.

    The fun part of software for me is the idea and the design... after that it's just implementation, trying not to introduce errors.
    And not introducing errors in the idea and the design :-)

    When I tell people what I do, I either joke that I play games and watch movies all day, or I tell them I'm a typist if I'm being honest.

  52. Re:My favorite: A Christmas Carol by ceoyoyo · · Score: 1

    The 100 line function and the trash novel are more complex. The 10 line function and the Haiku are simpler. Also, more elegant and better.

  53. Depends on who you are talking to... by zogger · · Score: 1

    ...I guess. To my girlfriend, using a cooking recipe analogy would be more appropriate (fast food meal, 18 course high level fatcat state dinner in Paris, etc), whereas talking to any of my bubba gearhead friends, I would use cars (engine/drivetrain/body/accessories, etc).
    You would have to tailor (there's another one, garment construction and weaving and different materials and threads, etc) the analogy to what that person already understands in their field of interest/expertise.

    Myself, I don't want to know, I'd rather ya'all smart guys who can type fast slug it out, see who wins, I just want my browser secure and printer to print, thankew so much and stuff. And here ya go, have a nice fat strawberry just came out of my garden today, I manage "solar photosynthetic energy conversion" combined sentient and non sentient biological factories with a little "terraforming" on the side. You'll have to figure out what analogy might work for me to 'splain programming...what I have figured out is that part of it requires you to really rag on other dudes over whether to use sanskrit or aramaic or something like that. All greek to me...

  54. Network interactions theory by Tablizer · · Score: 1

    Something simple yet power is the network node connection count. The potential interactions between nodes grows out of proportion to the number of nodes. In software, all factors can potentially affect all other factors, expecially in biz apps. Here is a sample chart:

    Node - Interactions

    2 - 2
    3 - 6
    4 - 12
    5 - 20
    6 - 30
    etc...

    This is not an exact metric, but gives one feel for how complexity tends to "fold on itself".

  55. All of the above and more by huckamania · · Score: 1

    Whatever analogy you've just given, PLUS,

    Having to share resources with other programs, threads, drivers...
    Having to deal with sudden power loss, bad hw, actual bugs...
    Having to deal with multiple cpus, connectivity, scalability...
    Having to deal with malformed input, lax standards, bad guys...
    Having to deal with legacy code, buggy libraries, the STL...

    The only person I can ever explain anything to is my Dad. We learned C++ and Java together although he has about 40 years of experience in computers.

    I work in security, have worked for Network Associates, Symantec and two other security related companies. When I try to explain something, I usually start at the problem end. Explaining why it is such a problem. About two minutes into that, they don't want to know the rest. Saves me the trouble.

  56. And go where? by hackwrench · · Score: 0, Offtopic

    Sometimes I go out to eat at Taco Bell or Arby's or a Chinese Buffet. Usually they're empty, though sometimes there are people much older than me there, mostly grey hairs, sometimes a mother with her, I'm guessing junior high school daughter, sometimes there are couples. There are stores, a Wal-Mart and Gamestop. What should I do? Saying to get out of the house is one thing, but everyone else is hiding out in their house, because there's nowhere they want to be, nowhere to be.

    1. Re:And go where? by hackwrench · · Score: 1

      As I wrote that, I pondered how the restaurants made money with no one there, and then I realized: Takeout, even the Chinese Buffet. Oh, and I also go to Steak and Shake.

    2. Re:And go where? by VirtualLemming · · Score: 1

      Some suggestions: the gym, the mall, evening classes, dancing lessons, cooking courses, museums, art exhibitions, volunteer work.

    3. Re:And go where? by SpacePunk · · Score: 1

      Be where the babes are, and don't have 'high expectations', just relistic expectations. That checkout girl might be interested, the chick handing you your sack of burgers might be interested. Hey, did that women you passed on the sidewalk just check you out?

      I'm married now, so it doesn't matter to me. But, if I'd just have 'woken up' sooner I'da screwed my way from 18 to 40 with a wide swath of women.

    4. Re:And go where? by toad3k · · Score: 1

      If you keep doing what you're doing, you will keep getting what you are getting (nothing). It sounds obvious, I know, and yet, socially it is easy to fall into that trap.

    5. Re:And go where? by hackwrench · · Score: 1

      There are no museums, art exhibits or a mall where I live or anywhere but the larger metropolises, and there is no place to volunteer. Same problem with classes.

    6. Re:And go where? by hackwrench · · Score: 1

      A man has a ray of sunshine enter his dank, dark cell and he thinks himself wakened from his nightmare, when it be but a brief reprieve.

  57. As them how to use a traffic light by thecampbeln · · Score: 2, Insightful
    That is what I do. "How do you use a traffic light? How do you determine if it's safe to drive thru the intersection?"

    With this, I (almost) always get "If it's red, you stop. Green, you go." and which point I interrupt "And yellow (or orange for you Aussies out there)." It's about here that they start to think about it. Then I ask "What if it's raining?" quickly followed by "What if it's the first rain of the year?" and shortly thereafter followed by "What if you see someone else running the light in front of you?" I then explain that if I were writing a program to do something as "simple" as deciding if it's safe to go thru a traffic light, I'd have to think of ALL of these issues, plus everything else that could ever possibility happen while traversing an intersection. If I manage to miss something, it becomes a "bug" in that program.

    In my experience, people pretty much "get it" with this analogy. Course, YMMV...

    --
    "1984" was ment to be a warning, not a guidebook. You hear that Kim Jong-il!? BushCo?!
    1. Re:As them how to use a traffic light by Senzei · · Score: 1

      I like that analogy. Then as a follow up ask them if they think their software requirements are anywhere near as complicated as handling a traffic light.

      --
      Slashdot: Where anecdotes and generalizations can be freely substituted for facts, logic, or intelligence
  58. Oh boy by woolio · · Score: 2, Funny

    I've even explained how interrupt handlers work in regards to a USB joystick to a Lawyer... He was so happy in the way I explained it to him, he kept asking more and more questions until I told him I have to go :P

    Ah great.... Now your lawyer is going to wager a class-action lawsuit on behalf of all USB devices for illegal discrimination and unfair employment practices by the interrupt controller. The PCI bus will be named as a conspirator and the CPU will be charged with negligence. The PCI sound card will be the chief witness.

  59. Good one! by drenehtsral · · Score: 1

    I think that really does it! I (count my lucky stars) rarely have to deal with non-techies in an official work capacity, but the world still abounds with them, and they seem to divide into two categories, those who are like "Hey, wow, you can program a computer! You must be a genius!" and those who are like "so, you just tell the computer to do this, and then that, and you're done!" (those who imagine that every programming language has a "do-what-i-mean" statement.

    --

    ---
    Play Six Pack Man. I
  60. OK, for the wife. by twitter · · Score: 0
    My wife would like to understand. ... She's definitely non-technical, but exceptionally smart.

    That's who and why and I can understand that.

    Her reaction is generally "just plan better". I argue that the industry has been struggling with this issue for decades. I don't think we're all morons to have built so much infrastructure and come so far, but we still can't solve the simple parts like accurately identifying how long it will take us to accomplish our goal.

    Hmmm, I'm still not sure what you want to explain but I'll take a swing anyway. I can think of social, technical and legal complexities to software development. I've talked to my wife about all three. You might be thinking of something completely different.

    Talking to my wife is not all that hard, even though she has no interest in programming. Her first and only practice was some kind of basic in grade school. She was an interior designer for a Steelcase for eight years and understands all three classes of difficulties.

    Others have done a great job explaining complexities in terms of free software. Voices from the Open Source Revolution has a lot of clear thinking from software masters. Vixie's article about software engineering is particularly germain. You can also get a lot of good thought from the Free Software Foundation's philosophy pages. The Cathedral and the Bazaar deals with the issue explicitly. Indeed, there's an embarrassment of riches matched only by the wealth of text editors in the free software world.

    So, how do you get from there to dinner table conversation with the wife who's never written a line of code? It's the same way you try to simplify everything and the largeness of the subject actually helps.

    You start with what a program is and everything flows from there. My wife, like most people, understands modularity. "You eat an elephant one bite at a time," is one of her favorite sayings. She also has a basic idea that a program is something that takes information and does something with it. It does not take too much to explain that programs expect specific organization of their inputs to be able to deal with it and that smaller, simpler programs are easier to work with that big complex ones, and the wife then understands modular programming. It's a division of labor kind of thing that runs right into group development and organizational and social complexity. How do you know what the customer really needs? How do you make decisions about meeting those needs and turn those into a blueprint that you can follow? The free software world has solved those problems by letting the customer make the software themselves, and those customers have been organizing themselves very well. At that point, you zoom back into the perspective of a developer getting their hands on some huge project. If you can imagine that the free software developer knows what they want to accomplish, you are then faced with another embarrassment of riches: so many great tools, each of which can take years to explore. Did I say "free software developer"? Yes I did, because I did not want to wade into the swamp of NDA's, cross licensing, binary blobs and other horror stories of legal complexity. That can come later. By now, your wife's head will have popped but you will have explained software development complexity.

    Like most things, none of the parts is particularly difficult, there's just a lot of parts.

    --

    Friends don't help friends install M$ junk.

    1. Re:OK, for the wife. by Anonymous Coward · · Score: 0
      particularly germain

      LOL!

      free software world has solved those problems by letting the customer make the software themselves

      ROTFL!!

      Yes I did

      ROTFLMAO!!!

  61. in total or unique? by Anonymous Coward · · Score: 0

    6 million parts in total or 6 million unique parts?

    1. Re:in total or unique? by Surt · · Score: 1

      Parts in total I believe. But that's the measure most relevant to the comparable complexity of computer code, as most of our lines are comparably similar. If (X) and If (y) may be different, but the difficulty of creating such code is probably comparable to attaching two identical clamps on a 747.

      --
      "Who is the Journal of Quantum Physics going to believe?" --Stephen Hawking
  62. Explain by example by Aceticon · · Score: 2, Insightful

    When i'm discussing a request for implementing a new requirement or changing an existing requirement with the non-technical person making that request, a trick i usually do to show the complexity of apparently simple requests is to right there, present the high-level (eg. design) logical steps on how we would implement that request.

    Non-technical people will understand the complexity of doing something when they follow you through the sketching of the process of making a solution that does it. For example, if you are asked to change a form so that a free text input field becomes a pull-down with a number of options you can:
    - Ask them if the list of options is fixed or if an application administrator can change them
    - If it's fixed, then it's easy to do, otherwise:
    - Explain that you have to store those options somewhere. Maybe you already have a database, so explain that you have to add storage tables to the database, then add code to the application so that it can load and save that information to and from memory. Also explain that you have to pre-load some sensible default values into the database so that the application works out of the box.
    - Since they want that some administrator can change it at runtime, figure out if said administrator is a developer/dba type of person or not. If not, explain that to allow an administrator user to change those values you have to extend your administrator interface, which means adding menu entries and one ore more new pages.
    - Also figure out what are the rules (if any) that constrain the values that the administrator can configure for the pull-down. Depending on the complexity of the rules you might want to follow through into how you would do it, for example, if the rules are based on other values in the database which can also be changed by an administrator:
    - Explain how you have to add code to retrieve and process the needed values so that you can check that the rules are not being broken, and that you also have to change the administrative interface for those other values so as to make sure that when they are changed or deleted, the values in the pull-down box do not become invalid.
    - ...

    The point here is that most non-technical people which actually use computers understand concepts such as memory and storing "data that cannot be lost when the application stops" (persistent data) somewhere other than memory. They can be made to understant the basics of a relational database: "a place to store data which has tables - a bit like excel tables - one table for each kind of information" (not exactly it but close enough) and they can usually follow a logical chain of steps (eg to show the data in the interface we have to get it from somewhere, since it is configurable, we store it in the place where we put the data that can be changed by the program but must be preserved even when the application stops).

    Try and stay away of techie words and expressions ("We're gonna have to persist that data to our relational database and that means creating new tables, adding new data objects and changing the Hibernate mappings"). Instead assume non-techies are ignorant but not stupid ("We have to store that data in the database so that we don't loose it when the application stops. This means we have to configure in the database the tables where the data is stored and also have to add support in the program so that it can load that information into memory and use it").

    Also, simplify:
    - Don't try to be overly exactly - for a non-techie is enough to say you have a "database" no need to say it's a "clustered configuration of a <insert-brand-here> relational database".
    - Don't go into deep details - you "configure the place in the database to store the data" no need to say you're "extending the tablespace, creating new tables, adding foreign keys to the related tables, and setting up a couple of indexes to speed up cross-referencing"
    - Try and tune your words to the audience - for some people you can say you're gon

  63. Re:I like the cooking analogy, but also stress DES by Kjella · · Score: 1

    The other important ramification is that it never saves developer time to remove an existing feature - and in an agile development process it may take more time to DECIDE whether a feature is important than it would have to simply implement it.

    That's only true if the function is a separate piece of code. I've been in enough situations where noone really has the overview but it turns out that some code isn't being used at all anymore, often because the entire function/module has been depreceated and then deactivated, but the code remains. It can be a horrible mess.

    --
    Live today, because you never know what tomorrow brings
  64. Maybe it's not as complex as you think. by Blackheart2 · · Score: 1

    So, you have tried to explain to other intelligent, competent techies why programming is so much more complex than what they do, but you can't seem to convince them, eh?

    Have you considered that maybe, just maybe, you are wrong? Maybe programming isn't harder than hardware design, or mechanical design, or mathematics, or physics? I mean, if it were, it would be a really convenient excuse, wouldn't it? "Your OS crashes so much because software is really complex." "You got infected by this virus because security is software, and software is really complex." "I missed this deadline because programming is really complex." Personally, as a professional, I am leary of ideologies which promise to exculpate me of professional responsibilities.

    Brooks writes, "software systems differ profoundly from computers, buildings, or automobiles, where repeated elements abound." This is certainly true. However, you have to ask yourself if it is necessarily true or only accidentally true; that is, is it the only way software development can be or is it merely the current state of software development, perhaps because we don't yet understand programming well enough? For example, better programming languages let you abstract out more complex and varied patterns in software than worse ones; the result is simpler, more regular programs. As our understanding of how programs operate and are structured improves, we can expect to make them smaller and more regular with such tools.

    The proper response to, "Programming is hard!" is not, "Therefore I am not responsible for bad programs," but rather, "How can we make it easier to meet our responsibilities?"

    --

    BH
    Fools! They laughed at me at the Sorbonne...!

    1. Re:Maybe it's not as complex as you think. by Anonymous Coward · · Score: 1, Insightful

      is it the only way software development can be or is it merely the current state of software development, perhaps because we don't yet understand programming well enough?

      Software can do many things. It can file my taxes. It can render 3D images. It can send commands to a satellite in outer space. Do any of these activities sound similar to you? I hope not.

      It's not that we don't understand "programming" well enough. We understand programming fairly well. However, that's not going to get us far, because we are developing vastly dissimilar applications.

      For example, better programming languages let you abstract out more complex and varied patterns in software than worse ones; the result is simpler, more regular programs. As our understanding of how programs operate and are structured improves, we can expect to make them smaller and more regular with such tools.

      Yes, and these tools will likely be specific to certain application domains. We'll see more benefit in the future when the domains become clearer and the tools to implement the applications within them become more widely accepted. It will take time, however, for everyone to converge.

  65. Try web development by SmallFurryCreature · · Score: 2, Interesting
    It is very hard to get across the difference between a properly coded site and one made by some kid who knows some scripting language.

    The simplest is browser compatability. Does the site owner care? Well yeah if you can get their head around the fact that if the site is IE only they will be losing a percentage of customers. It is very odd. Supermarkets understand they need an extra wide register for people with special needs. They know they need staff on hand to help disabled people because no supermarket can afford to turn that tiny percentage of people away who need help. Most brick and mortar stores would be horrified to learn that their to narrow door would loose them say 5% of visitors. So why is it acceptable on the net?

    Then their is the proper use of standards. It ain't just that you got to use CSS but more that you got to choose a standard way of doing things. Use font tags if you want BUT then ALWAYS use them. Not some horrid combo of font tags, inline css, external css and included css. Makes it a pain to figure out what the fuck is supposed to affect what.

    Finally there is the coding itself. Every damn time I get called into to fix a site I find that some kiddie has hacked it together and totally forget to do any kind of error checking let alone proper security. Most just take values straight from the user and insert them into sql queries. And why does anyone create a login page for the site CMS without https being enforced?

    I seen code that would make you weep. Yet the site works doesn't it. Well no that is why I am called in but it then is very hard to explain why you need a week to upgrade the site before you can even start fixing things. (Note that the sites are generally so poorly designed that the original builders are no longer willing to support it wich is when I get involved).

    But how do you explain to the customer about the difference between bad code and good code.

    Recent page had a simple form for the usual add, update and deleting of a record. The code contained no functions and had the most horribly arranged IF/ELSE statements you could imagine (IF(user_logged_in) {ALL THE CODE} else {error_msg} EWH!!!!!

    Worse it had the HTML/FORM 3 times for each type of action. Except that they were practically the same. Just an empty form for add, a filled in form for update and again a filled in form for delete. 3 Times the same HTML all because the idiot never grasped the concept of functions. (He didn't use them anywhere in the code).

    Yet how do you make this clear to the customer. If you know the answer please tell me.

    --

    MMO Quests are like orgasms:

    You may solo them, I prefer them in a group.

    1. Re:Try web development by Anonymous Coward · · Score: 0

      Most brick and mortar stores would be horrified to learn that their to narrow door would loose them say 5% of visitors. So why is it acceptable on the net?

      The store couldn't care less. Until they get sued. Which they have been. Unfortunately, you can't sue someone for only supporting Windows clients (like, say, the Canadian government with their Census 2006 site).

      Actually, that's not really a bad thing, because I really don't want to have to put full accessibility stuff in every site I put up just because one blind and deaf guy will eventually try and use it.

  66. Re:My favorite: A Christmas Carol by archeopterix · · Score: 1
    Easiest way I've found- though it's begining to get a bit outdated thanks to bloatware. Charles Dicken's famous novel is about 100k. This makes it easy to estimate source code in terms of number of copies of that novel. The quarter-million lines of code project I'm currently working on takes about 25 MB to store- 25000k, or 250 copies of A Christmas Carol.
    That analogy can be carried further. If you change a single letter in the Christmas Carol, probably nobody even notices, unless it's something like mistyping the first letter in 'duck'. Changing a single letter in source code has much much more probability of destroying things...

    PS. I am not sure if there is a duck in Christmas Carol.

  67. Fred Brooks to the Rescue by Rovaani · · Score: 1

    I would keep on quoting No Silver Bullet and expand onto the rest of the "complexity, conformity, changeability, and invisibility" mantra.

    Especially the invisibility part is usually easy to grasp.

    One textbook also made a comparison with a steel bridge: if the bridge crashes the damages are huge, if software crashes a boot can usually solve the situation temporarily. Also, civil engineers are rarely asked to move the almost completed bridge mile upriver and turn it 90 degrees by the lengthwise axis.

    --
    Karma: Good! Napster: Baad!
  68. Hehe, try decision tables! by meburke · · Score: 1

    Try it in terms of decision tables:

    Each condition requires a true/false decision, plus an associated action.

    Rule1 y y n n
    Rule2 y n y n

    Actn1 x - - -
    Actn2 - x - -
    Actn3 - - x -
    Actn4 - - - x

    Therefore the mathematically possible combinations = 2^n *2. (The example shown is 2^2 * 2 = 4 * 2 = 8.) A two rule program has 4 mathematically possible conditions and 4 mathematically possible outputs, therefore the programmer has to attend to 8 elements to cover the complexity of the program. With five conditions, the programmer would have 32 mathematically possible conditions with 32 mathematically possible actions, so the programmer would have to consider 64 elements to cover the complexity of the program. Of course, a good programmer recognizes that many of these elements are redundant and not logically possible, but the programmer still has to administer rules to cover the logically possible elements and actions. Now consider that a reasonable inventory program may have over a thousand conditions and you see the exponential increase in complexity.

    I usually show a table with 2, 5 and 100 conditions and watch their eyes glaze over. No more arguments.

    Mike

    --
    "The mind works quicker than you think!"
  69. Re:My favorite: A Christmas Carol by Anonymous Coward · · Score: 0

    Isn't the US Library of Congress (28 million volumes, or roughly five terabytes) still the standard unit of absurd information-theory metaphors?

  70. Re:My favorite: A Christmas Carol by mooingyak · · Score: 1

    Just say the magic words: 'tight coupling'

    That's not sexual harassment?

    --
    William of Ockham had no beard. The most likely explanation is that it was chewed off by squirrels every morning.
  71. It's easy to explain to non programmers. by Jaqui · · Score: 1

    A computer program is a recipe for cooking a fancy dinner, for someone who can barely make kraft dinner.
    The amount of detailed information the person who can't cook needs to cook a meal is in every single computer program.

    It's that simple, I've used that analogy often and always gotten comprehension.

    --
    J. Henager: If the average user can put a CD in and boot the system and follow the prompts, he can install and use Linux
  72. Grade School Assignment by Burianski11 · · Score: 1

    If I remember correctly, I was in grade school when we had an assignment to teach someone how to do something. The thing that I "taught" was how to make a peanut butter and jelly sandwich. The catch, though, was that you had to explain *every* little detail of it.

    For instance, you couldn't just say "put peanut butter on one slice of bread." Instead you had to go through:

    * Get the peanut butter from the cupboard
    * Get a knife from the drawer
    * Unscrew the cap from the peanut butter
    * Using the knife, scrape some peanut butter out of the jar
    * Take the knife with peanut butter and place it on one slice of bread
    * Smear the peanut butter onto the bread, covering a reasonable portion of it

    That's the analogy I use to help "teach" the concept of programming to non-programmers. The computer needs *every* instruction from you, with the added complexity of what to do if you don't have peanut butter or bread or a clean knife, etc. This seems to get the best response of any other method I've tried... but again, YMMV.

    1. Re:Grade School Assignment by gatkinso · · Score: 1

      Where is the cupboard?

      --
      I am very small, utmostly microscopic.
  73. Re:My favorite: A Christmas Carol by Marxist+Hacker+42 · · Score: 1

    PS. I am not sure if there is a duck in Christmas Carol.

    There is a goose (Pigs and turkeys apparently being highly unusual in 19th century London butcher shops at Christmas).

    --
    SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
  74. Better living through educated management by alienmole · · Score: 1

    Explaining to company executives why complex software development takes a long time is often necessary during the development of a system. There's a tendency for management to unwittingly sabotage software development in many ways, such as by not recognizing the true costs of their unplanned-for requests. If management has even a vague understanding of the issues involved, it can help a lot in having a good relationship between developers and management, and ensuring that projects aren't cancelled to early due to unrealistic expectations, or don't end up in "death marches" which burn out programmers and sour management on all software development. As a consultant, I've seen this happen both ways. In all the cases where management "got it", it was only because developers had been successful in communicating to them why the job can be so difficult.

  75. Re:Software is Communication -- that's why it's ha by ooze · · Score: 1

    Of course it is communication. But it is not that communication that makes it s hard. All a a red light on a plane closet is doing is communicating. And the thing it commnicates is mind boggling simple. A single bit so to say. The communication is so mind boggling simple, because the thing it has to communicate is so mind boggling simple. If you try to communicate the works of Shakespeare with that light, it suddenly becomes not so simple.
    So the communication is the easy part. Analysing and thoroughly understanding your problem is the hard thing. Once you have done this, the code almost writes itself.

    --
    Just because I can imagine doing a hippopotamus, doesn't mean I'd like to do it.
  76. Good for you. by voxel · · Score: 1

    Good thing I didn't try to explain how "complex software systems are", then I wouldn't of given you the opporitunty to play the roll of the Slashdot Troll.

    --
    Modesty is one of life's greatest attributes
  77. Simple - something familiar.... by TemporalBeing · · Score: 1

    Simple, use something familiar to whoever you are trying to reach. For a business person, talk about how programming is similar to a business process; for a teacher, talk about how it is like putting together their teaching plans; etc. You will never reach anyone if you don't illustrate it with something that is familiar to them - it also helps to be generally familiar yourself too, though you can always get them to help fill in the details of how whatever it is they do works. Basically - relate it to their job.

    However, that would only work for describing how a program in general works and is put together (i.e. inc ax; mov [ebx+4], cx; etc.). When it comes to other kinds of concepts (Design, requirements, etc.) you need to still use something familiar to them, but perhaps something other than their job - though that might still work in some cases. For example, in describing how one project does its job but could really stand a lot of improvement in its design, I described the original version of the project as a 'tape player' and the new version as what we wanted - a 'cd player' - but it pulled a lot from the old version, so we made the 'cd player' understand "tapes"; however, what we really want is the 'dvd player' that can play the "cd's" and do more too. Make it connect, and make it make sense.

    A good reminder might be - if a 5 year old can't understand what you're saying, then you need a different analogy. Not perfectly true, but something that works. Alternatively (if you don't like 5 year olds), one of my teachers use to say to document our programs like his grandmother would be reading them - if she couldn't understand it, don't expect him to either. In the end, just remember to keep it simple - apples vs. oranges type simple.

    --
    Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
  78. the easiest way by NeilSkoglund · · Score: 1

    the easiert way ive found to explain it to my freinds actually came from one of them telling me how he builds houses. each part of the software has elements like windows, doors, room size, and each room peforms different functions like a bathroom has different elements than a living room. so i say building a program is like building a house, only you dont want windows or itll break! :-p

  79. Re:but also stress DESIGN by arete · · Score: 1

    I'm not trying to suggest that an appropriate model is to always add every feature anybody thinks of. There are very valid reasons not to bloat your code like that, to keep it easier and simpler to maintain, test, audit, secure, etc.

    But there is still a difference there. Perhaps I could best explain it as: You can never take your existing software, spend time/money optimizing it, and somehow make it cost you less to produce a million copies of the software.

    (More USERS, maybe, but not more copies of the software - in a situation where you make it handle bigger load on smaller hardware. More PROFIT maybe, if more people want to buy the new version.)

    Very rarely is the reason a feature shouldn't be present that the cost-to-make-copies is too high. In cars, for example, a lot of work goes into taking existing components and making the production cheaper. There are plenty of other things you can optimize code for, but you can only rarely spend significant time optimizing existing features for "cheaper" You never go back, take your existing really well-written function and replace it with a less-effective one because the less-effective one because the worse one is cheaper to copy. (Unless you've licensed that great code from someone else, but that's somewhat artificial)

    You might choose a faster algorithm over a more accurate one - or a simple and therefore easier to audit algorithm over a complex but more accurate one. But you are still missing the entire optimization about the "produce copies" part of the development of _anything_ else that people produce. To me this is the dominant reason why it's so easy to make complex software and the dominant reason why software is massively more complex than anything else for a given number of hours of development.

    (Which is not to say that, say, the CPU hardware isn't very complex. But a LOT of people have spent a LOT of time on that. )

    --
    Looking for freelance Actionscript (Flash/Flex) or ColdFusion work and/or freelance developers. Email me, put Slashdot
  80. Re:My favorite: A Christmas Carol by KevinKnSC · · Score: 1
    PS. I am not sure if there is a duck in Christmas Carol.

    That depends. Are you watching the Disney version?

  81. Complete specification by try_anything · · Score: 2, Insightful

    You know the annoying kid you knew in college who would repeatedly interrupt every discussion demanding definitions of all the words being used, and who would argue endlessly about flaws in the definitions so that you couldn't really talk about the topic you wanted to? Imagine you're writing a book, and that guy has to personally approve every sentence.

  82. It's easy... by jo42 · · Score: 1
    Imagine a Rube Goldberg contraption.

    Now image one doing thousands of more things.

  83. Think in terms of "Moving Parts" by kthajon · · Score: 1

    When I am asked why a certain program is broken, or why building one takes so long, I respond in terms of "moving parts".

    The average automobile has about 150 moving parts.

    The space shuttle has 100,000 moving parts.

    A complex computer program (Windows, Linux, OSX, Photoshop, Quark Xpress, SAP, Great Plains, etc.) have 1 million or more moving parts.

    (I generally consider a subroutine a "moving part").

    I then equate installing a new program to adding a new stereo to a car or installing a hitch with a hitch brake. Or I compare different types of factory cars: The low-end models with a manual transmission, no A/C, and manual steering/locks/windows/seats vs. higher-end models with all the options. The more options you add to your car (programs), the more things there are that can break and need to be fixed.

    Along the same lines, writing computer applications is like building a space shuttle with lots and lots of moving parts. The more "things" you want a program to do (the more "options" you want on your car), the more "moving parts" you have to build that can eventually break down.

    When explaining how programs interact with each other or with the operating system, I use the analogy of aftermarket car parts like stereos: When you install a new stereo in your car, how long it lasts depends on the quality of the car (operating system), the quality of the stereo (the program being installed), the quality of the technician installing the stereo (the programmer), and last but not least, the actions of the driver (end user).

    I have found that explaining complex issues in terms of physical everyday activities and objects really helps most people understand just how complex computers are.

    Most people are not experienced in virtualization and abstraction, and have a difficult time imagining something that they do not have a physical reference on which to base their visualization processes.

  84. Passive-aggressive personality disorder by 2901 · · Score: 1

    You need to think of the CPU as like an employee with a really bad passive-aggressive personality disorder. He does exactly what you ask him to, except that he always manages to find an interpretation of your instructions that frustrate your intentions.

    When you get to the point that you realise that you have to sack him and hire somebody else, there is no way to get him to do the job right, you find out that he is the boss's son and you are stuck with him. You have to hire lots more staff to give him ever more detailed instructions, until there is no loop hole left and no way to screw up by doing what you say rather than what you mean.

  85. McCabe's? by wolverine1999 · · Score: 1

    McCabe's complexity measure (count no of conditions and add 1) perhaps?

  86. Re:My favorite: A Christmas Carol by pyite · · Score: 2, Insightful

    The 10 line function and the Haiku are simpler. Also, more elegant and better.

    I disagree with the idea the cramming the most amount of logic into the least amount of lines is elegant. Brian Kernighan said it best, "Debugging is twice as hard as writing the code in the first place. Therefore, if you write the code as cleverly as possible, you are, by definition, not smart enough to debug it."

    --

    "Nature doesn't care how smart you are. You can still be wrong." - Richard Feynman

  87. You almost got it! by Nicolay77 · · Score: 1

    Software is like cooking Blow-Fish / FUGU.

    Since fugu's poison can lead to instantaneous deaths of diners, only licensed cooks are allowed to prepare fugu. You must have special skills and knowledge about fugu to be licensed. Poisonous parts of fugu differ, depending on the kind of fugu.

    However, managers usually go and get the cheaper/unlicensed cooks. And then complain about the project's failure.

    --
    We are Turing O-Machines. The Oracle is out there.
  88. Re:My favorite: A Christmas Carol by LunaticTippy · · Score: 1
    I suspect parent had this example in mind:

    What's more complex? a 10 line readable section of code, or the same code crammed into one unreadable 200 char line?

    It's possible to simplify code by stretching it out.

    Me, I like the 200 char unreadable line. Don't even know the whole ugliness of it. Just scrolls by, like the wind.

    --
    Man, you really need that seminar!
  89. Re:My favorite: A Christmas Carol by LunaticTippy · · Score: 1
    Or you could compare it to a DVD of "Dumb and Dumber", which at 4.7G is 188 times bigger than your 25M quarter-million line code project.

    A DVD of "Dumb and Dumber" is 9.4GB, you filthy pirate.

    --
    Man, you really need that seminar!
  90. car analogies by LunaticTippy · · Score: 1
    The software-car analogy is like a 1972 nova.

    On blocks.

    With a palm tree growing out of the engine block.

    --
    Man, you really need that seminar!
  91. Re:My favorite: A Christmas Carol by ceoyoyo · · Score: 1

    I didn't say anything about cramming in the most code possible. I define a line of code as a bit of code that SHOULD be on one line. I'm quite aware that you can write an entire program in many languages that is technically on one line, but that it definitely should not be.

    The Haiku and trashy novel example is actually better because you've given something to go on -- provided the two express the same idea (they are functionally equivalent) then the Haiku is simpler, more elegant and to be preferred. As for debugging, imagine you're going to proofread both for spelling mistakes. Which would you prefer?

    For the code, I was making some assumptions: that they were functionally equivalent (implied by your comparison), your lines of code obeyed my definition (not a fair assumption) and nothing really crazy was used to write those ten lines.

    Saying that, I've seen lots of 100 line functions that can easily be written in ten good lines. The ten lines are simpler, more elegant, and to be preferred. They're also MUCH easier to debug. The 100 line function usually comes about because whoever wrote it didn't understand the problem sufficiently.

  92. I've walked many sidewalks in many cities... by hackwrench · · Score: 0, Troll

    Very rarely am I passed. I suppose when I lived in Muncie two years ago, with Ball State University, if I waited for classes to let out, I would have run into someone, but everyone else would have been busy getting to their next class for the most part.

  93. Re:Brooks explained it: It's the programmers' faul by georgewilliamherbert · · Score: 1
    See, that's the problem, and it's the programmers that caused it. Stop making subroutines. Monolithic code be da shizzle on da bizzle.
    You no doubt think that's funny, but the flight control systems on the JAS-39 Grippen jet fighter from Sweden and John Carmack's flight control computers switched over to that type of programming logic. One large loop, no functions, you only go forwards towards the end and then start again at the beginning.
  94. I am from North Carolina by Watson+Ladd · · Score: 1

    You insensitive clod!

    --
    Inventions have long since reached their limit, and I see no hope for further development.-- Frontinus, 1st cent. AD
  95. Re:Brooks explained it: It's the programmers' faul by Watson+Ladd · · Score: 1

    If you need to do the same thing many times, use a subroutine. That way you only need to write it right once and use it many times.

    --
    Inventions have long since reached their limit, and I see no hope for further development.-- Frontinus, 1st cent. AD
  96. no point by Anonymous Coward · · Score: 0

    theres not really any point in explaining software engineering to a user

    the whole idea behind designing a software component is to hide all the details and present a easy and usable interface

  97. Re:My favorite: A Christmas Carol by An+Elephant · · Score: 1

    25*10^4 lines of code, stored in 25*10^6 bytes, would make your average line 100 chars long. That is, visually, your code would indeed look like a novel...

  98. It's like writing a novel by Anonymous Coward · · Score: 0

    Programming is like writing a novel. If you are a good writer, you can whip up a short story without any trouble. With enough effort you could write an entire novel.

    Now image you wanted to write a HUGE mystery novel. Each clue and detail needs to fit in with the story. That in itself is hard.

    Now complicate the project by having 30 people write that novel in 9 months. Each writing a part of it but it having to meld together as if written by a single person. And it still needs to be coherent and be good writing.

    Get the picture?

  99. Re:My favorite: A Christmas Carol by RobertLTux · · Score: 1

    and for a practical example set your wayback machine to January 15 1990 and try to make a long distance call inside the US
    http://www.voidspace.org.uk/technology/hacker_crac kdown/hack_part1.shtml
    The crash was a grave corporate embarrassment. The "culprit" was a bug in AT&T's own software (caused by a stray semicolon)

    --
    Any person using FTFY or editing my postings agrees to a US$50.00 charge
  100. "Trust me, it's hard" by dghcasp · · Score: 1
    I always just go with "trust me, it's hard."

    Eventually people learn that this really means "I don't feel like doing it." When that happens, I get a new job and start again.

  101. White Board Drawing Fun by remitaylor · · Score: 1

    I still have the remnants of a drawing on a white board at work that includes:

    a fishing boat
    lots of hooks in the water, some with fish on the line
    people using a radio in the boat
    a radio tower
    people with fish and radios in a building

    Somehow, i used all of this to help co-workers understand the architecture of a project that i've been working on. Afterwards, they sort of understood the meanings of Hook and Proxy to developers ... among other things.

    Unfortunately, now they all think they understand development better and, every time i say something they don't understand, they say "that's like a hook, right!?"

  102. Re:My favorite: A Christmas Carol by Marxist+Hacker+42 · · Score: 1

    Lukily it's not all MY code....and most certainly a good deal of it does. This has got to be the most complex project I've ever worked on, and it doesn't help one whit that while the project is designed to follow good software development life cycle standards (with all of the extra documentation that implies), quite often the coding is being done before the analysis of user requirements is complete in practice, thus createing a horrific hodge-podge of patches on top of patches on top of patches.....

    --
    SJW: a person who perceives an injustice, and while correcting it, commits a greater injustice.
  103. Quantum Mechanics by ICloneable · · Score: 1

    Programming is a little like quantum mechanics. Just read this article and replace the various keywords with proper software jargin. http://en.wikipedia.org/wiki/Quantum_Mechanics

  104. Fragility as much as complexity by Anonymous Coward · · Score: 0

    What's unusual about computer programming is the fragility of programs as much as the complexity. Laws are complex, too, because they try to cover every situation -- but if the law doesn't cover some situation or there's bad logic, life (usually) goes on. In software, unhandled cases or bad logic cause bugs and crashes.

    Part of the cause is that computers don't know what you mean. When a law is ambiguous we've got judges and so forth who can apply common sense and work out the details (and sometimes make stuff up). If the text of a statute is missing a semicolon, the judge can usually figure that out and read on. :)

    We have none of those luxuries with computers. Compilers only know a small set of rules about how to assemble simple instructions into bigger and bigger chunks -- they only know at a really superficial level which arrangements of instructions make sense (so they can't correct logic errors), they usually don't learn through observation (only by being explicitly taught), and they don't know much at all about reading programs that are incorrectly phrased (because we haven't taught them). (That gives me a great startup idea...)

    Explaining things to sufficiently young kids can be hard because they often don't know what the concepts in your explanation mean. It takes a while to explain the sentence, "Before Mommy and Daddy got married, Mommy tried to make Daddy jealous by going out with another guy." It's far, far more complex teaching a computer to do something -- they're not as intellectually flexible as your average kid and they know even less about the real world.

  105. 8th grade experiment by SirLanse · · Score: 1

    In 8th grade (1974 before computers were common), my teacher did an exercise with us. We were to write instructions to shoe laces. Then the student read the instructions to the teacher. She did exactly what the instructions said. Nobody ended up with tied shoes. Everyone understood that computers do exactly what you tell them to. Do this for fun at your next family gathering.