Slashdot Mirror


Software Aesthetics

cconnell writes: "Most software design is lousy. Most software is so bad, in fact, that if it were a bridge, no one in his or her right mind would walk across it. If it were a house, we would be afraid to enter. The only reason we (software engineers) get away with this scam is the general public cannot see inside of software systems. If software design were as visible as a bridge or house, we would be hiding our heads in shame. This article is a challenge to engineers, managers, executives and software users (which is everyone) to raise our standards about software. We should expect the same level of quality and performance in software we demand in physical construction. Instead of trying to create software that works in a minimal sense, we should be creating software that has internal beauty." We had a good discussion on a related topic half a year ago.

748 comments

  1. Beautiful software by quartz · · Score: 3, Funny

    My software is so ugly it's beautiful. I'm coding in Perl these days. :)

    1. Re:Beautiful software by consumer · · Score: 0, Flamebait

      If you were coding *well* in Perl, your code would be beautiful. Perl can be very aesthetically pleasing and easy to read when done right. Don't blame it all on your tools.

    2. Re:Beautiful software by quartz · · Score: 2

      I never said I blamed Perl. I just said it's what I happen to be coding in at the moment, and I'm loving every minute of it. :-) I know I should strive to make my code "readable", but the irresistible urge to type: join("",map{ucfirst }split(//,shift)); just to correct a spelling error in the database on-the-fly is simply overwhelming. I just can't help myself. :)

    3. Re:Beautiful software by JohnHegarty · · Score: 0

      And the advantage of perl is you can show it to a non programmer.. and they are still not evan close to seeing whats going on...

      unlike vb and friends

    4. Re:Beautiful software by fishbowl · · Score: 2

      >I know I should strive to make my code
      >"readable", but the irresistible urge to type:
      >join(" ", map { ucfirst } split(/ /, shift));

      The presumption that your code is somehow
      "unreadable" bothers me. I find your transformation to be okay, although I don't
      like the bareword ucfirst. If I were maintaining your code, I'd probably do away with
      your use of the $_, or at least, explicitly use
      $_ instead of implying it.

      But there's nothing in this example that should
      be a problem for even a beginning perl coder, in
      my opinion. You've used a common perl idiom in
      a very efficient, clear, understandable way.

      Now, if an ADA or VB programmer can't understand
      your program, that's an unreasonable criticism.

      --
      -fb Everything not expressly forbidden is now mandatory.
    5. Re:Beautiful software by bee-yotch · · Score: 1

      heck, you can show it to another programmer (not a perl programmer) and they won't even be able to read it. Too many damn symbols. Now that's beautiful ;).

    6. Re:Beautiful software by JohnHegarty · · Score: 0

      acutally.. i am looking at some perl i wrote last week... what does any of it mean.. i have no idea..

      now as long as i don't have to change anything i am grand....

      comment... whats a comment ... are you ment to comment code!!!!!

    7. Re:Beautiful software by Anonymous Coward · · Score: 0

      I'm a moderate level perl coder (one step above beginning), and I have no idea what map or ucfirst means... shift I'd look up...

    8. Re:Beautiful software by Anonymous Coward · · Score: 0

      .. with no knowledge of Perl or its associated libraries, I'd guess that 'ucfirst' may indicate an upper-case transformation of the first character within a string.

      Map on the otherhand either indicates an association among a group of objects (or an object and a property), or the functional mechanism to create such an association.

      How's that for a guess by an Ada programmer?

    9. Re:Beautiful software by quartz · · Score: 2

      OK, OK, you got me. The $_ was actually there when I pasted the code from the Emacs window, but just before I submitted I decided to take it out for added effect, as I know many non-Perl coders have, um, strong opinions about implicit variables. Vanity, I guess. But hey, it does work with strict and -w!:)

      As for the unreadability part, try writing the equivalent of the above in C++ (or, god forbid, Java) and looking at the 10+ line resulting code you'll see why C++/Java coders at least might find unreadable what's otherwise perfectly fine Perl.

    10. Re:Beautiful software by thrig · · Score: 1

      ucfirst dead on, map you kinda got right.

      map in perl is used to apply an expression (in this case ucfirst) to each element of a list (the one supplied by the split function), returning either the modified list or a count of modifications done, depending on context (list context in this case, due to the join function).

      obtaining said function documentation is easy, via 'perldoc -f functionname' from the command line.

    11. Re:Beautiful software by MrBlack · · Score: 2

      You think Perl is bad? Try the Brainfuck langauage. Here is some code for factoring large numbers written in brainfuck.

    12. Re:Beautiful software by Anonymous Coward · · Score: 0

      Why I love Perl is because of those parts where you can take a pseudocode such as "put a comma between all numbers read from the file" (bad example) and make a one-line statement out of it. Which is even readable, unless you obfuscate it with purpose. If you choose your variable names descriptively, Perl reads almost like pseudocode: $numberCount++ if ($line =~ /^\d+/);, ("increase number count if the line begins with a number") and that's what makes it elegant.

      So let's all strive to create beautiful Perl :-)

    13. Re:Beautiful software by Malcontent · · Score: 2

      Yes you'd have to be brainfucked.

      --

      War is necrophilia.

    14. Re:Beautiful software by ComaVN · · Score: 1

      At least is has decent comments

      --
      Be wary of any facts that confirm your opinion.
    15. Re:Beautiful software by Anonymous Coward · · Score: 0

      You should hire a systems architect to design and oversee the project. Houses are not designed by carpenters, automobiles are not designed by garage mechanics. Why does management leave design to coders? As an architect I map requirements to high level design docs, and detail docs for database design,GUI design, and all interfaces. I also recommend the best mix of tools and job skills to complete the task. I meet on a regular basis with the technical leads to see if they are staying within the scope of the project. I can also modify design to meet new problems.

      It's just a matter of giving priority to good end to end design and project management. It may cost a bit more overall, but how much does it cost to fail?

  2. software is incredibly complex... by swagr · · Score: 3, Funny

    kind of like the innards of a biological organism.

    Ever disected anything? It's MESSY.

    --

    -... --- .-. . -.. ..--..
    1. Re:software is incredibly complex... by Anonymous Coward · · Score: 1, Insightful

      Actually, it is amazingly elegant and well thought out--(maybe "thought" is too strong).

      Organisms are incredibly adept at reusing design and building specialized components from generic building blocks.

      They just happens to ooze.

    2. Re:software is incredibly complex... by Blue+Neon+Head · · Score: 3, Interesting

      I think that's a pretty good comparison. Organisms are also buggy creatures with security holes, serious design flaws and legacy code (e.g. the appendix). But hey, life is proprietary. You know, if God/Allah/(insert your Creator here) would just release the source code ...

    3. Re:software is incredibly complex... by Anonymous Coward · · Score: 0

      The source code is in every cell.

    4. Re:software is incredibly complex... by swagr · · Score: 2

      Or you could see it as...
      absurd redundancy and "cut & paste hell"
      The same data in each cell!!
      Plus there are no implementation related interfaces: What can I replace my hand with, and how easy would it be?

      --

      -... --- .-. . -.. ..--..
    5. Re:software is incredibly complex... by Yokaze · · Score: 1

      Is currently beeing reverse engineered.
      Wonder if the DMCA applies here, too. :)

      --
      "Between strong and weak, between rich and poor [...], it is freedom which oppresses and the law which sets free"
    6. Re:software is incredibly complex... by ethereal · · Score: 2, Funny
      They just happens to ooze.

      That's a feature, not a bug :)

      --

      Your right to not believe: Americans United for Separation of Church and

    7. Re:software is incredibly complex... by swagr · · Score: 1

      Delicious irony.

      The source code is in every cell, but it's all being patented.

      --

      -... --- .-. . -.. ..--..
    8. Re:software is incredibly complex... by Anonymous Coward · · Score: 0

      It's hardware, not software. If you want to duplicate functionality, you have to duplicate implementation

    9. Re:software is incredibly complex... by kurowski · · Score: 1

      yeah, but software is incredibly complex in a fragile way, doing things like breaking in the face of unexpected-yet-valid input. biological organisms are complex in a beautifully resilient way, adapting to new situations and working through problems like losing a limb.

    10. Re:software is incredibly complex... by Anonymous Coward · · Score: 1, Interesting

      That's machine code. It's not source, hell, it's not even assembly language.

    11. Re:software is incredibly complex... by Space_Nerd · · Score: 2, Insightful

      Well, in my experience beauty of code and how efficient that code is do not go hand in hand. The most efficient pieces of code i wrote were butt ugly and needed heavy explanations to my coworkers, but they got the job done in few lines and they took up little resources to do it.

      So what we want is no beautifull code, but really efficient one, and coding beautifully often goes against it.

      On the other hand, beautifull code is easier to maintain and to share, but its always best to have good code, not code that looks good.

      --
      Everybody has a purpose in life, maybe mine is to lurk in slashdot.
    12. Re:software is incredibly complex... by Anonymous Coward · · Score: 0

      beauty need not be sacrificed for efficiency, but if you believe that efficiency guts beauty, you will never experience Tao. 10 lines of assembler replace 16 lines of C++ ... beauty.

    13. Re:software is incredibly complex... by greenrd · · Score: 2, Insightful
      But organisms, particularly humans, are far more resilient than any software yet created. Our brains don't usually "crash" completely, no matter what you throw at them. Metaphorically speaking, of course.

    14. Re:software is incredibly complex... by BWJones · · Score: 5, Insightful

      Its messy if you do not know what you are doing. Just like coding or debugging.

      Biological systems are actually incredibly beautiful well structured, and in many cases optimized for their environment to a level unmatched in artificial systems. (I study vision and I see this sort of stuff all the time)

      At any rate, the analogy to biological systems sort of works and sort of does not. Biological systems are not planned, rather they evolve (valid arguments accepted for religion. However, in human experience, biological systems evolve as we do very little in the way of planning outcomes unless one is making transgenics or cross breeding. Even then we are often simply along for the ride). Software too evolves, but well designed software is thought out and planned in advance with lots of end user input, subject matter expert input, and testing of code and interface to meet the users needs. In my experience with others code and commercial products, most software goes right into the writing phase with very little forethought or planning. "We'll get to that later" is the phrase I have heard again and again. The programmers that stay and get rewarded are the ones that can plan, work with subject matter experts, and listen and implement ideas and suggestions successfully. The ones that will not work long for me are the Prima-donnas that try and force their code down everyone elses throat saying nothing else will work. The reality is that either they are too lazy, or not talented enough and are unwilling to work hard enough to become excellent programmers.

      I am seeing this more and more with the Microsoft way of writing code which is timeline driven rather than product driven. While being good enough for many, in reality it is third rate stuff without a commitment to excellence.

      --
      Visit Jonesblog and say hello.
    15. Re:software is incredibly complex... by sharkey · · Score: 3, Funny

      Well, there IS an ephemeral beauty in the sight of the innards of a luser splashed about the bottom of an elevator shaft. Or on the wall. Or in ... Hell, it's just beautiful.

      --

      --
      "Outlook not so good." That magic 8-ball knows everything! I'll ask about Exchange Server next.
    16. Re:software is incredibly complex... by Anonymous Coward · · Score: 0

      back this up, please. what can be done in 10 lines of asm that require 16 of c/c++?

    17. Re:software is incredibly complex... by Anonymous Coward · · Score: 0

      Don't be rediculous. You're obviously an incompetant.

    18. Re:software is incredibly complex... by Anonymous Coward · · Score: 0

      What do you mean it's not assembly language? It proves every day that it's self-assembling ...

    19. Re:software is incredibly complex... by swright · · Score: 1

      hate to be picky, but machine code == assembly language (in the PHP sense of the == operator anyway).

      They have a 1:1 match in instructions and its pretty trivial to convert one to the other - none of this complicated compiling stuff...

      (admittedly assembler tends to have labels and comments and stuff, but the disassembler can generate labels, and comments are for woossies, ahem)

    20. Re:software is incredibly complex... by quartz · · Score: 1

      Maybe my brain does not "crash" completely when I go to sleep, but my conscience sure does. I also lose my perception of time. I'd say those are pretty serious bugs. :-)

    21. Re:software is incredibly complex... by Anonymous Coward · · Score: 0

      Tht'as teh funnyest thign eyeve haerd aal dya.

    22. Re:software is incredibly complex... by Anonymous Coward · · Score: 0

      You're wrong.

      A symbolic assembler makes what started out as readable Assembly source code, with macros and stuff in it, into machine code.

      Assembly code is very much different from the machine code a modern assembler outputs.

    23. Re:software is incredibly complex... by Maax · · Score: 1

      Also, like an engineered object, the information encoded in the structure is far more interesting than the physical reality because it's more malleable. You don't complain about the number of rivets in a 747...

    24. Re:software is incredibly complex... by MrEd · · Score: 2, Funny

      Software evolves? Not in Kansas it doesn't!

      --

      Wah!

    25. Re:software is incredibly complex... by Anonymous Coward · · Score: 5, Insightful

      That's about the most naive blanket statement I've ever read. "its always best to have good code, not code that looks good."

      Consider a project that lasts 5+ years. Over the life of the project, there will be dozens of developers added and cut from the payroll. Assume your "good code" gets executed once or twice a week and instead of taking 2sec it takes 1sec. You've saved 1sec (possibly 2sec) per week which adds up to 52secs (or 104secs) per year.

      Let's compare that to the human maintainer. Assume one person has to look at that code 1 time every 6 months and it takes them 30 minutes to understand it. That's 60 minutes that someone is getting paid to understand that code.

      If the person earns $80,000 US, that's about $4 (assuming 4 week vacation) that was spent on the human. It's actually less when you consider that a person's salary is not their labor rate. Over the life of the project (5 years) you've spent $83 on your "enhancement".

      Now, if the cost of up'ing the Mhz on your CPU is greater than $83 then it may make sense to implement the "enhancement". However, when you consider the price differential between a 900mhz processor vs a 933mhz processor (the argument being that a 933mhz processor could run the slow code and keep up with the 900mhz processor running the fast code) you won't find an $83 difference. It'll be more like $20.

      That being the case, humans are more expensive than computer CPUs these days. Maybe they weren't in the past, but they are today.

      Another argument for clean easily-readable and understandable code is that, if you take your argument, the entire system will become "enhanced" and no one will understand how it works. That will add on an additional overhead in the form of lack-of-enthusiasm for a project and will have financial implications.

      All in all, I've worked on XP projects where code formatting and understanding was important. And I've worked on government contracts where people hack'ed their way through to save a couple of cycles. Maintainability speaks volumes... And I'd go with readability and understandability in a heartbeat...

    26. Re:software is incredibly complex... by DrSkwid · · Score: 1

      if only that were true you'd be on to something

      --
      There are places where the networks are not touching,and there are places where they are-Boeing's Lori Gunter
    27. Re:software is incredibly complex... by Anonymous Coward · · Score: 0

      A properly designed computer would never crash either.

      Magnetic interference might cause a crash, but magnetic interference can also cause adverse effects to the brain.

    28. Re:software is incredibly complex... by swright · · Score: 1

      damn forgot about macros. i'm thinking back to the 8086 days and my simple interpretation of the world. darn.

      i wish there was a 'dont post when drunk' thing on slashdot.

    29. Re:software is incredibly complex... by Anonymous Coward · · Score: 0

      1: NOP
      2: NOP
      3: NOP
      4: INC A
      5: NOP
      6: NOP
      7: NOP
      8: INC B
      9: NOP
      10: NOP

      Or

      1: void donothing();
      2:
      3: int i;
      4: int a;
      5: int b;
      6:
      7: void main()
      8: {
      9: for (i=0; i<4; i++)
      10: {
      11: donothing();
      12: }
      13: a++;
      14: for (i=0; i<4; i++)
      15: {
      16: donothing();
      17: }
      18: b++;
      19: for (i=0; i<3; i++)
      20: {
      21: donothing();
      22: }
      23: }
      24:
      25: void donothing()
      26: {
      27: asm
      28: {
      29: NOP
      30: }
      31: }

      Or some such... Probably way off...

    30. Re:software is incredibly complex... by jx100 · · Score: 1

      Ever hear of an epiltptic seizure?

    31. Re:software is incredibly complex... by jx100 · · Score: 1

      And right there! Bugs! Oh, I'm sorry, "features".

    32. Re:software is incredibly complex... by Fortmain · · Score: 4, Insightful

      Beauty isn't really the issue here, it's maintainability. The current project I'm on, I 'inherited' someone elses butt-ugly code. It did the job fine, but I spent the first six months reading, re-reading, and testing, just so I could understand what the thing was doing. All told, I spent over a year just getting comfortable with the program. Meanwhile, I'm also supposed to be updating this thing for a new release every six months! Every chance I got I did 'code clean-up', fixing things that worked, but were difficult to understand the logic of, or just plain stupid (take a long, often-used routine, and make it in-line everywhere rather than use a function!?).

      Finally, after two and a half years, I get the chance to re-write the whole thing into Java. (I know, it wouldn't be my first choice, but ANYTHING beats Powerbuilder!)

      The point is, unless you are writing 'throw-away- code, your program may exist for many years, and have many people maintaining it. We need to do ourselves a favor and make sure that we can understand what we all write. Memory is cheap, so there is no good reason not to write good, clean, easy to follow code.

      And don't give me the argument that "we're up against deadline". I've been playng this game for twenty years, and I know that every minute I spend in the design phase is like an hour saved in the coding phase. Design the thing first! Make sure you know how it is going to break down into the various modules you will use. If you design it right, the code will flow, and you will make your deadline easily.

      I know, all you young hotshots out there won't listen to an old fart like me, but eventually you will either learn the hard way that I am right, or you will burn yourselves out and never want to code again. Meanwhile, _I_ get stuck trying to maintain the crap _you_ wrote!

      --

      We gotta make democracy safe for the world! -- Pogo
    33. Re:software is incredibly complex... by Computer! · · Score: 1

      He wasn't talking about code, he was talking about software. Few programmers seem to know the difference, but it's there. You can't use code to make your business work.

      --
      If you fall off a building, go real limp, because maybe you'll look like a dummy and people will be like hey, free dummy
    34. Re:software is incredibly complex... by big_hairy_mama · · Score: 1
      If the person earns $80,000 US, that's about $4 (assuming 4 week vacation) that was spent on the human.

      Hmm, does everyone on slashdot work 24 hours a day?

    35. Re:software is incredibly complex... by Anonymous Coward · · Score: 0

      But hey, life is proprietary. You know, if God/Allah/(insert your Creator here) would just release the source code ...

      The source code is readily available, it's called DNA. The tricky part is compiling the stuff! ;)

    36. Re:software is incredibly complex... by CBravo · · Score: 1

      there are possibilities to link other stuff in as well. And I'll forget about the rearranging and adding to make it an executable at all (elf a.out etc).

      --
      nosig today
    37. Re:software is incredibly complex... by beardcz · · Score: 1

      $80,000 a year is (roughly) $40 an hour, and the expense of an employee is more than this (payroll tax, health insurance, office space, new chair, blah blah). I'd call it about $80 an hour.

      The difference is computer cost is practically nil, as if the computer wasn't working on this it would spend it's time on NOPs (OK, maybe the next batch job would get done a second faster, but then it would be on NOPs...).

      The exceptions to the above is where you have a program which is constantly working at close to machine capacity, or which takes a long time to complete and is time critical (must be done by 10PM..). In these cases, code speed takes precedence over readability.

      --
      No sig for me - too lazy to fill one in...
    38. Re:software is incredibly complex... by budgenator · · Score: 1
      I object to your ...Unless your writing throw-away-code..., how many times did that useful script get seen by someone else, applied to a similar task, have a GUI hung on to make it more "User friendly" then end up in the middle of a major project? Far to many, remember all that Y2K stuff a little while ago, programmers assuming that their stuff would be out of service long before its a problem, problem. Everything else I agree with.

      I was trained as a COBOL programmer, it's a language that will not die, mainly because it readable. There is a lot that canbe done to other languages to increase readability, but the real need is for clean logic, a clear API, and documentation. When Pro athletes go to training camp every year, they are re-taught the basics. We change the names but they basics remain the same, design, walk-through, code, test, and document.

      --
      Apocalypse Cancelled, Sorry, No Ticket Refunds
    39. Re:software is incredibly complex... by jeremyp · · Score: 1

      It depends on your criteria for beauty. Speaking as somebody who has spent a significant proportion of his career maintaining other people's code, to me, beauty and maintainability are pretty much the same thing.

      Also, maintainability / beauty is not a property independent of the other properties of the code. It is an *effect* that arises from the software being well designed ad well coded.

      I guess I'm agreeing with you.

      One final point. Often the excuse for writing ugly over complex code is that it is optimised for speed, but ugly over complex code is often harder for the compiler optimiser to understand and turns out slower.

      --
      All I want is a secure system where it's easy to do anything I want. Is that too much to ask ~~ Randall Munroe
    40. Re:software is incredibly complex... by jweatherley · · Score: 0

      Or
      1: void donothing();
      2: int i,a,b;
      3: int main() {
      4: for (i=0; i4; i++) donothing();
      5: a++;
      6: for (i=0; i4; i++) donothing();
      7: b++;
      8: for (i=0; i3; i++) donothing();
      9: }
      10: void donothing() {__asm NOP;}

      --

      --
      Reverse outsourcing: it's the future
    41. Re:software is incredibly complex... by tetrode · · Score: 1

      Aren't we are trying to reverse-engineer it (cloning, DNA sequencing, ...)

    42. Re:software is incredibly complex... by kubrick · · Score: 1

      I was trained as a COBOL programmer, it's a language that will not die

      ... despite our best efforts.

      In a few hundred years time I expect some zombie Cobol program to have taken over the 'net, 'Matrix'-style. :)

      --
      deus does not exist but if he does
    43. Re:software is incredibly complex... by sg_oneill · · Score: 1

      Yeah bloke, I sorta agree, but the thing I note is your refering to 5 year plan projects, and not everyone is talking in that sort of headspace where we can do the whole waterfull-pretty diagram-dfd-usercase-point'o'failure analysis mumbo.
      In the industry I'm in, I'm more likely to be hit by management with the "How long will this take?" ME(After back of envelope figurin' "Month & Half to do it properly" Manager: "You've got a week".
      A lot of programmers get that sorta thing. Granted that there is gonna be a little noodling with a rough sketch of how it's gonna hang to gether, quite often it's a rough job on an ill-considered designed followed by fixum-hacks because commisioning is tomorrow.
      And yeah... The bugs then roll in. I've figured that for every day stripped of a sugested timetable for development, three days are added fixing the mess.
      But don't blame the programmers. The "Fixit or fired" managerial aproach kinda forces it
      Reverse engineering documents can wait. Commenting'll probably never happen.
      It's a shame, but that's life in small business.

      --
      Excuse the Unicode crap in my posts. That's an apostrophe, and slashdot is busted.
    44. Re:software is incredibly complex... by Fortmain · · Score: 1

      BRAVO!

      You've hit the nail on the head! We need to hammer on these basics until ALL programmers understand them!

      And, yeah, my throw-away-code line was kind of throw-away itself. You're right, all to often I've seen stuff that somebody built as a quick, one-time use utility end up as the anchor of a software project.

      (And who would have believed that the stuff I wrote for a mainframe back in the eighties would still be around for Y2K?! (actually, it wasn't - thank God! I was stationed in Europe in the mid-ninties, and when I got back my first job was to rewrite the last remaining software system on that mainframe to run on a unix client-server network.))

      --

      We gotta make democracy safe for the world! -- Pogo
    45. Re:software is incredibly complex... by Anonymous Coward · · Score: 0

      I think that there are two things that could really make a difference here at the most basic level. First, people do not comment their code well. Code should be effeicient before artistic, but should also clear up any possible ambiguity with some simple comments. It seems in all the development that I've seen and been a part of, people refuse to properly comment code. It's almost they feel above it. I guess it comes from the pain of having to explicitly comment code for a class, but it drives me crazy. Second, I don't think that most computer science classes are helping people understand the concept of good efficient code. Of course it depends on the situation, but it seems that everything that I've seen has been based on making pretty code that gets the job done. The combination of Data Structures and Algorithms into one course is another part of the problem I see in the philosophy of most computer science departments. There is not enough emphasis on the development of algorithms and writing efficient code.

    46. Re:software is incredibly complex... by Fortmain · · Score: 1

      Unfortunately, you're all too right. Too often it's the manager (or the customer) who says "we need this yesterday." And the programmer who says it can't be done will soon find himself in the unemployment line.

      I guess I'm fortunate to be working for a large corporation with an understanding client. Sometimes my customer says "I need this ASAP", and I can do the back-of-the-envelope calculation and say "You can have a rough system in 2 months", but I will also explain what he will give up, i.e., which updates/bug-fixes won't be delivered on time because I'm devoting time to this one. That puts the onus back on him. And fortunately, my manager backs me up.

      --

      We gotta make democracy safe for the world! -- Pogo
    47. Re:software is incredibly complex... by Rakarra · · Score: 1
      This is... umm.. "daily maintenance."

  3. I Can see the point... by sl3xd · · Score: 2, Offtopic

    I can see the point, but why bother if we can't even get the courts to recognize the artistry involved in writing software?

    An architect can get rights on his design as free speech, and artistic expression.

    Software designers get no such credit.

    --
    -- Sometimes you have to turn the lights off in order to see.
    1. Re:I Can see the point... by Anonymous Coward · · Score: 1, Interesting

      An architect's designs cannot do anything, they only tell you how to build a structure. Code can be turned into a working piece of software with no effort (compaired to constructing a building)

    2. Re:I Can see the point... by Anonymous Coward · · Score: 0

      So once we develop automatic home-building robots, the architects will suddenly lose their rights? I don't think so.

    3. Re:I Can see the point... by matek · · Score: 1

      And so we come to the definition of ART.

      Some would say that art is when someone expresses their feelings in some form.

      Other would say that art is when someone makes something that looks/sounds/feels very nice..

      Source code can be art-like. Sometimes, when you see some beatyfull software design, the tears start to fall.. IMHO code can be a modern form of art - just like bodypainting is an art...

    4. Re:I Can see the point... by Anonymous Coward · · Score: 0

      So once we develop automatic software building robots, the GNU software will no longer be needed? I don't think so.

  4. And this is news? by ptgThug · · Score: 1

    While I personally try to produce something I can be proud off, saying there is shody work out there is not news.

    I would wager that most car mechanics, plumbers, electricians, home builders, anyone-who-works-on-something-you-don't-see are crooked, cutting corners where they can and shamming the public.

    1. Re:And this is news? by Anonymous Coward · · Score: 0

      I work construction, and I can guarantee that there is a s#!t load of corner cutting and instances where the supervisor says "oh, we messed up and can't fix it? Cover it up and lets go to the next job." We often times reuse inferior products to the point of absurdity and don't think anything of it because lots of people do it. However, there are companies who don't operate like that, but they are twice as slow and expensive. You get what you pay for, and you hire people like us knowing what to expect. Time is money, and many people will sacrifice quality for money and speed. It's just the way things work.

    2. Re:And this is news? by Peyna · · Score: 1
      I worked in an automotive factory for 90 days this summer, and I can tell you that on anything important, and even unimportant, the people doing the real work do not cut corners (even on things you can't see), because they have a true sense of value and pride in their work. Even if all they do is put 5 bolts on the vehicle somewhere, or maybe just put some brackets on the back of the instrumental panel (which you would never see, nor know if it wasn't done properly), they all take care to make sure their job is done perfectly, and there are many people making sure that they do.

      If you want to see true quality, go to a automotive assembly plant in the United States (I can't speak for other countries, never been there) that is ISO 9000/9001 certified, and then you will see how much more quality assurance goes into the car you drive than the software you use.

      But I certaintly would not say that MOST of any profession are trying to cut corners and sham you. Believe it or not, most people would rather do a good job and have a good product in the end, then leave a customer with shoddy work and make an extra buck.

      Not everyone is a scumbag.

      --
      What?
  5. blah by teknopurge · · Score: 2, Insightful

    The reason it's so bad is because it doesn't have to be good to get the job done. Most management is just about getting things done fast.

    There is usually a tradeoff between quality and expediancy.

    teknopurge

    http://techienews.utropicmedia.com. help us beta.

    1. Re:blah by bmj · · Score: 1

      There is usually a tradeoff between quality and expediancy.

      i agree. can anyone shed light on what the typical iteration period is for structural engineers and architects? i'd be curious to know if they are put under the same time constraints as software developers.

      i would also tend to think that the learning curve for developers can be a bit faster (thanks to rapid development cycle). that might lead to inexperienced developers getting involved in system design. it may not be that they are bad programmers--their managers may have given them responsibilities above and beyond what they can do. the average developer should spent some time as a code monkey (or perhaps just remain as a code monkey for their whole career).

      --
      Whereof we cannot speak, thereof we must be silent. --Ludwig Wittgenstein
    2. Re:blah by Anonymous Coward · · Score: 0

      That's exactly right. People want bugfree and beautiful code? Then expect it to take as long to write as it takes to build a big bridge. I mean, we're talking about more complex interactions here than a bridge...just less critical.

      Our software ships when it meets the customer requirements and doesn't have any apparent bugs. Is it beatiful and bugfree? No way, but our client wants the software delivered in 4 months. Well, for perfect code, our development cycle would have to be THREE TIMES as long for the same feature-set.

    3. Re:blah by DrgnDancer · · Score: 1

      Having done Software design (at the collegiate level at least, I do administration professionally right now), and worked for an architecture firm, I can make a somewhat informed opinion here. People are willing to pay extra and wiat longer for beautiful buildings. A rich man might go into an architect's office and say "Make me the most beautiful 5 bedroom dwelling you can. Make sure to include all the amenities. I'll need a bathroom for every bedroom, a gourmet kitchen, a family room and formal living room..." This guy knows it is going to cost him a fortune to get the house desgined (and even more to get it built) and that the time (both real and billable) requirments are going to be high.If the firm gives him back a design that is merely functional and has "bugs" (only one bathroom, kitchen in a seperate building, whatever) he is going to be upset because he paid for the best.


      No one wants to pay extra in time or money for "beautiful" software. Ironic since most people will spend more time working with their primary computer applications than they will enjoying their house. People cannot recognise beautiful code, so clearly they don't care about that, but you would think they would be willing to pay extra for "functionally" beautiful programs. "Hey guys, take your time. I gotta spend 4 hours a day working with this software, so I want it be as pleasant to use as possible. I'll pay a bit more to make it less painful." The only reason I can see for this is that people have gotten so used to software being painful that they just accept it as is. They assume that any money spent to make it better is wasted, since in the end it'll just be the same crap, just crap that cost more and took longer. We're in kind of a vicious circle at this point. No one will pay for better software, but it'll take better software for people to be willing to pay for better software.

      --
      I don't need a million points of light, just two points of multi-mode fiber and a 10 Gig-E router.
    4. Re:blah by Wyzard · · Score: 1

      It's not that people don't care as much about software design as architecture; it's that when people look at software they see the interface, not the design.

      If someone came to your architecture firm and asked for a nice house and you built something that looks beautiful but isn't earthquake-safe and has a slightly leaky basement, the buyer wouldn't be as quick to complain as if it was missing a few bathrooms or whatever. When you look at a house, you don't see behind the walls.

      The same is true of software. Microsoft Outlook, for example, looks nice. It isn't visibly obviously broken, and you have to use it for a while to discover that it crashes and it's susceptible to script worms. You can't see the internal structure of the software, so when you run into problems you percieve them as isolated aberrations rather than symptoms of a deep-rooted structural problem.

      So when a client asks for software, or for a house, they're asking for a product that looks nice on the surface and has the user-level features they want. They don't worry about the internal details, because that's your job. It just so happens that in architecture the structure is a little more visible to the end user than in software, thanks to the presence of support beams and wall placement and such.

    5. Re:blah by bmj · · Score: 1

      we haven't reached the point when end users expect bug-free software. thanks to microsoft, users expect an application to have its quirks and problems. how many ms users have had windows 98 unexpectedly crash, and not even think twice about it? you just give it the three finger salute and wait for your box to reboot. there isn't a great deal of pressure on the development community (at least those who produce consumer-driven, non-critical apps) to produce *perfect* products.

      --
      Whereof we cannot speak, thereof we must be silent. --Ludwig Wittgenstein
  6. Beauty for beauty's sake makes crappy software by GusherJizmac · · Score: 5, Insightful
    Software has to:
    1. Meet user requirements
    Which doesn't necessarily mean it has nice and pretty code. If you have time, you are doing yourself a favor by designing it, but you can't lose track of the purpose of what you are doing, which is to get something working.

    Most techniques for designing or building software (e.g. patterns, processes) all serve to help you avoid bugs, which is to say more efficiently build software that meets user requirements.

    --
    http://www.naildrivin5.com/davec
    1. Re:Beauty for beauty's sake makes crappy software by Telek · · Score: 5, Informative

      I totally disagree. Well, maybe not totally. "Beauty for efficiency's and future usage and many many other reason's sake" is always a good idea, however not usually practical.

      In how many cases do you end up spending more time and effort in the long run debugging shitty code because it wasn't written properly in the first place.

      For those who know how to write good clean code it's not that big an issue. Writing clean code takes the same amount of time as writing sloppy code, and in most cases it actually takes less. The only difference is that you need to know what you're doing and have enough experience to know how to code properly.

      Also notice that you take away accountibility and responsibility because not everyone can see your code. It's like walking around inside your house in your boxers when noone's at home. And this problem isn't limited to software. Anything that people can't see inside isn't usually pretty.

      Bah, bring me back to the 8086 days where you HAD to code efficiently because you had no choice. Man, anyone remember Wordstar? Everything you needed in a word processor (ok, maybe not everything) in 80kb. DAMN!

      --

      If God gave us curiosity
    2. Re:Beauty for beauty's sake makes crappy software by Anonymous Coward · · Score: 0

      but if you just 'meet the user requirements' you can still miss a ton of other non-user requirements.
      well commented code isn't a user requirement, but it sure a heck is a good programming practice and usually a technical requirement.

      your answer strikes me as the lazy developer telling the manager "it works doesn't it?" when asked if the app is maintainable.

    3. Re:Beauty for beauty's sake makes crappy software by DCheesi · · Score: 1

      Actually, my old boss used to give *me* that line!

    4. Re:Beauty for beauty's sake makes crappy software by Andrewkov · · Score: 4, Insightful
      This article is demeaning to programmers. The reason quality is poor is due to unrealistic deadlines, the reason projects are over budget is due to poor planning.

      Most good programmers are capable of creating high quality, elegant code, but are not allowed to because of external pressures that are out of their control.

      And with all due respect to engineers, most software is a lot more complicated than building a bridge.

    5. Re:Beauty for beauty's sake makes crappy software by Slide100 · · Score: 3, Insightful

      Software has to:
      1. Meet user requirements


      Unfortunately, in a great majority of cases, the user doesn't know what he/she needs.

      I can't count the number of times I have installed a system in a hospital (communications systems), made it run exactly to spec, and then have the staff say: "Why does it do that, we have absolutely no need for that! It should do this however".

      Generally, the specs are made by managers, not the people who actually use the device (program, etc). This causes the spec to be what management perceives to be the need, not the actual need.

      Granted, in an software situation, you are supposed to go through everything and find out what they need. How often does this happen? In most cases, a programmer is given a spec and told to write the software to it.

      --
      >B2 Spirit, radar contact......
    6. Re:Beauty for beauty's sake makes crappy software by FortKnox · · Score: 1

      One word:

      Maintainability.

      That isn't a software rule?? What about re-using code (for us OOP's)?

      --
      Good quote, too many chars. Seriously, the slashdot 120 char limit sucks!
    7. Re:Beauty for beauty's sake makes crappy software by greenrd · · Score: 1
      Engineers still sometimes fail at creating safe (or perceived safe) bridges - e.g. the Millenium Bridge in London. They still risk failure when they try out something new. And because "software engineers" are doing much more complicated work than bridge-designing, they are more "innovative" on a day-to-day level, simply because the reasonable possibility space is much larger.



      Damn, I never thought I'd end up calling microsoft "innovative"! ;)

    8. Re:Beauty for beauty's sake makes crappy software by Anonymous Coward · · Score: 0

      Why does it do that, we have absolutely no need for that! It should do this however".

      Generally, the specs are made by managers, not the people who actually use the device


      This is why Business Analysts & User Acceptance Testing is so important.

    9. Re:Beauty for beauty's sake makes crappy software by CaseyB · · Score: 2
      As a developer, I would add another goal:

      Software has to:

      1. Meet user requirements
      2. Require minimum effort on the developer's part.

      Even if you're under work-to-rule when delivering a system, that second requirement makes elegance important. Writing thoughtful, elegant code is simply easier in the long run.

      The three principal virtues of a programmer are Laziness, Impatience, and Hubris. -- Larry Wall

    10. Re:Beauty for beauty's sake makes crappy software by mikec · · Score: 1

      You missed a phrase. Software has to

      1. Meet user requirements now and in the future.

      Which means you had better write nice and pretty code, unless you know it will never have to be fixed or enhanced. "Getting something working" is about 10% of most software jobs. The other 90% is keeping it working, which depends critically on beauty, because ugly code is very expensive to maintain.

    11. Re:Beauty for beauty's sake makes crappy software by jfunk · · Score: 5, Informative
      And with all due respect to engineers, most software is a lot more complicated than building a bridge.


      ...and you know this how?

      Ever designed a bridge? Do you know how long it takes? Did you know you only get one chance to get it right during the implementation stage?

      Yours is the attitude that spawns crappy software.

      You might tolerate a Windows BSOD, but what if your TV started crapping out on a daily basis? Do you know how involved the TV design process is? There's a hell of a lot more to it than you think and there's a lot more thought put into it than 90% of the code out there. Then you have such things as life-support systems and critical automation, which are a *lot* harder to do than any software out there.

      Oh, and I'm saying this as someone who does both, BTW.
    12. Re:Beauty for beauty's sake makes crappy software by jafac · · Score: 3, Insightful

      basically, you're talking about the problem being that the product is being designed by people other than the engineer.

      Marketroids designing projects and setting schedules will get you an end product that does not appear to be well engineered. Because the engineer didn't design it. The Marketroids did.

      You want software that works? Put the engineers back in charge.
      But then the company that does that will be out of business by the next development cycle. Because their product won't look nice on the comparison matrix.

      Ease of use and word-of-mouth doesn't cut it anymore in this industry. You need the trade rags sucking up. And that takes marketroids.

      --

      These are my friends, See how they glisten. See this one shine, how he smiles in the light.
    13. Re:Beauty for beauty's sake makes crappy software by Jerf · · Score: 5, Insightful
      Ever designed a bridge? Do you know how long it takes? Did you know you only get one chance to get it right during the implementation stage?

      While your reaction is understandable, and it's easy to overstate software complexity, it is not entirely untenable to maintain that software is an unusually complicated beast, by most any useful metric.

      "Useful metric" is where the standard falls down. What metric can we use that makes sense? Can one person understand the design of a bridge? I daresay yes. Can one person understand all of Windows to the same level? I daresay no. Is that a fair comparision? What is a fair comparision?

      We lack a metric of complexity. So I'll submit this: By the rule of mediocrity, "on average, everybody is equally stupid", we must say that software is more complex then bridge-building, because we know how to build good bridges. It's been a while since I've heard of a bridge honest-to-goodness failing from something other then lack of designed maintenence. Software, on the other hand, is still problematic and we've been trying to figure out how to build it for years.

      Self-flaggelating (or, if you are not a programmer, flaggelating others whom you don't really understand) is not really useful. Attributing bad software to extra stupidity on the part of the software authors is quite disingenuous. Odds are, if a lot of very smart people have been working on the problem and haven't come up with a solution yet that seems to work, it's because it's a hard problem, not because the smart people are extra stupid.

      (It's also worth pointing out that the few software team structures that do seem to produce useful, reliable, etc. code also require truly massive expenditures on design, testing, testing, and more testing. Without proof, I'm willing to claim that the amount of money spent developing the software for, say, the Space Shuttle in this manner grossly exceeds the design+labor of any bridge you care to name. (Discount materials for the bridge, there's no clear equivalent in software.) And that's just Space Shuttle software... that doesn't help you email Granny.)

    14. Re:Beauty for beauty's sake makes crappy software by Anonymous Coward · · Score: 0

      With all due respect - yes most engineering projects have incredible thought put into them.

      But reading between the lines of the original post, I think that the message was that unlike engineering, theory behind software development bears closer resemblance to "alchemy" and part of the reason behind this is that software attempts to address a range of problems many times larger than those addressed by, say, structural engineering.

      People have been building bridges for millenia. People have been building word processors for what, 40 years?

    15. Re:Beauty for beauty's sake makes crappy software by ColaMan · · Score: 1

      And that's just Space Shuttle software... that doesn't help you email Granny.

      How about :
      1. Design shuttle software.
      2. Launch said shuttle.
      3. Deploy comms satellite.
      4. Send email to granny via said comms sat.
      Mind you, there could be a comparison to Microsoft there - Why build a shuttle to launch a sat when you could use a (relatively) cheap and (relatively) simple booster rocket launch?

      (yes, I know the shuttle does more, but is it worth it to launch a sat? really?)

      --

      You are in a twisty maze of processor lines, all alike.
      There is a lot of hype here.
    16. Re:Beauty for beauty's sake makes crappy software by Anonymous Coward · · Score: 0

      Meeting user requirements often means having a bug-free program which is amenable to future changes (to as great an extent as is practical), in a reasonable amount of time. So, when you write "good, clean code", you in fact do it with the purpose of better satisfying the user, be through a superior product or a quicker development cycle or whatever. So, in fact, you are agreeing with the poster...

    17. Re:Beauty for beauty's sake makes crappy software by dondiego · · Score: 1
      "Did you know you only get one chance to get it right during the implementation stage?"

      Not in Seattle! We've got plenty of "floating bridges" that have sunk... We just rev the plans and rebuild!

    18. Re:Beauty for beauty's sake makes crappy software by Ripsnorter · · Score: 1

      You might only get one chance to get a bridge right but atleast you know what the birdge is to do right from the out set of the project, ie go from 1 side of the rive to the other. With software its a moving target, I've worked on projects where I've just got something working the way my boss thought he wanted only to come back and say it would be nice if it ........ Very frustrating and the end result was a mess. I sorta compare it to changing the bridge construction from stone to metal half way throught the design phase.


      And another thing I wish people would stop comparing the process of making software with other things. Its a totally different process.

    19. Re:Beauty for beauty's sake makes crappy software by danox · · Score: 2, Insightful

      I agree, and actually I would go so far as to say that bridges are not that different to software

      Having studdied civil engineering before I moved into computer science, I found that the basic rules are the same, you design the bridge or whatever to the required specs, cutting costs wherever possoible. The only real difference is that most customers tollerate software bugs, whereas your average city full of people will not tolerate a bridge that falls down in the normal corse of business

      Civil engineers put allot of effort into their designs becasue they have to, there are laws in place to make them do so. If these laws were not in place we would see many bridges falling down. These laws are just another requirement. If there were laws stating that software must contain less than so many bugs, then that would be another requirement and you would find that more effort was put into the design of the software to ensure this requirement was met.

      So really, the comparison does not really prove anything except that software companies don't need to design their products as well as civil engineers do. Its not usualy a requirement.

      --
      "Me and my girl named bimbo . . . limbo . . . spam" - Captain Beefheart.
    20. Re:Beauty for beauty's sake makes crappy software by GreatMightyPoo · · Score: 1

      Ever designed a bridge? Do you know how long it takes? Did you know you only get one chance to get it right during the implementation stage?

      I think you inadvertantly bring up a good point. Nobody has really figured out yet how long it takes to write flawless code. Hell, by the looks of it, very few companies have even figured out how long it takes to write half-assed code. How often do you hear stories from the software folks like, "Yeah, we finished our project 2 months before our deadline...now we get to sit around and play Quake until it ships."

      Think about this, try writing a mathematical proof of a simple program (or mathematical specification, or formal verification--or whatever your favorite software engineering buzz word is--anyway, it's the only way to prove a piece of software is flawless without writing code and testing every possibility)...say a program that outputs the result of multiplying 2 integers together. The proof is straightforward, but is longer than the code needed to implement it.

      Now try a bit of code that is only a bit more complicated...say a binary search. Once again, the proof is longer than the code, and it is quite a bit trickier than the proof of the 1st program. Most people in here could hack together a working binary search routine in a short amount of time, but would spend quite a bit more time on the proof that it works flawlessly (if they even [knew how|cared enough] to do it).

      Take that analogy and extrapolate it to a large piece of software...any guesses on how long it would take simply to prove all of it's modules work as advertised...let alone the interaction between the modules?

      Compare this with how to prove a bridge will not collapse. We've known the basic math behind bridges for thousands of years, and have been applying it for nearly as long (remember, the Romans had bridges). We've been building the more modern bridges since the late 1700s. Only recently can you say that they've perfected them enough that they don't collapse due to a design flaw. Now, yes, we may have known the basic math behind software for nearly as long, but we've only began practicing it this century...we still have a long way to go. Programming as an engineering disipline is still very much in it's infancy.

    21. Re:Beauty for beauty's sake makes crappy software by Anonymous Coward · · Score: 0

      Most of the time programmers are editing and debugging code, less often is the creation of an entirely new program. Beautiful code is a lot easier to maintain.

    22. Re:Beauty for beauty's sake makes crappy software by harvardian · · Score: 3, Insightful
      Can I amend that to:

      1. Meet user requirements quickly

      When you build a bridge you have plenty of time to design and implement it. And that bridge will last decades, if not centuries.

      Software, however, isn't meant to last. It's meant to take advantage of cutting edge technology RIGHT NOW. You don't write a program to last for 100 years. You write it to last a maximum of 5 (longer for sparse exceptions). That's why software is often so ugly.

      Maybe after 30 years we'll have an OOPL that will eventually take the cake, and some sort of system where we don't change APIs every month. Then maybe people will be able to write code for the long term, knowing it won't be obsolete in short order.

    23. Re:Beauty for beauty's sake makes crappy software by Anonymous Coward · · Score: 0
      And with all due respect to engineers, most software is a lot more complicated than building a bridge.

      Ignorant horsehit.

      With all due respect to computer programmers, why is it that they think they're smarter than the rest of humanity? Why can't they recognize the expertise of people in other fields? Why are they incapabe of showing any respect for anyone other than themselves? And why are they so baffled when people are put off by their insulting attitudes? Why are they surprised when they are sterotyped as having no social skills, when they demonstrate their lack of such skills at every possible opportunity?

    24. Re:Beauty for beauty's sake makes crappy software by Anonymous Coward · · Score: 0

      I always had the experience that beautiful code is superior to ugly code. That depends on the definition of beauty in that case.
      My definition of beauty comes from math and physics which means that a shorter more compact formula is more beautifull than a formula that has to take into account many special issues. What is nicer to look at? Code where you have several if() clauses for several sepcial cases, or code where the if() clauses can be omitted because the code is designed and structured in a way that includes all these special cases without the need of having to consider special cases at all.

    25. Re:Beauty for beauty's sake makes crappy software by erlando · · Score: 1

      Software, however, isn't meant to last. It's meant to take advantage of cutting edge technology RIGHT NOW. You don't write a program to last for 100 years. You write it to last a maximum of 5 (longer for sparse exceptions). That's why software is often so ugly.

      And that, ladies and gentlemen, is what brought us Y2K...

      --
      Remember, there are no stupid questions. But there are a lot of inquisitive idiots.
    26. Re:Beauty for beauty's sake makes crappy software by Keeper · · Score: 3, Interesting

      I believe that it cost about $8000 when all is said and done for each line of code placed in the space shuttle software.

      That's an expensive "{"

      :)

    27. Re:Beauty for beauty's sake makes crappy software by YKnot · · Score: 1

      Efficiency is the arch enemy of beautiful code if taken too far. The part of efficiency which is usually reached by "optimizing" is taking it too far.

      A programmer's point of view and a user's point of view are very different. Many requirements lead to "ugly" code because the requirements themselves are "ugly". Most humans don't like pure structures if it means a shortcut can't be taken. Shortcuts however are - in a programmer's world - deviations from the normal control flow, and that means there has to be a piece of code to handle that deviation. A programmer would probably have loved to omit that code in favor of a more generalized (and thus "beautiful") piece of code.

    28. Re:Beauty for beauty's sake makes crappy software by NeilArrow · · Score: 1

      Depends who you define as "user". If you're in the software development department of a firm, then the user, as far as you're concerned, might be the support department. They may well need to see the code, and fix bugs in it. That's when "nice and pretty" code can save time for everyone.

      Working in support myself, I know the value of developers who can write easy to understand code. And i've also seen my fair share of rubbish too...

    29. Re:Beauty for beauty's sake makes crappy software by dragisha · · Score: 1

      I believe that it cost about $8000 when all is said and done for each line of code placed in the space shuttle software.

      That's an expensive "{"


      Only - there are not any "{"'s in space shuttle software. No C, no fun.

      --
      http://opencm3.net, http://www.nongnu.org/gm2/
    30. Re:Beauty for beauty's sake makes crappy software by Anonymous Coward · · Score: 0
      Which doesn't necessarily mean it has nice and pretty code. If you have time, you are doing yourself a favor by designing it, but you can't lose track of the purpose of what you are doing, which is to get something working.
      Users really don't know what they want, for the most part. Users want to be able to get a new version with X feature. Clean coding will make it easier to give them this feature, ergo clean code is what the user wants. While you may only see their initial reaction to the interface most users have long-term affairs with their software.
    31. Re:Beauty for beauty's sake makes crappy software by bluGill · · Score: 2

      Ever designed a bridge? Do you know how long it takes? Did you know you only get one chance to get it right during the implementation stage?

      No, I don't need to. I've seen people build bridges, and I've then seen cement trucks on top of those bridges. These are people with no engineering background who still manage to build a bridge that holds up despite not designing it at all. You don't have to know how much weight you can put on a wood beam before it will fail, you just need to use a beam big enough that it is overkill.

      You can't do that with software. There is no software equivelent of overkill that an amature can design something that works.

    32. Re:Beauty for beauty's sake makes crappy software by stephend · · Score: 1

      It depends on what "nice and pretty code" is. If you mean that every algorithm is optimal, that the design of every part of it is elegant then you're right: the software is seriously over-engineered.

      However, I believe there is a minimal set of standards of code 'cleanliness' that should be used regardless of timescales. My main problem is with badly formatted code. What excuse is there for that? You'd only have bad formatting if you didn't understand your own code, which should trigger some warning bells somewhere!

      I wrote a longer piece about this here.

    33. Re:Beauty for beauty's sake makes crappy software by skram · · Score: 1

      > Ever designed a bridge?...only get one chance to get it right...
      Bridge design is based on the thousands of years of bridge research, design, building, failing, and retrying. Just like bridge building has evolved from basic research (long enough, strong enough, etc) through standardized materials and techniques (steel, rivets, suspension cable, etc) to artistic efforts (Verizano Narrows in NY), software has evolved from trial and error through common languages (Fortran, COBOL, C++) and into artistic efforts, which rely on the research of the past. I'd argue some software can permit zero failures (Space Shuttle flight control) while others should but don't (PC operating systems :>).

      Software design is evolving. We're not at the bridge-building stage yet, but we're getting there.

      --
      Steve Kram skrama@sport.rr.com
    34. Re:Beauty for beauty's sake makes crappy software by JoeyThunders · · Score: 1

      Let's also remember this: A bridge has one function: don't fall down while people drive across it.

      When software gets ugly is when the pointy-haired boss (or client) says "great but can you make it...work under NT4...cross reference our live market data feed...can you put a button here that orders chinese food...and calculates the MSG by grams and ounces and files the report with the EPA...by next week without letting the date slip or increasing the budget...and by the way make it all mauve (apologies to dilbert) AND THE DEVELOPER AGREES TO DO IT.

      DEVELOPERS LEARN THIS WORD: N-O. It'll be your best friend.

    35. Re:Beauty for beauty's sake makes crappy software by Merk · · Score: 2

      See, that's just why that coding style is wrong. Opening braces don't belong on their own line! Imagine how much money we could have saved if those coders just used the right coding style!

    36. Re:Beauty for beauty's sake makes crappy software by HeyLaughingBoy · · Score: 1
      We lack a metric of complexity. So I'll submit this: By the rule of mediocrity, "on average, everybody is equally stupid", we must say that software is more complex then bridge-building, because we know how to build good bridges. It's been a while since I've heard of a bridge honest-to-goodness failing from something other then lack of designed maintenence. Software, on the other hand, is still problematic and


      I don't think it's that software is that much more intrinsically difficult than bridge design, but rather that we know how to manage the complexity of bridge design and are still learning to manage the complexity of software.

      We build medical instruments and I think I can claim that our embedded software products are useful and reliable. They *have* to be. And having produced over 250kloc on this project so far, I have to say that complex software design really isn't as difficult as people seem to think. On our team, we all have electrical engineering backgrounds, so perhaps that process of "design first, code later" is ingrained from years of making mistakes :-)10+ hour days are very rare around here and we meet our deadlines. Bugs are caught quickly and usually not at all difficult to fix. Bottom line: when this product ships, I will feel confident enough to have it used to diagnose me!
    37. Re:Beauty for beauty's sake makes crappy software by Captain+Oblivious · · Score: 1
      Bridges don't fall down because the designers aren't able to get away with posting a sign at each end that reads:
      By driving past this sign the motorist agrees that this bridge is not waranteed to perform in any capacity, and further that the designer makes no claim as to this bridge being fit for any purpose or use whatsoever, and is held blameless for any damages resulting from the use of this bridge.
    38. Re:Beauty for beauty's sake makes crappy software by AmericanInKiev · · Score: 1

      The Bridge analogy is weak - as most bridge builders are granted a monopoly (contract) before they build.

      A better analogy would be a. A chasm with thousands of people waiting to cross, b. multiple bridge building teams competing to be the first to get a crossable bridge in place.

      Each bridge leads to a seperate island, so the first to be crossable leads to the only inhabitaed island - later bridges may be safer and bigger - but they will lead to uninhabited islands.

      That's the Bridge metaphor - I'd like to see the example in reality. In this context - I do agree that current product quality laws would help - and should apply - this would punish the sloppy bridge builder and encourage teams which focus of quality.

  7. Ha, but really. . . by Laplace · · Score: 2

    Every extra day that I take to plan, every minute I spend thinking about design, and every extra line of code I write to make my software more pleasing is another line that could add more functionality, another minute wasted not producing something tangible, and another day that I need to be paid. When it comes right down to it, most software is just good enough to get the job done because that is what is most profitable in the short term. I revel in every bit of beautiful code I write, but also know that if I spend too much time making my code beautiful I will be replaced by someone more interested in just getting the job done. If I really wanted to produce art, I would have gone into a field that produces recognizable art.

    --
    The middle mind speaks!
    1. Re:Ha, but really. . . by kurowski · · Score: 1

      No, if you write beautiful, maintainable code then you won't get replaced by someone who prefers to hack together something that just works. Decent employers recognize excellence, especially when the project's lifespan is measured in months or years, not days or weeks.

    2. Re:Ha, but really. . . by TomRitchford · · Score: 1
      Laplace wrote:
      Every extra day that I take to plan, every minute I spend thinking about design, and every extra line of code I write to make my software more pleasing is another line that could add more functionality, another minute wasted not producing something tangible, and another day that I need to be paid. When it comes right down to it, most software is just good enough to get the job done because that is what is most profitable in the short term.

      For my part, every minute I spend on making my code cleaner and more aesthetic comes back to me three-fold when I find bugs before the testers do and when I have to make changes later. Life is too short not to do your best work all the time!

      and yes, I do have samples.

    3. Re:Ha, but really. . . by Anonymous Coward · · Score: 0

      Are you in management? You sure sound like it. A _good_ programmer will save several days coding for each day of planning. But in your case - it's probably a waste of time.

    4. Re:Ha, but really. . . by Anonymous Coward · · Score: 0

      Decent employers...

      Aren't those just a myth? :-)

    5. Re:Ha, but really. . . by Laplace · · Score: 2
      most software is just good enough to get the job done because that is what is most profitable in the short term.


      "Short term" is the operative phrase in that quote. Was should be, and what is, are two totally different things.


      Flame on.

      --
      The middle mind speaks!
    6. Re:Ha, but really. . . by Laplace · · Score: 1

      So much for proof reading my posts. Parse was to what, and you'll be much happier.

      "Me fail english? That's unpossible!"

      --
      The middle mind speaks!
  8. complexity by radish · · Score: 5, Interesting


    The bridge analogy you mention is frequently quoted. And I agree, standards in software design & implementation need to improve - particularly in the shrink-wrap world (I happen to think that in-house bespoke systems are generally better). But the standard response to your standard analogy is that any non-trivial application is hugely more complex than a bridge.

    The design of a bridge is basically the extrapolation of a few well known engineering principles to the scale you want. It has 2 requirements : (1) It must reach from one side to the other and (2) it must not fall down. You may have noticed that software is not like that ;-)

    I remember reading a quote from a famous software scientist (I forget who, maybe Turing?) who said (and I paraphrase here) that we shouldn't be teaching our your computer scientists maths, physics, engineering etc, but rather art and biology. Because programming is an art, it's the creation of something from your own imagination, not like engineering which is simply applying rules. And once created, any large application behaves far more like a living organism than a machine, it grows, it evolves and (often) it gets ill. I always liked that idea :-)

    --

    ---- Den ene knappen er powerknapp, den andre er Bender voice knapp "Bite My Shiny Metal Ass"

    1. Re:complexity by lammi · · Score: 1
      Instead of a bridge the example of a Xerox machine should be used, something that takes input and gives output, but more importantly has a bunch of moving parts that consistently break down.

      The reason that law offices have rows of copying machines isn't just because they make massive amounts of copies, its also because they realize they need backups when one dies.

    2. Re:complexity by Anonymous Coward · · Score: 0
      The design of a bridge is basically the extrapolation of a few well known engineering principles to the scale you want. It has 2 requirements : (1) It must reach from one side to the other and (2) it must not fall down.

      And the design of software is the application of a few very simple logic principles to the task at hand. If I apply the same level of abstraction as you have above, it has basically one requirement: it must run.

      Unless you've ever been involved in such a thing, or talked extensively with someone who is, you have no idea of the massive complexity of most civil engineering projects. Software looks like a child's game in comparison.

      Most software is bad for two basic reasons: most of the people writing it are incompetent, and they can get away with it.

    3. Re:complexity by Anonymous Coward · · Score: 0

      Yeah, those bridge builders got it easy. It ain't tough like building software.

    4. Re:complexity by DCheesi · · Score: 1

      As the CS prof.s used to say:

      "Repeat after me: we are Software Engineers!"

      Despite what we may like to believe, programming (in the real world, at least) is neither high art nor hard science. It is, in fact, engineering with a bit of architecture thrown in. And the only reason architects have to be artistic is precisely because people see the insides of their structures. There's no reason to write beautiful code per se; readable and maintainable, yes, but those much simpler goals. Beautiful code is a conceit of value only to other programmers.

      (Wow, I never knew I could sound that snotty! ;-)

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

      Boy, I hope you're wrong. Otherwise I'd have to be really worried about the fact that CivEs were total slackers compared to the rest of my Eng. School, while CS majors worked their butts off.

      (Note to self: try to avoid bridges whenever possible...)

    6. Re:complexity by Anonymous Coward · · Score: 0
      Too bad you and your prof. are blind.

      Software development is an art.

      The moment it becomes an engineering science I'll quit. Engineering to me means no vision, no skill and no insight. Just following the orders, sir.

    7. Re:complexity by oddjob · · Score: 5, Insightful

      Your argument rests on the assumption that something you don't know how to do is simple. The reason software quality is low is not because it is more complex than building a bridge.

      -- We've been building software for decades, but we've been building bridges for centuries.

      -- There are natural structures that resemble bridges that we have learned from. For most software, this is not the case.

      -- When a bridge fails, there is a good chance someone is going to die, so you'd better get it right. Software is rarely that critical, and when it is, it is usually better written.

      -- Also, when building a bridge, if you are sloppy about it, you're going to have a lot of dead workers. For coders, caffine overdose and sleep deprivation are seldom fatal.

      -- When building a bridge, it is difficult or impossible to correct mistakes after the fact. With software, just release a patch.

      -- When building a bridge, you have the contract before you start construction. With software, there is always the worry that a competitor will get a product out before you.

      -- If you build a bad bridge, you will get sued. Try and sue Microsoft.

    8. Re:complexity by mrmag00 · · Score: 2, Interesting

      -- If you build a bad bridge, you will get sued. Try and sue Microsoft.

      even though I hate microsoft bashers, thats an interesting point. when you build a bridge, you generally support it (no pun), and when it falls it is the designer of the bridges fault, not the car driving over it. Bridges even tollerate more then what they are designed to.

      Why don't software companies support and back their products when they make boo-boos? Why do we expect them not to because we clicked "OK, I Agree" after reading the first line and realizing it is only a bunch of legal mumbo-jumbo?

    9. Re:complexity by Keeper · · Score: 3, Insightful

      There is a lot of complicated math involved in civil engineering; I believe the knowledge required is much more than the knowledge required to program a computer.

      One of my best friends in college just finished their masters this weekend. She most definately did not slack off for the last 6 years; I can't count the number of times she pulled all nighters to get things done.

      The difference between engineering a bridge and writing software is that all of the major problems with building bridges have been solved. There is a lot of math and a complicated series of steps and tons of engineering work involved, but the problems have been solved. We already know how to build bridges. We may not know the particulars on how to build a bridge that spans 2000 feet and can hold 500 tons, but the basic theory on how to do this is known.

      Additionally, the application for civil engineering projects are very well defined. They have a small task that they need to perform.

      I think that the most interesting work being done in civil engineering these days is materials research.

      Software on the other hand doesn't have all of the problems already solved. We've come a long way in the last decade or two, but we've come far from solving all problems. I think it's safe to say we've solved all of the simple, basic problems, but the more complicated problems still exist.

      The other problem with software is the scope. The scope of most software packages today is HUGE.
      It involves problems that havn't been solved a 100 times already. And they are non-trivial problems. Sometimes the problems are actually hard to understand -- how do you approach a compression or encryption problem for example.

      Another problem with software that makes it hard to compare with civil engineering is that it only takes one mistake to bring the whole thing crashing down; on a bridge, odds are if a bolt is misplaced the bridge will not fall -- there is built in redundancy; this is not a feature possible to have present in software (not unless you write the software 3-5 times, and have an agreement between routines about the result of a function call).

      There are tons of differences between traditional engineering and software engineering that makes comparing the two fields difficult if not impossible.

    10. Re:complexity by TeraCo · · Score: 1

      You obviously haven't met many engineers then :)

      --
      Not Meta-modding due to apathy.
    11. Re:complexity by Mr.+McGibby · · Score: 1

      There is a lot of complicated math involved in civil engineering; I believe the knowledge required is much more than the knowledge required to program a computer.

      I work with Civil Engineers. They're not that smart. Sorry, Civil Engineering is easy compared to Computer Science. I quote my old boss who had a double major in CS and CivEng, "I originally started in Civil Engineering. The CS degree was supposed to be a side-thing. I was going to be a Civil Engineer. Well, CS is about 10 times harder than Civil Engineering. I'd almost forget to do my Civil Engineering homework because I was spending so much time on CS. Civil Engineering is easy."

      --
      Mad Software: Rantings on Developing So
    12. Re:complexity by Anonymous Coward · · Score: 0

      To be fair, you should compare Microsoft's products to off-the-shelf bridges.

    13. Re:complexity by Anonymous+Brave+Guy · · Score: 1
      The design of a bridge is basically the extrapolation of a few well known engineering principles to the scale you want. It has 2 requirements : (1) It must reach from one side to the other and (2) it must not fall down. You may have noticed that software is not like that ;-)

      Sad but true. Most software seems to get, say, 80-90% of the way across, and then gets shipped because someone in Sales promised it to a client within an impossible space of time.

      And that is when it falls down. :-(

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    14. Re:complexity by Kalani · · Score: 1

      Engineering to me means no vision, no skill and no insight. Just following the orders, sir.

      You're talking about a very specific class of engineer. Namely, "cylindrical protein rotation engineers." But other than those burger flippers, engineers do not fit as cogs in a large systematic process. If that were so, every device we've got would have been designed by a machine (rather than having a machine plan the production aspects.)

      --
      ___
      The ends are ape-chosen, only the means are man's. -- Aldous Huxley
    15. Re:complexity by yellowstone · · Score: 2
      [Bridgebuilding] has 2 requirements : (1) It must reach from one side to the other and (2) it must not fall down.
      How about
      • It must be constructed on time and within budget (well, if the construction company wants to keep building bridges, anyway)
      • It must fit the needs of the community that will use it (a one lane bridge isn't any good for interstate traffic)
      • It must fit the (probably conflicting) aesthetic requirements of the community (no one wants to pay for an ugly bridge).
      And "it must not fall down" is easier said than done:
      • It must be able to support a load of some specified amount
      • It has to be able to withstand the worst the environment can dish out (earthquakes if it's near a fault; hurricanes if it's on the Gulf Coast; ice, snow, and salt if it's in the north or on a mountain; etc, etc)
      • It has to last a reasonable amount of time (several decades, at the very least) with a minimum of upkeep
      Now to be fair, engineers have had millenia of experience building bridges, and only decades of experience writing programs.
      But the standard response to your standard analogy is that any non-trivial application is hugely more complex than a bridge.
      Even if this is true (and I would tend to agree that it is), I wouldn't want to use it as an excuse. Computers are everywhere. We've seen an explosion of personal computers in the last 10 years, and we're seeing a similar explosion in embedded devices.

      We really need to get serious about producing quality software, or it won't be long before our technological advance will collapse under the weight of our buggy software...

      --
      150 Opening BINARY mode data connection for slashdot.sig (129323052 bytes).
    16. Re:complexity by lostguy · · Score: 1

      There are also a lot of relatively simple rules for civil engineering, because it builds on so much previous knowledge. (And I am really simplifying this...)

      "If you need to support ten thousand pounds using reinforced concrete, the supports should be this wide, and no farther than this far apart." This assumes a lot of prior work done with concrete, rebar, assembly, etc.

      There are rules like that for simple things like database access ("If using Java and Oracle, type the following..."), but the level of componentisation is proportionately much lower in software, possibly because we keep reinventing the wheel. To draw a flawed analogy, we still haven't settled on concrete, steel, wood, or tinkertoys to build our bridges!

    17. Re:complexity by StevenMaurer · · Score: 5, Insightful

      That's an easy one to answer. Software companies don't back their products because their customers don't expect them to. Instead they expect low prices.

      Bill Gates is a billionare because he was one of the first people to realize that given a choice between a $200 program that works flawlessly and a $99 program that fails 5% of the time, most people (and businesses) will choose the cheaper product (while moaning how bad software is).

      Note that this isn't the case in all software markets. Banking and T.V. are both industries which I've worked in, in which customers actually demand quality. If it's crap, they won't buy it no matter how cheap it is.

      Funny enough, Microsoft is not in either business - and not for lack of trying.

    18. Re:complexity by sterno · · Score: 3, Insightful

      When building a bridge, you have the contract before you start construction. With software, there is always the worry that a competitor will get a product out before you.
      BINGO! I cannot recall at any point in my 4 year career as a software developer that any given project had concrete and immutable goals before beginning of development. On the best projects we'd have good documentation of requirements, etc, but EVERY time those requirements would change.

      To compare software design to bridge building or most feats of industrial or civil engineering are ludicrous. To put it in perspective imagine this scenario:

      The city planning commitee has contracted to have a bridge built. Original bridge specifications called for four lanes of traffic. The city planning commitee now has decided it must have 8 lanes and the bridge is already halfway done. Do you think the bridge builders are going to stop construction and re-engineer on the fly? If they did, you can bet that bridge would collapse. No, they won't do that, they'll build the bridge, collect their check and go home.

      That sort of scenarios ALWAYS happens in software. Why? Because everybody knows they can get away with bugs, that patches can be released, that ultimately getting it right the first time isn't 100% critical. So they don't worry about it, and why should they? It would be inordinately expensive and arduous to design all software to the tolerances associated with civil engineering, and it would provide questionable benefit in the end.

      The big problem with software engineering principles is that we keep trying to find physical world metaphors for the way software should be designed and they all fail. Why? Because the physical is, for the most part, immutable. So how can you apply those same design methodologies to something that is infinitely mutable? The simple answer is, you cannot. Sure, some aspects may be adaptable, but ultimately accepting that building software is completely unlike building a bridge will make life much much easier.

      --
      This sig has been temporarily disconnected or is no longer in service
    19. Re:complexity by NecrosisLabs · · Score: 1

      Hmm... I would venture that there are civil engineering tasks equivalent to "code grinding"; and that they can be performed adiquately by any warm body with certification, just like in computing. Furthermore, I think I'll join you in the Land of the Sweeping Generalization, and say that while there are many software versions of the Tacoma Narrows bridge, we still have yet to see software equivalents for such monumental feats as the Hoover Dam, the Golden Gate bridge, or Colusseum..

    20. Re:complexity by Anonymous Coward · · Score: 0

      I think UNIX has taken longer to build than both the Hoover Dam and the Golden Gate Bridge. It's been over 3 decades and we still don't have it anywhere near completion.

    21. Re:complexity by Anonymous Coward · · Score: 0

      Sure.

      They make ladders that can be adjusted to form a (very small) temporary bridge. You can buy one of these ladders from your local Home Depot. They usually have 2 or three swivel joints.

      If you follow the instructions, and use the product as intended, and somehow the ladder bridge fails, can you sue the company?

      Yes. For a lot of money. With any luck you'll be holding a steaming hot McDonald's cuppa java at the time (well, not with luck, but with it, if you get what I mean...)

    22. Re:complexity by Anonymous Coward · · Score: 0

      Bill Gates is a billionare because he was one of the first people to realize that given a choice between a $200 program that works flawlessly and a $99 program that fails 5% of the time, most people (and businesses) will choose the cheaper product (while moaning how bad software is).


      Bill Gates is a billionare because he was one of the first people to figure out how to sell software. Bundle it with hardware.


    23. Re:complexity by maetenloch · · Score: 1

      even though I hate microsoft bashers, thats an interesting point. when you build a bridge, you generally support it (no pun), and when it falls it is the designer of the bridges fault, not the car driving over it.

      Actually I believe that before construction even begins on a project, a PE (Professional Engineer) has to sign off on the design (thus making himself legally liable in the case of a design failure). Because of this most PEs tend to be conservative in their designs and carry liability insurance just in case.

      With software according to the EULA, you're buying the right to use whatever's in the box which may not work at all, may not do what you want, and may even harm your computer. Of course off-the-shelf software is also relatively cheap. There's no way you're going to get someone to accept legal liability for software for just a few hundred dollars.

    24. Re:complexity by dgroskind · · Score: 1

      Because programming is an art, it's the creation of something from your own imagination, not like engineering which is simply applying rules. And once created, any large application behaves far more like a living organism than a machine, it grows, it evolves and (often) it gets ill.

      The more something behaves like a living organism the less it looks like a work of art.

      Art:

      Judged by aethetic values not by function

      Immutable

      Detached from its environment

      Programs:

      Judged first by how well they function

      Change frequently

      Highly sensitive to environment

      I would suggest that programs have very little resemblance to a work of art, except that they are both created by human intellect.

      Programs have more of a resemblance to biological processes, given than they change but the differences are more striking than the similarities.

      Biological processes:

      are self-replicating

      without food they deteriorate and die.

      once they die they cannot be revived.

      A program that accomplishes a specific industrial task does not need these features to get its job done.

      I think you can exalt any work by doing it well on its own terms without comparing it to art, biology or anything else.

    25. Re:complexity by rho · · Score: 2
      It has 2 requirements : (1) It must reach from one side to the other and (2) it must not fall down. You may have noticed that software is not like that ;-)

      Shit, software is even easier! A word processor has only one requirement:
      (1) Allow me to produce documents.

      That's half the requirements, it should take half the time!

      Jesus, this is the same complaint programmers make about managers, vis. "If I don't understand it, it must be easy to do." Building bridges is immensely complicated and must meet thousands of niggly requirements, which you've managed to ignore completely in your reduction to two requirements in your attempt to make a clever point.

      If there is any truth to your statement, it might be found in that there are thousands of niggly requirements that engineers, governments, public boards, and hundreds of others have gotten together over the years to produce a uniform building code (or at least a localized building code) that all projects must meet. Are they completely correct (or even sane)? No -- but the tend to build buildings that stand up and bridges that don't sink into the bay.

      However, if you get more than 2 programmers in a room, they'll end up in some stupid religious war over editors or indentation style (or, God forbid, operating systems). Why? Because a lot of programmers are arrogant (most without reason), and will refuse to compromise their own "standards".

      --
      Potato chips are a by-yourself food.
    26. Re:complexity by Aiofe · · Score: 1

      "There are natural structures that resemble bridges that we have learned from. For most software, this is not the case."

      Hmm. I'm not so sure about that - what about the human mind? It's arguably the most complex 'structure' found in nature - and software generally does things that the human brain can do, given the motivation.

      --
      "TV is a crutch for those who lack imagination."
    27. Re:complexity by Axe · · Score: 1
      Bill Gates is a billionare because he was one of the first people to figure out how to sell software. Bundle it with hardware. Quite opposite. He managed to be retain the rights to license it to the third parties - Compaq..urr...HP now..

      IBM was doing the bundling - just like all early manufacturers.

      Miscrosofts big idea was the shrinkwrap. An exact opposite to bundling.

      --
      <^>_<(ô ô)>_<^>
    28. Re:complexity by Axe · · Score: 1
      and bridges that don't sink into the bay.

      ..usually. ..not always.. ;-)

      --
      <^>_<(ô ô)>_<^>
    29. Re:complexity by Keeper · · Score: 2

      There are also some pretty stupid programmers out there. This doesn't mean that all programmers are dumb, nor does it mean that these programmers can't get a job done.

      The same implication towards civil engineers applies. There are some dumb ones who can barely do the job, and there are ones that actually payed attention in college.

      Additionally, the "style" of work done in each field is drastically different. To program you need to be able to think differently than you do to work out a physics problem. It just so happens that I breezed through my CS courses and struggled through Physics 23 & 24.

      I don't even want to think about more more difficult courses, where you have to take into account the forces exerted among members of a bridge, the weights of structures at their various points and how they apply, forces exerted by expanding and contracting materials, the principles involved with reinforced concrete, etc.

      Some people can remember the names of every person they've ever met, without asking for it again years later. This is "easy" to them. I can hardly remember the name of a person I talk to every day for the last 3 days if I just met them. "Difficulty" is relative.

    30. Re:complexity by Tony-A · · Score: 1

      It strikes me that there are two main differences between bridges and software.
      One, the design and components of the bridge are public knowledge.
      Two, when the bridge does fall down, you have a lot of people finding out what went wrong.

      As for complexity, I would imagine that any bridge is actually much more complicated than any computer program. (subatomic forces vs machine state)

    31. Re:complexity by CBravo · · Score: 1

      >If you build a bad bridge, you will get sued. Try and sue Microsoft.

      Well, these days you don't own software you license it. With the license comes an agreement that says m$ isn't liable, you are.

      Imagine that with bridges: if it collapses you, the user are responsible...

      --
      nosig today
    32. Re:complexity by Anonymous Coward · · Score: 0

      virtually everyone's settled on J2EE in the enterprise space.

    33. Re:complexity by arestivo · · Score: 1

      Imagine a Bridge Builder issuing a 'this bridge is provided as is' license agreement!

    34. Re:complexity by hereticmessiah · · Score: 1

      >>>

      I remember reading a quote from a famous software scientist (I forget who, maybe Turing?) who said (and I paraphrase here) that we shouldn't be teaching our your computer scientists maths, physics, engineering etc, but rather art and biology.

      That was David Gelernter, as far as I remember. Everybody here should read his book, 'The Aesthetics of Computing', and all his other work. He has good things to say.

      --
      I don't like trolls and mod against me if you like, but I'd prefer if you'd reply.
    35. Re:complexity by Anonymous Coward · · Score: 0

      Wasn't this one of the Dilbert's PHB management principles -- namely, that "anything I doesn't understand must be easy"?

    36. Re:complexity by Mr.+McGibby · · Score: 1

      "Difficulty" is relative.

      No it isn't. That is the kind of thing that your kindergarten teacher told you when you couldn't stay in the lines. You want to live in a happy happy world where everyone is appreciated equally. Well guess what bucko, some people are smarter than other people, some people are stronger, some people are faster, some people are more creative, and some people have no redeeming qualities.

      I know you *want* to live in a world where everyone is good at something even if they don't know it, but the truth is that some people just can't do as much as other people.

      Also, why is it that CS majors consistently spend twice as much time on their homework as CivEng majors do? This has been shown.

      --
      Mad Software: Rantings on Developing So
    37. Re:complexity by JoeyThunders · · Score: 1

      "Engineering to me means no vision, no skill and no insight. Just following the orders, sir."

      I am nowhere near articulate enough to adequately express how immensely stupid this statement is.


      BTW, IANAE (i am not an engineer)

    38. Re:complexity by angel'o'sphere · · Score: 1

      There are tons of differences between traditional engineering and software engineering that makes comparing the two fields difficult if not impossible.

      I disagree. Your post is quite good! There is some truth in it, BUT behind that it emphasizes the actual mind set.

      There is no difference in software engineering and and mechanical or buildings engineering.

      However:

      a) the software BUSINESS is running different then the more traditional engineerings. Several people pointed that out.

      b) most software developers are not engineers! They are programmers! (Just like a bricklayer is not a buildings engineer)

      c) Plenty of work is done in Universities round the world to define what software engineering is.
      -> search for CMM and software engineering, or SPICE

      Just because programming is more difficult then brick laying (is it even? who ever tried to make a brick wall himself, knows that you need some skills or experiance for that simple kind of work, too!) every programmer thinks he is capable of engineering. Every programmer thinks he is capable of managing a software project. (See below for managers)

      If he fails in engineering he says: it must be like that, or: otherwise it gets to expensive, or: there was pressure ...

      Well all arguments WHY software is bad and MUST be bad are allready covered in this article.

      IMHO its the mind set, which yields bad software. - Customers accept bad software.
      - Contracts between software houses and customers are so bad that none of them can sue the other party.
      - Software developers are to a hughe degree auto didactic developers (I learned perl the hard way, you read "Java for dummies in 21 days"), they lack education. (I'm a autodidact bridge designer ... please let me build your bridge!)
      - Bridges got build from stones, bricks even. In software we still lack a 'component' from which bigger buildings can be done.
      - Bridges are not only engineered by engineers they are tested(their design), a government agency checks the planning(approval), even for the actual doing you need a approval from local agencies.
      - Same for an airplane. Its desigend, tested, constructed by engineers. You need an approval to even test flight it, you need an approvel to sell it.
      - Same for cars ....

      And now guess who is involved in all that doing and approving?
      People having the right education!

      So lets ask us some simple questions:
      How many software developers out there have an education in software development?

      How many customers out there making software development contracts have an education (or an expert available) in software development?

      How many managers involved in software development have any clue about software development? (and look again to bridge building, every manager in bridge building has a lot of a clue about building engineering)

      Note: I avoided the term software engineering.
      But yes: true software is done by engineers, call them artists if you like, but most here at /. do not realize that art is 90% engineering ... try to make an artwork with GIMP, try to make a cool song with some sequencer software ... if you are good at that, then you are it because you digged deep into the matter.

      The point is: no one cares actualy realy about bad software.
      A hughe amount of people involved in software projects, especialy those who are in a position to put pressure on developers, have no clue about software development.

      The difference between software engineering and traditional engineering is THAT:
      In traditional engineering every single process step from ignition of the project up to approvel over planning into conducting and finaly confirmation that the result in fact is in sync with the planning, all that is done by engineers from the specific discipline.

      Where in a software project are engineers from the discipline software engineering involved?

      Well, some software departments have those engineers, e.g. the department which wrote the space shuttle software.

      IMHO:
      There is no natural difference between any kind of engineering or any kind of art.

      There is only non natural stupidity and self over estimation one is smart enough to throw away all engineering discipline because it might work without it.

      And there is the hot boiling market of software in which the customer can allways argue: well your competitor is cheaper, you must have made an error in your calculations, I take his offer.

      The customer has not the education to calculate if the competitor in fact is able to deliever for that price.

      Regards,
      angel'o'sphere

      --
      Cost free eBook I read (by iBook/Kobo/Amazon/ObookO/Gutenberg etc.): "The Green Odyssey" by Philip Jose Farmer.
    39. Re:complexity by Keeper · · Score: 2

      What the hell are you smoking?

      Everyone's brain works differently. A person who can't spell worth a damn can be a damn smart person.

      Some people can do physics all day in and out but can't cook worth a damn. Some cooks can't do physics to save their life. You trying to say that if one person can do A but not B, then a person who can do B should also be able to do A, but it DOES NOT WORK THAT WAY.

      Your logic is that I should be able to get a Civil degree by spending 5 minutes on homework because programming computers is, to me, the simplest thing I could ever do. Yet, as you may have found other from other threads, I can't even begin to grasp some of the concepts involved with civil engineering -- I just can not do the math; I get it all mixed up and backwards.

      How the hell in your backwards brain can you even compare the two fields anyway? They're entirely different concepts. The ability to do math does not imply an inate ability to think logically -- as your own post clearly demonstrates.

      If you want a different comparisson, how can you meter the homework given between the two fields? What if all CS teachers give all of their students twice as much homework as civil engineers? What if it were the other way around? What if CS students spend so much time on homework because nobody teaches computer science well?

      AN APPLE IS NOT AN ORANGE. Quit trying to compare them as if it were.

    40. Re:complexity by Mr.+McGibby · · Score: 1

      Everyone's brain works differently. A person who can't spell worth a damn can be a damn smart person.

      Well they're not very smart at spelling are they?

      Some people can do physics all day in and out but can't cook worth a damn. Some cooks can't do physics to save their life.
      followed by:
      AN APPLE IS NOT AN ORANGE

      You're the one comparing apples and oranges. I'm comparing Granny Smith apples and Red Delicious. The comparison, while not perfect, does work in many ways.

      If you want a different comparisson, how can you meter the homework given between the two fields? What if all CS teachers give all of their students twice as much homework as civil engineers? What if it were the other way around? What if CS students spend so much time on homework because nobody teaches computer science well?

      What if computer science is in general just plain harder than civil engineering? That explanation is just as valid as your claims with no basis. Take a look at the rate of college students who convert from CS to CivEng as compared to those who convert to CS. The difference is vast. Take a look at the average SAT scores of CS grads as compared to CivEng grads. There are a lot of unbiased methods of measuring the difficulty of the two fields.

      The argument isn't about the difficulty of cooking compared to CS, it is about CV compared to CS. Cooking takes an entirely different skill set than CS. On the other hand CS and CV take nearly the same skill set. Namely, Math, and Logical thinking.

      --
      Mad Software: Rantings on Developing So
    41. Re:complexity by Keeper · · Score: 2

      No, you ARE comparing apples to oranges. There is not one similarity between the work required to program computers, and the work required to design and build a bridge aside from the fact that they are large tasks.

      I ask, WHAT does civil engineering share with computer science? The ability to add 2+2? Cooking has that, that's for certain -- and you're kidding yourself i you think the vast majority of computer science students take near the level of math required for a civil engineering degree; and you're also kidding yourself if you think the majority of programmers out there ever do much math beyond i++. And what engineering discipline doesn't require "logical thinking" to some degree? You also going to insist that aerospace degrees arn't worth the paper they're written on either, because they mainly involve math and logical thinking too?

      What in computer science deals with materials? What about bridge building requires boolean logic? What about applications programming requires statics? What about civil engineering requires knowledge of computing theory? The fundamental knowledge required for each field is completely different!

      Civil engineering has about as much in common with computer science as cooking does. They all involve non-trivial tasks, all done in a different form. Each can be considered artistic in it's own way, as well as "just another job." In civil engineering you have to make sure your building doesn't fall down. In computer science you need to make sure your server software doesn't fall down. In cooking you need to make sure your cake doesn't fall down. Sounds the same, but the details required to make those items happen have absofuckinglutely nothing in common.

      I'm not denying that there are so stupid ass civil engineers. There are stupid as hell comp sci people too. I also know people who can't do complicated math that are excellent programmers. I know programmers who couldn't fix a car if their life depended on it. I know mechanics who can't program a computer to save their life. I can do both, yet I can't seem to keep my checkbook balanced. I know some brilliant civil engineers. I know some people who seem to be able to do anything they can stick their mind to. I know some people who can prove the entire contents of my calculus text.

      There is no pure "unbiased" way to measure the "difficulty" of a task. Tell me, how can you compare the difficulty of baking a pie with the difficulty involved in programming a computer? All a good score on the SAT says is that you're good at taking an SAT. I can produce a test that I could score well on and you'd score horribly on, after which I could give it to a 100 different people to "rank" your intelligence level; doesn't mean it's an accurate indication of "brilliance."

      The fact of the matter is, is that some people are better at certain tasks than others. Everyone's brain is different. Yours is obviously incapable of accepting this fact. Does that mean I'm smarter than you? That you are somehow inferrior? Well, I'll let you decide on that.

    42. Re:complexity by Mr.+McGibby · · Score: 1

      No, you ARE comparing apples to oranges.

      I think you need to read this

      --
      Mad Software: Rantings on Developing So
  9. Open Source, of course by infiniti99 · · Score: 2

    When your code is on center stage you want it to look good.

    1. Re:Open Source, of course by CrosseyedPainless · · Score: 3, Funny

      That's the truth. I know every time I have to show someone my working code, I have to do a parental-visit-strength clean-up before letting them see anything. Of course, we should keep it clean as we go....

    2. Re:Open Source, of course by FortKnox · · Score: 1

      but without a coding standard that you state up front you have multiple coding styles.

      I.E.:

      int main ( int argc, char** argv )
      {
      if ( CONDITIONAL )
      {
      //blah
      }
      else
      {
      //blah2
      }
      //...<snip>...
      }

      char
      foobar(char foo, int bar){
      if(ANOTHERCONDT){
      blah;
      }else
      blah2;
      }
      //...<snip>...
      }

      void foobar2(char * blah)
      {
      blah;
      if(YACONDITIONAL)
      {
      blah;
      }
      etc...

      Three different styles makes the code harder to read...

      --
      Good quote, too many chars. Seriously, the slashdot 120 char limit sucks!
    3. Re:Open Source, of course by Telek · · Score: 2

      have you ever taken a look at the source code for SSLeay? The last time I looked at it, it wasn't pretty. Lots of 1 letter variable names and not very many comments.

      Open source isn't immune to this, but it's a lot lot lot better in that case.

      Mind you, at one place that I worked where our jobs weren't very secure I used obscurity of code to secure my job. Noone else in their right mind could understand what I wrote (not necessarily due to messyness, but no comments, and not meaningful variable names, no documentation, etc). I had written the entire application, and before I left I commented it, but it was fun at the time.

      --

      If God gave us curiosity
    4. Re:Open Source, of course by Sabalon · · Score: 2

      When your code is on center stage you want it to look good

      True...so true. However, with patches coming in from all over, or multiple developers, unless someone rewrites all the code to read the same, you have multiple styles of programming, multiple conventions (no how matter how much you dictate stuff) and so on.

      It's just as bad.

    5. Re:Open Source, of course by Anonymous Coward · · Score: 0
      When your code is on center stage you want it to look good.

      Ever had a look at Perl 5 internals ? It's an eye opener.

    6. Re:Open Source, of course by Anonymous Coward · · Score: 0

      You should take a look at Linux's scheduler code some day... it's not pretty.
      You should take a look at Linux's memory management code some day... (some of) it's not pretty.

      Does it matter? No, not really. Not to the end user.
      Because it WORKS WELL, and at the end of the day, that's what really counts, not how good the code LOOKS but how well it WORKS.

    7. Re:Open Source, of course by codeforprofit2 · · Score: 1

      I guess you haven't looked at either closed or open source code.

      Open source is not better than closed, not a chance.

      Generally you can say that projects that run over a long time and/or has much people involved are worse than small projects written over a short time.

      There are exceptions to the rule ofcause.

  10. nice, but welcome back to the real world by room101 · · Score: 3, Interesting

    I don't get paid to create beauty, especially not internal beauty. I need it to work, not look good.

    The bottom line is, software isn't a bridge or a house, people don't trust their lives to my software. If I made software for the medical field or something like that, yes, I would have a different view. But the fact remains that you should only make it bullet-proof when you need to, because you never have time to make everything bullet-proof.

    --
    room101 -- how much can you stand before they break you?
    (they always break you eventually)
    1. Re:nice, but welcome back to the real world by Shimmer · · Score: 1

      I tend to agree. I develop custom software for a living. The plain truth is that most of my clients are not willing to pay for high-quality software. They want something that works ASAP -- damn the torpedoes. I frequently have to explain to them why software quality is important.

      -- Brian

      --
      The most rabid believers in American Exceptionalism are the exact same people whose policies are destroying it.
    2. Re:nice, but welcome back to the real world by jbum · · Score: 1

      > I need it to work, not look good.

      Hear hear. Engineers with an over-developed
      aesthetic sense are writing their code for other
      engineers, not the end-user. Too many times
      in my professional life have I seen inordinate
      amounts of time wasted on issues which are
      invisible to the end-user, because some overly-
      aesthetically minded engineer couldn't sleep at
      night.

      It's a craft, not an art; and if you can't sleep
      at night, try getting laid.

    3. Re:nice, but welcome back to the real world by barchibald · · Score: 1

      Agreed. I believe the good professor misses the point on several fronts. Firstly - and importantly - bridges aren't perfect. I'd put money on my belief they have their flaws and that any designer of bridges can tell you of those that are engineering marvels and those that are not. Secondly, you'd build a bridge VERY differently if you only needed it to last for 2 years, if it didn't need to stand up to an earthquake and if when you fell through the hole in the bottom of the bridge you landed safely on a pile of silly puddy. Software is good or bad relative to the requirements of the project.

      It seems very "academic" to discuss the beauty of the code outside of knowledge of the requirements of a given project. Many of the engineering basics of bridge building go into building a toy bridge out of lego (trademark I'm sure, yada yada), but I hardly need to give it the same rigor as the Golden Gate (which by the way is constantly under retrofit because it's not quite as good as advertised).

      Keep it real.

    4. Re:nice, but welcome back to the real world by FortKnox · · Score: 1

      I don't get paid to create beauty, especially not internal beauty. I need it to work, not look good.

      I don't know about you, but my job (I'm a consultant) is to get the application to work in accordance to the user specs, and to ensure that the application can be maintained by either my company or the client company (read, "readability").

      Even if I didn't, seeing that I only work with OOP languages, its an unwritten rule to make your objects reusable (although its not the truth, I always see this as someone will see my source to the object, so I want to make sure they can easily read the code). Just following this rule and commenting your code makes the code readable (read, "pretty").

      --
      Good quote, too many chars. Seriously, the slashdot 120 char limit sucks!
    5. Re:nice, but welcome back to the real world by Telek · · Score: 2

      but how much extra effort or time does it take to make code that both functions correctly and looks good and isn't messy? I know that every time that I take the time to make it clean I benefit from it, and every time I do things sloppy I curse it later on. Plus a properly designed (hmm, that's a whole other topic actually. Software DESIGN vs Software PROGRAMMING)... A properly designed and programmed piece of code will have FAR LESS bugs than a sloppily designed/coded one.

      --

      If God gave us curiosity
    6. Re:nice, but welcome back to the real world by kurowski · · Score: 1
      Engineers with an over-developed aesthetic sense are writing their code for other engineers, not the end-user.
      Engineers with an under-developed aesthetic sense are writing their code to minimize the time invested, not maximize the quality of the code.
      Too many times in my professional life have I seen inordinate amounts of time wasted on issues which are invisible to the end-user, because some overly- aesthetically minded engineer couldn't sleep at night.
      Too many times in my professional life have I seen inordinate amounts of time wasted on fixing trivial bugs due to poor design decisions, because some careless engineer didn't bother to think before coding.

      Too many times in my professional life have I seen inordinate amounts of time wasted on huge refactoring efforts, because nobody ever took the time to construct things properly the first time.

      It's a craft, not an art
      It can be a craft or an art, but if not done well, it's just crap.
    7. Re:nice, but welcome back to the real world by Myopic · · Score: 5, Insightful
      I've seen this comment a lot in this discussion: "well, my software works, so it's good enough". You even say that you don't get paid to make pretty software; just usable software.

      I suppose that might be true, but I would venture that not everyone is in the same boat. I, for example, AM paid to write pretty code. My job is to come up with relatively simple perl scripts (modules) to solve various problems that Dartmouth's website users have. (For example, I wrote a quota module to help people verify that files they want to write to disk will fit within their alloted disk quota.)

      I have NEVER turned in to my boss anything but well-documented, well-commented, readable code. I don't do this out of respect for my users; frankly, I know how to use the software and if they don't they can read my docs and try to figure it out. No, I do it for the other schmucks like me. At some point, my boss will probably tell his next lackey to add some little feature to one of my modules, as he's asked me to do with some older programmer's works. And it's DAMNED IMPOSSIBLE to wrap my head around code which is all mixed up. I comment for other programmers. People who might need to sink their hands into my code.

      Paying me now to write comments and format things well is worth it for the added speed with which the software will be maintained in the future. So for me, and I'm sure most of the code jockeys on Slashdot, the "real world" is one where software is written, THEN MAINTAINED. Beauty is part of maintanence.

    8. Re:nice, but welcome back to the real world by Cro+Magnon · · Score: 1

      I wrote 2 programs early in my career. One was the first big program I ever wrote. I didn't know what I was doing, it looked like crap, and another programmer ended up rewriting the whole thing less than a year later. The other program was originally supposed to be a one-shot program. However, after getting bit by the first program, I decided I was going to do this one right! It may have taken a little longer, and been more effort to write and comment everything properly, but this "one-shot" program was known to be one of the easiest programs to maintain/enhance until it became obsolete 12 years later.

      --
      Slow down, cowboy! It has been 4 hours since you last posted. You must wait another few hours.
    9. Re:nice, but welcome back to the real world by tarkin · · Score: 1

      "But the fact remains that you should only make it bullet-proof when you need to, because you never have time to make everything bullet-proof." What a load of crap ! That sounds like a Microsoft Windows design strategy ! ( i hope i've proven my point ? )

      --
      blaah !
    10. Re:nice, but welcome back to the real world by Overt+Coward · · Score: 2

      But aestetics has its place, too. One of my personal guidelines when evaluating a software design is to ensure that any "ugliness" that appears in the design has a damn good reason for being "ugly". More often than not, a design "ugliness" is the result of a poor design, and not caused by the requirments. On the other hand, sometimes the "ugliness" is imposed by the requirements, and in that case, naturally the requirements take precedence over "elegant" design.

    11. Re:nice, but welcome back to the real world by Salamander · · Score: 2

      The point you're missing is that even getting things to "just work ASAP" doesn't happen by itself. Only the most trivial programs are created in a single flash of insight. Most follow some sort of process, which often looks something like this:

      1. Write component A.
      2. Start writing component B, realize that A doesn't really do what it needed to.
      3. Fix A, go back to working on B.
      4. Finish B, C, D, and E. On a roll!
      5. Start work on F. Realize there's something else wrong with A.
      6. Try to fix A, realize you forgot how it works, the code is a mess, and there's neither design nor comments to remind you of what you were thinking at the time.
      7. Rewrite A, forget what enhancements you meant to add for F.
      8. Figure out what you needed for F, add the enhancements to A.
      9. Fix B, which you broke when you rewrote A.
      10. Try to fix C, which also broke when you rewrote A, but now you've forgotten how C worked. Again, no design or comments, ...
      11. etc.

      Hey, now your productivity is approaching zero, but hey, at least you're having fun, right? WRONG! The whole idea of good software engineering is to stay out of this trap, not for aesthetics or on principle, but because it sucks, and it sucks even more when you realize it was oh-so-predictable and oh-so-avoidable. It's pure self-interest.

      If you can program in tiny little pieces and dump them on someone else while you job-hop, you might be able to get away with this kind of slop, but as soon as you start writing anything that has any meat to it you'll recognize the need for better methods. Unfortunately, very few people realize this until they've spent a job or two fighting through the kind of swamp outlines above.

      --
      Slashdot - News for Herds. Stuff that Splatters.
    12. Re:nice, but welcome back to the real world by room101 · · Score: 1

      Oh, yes, compare any statement to some nebulous "Microsoft" statement, that is totally a persuasive argument. I will change my mind because I don't want to be compared to Microsoft. What a bunch of crapola. Waste of space. (and so is this...)

      (btw, I don't consider OS design to be one of those that you don't have to make "bullet-proof")

      --
      room101 -- how much can you stand before they break you?
      (they always break you eventually)
    13. Re:nice, but welcome back to the real world by john@iastate.edu · · Score: 2
      but how much extra effort or time does it take to make code that both functions correctly...

      About 10 times longer, I should say. Take, for example, strdup:

      char * strdup (char * s) {
      return strcpy(malloc(strlen(s) + 1), s);
      }

      Now write it checking for every possible error... Mp

      --
      Shut up, be happy. The conveniences you demanded are now mandatory. -- Jello Biafra
    14. Re:nice, but welcome back to the real world by Barlo_Mung_42 · · Score: 1
      "I comment for other programmers."


      I agree but I'd also add that I comment for myself.

      A) It helps me think about what I'm doing and catch bugs as I write them.

      B) It helps me when I look at the code months from now. How many times have you looked at a method that you know you must of writen but try as you may you don't remember it?

    15. Re:nice, but welcome back to the real world by Telek · · Score: 2

      char * strdup ( char * s )
      {
      if ( !s )
      return null;

      return strcpy(malloc(strlen(s) + 1), s);
      }

      not much more difficult. if s is not null, then strlen(s) will always work. If it returns 0, then you want to return a zero length string anyways. I guess you could check for the malloc error, but I generally tend never to (unless it's in an environment where the malloc could reasonably fail). If the malloc fails, then the system is probably so f**ked up that nobody'll notice that your program GP'd =)

      But I honestly don't consider the possibility of NOT writing the code properly in the case. I wasn't even thinking about that. I was more refering to the sloppy / bad looking / no documentation, i.e. stuff that will work, but doesn't scale or look well.

      --

      If God gave us curiosity
    16. Re:nice, but welcome back to the real world by Bronster · · Score: 1
      Take, for example, strdup:

      char * strdup (char * s) {
      return strcpy(malloc(strlen(s) + 1), s);
      }

      Now write it checking for every possible error...

      Now take an abitrary failure condition in which your program core dumps every so often for no reason, and you need to find the cause...

      Consider the following two algorithms (written for Australia, modify as appropriate).

      1) Look Right
      2) Look Left
      3) Look Right
      4) Walk half way across the road
      5) Look Left
      6) Walk the other half of the way

      1) blindly walk across the road without looking

      Look how many steps you've saved with the second one, isn't it easier to do. Especially when you consider that in the first example I haven't even tried to do error handling (if car which is dangerous to next movement step, wait until car is no longer a danger, skip back to appropriate looks - if too many cars, abort and move to controlled intersection where different rules apply... i.e. wait for green man).

  11. some suggested resources by Satai · · Score: 5, Interesting

    Personally, I found Donald Knuth's Literate Programming as well as the Practice of Programming to be wonderful resources for writing better, more beautiful code.

    This article is very interesting; the idea of code as an art form isn't new, but this article certainly is aggresive in encouraging it.

    But what about "Extreme Programming" - doesn't it encourage the same thing, in terms of self-commenting code? Or does its specific nature essentially negate that aspect?

  12. Its a "I'll do it later" thing... by FortKnox · · Score: 2, Insightful

    I've found that most of the cause of the problem is people "whip out a function that does that job" so they can compile the program, then never go back and fix it up.
    Same with code comments. "I'll add good comments later/when I'm done", and you finally get the program stable when it needs to be released.

    I find it a ton easier to do everything the way you were taught in software engineering 101. Design the hell outta documents (I, personally, use RUP which I find nice), then code complete objects, nothing that'll just "let me compile", but whole objects. *AND* I'll code in the javadoc when I make the object. The code comes out quit nice that way.

    --
    Good quote, too many chars. Seriously, the slashdot 120 char limit sucks!
    1. Re:Its a "I'll do it later" thing... by jmccay · · Score: 1

      Either you don't work in the real world, or you have no deadlines. I think a lot of software is "designed bad" for because doing a complete and thorough design which is good, neat, and handles 99% of the problems takes way too much time to fall within the time frame of the usual project. I usually have more than one project going at a time I am lucky if I can afford to work on them for a whole day.

      Designing "good software" just is not practicle outside the glass house world of education environment. It takes too much time to meet the time requirements of most projects.

      --
      At the next eco-hypocrisy-meeting, count the private jets used to get to the meeting. Should be interesting to see that
  13. internal beauty of software by porky_pig_jr · · Score: 1

    once I was working on network performance monitor (written in C). Once I had a 'basic proof of concept' (quick and dirty, but mostly functional), I've told the interested parties I would have to re-write it so it would be modular, easy to read and understand and of course easy to debug. To my surprise those jerks gave me a hard time (noone gives a shit about your 'aesthetical feelings'). Well I did make some minimal changes and left the company soon after that. Hope someone is still struggling maintaining the code. The bottom line is that 'inner beauty' of any software is not a luxory item.

  14. If you ask me... by The+Slashdolt · · Score: 1, Interesting

    If you ask me, it's those damn comments! They make my code look ugly! I write thousands of lines of beautiful code, only to have to return to it to comment it so joe programmer can come along and "maintain" it later. If it weren't for the comments, my code would be more beautiful than a bridge!

    And BTW, did anyone notice that this guys code snippets are in Basic? That's enough to dismiss the article right there!

    --
    mp3's are only for those with bad memories
    1. Re:If you ask me... by RetroGeek · · Score: 1

      Comments nothing

      It's all those damn logging calls.

      --

      - - - - - - - - - - -
      I am a programmer. I am paid to produce syntax not grammar. Deal with it.
    2. Re:If you ask me... by Anonymous Coward · · Score: 0

      It could have been much worse:

      100 MIN_AGE = 0
      110 MAX_AGE = 120
      120 RETIREMENT_AGE = 65
      130 INPUT "Please enter your age: "; A$
      140 AGE = CINT(A$)
      150 IF AGE >= MIN_AGE AND AGE = MAX_AGE THEN 200
      160 PRINT "Are you sure you entered the right age?"
      170 PRINT "It should be between "; MIN_AGE;
      180 PRINT " and "; MAX_AGE; "."
      190 GOTO 130
      200 IF AGE RETIREMENT_AGE THEN 230
      210 YTR = 0
      220 GOTO 240
      230 YTR = RETIREMENT_AGE - AGE
      240 ' REST OF PROGRAM

    3. Re:If you ask me... by Eric+E.+Coe · · Score: 1

      No, what I noticed was that the "Good" code was in well structured Pascal and the "Bad" code was is badly structured Basic. Do I detect a built-in bias??

      --
      An esoteric scratched itch:
      Homeworld Map Maker Tool
    4. Re:If you ask me... by Anonymous Coward · · Score: 0

      No, it just means that you aren't familiar enough with Pascal to notice that the article contains no Pascal code.

    5. Re:If you ask me... by Anonymous Coward · · Score: 0

      No, it was all in Visual Basic.

    6. Re:If you ask me... by Eric+E.+Coe · · Score: 1
      My bad! You're right, I looked much too quickly at the first one, saw the 'const' at the top, and said "Pascal" - if I had looked more closely, I would have noticed the lack of semicolons, and the fact that the second example uses 'const' also.

      Not familiar with Pascal? No. While it's been years since I've used Pascal, and I never liked it, the real problem was that I am not familiar with recent versions of Basic, Visual or otherwise (I stopped paying attention back in the GWBasic days).

      --
      An esoteric scratched itch:
      Homeworld Map Maker Tool
  15. Of course his software stinks. by emf · · Score: 0, Redundant


    Of course that guys software stinks, he's using Visual Basic. ( Check the code sample )

  16. This is news? by feydakin · · Score: 0, Redundant

    This is news to some people?

    This complaint is as old as most code. There has always been a better way to do things. It's just not the most profitable.

    --
    Death and poverty like me so much, they've brought friends!
  17. virtues of programming? by aarestad · · Score: 2, Interesting

    From the article, describing building a new VAX program from scratch:

    In each case [of rewriting an existing feature in VMS] our reason was hubris, ignorance, or laziness to learn more about the computer we were using.

    (emphasis mine)

    Unfortunately, the first thing I thought of when I read this quote was Larry Wall's infamous quote describing the Three Virtues of a Programmer: laziness, impatience, and hubris......

    (just a FWIW, NOT flamebait!)

    --
    "The world doesn't really need more busy people, maybe not even more intelligent people. It needs 'deep people'..."
    1. Re:virtues of programming? by Eric+E.+Coe · · Score: 1
      Actaully, there can be many good and cost-effective reasons to "re-invent the wheel"; especially in large organizations with mandated code reuse policies:
      • The documentation for the library code is poor or non-existant.
      • Finding the right library function/module may take longer that writing it yourself.
      • The library code does substantially more than you need: it is badly factored and tries to be everything for everybody.
      • The library code is full of bugs.
      • The team that maintains the library code does not give a shit about you or your project. Your project risks failure if you use their stuff.
      • The library code or interface is ugly itself, it would force you to unglify your code to put it to use.
      Yes, code reuse is good in theory, and should always be at least considered. But reusing bad code is a mistake.
      --
      An esoteric scratched itch:
      Homeworld Map Maker Tool
    2. Re:virtues of programming? by J.+J.+Ramsey · · Score: 1

      "Unfortunately, the first thing I thought of when I read this quote was Larry Wall's infamous quote describing the Three Virtues of a Programmer: laziness, impatience, and hubris......"

      Actually what you thought of is fairly pertinent to the discussion--so long as you realize that Larry Wall flipped the concepts of "laziness, impatience, and hubris" upside-down.

      Laziness, Larry-Wall style, is doing a lot of work so that others or one's future self don't need to do as much work. This is *vicarious* laziness, doing the work up front so that others can be "lazy."

      Impatience, Larry-Wall style, is also vicarious: spending the time to do the foundational work right so that others don't have to spend the time doing it and can just build on top of it--which takes less time.

      Hubris, Larry-Wall style, is having the guts or gall to show your code so that everyone can see how wonderful it is. Perversely, this implies having the humility to accept criticism and fixes from those who find flaws in that [not-so] great and wonderful code.

      Vicarious laziness and impatience are basically what the author of the article calls "beauty."

  18. And the quality HTML award goes to... by Brazilian · · Score: 0, Offtopic

    ... Charles Connell, for creating more "lousy" software. Call me crazy, but I would think that if you wanted to rant about "lousy" software you'd have the presence of mind to write decent-enough HTML so that the character " didn't show up as ? and bullets didn't show up as the character Y.

    1. Re:And the quality HTML award goes to... by Anonymous Coward · · Score: 0

      HTML ala frontpage, code in VB.. and he's telling us about lousy software, what an ass.

  19. EVERYONE? by kilgore_47 · · Score: 1

    This article is a challenge to engineers, managers, executives and software users (which is everyone)

    Lets be fair now. Some people actually don't use software (or computer technology of any sort).
    Of course, no one any of us know.... but i'm sure such people exist!

    --
    ___
    The way to see by faith is to shut the eye of reason. --Ben Franklin
  20. NO !! by Flabdabb+Hubbard · · Score: 0
    Software engineering is there for one reason only. To perform a business function for the minimal amount of outlay. It is unlike bridge building in so many ways. Most software is only live for a couple of years at the most. This kind of VB quick hack does not need heavy duty architecture

    Conversely where this approach is required (saftey critical systems) Formal Methods such as Z and VDM are often applied to prove the correctness of the specs etc and therefore guarantee bug free code.

    As ever it is Horses for Courses. Don't lump all software developers together.

    Crap inserted to avoid lame compression filter what is this bullshit ? slashdot has really gone down the tubes don't know why I keep coming back ! thank you.

    1. Re:NO !! by Spruce+Moose · · Score: 1

      Yeah right, I sometimes program for fun with no "business functions" involved at all. I like writing code for the purpose of doing something useful or creating something elegant.

  21. Harumph! by tbone1 · · Score: 1
    And when managers become reasonable and don't change things constantly without extending the deadline, this might be a real issue. As it stands now, most of us are just trying to get our jobs done before we're fired by people who make Dilbert's boss seem like a paragon of rational enlightenment.

    --

    The Independent: Reverend Spooner Arrested in Friar Tuck Incident - ISIHAC, Historical Headlines
  22. *ACK* VB!! by Anonymous Coward · · Score: 1

    The article has code fragments. Just now I noticed it was VB!

    Why not show C++, C, or Java? That way you can really show the difference of a bad written program compaired to a good written one...

  23. Good software takes time by gss · · Score: 2, Interesting
    Unfortunately tight timelines always negativlty affects the quality of software. This is why I'm a total believer in refactorting. Software should always be evolving, when something is found that was poorly designed, time should be set aside to fix it. By refactorting you will eventually have high quality code.

    Of course it also depends on your staff, if you don't have the expertise to begin with this process will either take a lot longer or may never happen if it is so poorly designed in the first place.

    1. Re:Good software takes time by Anonymous Coward · · Score: 0

      Good design begins with correct spelling.

    2. Re:Good software takes time by esj+at+harvee · · Score: 1

      but refactoring is nothing new. It was one of the fundamental techniques I learned back in 1979.

      personally, I think the lack of quality and the lack of progress are directly related to the industry's lack of historical memory and continuity. This lack of awareness about history keeps us reinventing the same dammed thing over and over again.

    3. Re:Good software takes time by gss · · Score: 1

      It may be an old technique but still a valuable one that not many practice.

      I would agree that there is a lot of reinventing of the wheel out there. That's why I also like design patterns. There is a lot of business domain software that of course can't just be reused from somewhere else.

  24. I agree and disagree by Uttles · · Score: 1

    I come from a computer engineering background so I would love to see fundamentally sound software that is clean, efficient, and fast. On the other hand, compilers are very good at optimizations these days, and processors even have methods of reorganizing instructions to gain speed, so one can argue how necessary it is for code to be perfect. I would like to see "beautiful" code, but I don't really think there would be much performance improvement.

    --

    ~ now you know
    1. Re:I agree and disagree by bolthole · · Score: 1
      I come from a computer engineering background so I would love to see fundamentally sound software that is clean, efficient, and fast. On the other hand, compilers are very good at optimizations these days,

      Wow. It's amazing how you believe you understand the issue, and how thoroughly you do not.

      So what if compilers can optimizing finding the Nth digit of PI down to 10 seconds, from 30 seconds? The real issue is, with good design, you wouldnt have been doing that computation in the first place!

      Good design and good commenting/formatting skills go hand in hand. You do not usually have someone who designs (not "writes") code well, who does not format and comment well.

    2. Re:I agree and disagree by Uttles · · Score: 1

      I agree with you, but that sort of situation is more rare than one would think.

      --

      ~ now you know
  25. You want to see beautiful code? by Luke · · Score: 2

    Check out the source to Darren Hiebert's ctags. Best-designed C program I've seen yet.

    1. Re:You want to see beautiful code? by Anonymous Coward · · Score: 0

      PS - I didn't add that [sourceforge.net] shit. Don't you like how they mess with comments arbitrarily?

    2. Re:You want to see beautiful code? by Anonymous Coward · · Score: 0

      PPS - You can turn that off in your preferences. I think it's to keep people from getting directed to goatse. :)

    3. Re:You want to see beautiful code? by Kenyaman · · Score: 1

      From the CTags page: Now supports the following languages: Assembler, AWK, ASP, BETA, Bourne/Korn/Zsh Shell, C, C++, COBOL, Eiffel, Fortran, Java, Lisp, Make, Pascal, Perl, PHP, Python, REXX, Ruby, S-Lang, Scheme, Tcl, and Vim.

      So shouldn't it be Assembler/AWK/ASP/BETA/Bourne/Korn/ZSh Shell/C/C++/COBOL ... Tags?

    4. Re:You want to see beautiful code? by Anonymous Coward · · Score: 0

      Bourne shell, Korn shell, and Zsh shell are all unix shells that the author decided to smoosh together. Hence why it is described as:
      ..., BETA, Bourne/Korn/Zsh Shell, C, C++,...
      I can't believe I just had to explain that.

    5. Re:You want to see beautiful code? by Anonymous Coward · · Score: 0


      I think that was less a troll than someone pointing out the benefits of the new slashcode to display the url...

    6. Re:You want to see beautiful code? by Anonymous Coward · · Score: 0

      Umm... he meant as in it's called ctags, but it does not only c tags, but also c++ tags, eiffel tags, java tags, etc.

      I can't believe I just had to explain that. :P

    7. Re:You want to see beautiful code? by Evangelion · · Score: 1


      Let it go. Alot of moderators seem to lack both a sense of humour, and basic intelligence.

  26. And How!!! by Telek · · Score: 4, Insightful

    I can't tell you how many software packages I've looked at that are ABSOLUTELY HIDEOUS on the inside (and open source isn't exactly immune to that either. Anyone taken a look at the code of SSLeay? Good package thou).

    The problem being, however, that once you have money entering the picture, and/or time, then the first thing to go is code quality. Mind you, combine that with the fact that a few years ago anyone who had the patience to sit down and read "How to program in java in 21 days" suddenly became a programmer. Here at work we have a very large codebase that we originally contracted out someone else to do, then took over once we got more funding. They preferred the "copy/paste" approach to doing loops, and tonnes of other hideous hideous things. I've done things like cut down 2500 lines of code to 1100. In fact, the company here could save money in the long run by hiring me to do nothing but optimize, by the cost of additional hardware that they would have had to buy to support this. ugh.

    Unfortunately, in the land of "80% complete is good enough" and where "as long as it works" is a good philosophy, and in a land where "visual basic" is a professional programming language, we're not going to see this improve any time soon. Even Java works squarely against the goal of "efficient". Give me C++ any day.

    I think that another part of the problem is people just not caring about their code, not having pride in what they accomplish. That and people simply not knowing what the hell they're doing. (Not that I know ANYONE like that around here... nope nobody...)

    Argh. Ok sorry, I'll end my rant now.

    --

    If God gave us curiosity
    1. Re:And How!!! by Trepidity · · Score: 2

      Anyone taken a look at the code of SSLeay? Good package thou).

      And that is exactly why I consider software "beauty" to be a minor point of importance. I'd much prefer something like SSLeay to be hideous on the inside but still be a "good package" than some elegant, beautiful, but overall rather useless and crappy piece of software.

    2. Re:And How!!! by Telek · · Score: 2

      Woah tiger... It's very possible to have both, and it's not very difficult to have both either. The best code is the code that you can read and maintain, and is functional. In my experience it's better to write clean code from the beginning, as you'll suffer from fewer bugs and easier maintenance in the future.

      --

      If God gave us curiosity
    3. Re:And How!!! by Billly+Gates · · Score: 2

      Good code can be written in Visual Basic. I am aware that C++ has alot more features then Vb and can do alot more things. Vb.net will level the playing field a little more but perhaps the problem is that poor programmers are using c++ and perl instead of VB and do not know what they are doing. There always seems to be a trade off in easy of use vs features in software development or apps.

      Lets take perl and Vb for example. Perl has tons and tons of modules and the design philosophy is "There is more then one way to do something" which both make it a hackers dream. Vb was designed to get real work done for small apps or to be used as glue for larger Visual c++ apps written using ocx for quick application development. A poor programmer will never use the advanced features of perl or c++ and will probably write poor code with no regards to design or might attempt to use some design but do it poorly. With vb it's harder to screw up. It's easier and simpler and has less ways to do things, which make it easier to read the code and have fewer bugs. This will come at a tradeoff depending on what you do. Perhaps we should let the poor programmers use VB for things like gui development and creating the overall glue to an app, while the more complicated code can be written by senior the c++ programmers. The senior c++ programmers can take advantage of the language without making code hard to read and buggy. A kid on a bike with training wheels might not go as fast but will not fall off. When he/she learns how to bike, then he/she should take off the training wheels. I believe the same analogy should be applied to programming.

      I also find the windows gui vs unix commands argument similar. The design of the Macintosh was genius for average computer users. Instead of remembering a command, just point to a menu of commands and select the one you want. Someone with little computer skills in dos or probably unix will learn the slim basics of how to open a file in VI and close it. The user would be better off with a gui. An advanced user could write scripts to execute commonly used routines. He or she is not limited by the WYSIWYG mentality of the gui. Both have their trade offs.

      I also believe Vb and apps such as MS access may be the future of programming for non-technical needs. I read alot of complexity arguments in the postings and I understand the arguments. The problem is while computers have been getting more and more powerful, the users expect more and more things out of them. The languages have not advanced that much in 20 years. At least not in terms of processing power in memory of computers. What happened to the notion of computers programming themselves via IA? Or specific repetition structures that are powerful enough to look at huge/complex patterns and predict things like hurricanes and potential natural disasters before they happen? In the late 1970's computer scientists and most of programmers envisioned all these things. Their argument is, if they can all write operating systems, word processors and mail programs with only 48k of ram, why can't these things happen with 256 megs of ram with processors that can do 750 mips?

      What has changed since the late 70's in languages? We have better and more mature object oriented programming and the UML for design and uh...oh I guess garbage collection for memory leaks. That's it! Innovation is a huge problem and we are trying to develop more and more advanced software, using the same really old techniques, on our really old languages, designed to write 48k based programs. The newer Java and C++ languages are all based on C and simula67. Both have been around for 20 years if not more. This technology was available 20 years ago along with cfront for object oriented programming in C. VB and python may be the closest thing to something new. I like the idea of keeping the more complex code in c++ .ocx files and using vb as the actual program or as glue. MS access also has got my attention recently. Separating the code that does actions and code that has the attributes is commonly used by webpage designers for clean coding. I believe Microsoft FrontPage does this but I am not sure.

      We as in the fsf community need to develop something similar to VB and access that can interact with lots of objects so we can create complex applications quicker with less code. We can also have poor programmers write better code. You don't need to write complex stack algorithms to write an MS-access template to display inventory items. I believe the more complex something is the more it has a chance to fail. Good software coding will go along way but not everyone is a programmer and it is becoming harder and harder to do more complex things. C++ can do great things in computer science apps but in the bussiness and consumer world, you have to write alot more code to have your program do alot more things. I think picking well-written code and using scripts or different code for actions that interact with the premade modules might be the wave of the future. I am not talking about java or c++ but something like MS Access where the code you need is minimal.

    4. Re:And How!!! by chefren · · Score: 1

      One thing I hate about VB (the language) is that some things are done very differently from others. Whenever new features are added they use the new semi-OO style API, but older stuff user other API- styles (QuickBasic or even GWBasic-style). This easily leads to code that is hard to read. You have two file access interfaces that are both good for some things but not for others and suprise suprise, the things the new FileSystemObject-way doesn't do well are the things the old one does. Also, debugging is hell. Get your program in an endless loop and you have to kill VB and reload/find the bug/dabug again. VB doesn't do well as a programming environment. Help sucks as well. It's easy to pick up but in the end, you just end up bashing your head against the wall.

    5. Re:And How!!! by acroyear · · Score: 2

      In fact, most OpenSource 'C' code (we'll leave Perl out of it...), especially if it uses GNU libraries, ends up looking rather hideous by the time its released, and that can easily be blamed on one thing: Unix. Or is that many things, 'cause that's my point. Most OpenSource stuff has to deal with all the multiple versions of Unix out there, including Linux (including multiple versions of Linux), and though Autoconf is a great way to handle that, it leads to rather ugly code in the final deliverable, because of its heavy reliance on the pre-processor.

      --
      "But remember, most lynch mobs aren't this nice." (H.Simpson)
      -- Joe
    6. Re:And How!!! by alansingfield · · Score: 1

      Ctrl+Break will always stop VB when its in an endless loop ... Its pretty well hidden in the docs though!!!!

  27. A Prime Example by docstrange · · Score: 1

    Is it just me or is computing going backards. It used to take 2 seconds to boot into DOS, yet it takes 20 seconds or so to boot into Windows 2000. We have various gui based medical management software that we manage at my place of employment, but the old dos versions were far more efficient. Call me a hermit, but I think that the "user friendly, gui=productivity myth" needs to die. Visual basic should not be used for ANY production applications. Especially in mission critical system. That aside, I would like to thank all of the crappy programmers, for providing me with job security. As long as your stuff breaks, my future looks bright.

    --
    Remember that you are unique, just like everybody else.
  28. Blame the customers... by fleeb_fantastique · · Score: 1

    In commercial software, customers drive a demand for new software such that companies are punished for taking the time to try to get the software right. Time and again, when offered the choice to go with software that has been well-written versus software that is poorly written (but available today), the customer will choose what is available today.


    I do not see this changing anytime soon.


    --
    And so it goes.
  29. It depends by shd99004 · · Score: 1

    The software for millions of home PCs doesn't have to be that bugfree, really. There is no catastroph if a computer crashes now and then. The prices are kept pretty low, but instead it's not perfect. The better and more error free code you want, the more expensive will it be. For example, the software running at a nuclear power plant or in the space shuttle is probably very error free and has very few bugs. However, the time to develop it and the cost, must be way higher than any other system. It's all about how many errors you can tolerate in a system.

    --
    Will work for bandwidth
    1. Re:It depends by Anonymous Coward · · Score: 0

      The problem gets ugly when managers start using PC software to control Nuclear Power systems.

  30. Public Safety by Anonymous Coward · · Score: 0

    Bridges are designed the way they are because there's a large need to ensure public safety. That is why you have licensed engineers reviewing plans and signing them.

    Code is just not as important. If it there is a malfunction, no one dies. If there is that possibility, then higher coding standards must be met.

  31. flawed analogy by funkapus · · Score: 4, Insightful

    Typically, the user interface to software is supposed to look good. This corresponds to the visible stuff in a house: the walls, floor, fixtures, etc.

    But does the wiring look pretty? Or the plumbing? Or the unfinished basement/garage? Or any of the stuff that actually makes the house work?

    Hell no.

    Does the engine of a car look pretty? It's covered in grease and all kinds of crap is sticking every which way, and it doesn't make sense to the non-initiated. Function is more important than form when it comes to making the car go.

    I'm getting tired of these calls for purty code. I like an elegant piece of software as much as the next guy, but my manager could give a crap as long as it works, and in fact won't be willing to give me extra weeks to make it look nice on the inside. Particularly when you consider that I'm probably the only person who's really ever going to look at my code.

    1. Re:flawed analogy by Anonymous Coward · · Score: 1
      Particularly when you consider that I'm probably the only person who's really ever going to look at my code.


      That's the age-old excuse, and you only use it because you know that if anyone else was looking at your code you'd have to make it cleaner.

    2. Re:flawed analogy by bolthole · · Score: 1
      Does the engine of a car look pretty? It's covered in grease and all kinds of crap is sticking every which way, and it doesn't make sense to the non-initiated.

      Guess you need to buy newer cars, then :-) My engine looks quite nice. Okay, it's complicated. But everything is visibly organized and controlled, even to the uninitiated, I think.

      Whereas people here are complaining that to people who KNOW how to program, a lot of the software out there looks unspeakably ugly.

      (To people who dont know how to program, it would look a mess either way)

    3. Re:flawed analogy by dabplana · · Score: 1

      True, I'll grant you that often, the internal systems of your car or house do not look "pretty" to the non-initiated. However, to a knowledgable repairman, much of the internals of the house and car are arranged in an obvious, maintainable manner.

      You probably wouldn't want to buy a car if you had to pull the engine to change the sparkplugs; you wouldn't want to tear out your freshly painted drywall in order to reset a circuit breaker. Yes, much of the wiring and plumbing within a house or car is hidden and inaccessible -- I'm not proposing that it all has to be beautiful. However, design engineers bend over backwards to make the internal portions that are subject to maintenance intuitive and available. Circuit breakers are sited in one location and given an access panel; sparkplugs are (usually) placed in some easily accessible location.

      I see software the same way. If you know that a piece of software will be subject to maintenance, write it in an obvious and straightforward manner.
      No, the end user won't appreciate your extra work and foresight, but the "mechanic" that has to perform maintenance on your code will appreciate it (even if that "mechanic" is YOU).

      The question then becomes "which portions of software will be subject to maintenance?" Unfortunately, in these times of malleable requirements, inconsistent approaches, and unforseeable changes, the answer is often "all of it."

    4. Re:flawed analogy by duggy_92127 · · Score: 1

      > But does the wiring look pretty? Or the
      > plumbing? Or the unfinished basement/garage? Or
      > any of the stuff that actually makes the house
      > work?
      >
      > Hell no.

      How many of us have had to pay an electrician or plumber twice as much because they first had to FIGURE OUT how everything worked, and then try and fix the problem? When they say "pretty", they don't mean nice to look at; they mean well-designed. With code those things can be the same, but in taking the analogy to the real, you have to see the difference in the two.

      Doug

    5. Re:flawed analogy by muggs · · Score: 2

      Having worked in construction for a couple decades
      (concrete, carpenter, electrician, restoration,
      project manager), I completely disagree. A skilled craftsman can immediately distinguish between the work of a master vs. a hack job(not good in this sense). And the work of a master, being better
      laid out is inherently beautiful, easier to adapt/repair. On construction sites you'll see young guys running around apparently working hard and fast, while the old guy appears slow. But then you notice the old guy never makes a wasted move.And in the end the old guy gets twice as much done at a much higher level of quality.

    6. Re:flawed analogy by Barlo_Mung_42 · · Score: 1
      "Particularly when you consider that I'm probably the only person who's really ever going to look at my code."


      Must be nice to code in a vacuum. As for your car engine analogy, I'm glad the VW engineers take pride their work. Its 2.8l VR6 is a thing of beauty, and I keep it clean.

    7. Re:flawed analogy by Anonymous Coward · · Score: 0
      The flaw I see with that thinking is that it works better when it is pretty. If your car is filled with dirt and dust it's going to run worse. Tires worn down or out of air? Car doesn't run, or you get a blow-out. Spark plugs don't fire? No go. Wires twisted around - who knows if they're even hooked up correctly - vehicle may not start or starts a fire or blows up (all the gas is still in the fuel tank, right?)...

      Everything has it's place and I think one of the real points throughout this whole discussion that's being missed by everyone is that you don't have to use the word "art". However the quality of art that is most important here is Intuition. And a lot of people miss that.

      When you look at a bridge it's easy to intuit - it stands up, holds up anything going over it. The function is easily understood. Not so with too many programs. Yes, there's a GUI or command-line, but the complexity relationship is usually a few orders of magnitude greater for every GUI than for any command-line. The GUI gives you a feel for what's supposed to happen - but usually at a higher level, a more human-centric level than the command-line where form and function typically are more proportional.

      And don't even talk about trying to look inside the crap available.


      The current system I'm working on professionally is an amalgam of a previously unworking system, a ton of Use Cases developed with the users, and a few programmers. I've looked over eXtreme Programming recently and I've been writing main() methods to do testing for the objects I've been developing since. With having to merge changes from everyone it's a godsend to have a single way to tell what works and what doesn't!

      So even if beautiful code is intuitive functionality, it's also a logical system that can easily benefit from automatic tests. You don't have to chemically test every drop of paint you use to know it's going to give you the right color (in fact you'd use up the paint in testing it, right?), you can use it because - hopefully - you have experience with the paint to know how it's dried state will be versus the maelable state. Software can really, really, really, use the auto-tests as well as the comments on every method which, to be fully accurate, should each be paired with a testing method to elucidate the curious as to how it will react in every extreme case....

      I'm personally working on a Java command-line program to take care of all my e-mail (eventually to convert archives, too) because:
      1. Outlook Express/Windows/install/uninstall/registry/whateve r bugs have finally made it inoperable on my Windows system, and
      2. because I miss the old command-line mail system days from MIT when I knew what e-mail I was getting and I was in control of it - not some overblown GUI contraption...


      Harumph!

  32. Good code comes from good programmers by pudge_lightyear · · Score: 1

    Good programmers work for good money. How can you expect good programmers to be involved in projects that don't pay good money... Easy answer. You can't.

    I also like this post for this reason. I think it serves to rally all of the programmers in the world to get together and agree to write good code. See, I write sloppy code on purpose. Now that I know that I'm not supposed to, I'll start writing clean code.
    I came up with a cheer too...:
    Rah Rah Ree! We Like our Code Clean! Rah Rah Ro! Sloppy Code Must Go!

  33. Terrible analogy ahead by Fjord · · Score: 1

    Designing 5-9s software for commercial use is like making a knife out of diamonds. Sure, it's more durable, but it costs a hell of a lot more than people are willing to pay.

    --
    -no broken link
  34. Perhaps the house analogy is flawed as well... by daoine · · Score: 1

    Take a look at the average house today as opposed to one built in the early 1900s. Today's houses are cookie cutter style boxes that look exactly like the ones next to them. Furthermore, these houses aren't going to last very long...I know WAY too many people who have dealt with shoddy construction of newer houses.

    Houses today aren't nearly as ornate as before -- there is very little woodworking, no secret passages, not too much stands out.

    The software world is much like today's house market -- contract to the lowest bidder, make sure it doesn't show any weaknesses until after purchase, and who really cares if the sheetrock cracks and the beams bow after you've sold it?

    It's hard to try and make software look like Victorian houses -- nobody wants to pay for the added effort and longer wait. Especially when a cookie cutter Colonial will get the job done.

  35. Not this stupid 'programming is art' BS again! by Flabdabb+Hubbard · · Score: 1, Insightful
    to recognize the artistry involved in writing software

    What pretentious bullshit. Software is NOT art. It can be closely compared to bricklaying, or cabinet making, it is a CRAFT.

    Try expressing an emotion in C++. It cannot be done. Please think before repeating these banal opinions that software is art. It just isn't. Deal with it, and if you want to be an artist, learn to paint.

    1. Re:Not this stupid 'programming is art' BS again! by FortKnox · · Score: 1

      Now now. Art can be seen in any type of medium, even coding.

      You may not understand it, but only the artist needs to.
      I can see art in some obfuscated code I've seen.

      Who are you to tell me what is art and what isn't?

      --
      Good quote, too many chars. Seriously, the slashdot 120 char limit sucks!
    2. Re:Not this stupid 'programming is art' BS again! by servo8 · · Score: 3, Insightful

      I think a problem here is getting to a common definition of art. If a master craftsman pours his soul into a work, how is that not art? Just because the emotions a work may convey cannot be easily categorized and labelled does not mean they are not valid feelings. There are many pieces of "craftsmanship" out there that evoke such feelings. I have felt them myself. Would you deny me that?

    3. Re:Not this stupid 'programming is art' BS again! by Glock27 · · Score: 5, Insightful
      What pretentious bullshit. Software is NOT art. It can be closely compared to bricklaying, or cabinet making, it is a CRAFT.

      Very perceptive...coding software is like crafting a cabinet. However, designing a cabinet is art...and so is designing software.

      Try expressing an emotion in C++. It cannot be done.

      jesus->loves(you); // Sarcasm, for the humor impaired

      Regardless, art doesn't just express emotion, it inspires emotion. And trust me, I've had (mostly other people's) C++ code inspire some pretty horrific emotions. ;-)

      Good design and coding, on the other hand, can truly be things of beauty, regardless of language.

      Please think before repeating these banal opinions that software is art. It just isn't. Deal with it, and if you want to be an artist, learn to paint.

      Spoken like someone who just doesn't really comprehend software design, or why one design might be more elegant than another. I suppose you don't think mathematics is beautiful either...

      186,282 mi/s...not just a good idea, its the law!

      --
      Galileo: "The Earth revolves around the Sun!"
      Score: -1 100% Flamebait
    4. Re:Not this stupid 'programming is art' BS again! by DCheesi · · Score: 1

      Crafts are made *primarily* for practical use, often with aesthetics as a major secondary consideration. Art is made primarily for art's sake, to stimulate thought & emotion. The reason that the lines seem to blur so often these days is that we have so many choices in products that we often select them solely on the basis of aesthetic value, even though the objects are ultimately meant to serve a practical purpose.

      ObOnTopic: Software is indeed a craft, and can be approached from many points of view. But the only code that is truly 'art' is that which is written primarily for the appreciation of other programmers. Real-world software doesn't, and shouldn't, fall into this category.

    5. Re:Not this stupid 'programming is art' BS again! by jazman_777 · · Score: 3, Funny
      Now now. Art can be seen in any type of medium, even coding.


      The key is to format the code so it looks like an ASCII figure of a bug. The viewer, if he is hip, will appreciate the irony.

      --
      Slashdot: Failed Car Analogies. Amateur Lawyering. Anecdote Battles.
    6. Re:Not this stupid 'programming is art' BS again! by swright · · Score: 1

      I think some of the 'pointless' programs kinda fall down the gap in the middle of this argument. They have a purpose - but thats not the point of writing them (make up a need that doesnt require satisfying and write a program to satisfy it, could do it. As could the BBS demo - remember them? - written partly to publicise the BBS but mostly to write cool stuff that looks nifty and is optimised to hell)

      Cor this brings me back. A starfield and cool scrolly [multiple] sinus wave text written in Turbo Pascal and some inline assembler back when I was like 15 or summat. took it from 20fps to >200fps with all the playing and optimising I did with it... ...those were the days

    7. Re:Not this stupid 'programming is art' BS again! by bee-yotch · · Score: 1

      What emotions can you express in any other form of art. It's all dependant on the viewer of the art work. And simply because a piece of art doesn't express emotion doesn't automatically disquallify it from being an art. What emotion does a sculpture of a dolphin portray? Yet it's considered art and it's not even original. If someone puts a lot of love and effort into making their code look real nice a pretty then I think that if they portray it as art then it is art (not necessarily to someone else). Or how bout' a heiku in code display the DeCSS. Is poetry an art?

    8. Re:Not this stupid 'programming is art' BS again! by chipuni · · Score: 2
      You're right... you can't express an emotion in C++.

      But Perl poetry has a long history.

      --
      Never play leapfrog with a unicorn. Or a juggernaut.
    9. Re:Not this stupid 'programming is art' BS again! by Anonymous Coward · · Score: 0

      What if you're doing graphics code? Like an animation in OpenGL and whatnot, or the assembly-coded screen hacks of the 80s and early 90s? That could be art.

    10. Re:Not this stupid 'programming is art' BS again! by Peyna · · Score: 2, Insightful
      Beauty and Art are two different things.

      (i.e.) I think a Porsche would be beautiful in my garage, but that doesn't mean a Porsche is a work of art.

      I suppose if you were going to compare coding with art (literature), coding would be non-fiction. Some of it is horribly written, but it's got all the facts right. Some of it is written wrong and doesn't make any sense. While the truly good works of non-fiction, even though they are only telling you facts, are beautiful, fill your mind and heart with thoughts and feelings, and are 100% accurate at the same time.

      In that sense, yes it is art, and like with a non-fiction book, you can copyright the finished product, but you can't copyright the facts that make it up.

      --
      What?
    11. Re:Not this stupid 'programming is art' BS again! by Anonymous Coward · · Score: 1, Insightful

      Software developers are not *ists. Neither are painters, musician, dancers yada yada yada. * is a meme that allows people to feel better about themselves ( particulary in relation to others ) by inclusion in the group that are *ists or KNOW what * is. The primary effect is to EXCLUDE all those other unenlightened people who are in the dark *istically.

      I play piano/keyboards, compose music and write software. I am NOT an *ist. I am amazed at all the confusion surrounding this evil meme. If you remove the word from your vocabulary and remove the concept the concept from your thoughts, the problem goes away. You'll see things in a new light. Carriers of this meme act under compulsion to be included among those who know what * is.

      Free yourself. * doesn't exist.

    12. Re:Not this stupid 'programming is art' BS again! by Anonymous Coward · · Score: 0

      I can make the reader cry with one line of C:
      void main(void)
      I can make the reader angry with one line of most any language:
      goto HELL
      With code, one can make jokes, poems, mysteries, ironies, or metaphors--not that these make good code. A creative person can use any medium.

    13. Re:Not this stupid 'programming is art' BS again! by big_hairy_mama · · Score: 1

      IANACM (I'm not a cabinet maker), but I've seen some very beautiful cabinets in my time... I would therefore say that it is definitely an art. And I've also seen some very beautiful code in my time; in fact some code I would readily compare to the Mona Lisa, while other code I would compare to a pre-schooler's fingerpainting.

      On a mundane level, coding is a craft. But if you treat it like an art (and know what you are doing), then it is exactly that.

    14. Re:Not this stupid 'programming is art' BS again! by big_hairy_mama · · Score: 1

      (And I've seen some very ugly cabinets too.)

    15. Re:Not this stupid 'programming is art' BS again! by Anonymous Coward · · Score: 0

      Don't be ridiculous.

    16. Re:Not this stupid 'programming is art' BS again! by doubtme · · Score: 1

      >>Please think before repeating these banal
      >>opinions that software is art. It just isn't.
      >>Deal with it, and if you want to be an artist,
      >>learn to paint.
      >
      >Spoken like someone who just doesn't really
      >comprehend software design, or why one design
      >might be more elegant than another. I suppose
      >you don't think mathematics is beautiful ?
      >either...

      I'd say the first poster was also someone who doesn't understand art. Art is not necessarily about creating visual images - it's about expressing and inspiring emotions. Whether you do it "prettily" or "beautifully" has absolutely nothing to do with whether the art has any power.

      Yes, it's subjective, but by and by, _good_ art arouses in _most_ people emotion of some form (which is not necessarily uniform across the viewers.)

      Becoming an artist by just learning to paint is absurd.

      Disclaimer: Spoken by someone who has absolutely no artistic ability whatsoever... although I love music, mathematics, programming and visual/traditional art for it's artistic merits. I am always amazed at how much information can be contained so compactly within equations... beauty through economy.

      I'm rambling. I'll stop :)

      --

      There's no $$$ in 'team'...
      www..--..net - for incisive, w
    17. Re:Not this stupid 'programming is art' BS again! by jeremyp · · Score: 1

      Programming is not an art, cabinet designing is not an art, architecture is not an art. I'm defining the term "artist" quite narrowly as somebody who makes objects who's primary purpose is to inspire some sort of emotional response from people. e.g. a Henry Moore sculpture has no other purpose.

      Software, cabinets and buildings have a different primary purpose and subjugating that purpose to the goal of making it look nice often results in less than optimum performance in the primary purpose. e.g. an architect may decide to make his building entirely of glass for aesthetic reasons, but that might make it too hot in sunny weather. Another example would be the original design for Quicktime 4 which looked great with its brushed metal graphics, but was terrible to use (review here http://www.iarchitect.com/qtime.htm).

      --
      All I want is a secure system where it's easy to do anything I want. Is that too much to ask ~~ Randall Munroe
    18. Re:Not this stupid 'programming is art' BS again! by Anonymous Coward · · Score: 0
      Is coding by itself even a craft? It's really nothing more than translating an algorithm from one form to another. Under copyright law, I can make a case that *coding* is nothing more than a work-for-hire.

      I find the arguments against coding standards really lame. "It hurts my creativity".

      Buddy, if your creativity depends on the placement of braces and how many spaces you use to indent, you're a real lamer.

      Designing, on the other hand, *is* art.

    19. Re:Not this stupid 'programming is art' BS again! by skram · · Score: 1

      Software development is evolving, just like any other scientific effort. For example, early humans found their travel blocked by rivers. At first, they found dead trees had bridged the gap, and they crossed where able. Next, humans tried to duplicate the random nature of tree bridges chopping them down to fall across the river. Some trees were tall enough and spanned the chasm. Others were too short and fell in. Still others were long enough, but not strong enough to bear the load. These _bridge scientists_ were performing basic bridge research. They didn't care how pretty their work was, as long as it functioned. This equates to the early computer science efforts in software: ugly but functional.

      After the bridge scientists came _bridge engineers_, who formalized bridge building. Engineers tried different materials: rock, brick, lumber, metals. Some failed, others succeeded, but the result was a library of repeatable engineering techniques others could use to build bridges without re-learning all history's mistakes. I believe software design is currently in this stage. Standardized languages, modules, measurements, certifications, etc., all indicate a science evolving through engineering.

      Next is the artistic part of our profession. Just like bridge building, some bridges are functional but severely ugly. Other bridges clearly show the artistic nature of the designer. The Golden Gate Bridge and some ancient roman bridges attest to the artistic nature of bridge engineering. Today, graphic interfaces, natural speech processing and code libraries all indicate software engineering is also evolving into artistic work.

      --
      Steve Kram skrama@sport.rr.com
    20. Re:Not this stupid 'programming is art' BS again! by Anonymous Coward · · Score: 0

      Software design that reflects external function implies there are no fixed rules for good programming technique. For many years, programmers were taught that global variables and GOTO statements are poor programming practice. In some situations though, these constructs may be exactly what the software needs to marry form with function. It would be incorrect to propose the rule of building construction: "Always use teak wood instead of pine." Teak is an excellent wood, but sometimes pine is the right choice. In the same way, the right question about a programming technique is: "Is this an appropriate design for the external features we are trying to achieve?"


      This invalidates the whole premise. Anyone who can compare a goto to teak is incapable of presenting a cogent argument about software.

    21. Re:Not this stupid 'programming is art' BS again! by chris_mahan · · Score: 1

      mmm, what would you say to an artificial intelligence system designed and written solely for the purpose of making the user think, ponder life, and appreciate one's place in the universe?
      Is that not what most music, paitings, and sculptures attempt to do?

      How about programming for purely visual gratification, like a movie, or something?

      The paint on the canvas itself is gooey oils mixed, the notes on the music sheet are highly symolic notation that must follow hundreds of years of convention, yet the end-result of 5 pages of music code can be "Fur Elise" by Mozart. My wife is a pianist, a very good one, and can just, by reading sheet music, "see" the performance in her head. She can look at sheet music and say: "Wow, I love it, it's just so deep." And then she'll play it.

      Computer code is like sheet music. You can have a ten line canon or a 40 pages symphony, either of which looks like complete gibberish to those who can't read sheet music, but which truly represents the art of the artist who wrote it.

      Ok. Work for commercial purpose:

      How much do you want to bet that most, if not all, of Mozart's pieces were work-for-hire? hehe.

      How about the score for Dances with Wolves, the Titanic Theme, the latest and greatest by Schpiel-berg? Are these not art? Of course they are. Do they serve a commercial purpose? You bet! If there wasn't the lure of generating hundreds of millions of dollars, I don't think any of these pieces would have ever been written.

      Now, I write code. I want to make the user feel a bond with a freaking motherboard. If I succeed in making a grown man or woman "enjoy the interaction" with a piece of plastic/metal/goo, and I have done that on purpose, is that not art?

      I contend that in the same way the common man does not recognize Beethoven's 5th symphony by looking at the sheet music, likewise the common man does not recognize great, beautiful, engaging, pleasing software by looking at source code.

      There are millions of programmers in the world who consider source code to be art, to be speech. Who are non-programmers to say that it isn't?

      --

      "Piter, too, is dead."

    22. Re:Not this stupid 'programming is art' BS again! by Anonymous Coward · · Score: 0

      Actually, programming (like engineering, metallurgy and materials sciences) is both an art and a science, when using classical definitions. The "science" part comes in because if you repeat a set of actions, you get the same results. The "art" part comes in when you select *which* set of actions will produce the results you want, while balancing various limited resources against each other. In fact, it can be a "black art" when you don't know why a set of actions produce the results it does.

      It is also a craft, in the classical sense. Just about anybody can learn the basic rules (I can build a chair), but not many people can get really good at it (I can't make an elaborate chair with inlays and carvings), and only a few people can make works of greatness (how many people can make a throne?).

      Finally, don't forget that Univerities produce "Artists" every time a person graduates with a BA or an MA (the 'A' stands for "of Arts").

    23. Re:Not this stupid 'programming is art' BS again! by Seth+Cohn · · Score: 1

      Peter Davis? Your website is down... email bounces too. What's the current location and status of MP3VoiceControl?

      hope you see this...

      --
      Help achieve Liberty in your lifetime - join the Free State Project - http://www.freestateproject.org
  36. Wow, good one by Sinical · · Score: 2, Interesting

    Wow, what an unconvential argument. Never heard that one before.

    Listen, most people wouldn't know good design if it bit them in the ass. Ask people if they think the design of a Ford Explorer is good. Probably you'll just get a shrug, "Yeah, I guess." Maybe someone a bit more knowledgable will give you somewhat more detail. So don't go with the "laypeople will be horrified" bit. It's obviously not true for other industries -- why would it be true for software?

    Of course, probably most cars *are* pretty well designed. Why? Because it's EASIER to find faults, AND there is legal liability if you screw it up. The second is obviously not true in the software industry, and of course design is HARDER in the software industry if you are trying for any kind of interaction with other systems: i.e., you have to live with whatever design faults are in the stuff you have to talk to, there from the last software fad.

    Therefore, you're left with the fact that good design only happens: a) when it is possible, b) when it is mandated, and/or c) when the programmer/designer (usually the same person) WANTS it to be that way.

    I always try hard in code that I write to do the proper thing, but employer's don't care about design, by and large: hell, most of them don't even care about maintainability -- they want a working executable yesterday.

    Sure, some developers are lazy, and some don't make the push for a clean design when they could probably get one. But until the public starts *demanding* reliable software, don't expect any of this to change.

    Remember, all pressure has to come from the customer -- the best designed, coded, debugged, and maintained software I see is the embedded code in missiles: it HAS work, and well, or else. There are design documents, requirements documents, official documentation of bugs, simulations, etc., all to make sure that things will work correctly when they must. This means no six month product cycles, though -- time is what is required for all good products, including software.

  37. Other trades include: by Anonymous Coward · · Score: 1, Funny

    education, medicine, accounting, law,
    and journalism.

  38. Code beauty.. by Anonymous Coward · · Score: 0

    OpenBSD... Nuff said...

    1. Re:Code beauty.. by Anonymous Coward · · Score: 0

      was that for or against?!!


      awwww geeze, a concise, insightful zing totally wracked byt the postercomment compression filter, thanks Taco! You're a true idiot.

  39. And don't forget this one .... by Zero__Kelvin · · Score: 1


    Most people who write papers chock full of sweeping generalizations have no idea what they are talking about ....

    --
    Guns don't kill people; Physics kills people! - John Lithgow as Dick Solomon on Third Rock From The Sun
  40. Unrealistic Deadlines by J0ey4 · · Score: 1

    The main reason that most software design sucks is that the engineers are not give enough time to do the project right. The idea is that you just get it out to market and you can always patch it later. Try telling some guy with an MBA whose making all the decisions that it is better to take enough time to do a project properly. All he/she knows is that the "magic black box" will produce the same output whether the design is good enough.

    So the same scenario is repeated over and over:

    Engineer: "I can get this done in 10 months"

    Manager: "Hmmm..... we need to get it done in 6."

    Engineer: "That's not enough time to design and implement a clean, extendable, reusable product!"

    Manager:(Confused by big words like 'extendable')
    "It'll work though right?"

    Engineer: "Well yeah, but..."

    Manager: "Just get it done in 6 months."

    As long as you have people who have no clue about software making deadline decisions, you're gonna have to hack like hell for 60 hours a week just to get it out the door. It's sad but true. Granted this isn't ALWAYS the case but in my experience it is most of the time.

    If you want to take the time to do a project cleanly then I think academia is your best bet.

    1. Re:Unrealistic Deadlines by Andrewkov · · Score: 2

      Or open source, where you release your product when it is done, not according to an arbitrary schedule.

    2. Re:Unrealistic Deadlines by ichimunki · · Score: 2

      Um, that's a total non-sequitor. The engineer in question could write "open source", but since the manager in question is asking them for a working software in 6 months, the engineer will apparently be funding the development in the meantime from his income from working at Wendy's. Now, if the engineer can find an open source package and convince the boss to allow that as a starting point...

      --
      I do not have a signature
    3. Re:Unrealistic Deadlines by Anonymous Coward · · Score: 0

      ..and if you take the 10 months you want, instead of the 6 months your boss (or the marketing folks - and I'll assume they know their stuff here, so their dates aren't half-assed guesses) wants, then OOOPS - your competitor(s) released theirs 4 months ago, all those impatient customers who WANT TO BUY **RIGHT NOW!** have already done so and won't buy yours no matter how much better.

      Not all product release date decisions can be done from a purely engineering point of view if you want the product to be successful in a marketplace populated by people.

    4. Re:Unrealistic Deadlines by J0ey4 · · Score: 1

      That is a very valid point. I just wish there were some way to have our cake and eat it too. If your company is not willing to sacrifice quality in order to be first to market then you better believe some other company will. The truth is that as long as people are willing to pay for shoddy software, then companies will be rushing shoddy software out the door. Seeing as the vast majority of the public has been conditioned that this is the way things are, I'm not too sure how this situation can be improved.

    5. Re:Unrealistic Deadlines by bolthole · · Score: 1
      Or open source, where you release your product when it is done, not according to an arbitrary schedule.

      Only problem is, there's an arbitrary definition of "works", and/or "done" :-) :-) :-)

  41. Human Factors... by dane23 · · Score: 1

    I don't know about anyone else here but I HAD to take a Human Factors class before graduation from college. I'm damn glad of it too.

    --


    Warning! Keep Out of Eyes! Wash Out with Water! Don't Drink Soap! Dilute! Dilute!
  42. Building codes by DJerman · · Score: 2
    So we need building codes for software. Because right now people are willing to pay for a cardboard refrigerator box, and expect to get a single family dwelling in return, and it's not illegal to give them the box. That's how you get to be the richest man in the world :-).

    But what codes are appropriate? Simple merchantability, or some certification of tested-ness and guarantee of defect repair? And how much of that are we willing to pay for? Certainly the current crop of EULAs would have to go.

    So what do you think -- a Software Engineering Board? We have professsional engineering boards for civil, mechanical and electrical design. Of course, this would put severe limitations on the hobbyist and any non-engineer-reviewed software projects. Careful what you ask for...

    --
    1. Re:Building codes by hansk · · Score: 1

      Interesting thought but the building industry is very old in comparison to the software industry. The building industry has had a long time to develop "building codes" for constructs that have not or will not change. Software, on the other hand, is still in its infancy. The technology is changing constantly. If we applied "codes", would they become obsolete with the next technology shift (ala internet). Also, where would the "codes" be applied? To practices, to designs, to algorithms?

    2. Re:Building codes by DJerman · · Score: 2
      I suppose my rambling came around to the argument that if, like in civil engineering, there were

      - professional licensing boards for Software Engineers

      - certification of designs, plans and built code by those engineers

      - professional liability for the items they certify

      - and requirements for professional certification for commercial applications (building codes)

      then we'd have more reliable software. Standards and regulations for what may and may not be certified ("sealed" in traditional parlance) can come later, but lack of accountability is the problem. Any method that legally requires accountabilty for quality and reliability in a class of software will force an improvement, and a corresponding rise in the cost of making that software (which is why it must be a legal requirement for all competitors, or it won't happen).

      --
  43. Death March by digerata · · Score: 1

    The article has a lot of merit and its an evolving art for most programmers. Charles forgot to point out one thing. Most houses these days are forced to be built under the same demanding client deadlines and requirements. You may have to rush building a house, but I have never heard the term "death march" applied to building a house. Beautiful code isn't an luxury in many of todays coporate software environments.

    --

    1;
  44. His analogy doesn't work by whjwhj · · Score: 5, Insightful

    Attempting to compare software engineering to building a bridge or constructing a house is flawed. The reason bridges are built to such exacting standards is because if they aren't, they FALL DOWN. They cease to function. 100% failure. Poorly built software, on the other hand, can still work well enough to be usuable. It may imperfect at some tasks, but perform adaquately at others. If it were true that anything less than a perfectly engineered piece of software would simply fail to compile, then we'd all be writing perfectly engineered software.

    An additional flaw in the analogy is this: The function, or use, of a bridge is quite clear: Extend a roadway over an otherwise impassable divide, such as a river. Simple as that. But deciding what the function or use of a piece of software is much more difficult and complex. Software is told to do many things, and the things it's supposed to do changes over time.

    I'm all in favor of well designed software. But his vision is more utopian than useful.

    1. Re:His analogy doesn't work by mcow · · Score: 1

      The bridge analogy is not that great, but the house analogy holds better. Even so, I can imagine bridge failures far less catastrophic than falling down -- for instance, connecting 100 feet to the left of where it was supposed to connect.

      "Readability" actually does have an analog to the house -- the blueprint needs to be readable so the other architects can quickly get in and make the desired changes. In fact, generally, the source code is far more analogous to the blueprint than to the constructed house.

      Suppose you had a requirement that every bedroom on the second story have a door that opens onto the balcony, but externally a balcony is only spec'd for the front of the house. If the rear bedroom has a door that opens onto space, that's a pretty major bug. "Oh, yeah, it crashes if you click that button."

      The issues of beauty being raised in the article are mostly not specifically about formatting style or the like; the beauty is in the design, and the source needs to express that beauty. The issues are also not quantifiable, and there is a grey area where reasonable disagreements can occur about whether the code in question qualifies as beautiful or not. Coders with a lot of experience, pride in their work, and a sense of esthetics will quickly see the ugly parts (or the "smelly" parts, as Martin Fowler dubbed them in Refactoring).

      If you're in a situation like mine, the ugly code is all there is, and every change you attempt for the better is a grave personal insult to the project manager and other old-timers. 'cause, you know, it works and all.

      --
      Ceci n'est pas un sig.
    2. Re:His analogy doesn't work by spsheridan · · Score: 1

      I think the analogy is actually perfect. You might be able to say that a bridge has only 1 function, to extend a road from point A to point B, a word processor's fucntion is to faciliate word processing.

      And if a server crashes from a memory leak in a piece of code, isn't that %100 failure? And it takes out all the other code running on that server as well!

      The reason bridges are build to such exacting standards are because bridge builders can be sued if their bridge brakes.. software developers can't.

      The differance between A bridge and most software is that bridge's are extremely well defined before the bridge is built. A blue print is drawn to exacting specifications. A design document is created that specifies everything the construction worker needs to know. You never have to ask How High is this supposed to be? How long is this piece? Does a support go every length or every 2?

      Software, on the other hand, rarely, if ever, has a blue print. Someone might wave their hands and say "It should do this and have a blue interface" and the construction worker is expected to figure out what kind of a bridge he should be building.. as he builds it.

    3. Re:His analogy doesn't work by Tim+Browse · · Score: 1

      The reason bridges are built to such exacting standards is because if they aren't, they FALL DOWN.

      Well, not always. Sometimes things like this happen.

      Also, and this is driving me nuts, I remember reading somewhere in an article/book where the author went and checked on the chestnut about "if bridges were built like software, they'd fall down". I can't remember the exact figures/dates, but I seem to recall that he found that about 30% of bridges built in the US between 1900 and 1970 did fall down.

      I think it was in Bentley's "Programming Pearls" but I only have the second edition, and I can't find the reference in that (I had to buy the 2nd edition when a friend never returned the 1st Ed he had borrowed :-)).

      Tim

    4. Re:His analogy doesn't work by aozilla · · Score: 2

      a word processor's fucntion is to faciliate word processing.


      I find your spelling error to be 100% failure. You shouldn't have bothered hitting "Submit"

      --
      ok then your [sic] infringing on my copyright! Could you as [sic] me next time before STEALING my comments for your own?
    5. Re:His analogy doesn't work by Omega+Blue · · Score: 1
      An additional flaw in the analogy is this: The function, or use, of a bridge is quite clear: Extend a roadway over an otherwise impassable divide, such as a river. Simple as that. But deciding what the function or use of a piece of software is much more difficult and complex. Software is told to do many things, and the things it's supposed to do changes over time.

      That's why modern software engineering is based on the concept of modules. In Software Engineering 101 we begin to learn how to take a complex problem and break it down to component parts, so that each resulting module has a clear cut function.

      What you do then is to take each of these modules, define its input requirements and output format. After that, you program each module as a self-contained unit and test them thoroughly.

      Since the early '70s many excellent books have been written on good programming practices. Unfortunately such sound advices are still largely ignored in this time and day.

    6. Re:His analogy doesn't work by Omega+Blue · · Score: 1
      An additional flaw in the analogy is this: The function, or use, of a bridge is quite clear: Extend a roadway over an otherwise impassable divide, such as a river. Simple as that. But deciding what the function or use of a piece of software is much more difficult and complex. Software is told to do many things, and the things it's supposed to do changes over time.

      That's why modern software engineering is based on the concept of modules. In Software Engineering 101 we begin to learn how to take a complex problem and break it down to component parts, so that each resulting module has a clear cut function.



      What you do then is to take each of these modules, define its input requirements and output format. After that, you program each module as a self-contained unit and test them thoroughly.



      Since the early '70s many excellent books have been written on good programming practices. Unfortunately such sound advices are still largely ignored in this time and day.

  45. will (and should) never happen.... by Anonymous Coward · · Score: 0

    This is stupid. Software will never be failsafe and pretty--the open source guys, who aren't dictated by release schedules and costs can do this--I'd love to be able to write perfect, pretty code--it just isn't realistic. Software costs money. Quality is directly releated to the amount of money your willing to flush on it. Software design != bridge building...nuff said

  46. Not CS fault. by Capt_Troy · · Score: 3, Interesting

    It's because managers seem to think that any computer related degree means you can design and write software. I'm not being mean here, but if you have a degree in maintaining networks or creating circuit boards, that does not mean you can design software.

    I would hate to buy a cpu designed by a software engineer. But apparently buying software built by non-software engineers is ok.

    I have found that very few software companys hire only CS majors for software jobs, you look on monster and it says, "Computer related degree required". That's bullshit people.

    1. Re:Not CS fault. by Anonymous Coward · · Score: 0

      Couldn't disagree more. The most important skill in becoming a writer of elegant software is the ability to learn. You're degree, while opening the doors for you to begin that process, will not necessarily quantify your ability to learn. Certainly a CS degree doesn't necessarily indicate greater ability to learn than an EE degree or even a psychology (ala Jerry Pournelle) degree. College is not ultimately IMHO about job skills.

    2. Re:Not CS fault. by Capt_Troy · · Score: 2

      Yea but that says nothing about how much a company is willing to teach you. In most cases the other guys who never learned in the first place are the ones doing the teaching. In that case it's a blind leading the blind situation.

    3. Re:Not CS fault. by Anonymous Coward · · Score: 0

      Why don't you tell Carmack that he needs a CS degree bitch.

    4. Re:Not CS fault. by Anonymous Coward · · Score: 0

      Maybe, but I'd rather have someone know all the theory and have to teach them to work well in a team and/or the APIs we're using then have someone who knows the APIs...but is four years of theory behind.

      Saying "theory isn't everything" is true...you can't just grab a raw CS major and expect them to be a great, productive coder immediately. However, that also doesn't mean that "theory is nothing" -- that people with no theory background can write software well.

    5. Re:Not CS fault. by evrybodygonsurfin · · Score: 1

      As a point of interest - at least two companies I have worked for in the UK will employ people as Analyst Programmers on the basis that they have a degree in anything at all (e.g. Psychology) while rejecting people with two-year university diplomas in Software Engineering.

      Also annoying at the moment is the huge influx of people with degrees in Media Lab Studies. To the unfamiliar US readers, this is a Computing degree available at a number of British universities which does not require knowledge of any programming principles at all to graduate.

  47. Not always true... by bteeter · · Score: 1

    Not all code is built so poorly. In fact, most code is built quite well.

    Just like things in the physical world, code almost always does what it was built to do quite well. For example: Microsoft Word is an excellent Word Processor, but a poor/pathetic drawing program.

    Also just like things in the physical world, code is used for things it was not intended to be used for. Have you ever driven your Geo Metro through a river? Have you ever driven a tractor trailer over an old wooden 1 lane bridge? No, probably not. You would be crazy to try something like that.

    People try to do things with software all the time that it was never designed to do. That is a big reason why software fails so often.

    Of course most of these "things software wasn't designed to do" aren't always documented. For instance, Outlook Express is a decent mail program, but did you know that it almost always fails when you have more than 10000 emails in your database? It is not documented anywhere by Microsoft, but they have admitted to myself and others on their tech support line that Outlook Express fails due to faults in the mail database. Their theory is that OE was never meant to be used "that much" - so you should use the "industrial strength" Outlook instead.

    If only we all knew what the true design limitations of the software we use were we would be much better off. In the physical world, this is very easy to measure. That bridge you just drove over to get to work? It has a nice little sign that says "capacity 6 tons". You would be a little nuts to drive a 40 ton cement truck over it now wouldn't you? People do that sort of thing with their computers all the time and just never know that they are doing it...

    Take care,

    Brian

    100% Linux Web Hosting - No Windows - Fanatical Technical Support - Customer Loyalty Discounts

    1. Re:Not always true... by Anonymous Coward · · Score: 0

      Outlook [not Express] also fails when you have more than 10,000 emails. In fact, give it just a few 1,000 and it slows to an absolute crawl. POS.

    2. Re:Not always true... by Anonymous Coward · · Score: 0

      Why do people always say that Word is a good word processing program? Word hasn't ever really impressed me as a good piece of software. You're talking about a word processor that gives screwed up documents frequently when moving between versions. I'd consider document formatting integrity a pretty fundamental ability of a word processor.

      The only really interesting thing that I've seen in Word that other word processors lack is the "drawable" table feature.

      I *really* don't know why people say that Outlook Express is a decent mail program. Frankly, Outlook sucks. It doesn't follow Windows UI conventions (what the *hell* is that big grey button with the mailbox name present for?) It is *the* email program that brought the world the phrase "email viruses", thanks to truly pathetic security problems (just yesterday I saw *another* executable-in-email vulnerability posted to SecurityFocus). It has some annoying feature omissions (why on earth in your Address Book isn't there a *global* name format setting? Who wants half their names sorted by first name and half by last?). It sends HTML email by default (HTML has no place in email, dammit).

      I like vm in emacs, but I hardly expect every Windows user to switch. However, Eudora and Eudora Lite knock the socks off of Outlook.

  48. Fit the Terrain? by Relic+of+the+Future · · Score: 1
    The site for a building is the slope of its land, its orientation to the sun, its local weather, other buildings nearby, etc. The "site" for a software system is its computer hardware, the operating system, any middleware (such as database or security systems), other software applications on the computer, and the style of the intended users.


    That's ludicrous. Much of the software in the world today is designed to be portable. Various hardware, multiple OSes, etc. etc. Perhaps in the age of mainframes this idea of "terrain" was appropriate, but today? Hardly.

    --
    Those who fail to understand communication protocols, are doomed to repeat them over port 80.
    1. Re:Fit the Terrain? by Axe · · Score: 1
      Much of the software in the world today is designed to be portable.

      Huh?? Hate to be rude - but in your dreams it is. Every single piece of code I worked on would have troubles being ported. And in most of the cases - nobody would care, as long as it works on intended platform.

      --
      <^>_<(ô ô)>_<^>
    2. Re:Fit the Terrain? by Anonymous Coward · · Score: 0
      The irony here is that he mentions a "large document management system" where the programmer tailored the backend database to the specific drives it would be running on.


      Ironic, because elsewhere on the internet is an inverse rant talking about this dumbass programmer who spent years tailoring the backend of their large document management system to a specific drive.


      I'd like to know if it was the same system.

  49. Bullshit! by Anonymous Coward · · Score: 0

    Think about sufficiency and cost. Most houses are built to meet our housing needs in a sufficient manner. Should houses be constructed to last 500 years and survive F5 tornadoes without any damage? How much do you think that an average sized house built to these standards might cost? The reality is that software is constructed to sufficiently satisfy business needs. That means both cost and performance. And every product has compromises. Even the ones with the best combinations of compromises are not necessarily the best selling or most profitable. Usually the products that have the best marketing and sales force behind them dominate their markets. Nimrod! Good luck finding Utopia. For more information, goto http://www.garagelogic.com/welcomingcommittee.htm.

  50. Clean code = cost savings by Anonymous Coward · · Score: 0

    For all the management out there to keep putting deadlines on things that can't be met. Think about it. If you fix something before it is released, you will save your self thousands techsupport phone calls per release! That saves money!

    Clean code means cost savings!

  51. Code aesthetics by KingAzzy · · Score: 2, Insightful

    There is a definite difference between a "Programmer" and a "Coder". Programmers are interested in the aesthetics of their engineering as well as the science behind it (the two are non-distinguishable) whereas Coders only care about getting the job done well enough so that they continue to have employment and not get fired.

    Programmers are much more expensive than coders and harder, much harder, to find for employment. Coders are very abundant. I have never seen a development department (in the 'big corporate IT world') that had more than just a small handful of true programmers, yet dozens and dozens of coders all whittling away at these massively bloated, poorly designed, inefficient, unscalable, pieces of pure SHIT that absord millions and millions of dollars from the corporate budgets.

    I don't think comparing houses and bridges to pieces of software is a very fair comparison, btw.. In construction it's quite easy to put lower skilled people to work effectively for the larger picture (doesn't take much as much skill to lay brick as it does to design the wall) than it does in coding (an inexperienced coder can virtually infect the entire project with his or her incompetence.

    These are my opinions after working in big IT for too long and perhaps after reading too much Dilbert and Slashdot.

    --

    --
    $ chown -R us:us yourbase

    1. Re:Code aesthetics by Anonymous Coward · · Score: 0

      "Coder" is a slang term for "programmer".

      What does IT have to do with software development?

  52. Code "seems" to work by tomlouie · · Score: 2, Insightful

    Hastily written code that's intended to be only a "temporary" fix never seems to be replaced with working code. The problem is that the "temporary" code isn't visibly different from more permanent code.

    The building analogy is that anyone can spot a poorly put together shack, as opposed to a carefully poured concrete foundation. Not so easy with code.

  53. Software quality is inconsistant because... by gatkinso · · Score: 1


    ...humans are the ones developing it.

    Once a means of expressing unambiguous software requirements to a computer is developed machines will do all of our "development".

    Modern programming languages are merely a step in this direction.

    --
    I am very small, utmostly microscopic.
  54. You Retard by newt_sd · · Score: 1

    Is this your first day in the wide world of business. Good luck with this mission. I agree with you don't get me wrong but come on unless you don't care about turning a profit their is no incentive to put out quality work. I applaud everyone that takes the time to produce quality i really do but you people are few and far between.

    --
    ***I GOT NUTHIN***
  55. another interpretation by 10am-bedtime · · Score: 1
    beauty is in the eye of the beholder. beauty is an act of recognition, in essence, a verb. an artifact of process can have hints of the beautiful (or ugly) actions that go into its creation, but no more.

    if you want truly beautiful software, you have to use truly beautiful process, expose the process, and help both purveyors and surveyors educate themselves to refine their aesthetic.

    this article is itself ugly to me because (1) some weird-ass language example; (2) strange formatting that causes "?" to appear in unexpected places; (3) overfocus on the artifact. (feel free to disagree w/ my aesthetic.)

    IMHO, admonishing people to write beautiful software is almost as much a waste of time as commenting on such endeavor.... :-/

  56. XP! by Proud+Geek · · Score: 4, Insightful

    That is why we have advanced software engineering techniques like eXtreme Programming. Through it's constant refactoring it makes sure that code is always the best it can be for the task at hand, and constantly improving.

    The only reason that so much code is ugly is that most people do not know about and adopt XP. XP closely resembles the reality of Open Source programming in its implement-now mentality and constant addition of features. If everyone used XP, the software world would be a better place!

    --

    Even Slashdot wants to hide some things

    1. Re:XP! by FortKnox · · Score: 1

      [OT]:
      Man, M$ has destroyed that acronym (XP). Maybe extreme programming should switch to ExtProg?

      --
      Good quote, too many chars. Seriously, the slashdot 120 char limit sucks!
    2. Re:XP! by Lumpish+Scholar · · Score: 3, Insightful

      The only reason that so much code is ugly is that most people do not know about and adopt XP.

      Extreme Programming (still abbreviated XP, despite Microsoft's attempt to dilute the abbreviation) may have a lot to offer many software development projects. But Kent Beck and Ward Cunningham and Ron Jeffries were capable of writing beautiful software before XP was codified, and programmers in XP projects are capable of writing ugly software.

      Refactoring backed by unit tests (two XP practices) can help reduce software entropy, and keep software from becoming ugly; granted. But XP extremism helps no one.

      --
      Stupid job ads, weird spam, occasional insight at
    3. Re:XP! by Anonymous Coward · · Score: 0
      programmers in XP projects are capable of writing ugly software.


      Yes, and XP works anyway.

    4. Re:XP! by roseman · · Score: 1

      That is a bit of a stretch; no methodology suits all situations, and XP certainly does not solve all problems. It does however suggest a number of good practices, many of which can help out a lot of programming teams. As of course do lots of other methodologies.

      One of the approaches that XP adopts that may be a big help towards writing readable code is pair programming. You're a lot likely to get away with shortcuts if you've got someone working with you, who will know what shortcuts you take.

      This won't always happen of course (take the situation of two hotshot programmers, each trying to out-cool the other), but this, and other techniques, such as code reviews, team leaders who preach (and practice!) good coding standards, can be a big help.

    5. Re:XP! by chipuni · · Score: 3, Informative
      This is not a blast against XP. I think that XP has a number of good ideas. However, XP is not a silver bullet .

      If you're interested in learning to be a better programmer, learn from many methodologies. The following are some of the books in my collection:

      Journey of the Software Professional: A Sociology of Software Development by Luke Hohmann (Prentice Hall, 1997) goes through many of the ideas that make up Extreme Programming, and lets you pick the best choices for your own team.

      201 Principles of Software Development by Alan M. Davis (McGraw-Hill, 1995) is a collection of 201 very simple principles, short-short essays, and links to other books. It's an easy afternoon read that will change your world.

      The Unified Software Development Process by Ivar Jacobson, Grady Booch, and James Rumbaugh (Addison-Wesley, 1999) is a software development book that I trust far more than Extreme Programming.

      Constructing Superior Software edited by Paul C. Clements (Macmillian Technical Publishing, 2000) is an excellent collection of essays about constructing software.

      Regardless of whether you choose the books in my collection or other books, I strongly suggest that you read more than one methodology.

      --
      Never play leapfrog with a unicorn. Or a juggernaut.
    6. Re:XP! by circletimessquare · · Score: 1, Offtopic

      If everyone used XP, the software world would be a better place!

      OK, who let Mr. Gates post on Slashdot? ;-)

      From Proud Geek's bio:

      I am an experienced web developer and Perl hacker. It's great; I get laid to have fun and use Linux all day!


      OK, this is definitely not Bill's profile.

      You are lucky Proud Geek! My code would be the most aesthetically pleasing code in the world if I could get "laid" to use Linux all day and not just "paid." (Cheers, no meanness meant ;-)

      --
      intellectual property law is philosophically incoherent. it is your moral duty to ignore it or sabotage it
  57. Structures have by-laws to follow. by GoofyBoy · · Score: 2

    >If software design were as visible as a bridge or house, we would be hiding our heads in shame.

    You really should look more closely at homes/buildings.

    They are just barely made to meet some local standards. Its a challange of how to build it as cheaply possible while getting as close to the standards as possible. When they build it, even architects, they do it for money. Very rarely when you get a client who wants to build something for art's sake. Even then they are limited by local community standards.

    The difference between building a structure and software is that there are years of legal laws you have to follow because building and bridges in the past were "ugly".

    --
    The surprise isn't how often we make bad choices; the surprise is how seldom they defeat us.
    1. Re:Structures have by-laws to follow. by Anonymous Coward · · Score: 0

      It's not because they were "ugly", it's because they fell down.

    2. Re:Structures have by-laws to follow. by GoofyBoy · · Score: 2

      The word "ugly" was in quotes because the person who submitted the story had that as the criteria of a good structure.

      I'm just trying to say that they are highly regulated, not because builders strive for "beauty". They are forced to.

      --
      The surprise isn't how often we make bad choices; the surprise is how seldom they defeat us.
  58. Oh Yeah... by Greyfox · · Score: 2
    Try telling your manager sometime that you want to redesign a piece of code because "It's aesthetically displeasing" or because "The design sucks." He'll laugh you out of the office and quite possibly the company. Nevermind that you were right or that your redesign would drastically improve maintability and probably speed things up. Managers don't want good code. They want code that you can squat and shit as quickly as possible because the only metric they look at is the deadline. It may not smell good. It may self destruct in a few months. It will certainly keep your team in "fireman mode" for the rest of the time they're at the company, but by God it made the deadline and that's all that counts.

    Just to make matters worse, a lot of managers believe that if they give their programming teams Rational Rose or Visual C++ or whatever, that those tools will magically make the code the team is producing well designed. Well if you give a monkey a computer, he's still a monkey and you won't get anything out of him at the day except a bunch of monkey shit. Most of the commercial code I've ever seen has been monkey shit. Ironically open source code tends to have a much lower monkey shit ratio because the programmers don't have time constrains and care to get their design right.

    --

    I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

    1. Re:Oh Yeah... by Yunzil · · Score: 1
      Try telling your manager sometime that you want to redesign a piece of code because "It's aesthetically displeasing" or because "The design sucks."


      Actually, I have, and he said OK. You need a better job. :)

  59. Beauty is the code (enhance, embrace, and extend) by awerg · · Score: 2, Interesting

    If you are under the misguided notion that you can write S#!% for code and it doesn't matter, then you will not last long in this world.

    Computer programming is not only about making it work, but making your program work well and be maintainable. Sloppy code and poor structure makes maintaining, enhancing, embracing, and extending the code a royal pain in the @$$.

    Don't fall into the trap of thinking that you are the only one who can fix your code. Someone else has already written it before you and doena better job. Everyone is replaceable. Besides why not make great code and do it well. How much time does it take to make clean and structured code?

    Litmus test of a website. Read the source of the first page. Is it clean, does it have extra lines, are there mixed case tags, is the formatting consistent?

    These are the ways to judge the results.

    Masters make the simple easy and the difficult simple.

    --
    -- Andy
  60. features vs bugs by josepha48 · · Score: 2

    The problem is that while software developers may want to fix the bugs and make it work nice and all, the managers generally want to make money and the only way to sell a product is through new features. Usually adding in features after an application has been developed makes an app a nightmare to work on and harder to debug.

    --

    Only 'flamers' flame!

    1. Re:features vs bugs by Kalani · · Score: 1

      Usually adding in features after an application has been developed makes an app a nightmare to work on and harder to debug.

      Which, in the end, equates to lower profits. I've explained this to the financial folks at my company and they're all for it. In fact, I suggested that other programmers verify that my code is readable, maintainable, and well designed. That's now part of standard practice here.

      --
      ___
      The ends are ape-chosen, only the means are man's. -- Aldous Huxley
    2. Re:features vs bugs by josepha48 · · Score: 2
      How old is your code?

      This is fine foe new code and new designs, but when you are talking about a company that has over 3000 programs that are over 40 pages each, each little enhancement adds another if statement here and a switch statement there. The amount of time to do a fix / enhancement is much less often than to do a rewrite.

      Just because the code is readable and understandable does not mean it does not become a nightmare to work with.

      Take mozilla / or linux kernel projects. While the code may be nicely written it is not always easy to debug that many lines of code, especially for someone new to the source.

      --

      Only 'flamers' flame!

    3. Re:features vs bugs by Kalani · · Score: 1

      That's part of the "beauty" in "beautiful code." If the application is relatively easy to extend (say ... adding an entry to a function table at startup along with descriptors for calling the function rather than inserting all sorts of special case code all over the place,) you'll be able to fix/enhance quicker than wasting time with bad code or with rewriting the entire thing.

      It's not about a single instance of fixing/enhancing either, it's about doing that over time. I'm sure that if you've tried to extend poorly designed programs, you appreciate well written code.

      --
      ___
      The ends are ape-chosen, only the means are man's. -- Aldous Huxley
    4. Re:features vs bugs by josepha48 · · Score: 2
      I am talking about extending poorly written code. Imagine an application that is 20 years old and feature rich and extremely badly designed. Then imagine bug fixing it and adding new features.

      Hey if it was like appache where there was a base and each new module was an actual module that was added through a config file then I would have no problem with it, but it is not.

      imagine now an executable that is statically linked and over 55Megs in diameter ;-).

      So how do you go from a nightmae legacy design to a moden design with that kind of beast?

      --

      Only 'flamers' flame!

    5. Re:features vs bugs by Kalani · · Score: 1

      So how do you go from a nightmae legacy design to a moden design with that kind of beast?

      You rewrite the program.

      My argument was that programs should be well designed from the outset. It's always going to be a huge amount of work to rewrite huge legacy applications if it's required. It's also going to be a huge amount of work to clean up a disaster (see Mozilla or the Hindenbergh).

      From what I know (which may not be much at all), more time is usually saved by rewriting those programs completely (if they truly are that bad).

      --
      ___
      The ends are ape-chosen, only the means are man's. -- Aldous Huxley
    6. Re:features vs bugs by josepha48 · · Score: 2

      Yea I am trying to get management into doing a rewrite, so how do you convince management to do a rewrite???

      --

      Only 'flamers' flame!

    7. Re:features vs bugs by Kalani · · Score: 1

      so how do you convince management to do a rewrite?

      There are two primary methods. The first is to appeal to their reason. Let them know roughly how much money they're losing by not having a properly implemented system in place and about how long they'll need to suffer in the interim while the new system is being developed. The second method is to tie them down to a plank and pull off their fingernails until they consent.

      --
      ___
      The ends are ape-chosen, only the means are man's. -- Aldous Huxley
  61. Planning and review save time and money by tim_maroney · · Score: 5, Insightful

    Every extra day that I take to plan, every minute I spend thinking about design, and every extra line of code I write to make my software more pleasing is another line that could add more functionality, another minute wasted not producing something tangible, and another day that I need to be paid.

    That is an absolutely absurd statement. Every moment spent in planning, review, consideration of potential problems, creation of general-purpose solutions, and documentation of architecture pays for itself many times over later in the development, validation, release and maintenance cycles. Failure to undertake sensible planning activities early in a project leads to massive schedule delays from forced late-game rearchitectures that would have been headed off by early consideration, review and communication.

    Software engineering is the only engineering discipline in which the practitioners are permitted to indulge themselves in work without planning or review, and that's the #1 reason that software sucks.

    Tim

    1. Re:Planning and review save time and money by NineNine · · Score: 1

      Software engineering is the only engineering discipline in which the practitioners are permitted to indulge themselves in work without planning or review, and that's the #1 reason that software sucks.

      For most of us with jobs, "being permitted to indulge" has nothing to do with it. I have to do what I'm told. That's usually slam out code as fast as I can, and ignore design altogether. It sucks, but so does life.

    2. Re:Planning and review save time and money by Anonymous Coward · · Score: 0

      Every moment spent in planning, review, consideration of potential problems, creation of general-purpose solutions, and documentation of architecture pays for itself many times over later in the development, validation, release and maintenance cycles.


      Wait--if this were true, then (proof by induction) you would never do anything but plan.


      In other words, I think you're missing the point of this argument: the trick in software development is to know when to stop designing and when to start building. What makes it especially difficult is that to plan version 2.0 it is essential to build version 1.0.

  62. Writing software is writing... by swm · · Score: 2
    Writing software is writing, and the fact is that most people don't write very well.

    Long subroutines are run-on sentences discusses one aspect of this problem.

  63. Bad analogy. by Dasein · · Score: 2, Insightful

    Building software and physical structures are two entirely different things:

    1) The customer of a construction company is unlikely to decide that their cute split-level should now be a super mall after construction is underway. It isn't unusual to see the equivalent happen in software.

    2) The "Mythical Man Month" presents a pretty good argument about fundamental complexity Vs. accidental complexity. It would be a good thing to think about.

    3) Because everyone has a passing familiarity with the physical world things that aren't right get pointed out fairly quickly. In my experience is that about 20-30% of programmers can cut through the symptoms and treat the cause. Everybody else goes around plastering over cracks instead of realizing that the foundation is crumbling.

    My two cents.

    --
    You are not a beautiful or unique snowflake -- but you could be if you got off your ass.
  64. Next on 20/20? by petej · · Score: 1

    Seen a network tabloid like 20/20 or Dateline lately? Houses are built like crap. We should aspire to something better.

  65. Frustrated artists by geophile · · Score: 2
    In all development shops I've seen it is very difficult to write beautiful code. I find myself getting the job during the day, and writing my own beautiful code, for my own projects, in my spare time. I imagine my feelings about this are not too far from that of a serious musician earning money by playing bar mitzvahs, or novelists writing ad copy.

    Anyway, here are the reasons why writing beautiful code at work doesn't happen:

    • Deadlines. If it ain't broke don't fix it.
    • Too many cooks. Someone else touches my code and they don't follow my coding style. Even worse, the offender doesn't follow any consistent style at all.
    • The original designer did a crappy job. Which is just another version of If it ain't broke don't fix it.
    • No time for re-factoring, even after requirements change, or you just realize better ways to meet the original requirements.

    Oh well, time to make more sausage.
  66. Specs Sucks! by Anonymous Coward · · Score: 1, Insightful

    I'll start writing code as beautiful as a bridge when management stops changing the requirements throughout the programming process. How many bridges do you think would look good and be stable if half way through the construction one person decided it needed three more lanes, another felt it should be double decked and yet another added the requirement that it be one way. Software sucks 90% of the time because the requirement specs suck. And no one every looks at a bridge that is 70% complete and says "This looks good enough for now, let's start using it and work out the kinks as we go" like they with software.

    I agree, most code look horrible and is a terrible mess, but that is a side effect of external forces, not because programmers need to be inspired to write clean beautiful code by some article.

    1. Re:Specs Sucks! by papa248 · · Score: 1

      Perhaps that's true... but at least in building a bridge, or in any engineering, someone verifies the spec, and goal before some idiot starts pouring concrete. The whole software process is flawed--the engineers just take it with stride and create a faulty product, instead of trying to make it work.

      --


      The higher, the fewer.
  67. the general public would write -worse- software by Splork · · Score: 1

    Even if they could see it, they wouldn't understand it. The general public wouldn't even be able to write software.

    Software that -needs- to be as relaible as the golden gate bridge is. It runs medical equipment, aircraft control systems, etc. Your word processor is irrelevant.

  68. Poor Analogies by Anonymous Coward · · Score: 0

    Sorry but the comparison between a house and software doesn't really hold water. First off a house is a mostly static environment: floors, walls and ceilings just have to be, they don't have to respond. Software has to respond. Its in this response that problems arrise. I'm willing to bet that most code that turns out ugly started out pretty (I did say most not all) and it was when unforseen events occur that the software needed to react to, kludges and hacks were inserted to take care of them. Thus creating the ugliness. No one ever asked a wall to prevent a person from doing something stupid to it but everyone always expects software to do that very thing.

  69. Half right. by antis0c · · Score: 2

    It's half right to say we should engineer software like we engineer physical aspects of our lives such as bridges, houses, skyrises, etc.

    However.. Bridges, Houses, Skyrises, all are slow moving, slow changed things. House "technology" doesn't suddenly double every 18 months. Otherwise we'd be like the Jetsons with houses into the sky, and talking dogs. Bridges are engineered to last for a very long time, because they do a simple, easy function. They provide land where there is none to travel on.

    Software and Hardware however does. If you talk to a lot of software engineers, professors, etc. They'll all usually say not to worry about performance, next years computers will run it twice as fast anyway. This is very true at Microsoft. And its partially correct. Why bother spending a ton of time trying to make something work fast, when during the time you took to make it work fast, chips have doubled in speed?

    However I do beleive we need to up the standards because of other issues, not longevity, but security, and functionality. Sloppy code leads to sloppy security. Just install a fresh copy of Windows, you pick a version. Unless you patch it, there are already a handful of security issues. Last time I installed OpenBSD, I don't remember going "I have to hurry up and patch this, and this, and this otherwise I'll get hacked." It's because the OpenBSD development crew beleives in coding properly. They don't audit for security, they audit for proper usage. And thats what we should be striving for. Engineering our software applications, and using the tools to do so, the correct way.

    --

    ..There's a-dooin's a-transpirin'
    1. Re:Half right. by papa248 · · Score: 1

      Bridges are engineered to last for a very long time, because they do a simple, easy function.
      I think the Structural and Civil Engineers here will disagree. (I am a Mechanical Engr.)

      Besides, Windows does a simple task in my mind. It lets me run Word and Excel where I ordinarily couldn't. It allows me to access the Internet.
      Sloppy code leads to sloppy security. Just install a fresh copy of Windows, you pick a version.
      Yeah, right. And that's not as much of a pain in the backside as waiting in traffic, or in road construction due to a poorly engineered bridge? You don't see the DOT rebuilding bridges that crash every day, or that need to be completely bulldozed and reinstalled once a month? Come on now... you want that title of "Engineer" attached to "Computer" or "Software" then you need to start acting like one.
      --


      The higher, the fewer.
    2. Re:Half right. by kryzx · · Score: 1

      Longevity *can* be an issue. There is a shocking amount of code still in use from the 1970's, mostly Fortran and Cobol. I have personally had the misfortune of having to update code last modified in 1977. I know it's hard to believe, but there is a ton of it out there.

      A programmer needs to realize that when he/she creates a program it becomes a living thing that
      may be around for a long time, may be handled by many people, and may be used for things the original programmer never imagined. Good programmers who keep this in mind make the process easier for everyone.

      --
      "I don't know half of you half as well as I should like, and I like less than half of you half as well as you deserve."
  70. The analogy to bridges... by Anonymous Coward · · Score: 0

    ...was an interesting one. Where I work we did a bit of research into the structural integrity of bridges-turns out more than half in the U.S. need major repairs, 3000 in Cali alone. And inspecting bridges is normally done visually-but nobody's done research on whether a person's eyes affect how well the bridge comes out in the inspection. So we do cross bridges like this every day, but like software we just don't know the quality is lacking.

    I think it's just that every field is like this when it's done to earn a living. Maybe the difference between work and hobby is the hobby is where you can do things right, not just right now.

  71. To paraphrase Louis Black... by ghost. · · Score: 1


    If I built a roof on somebody's house the way I write code...I'd still be doing time.

    --
    Bush is a cylon.
    1. Re:To paraphrase Louis Black... by ahde · · Score: 1

      your bond doesn't go up.

  72. Ummm No.. There's a HUGE Difference..... by Havokmon · · Score: 1
    ..Between Architectual Engineers and Software Engineers.

    If you build a faulty bridge, people die.
    If you write bad code, the user pushes button.

    It may be a bit simplistic but it puts things into perspective.

    Today's Dilbert in the local paper:
    "Upper Management says profits are down because of the slow economy."
    "So, when profits are up, it's because of good management. But when profits are down, it's because of a slow economy?"
    "These meeting would go much faster if you wouldn't put things into perspective like that."

    --
    "I can't give you a brain, so I'll give you a diploma" - The Great Oz (blatently stolen sig)
  73. Extreme Programming. by wolf- · · Score: 1

    Try looking into "Extreme Programming" concepts.

    www.extremeprogramming.org
    www.xprogramming.com

    --
    ----- LoboSoft specializes in Digital Language Lab
  74. Two most important lessons I have learned... by toupsie · · Score: 2

    1) If it works, not fix it.
    2) Any landing you can walk away from is a good landing.
    If you apply these two lessons to software design, you never have a problem.

    --
    Strange women lying in ponds distributing swords is no basis for a system of government.
    1. Re:Two most important lessons I have learned... by fobbman · · Score: 2

      "1) If it works, not fix it."

      1a)If it works, keep adding features until it doesn't.

  75. Oh please by JohnTheFisherman · · Score: 2

    I remember reading a quote from a famous software scientist (I forget who, maybe Turing?) who said (and I paraphrase here) that we shouldn't be teaching our your computer scientists maths, physics, engineering etc, but rather art and biology. Because programming is an art, it's the creation of something from your own imagination, not like engineering which is simply applying rules. And once created, any large application behaves far more like a living organism than a machine, it grows, it evolves and (often) it gets ill. I always liked that idea :-)

    Engineering just applying rules, yet programming is an art? Is this your editorializing or the original quote? Somebody needs a smack from a slide ruler. ;)

    1. Re:Oh please by radish · · Score: 2


      My wording is not spot on, but that was the basic gist of the quote, yes. I probably expressed it badly, but I think there is an intrinsic difference between the two. The rest of the quote went on to explain the viewpoint some more, but I don't remember it well enough to have included it in my original post.

      I wish I'd saved it now!

      --

      ---- Den ene knappen er powerknapp, den andre er Bender voice knapp "Bite My Shiny Metal Ass"

  76. Don't scoff by fractalus · · Score: 1

    Those of you who scoff and say you don't have time to implement good software are shooting yourselves in the foot.

    Where I work, we've developed a lot of code. We re-use as much as we can. And because a lot of our code isn't simple/elegant/pretty, it takes us more time to re-use that code than it should. It's still faster than rewriting the code but it's nowhere near as effective as it could be.

    So earlier this year I began pushing for a major project to refactor and clean up this code. Already the initial stages of this project (implemented by several programmers on our staff) have yielded huge gains in how quickly we can develop stuff. As we continue to clean and simplify, these gains increase.

    This is real-world. We have deadlines just as impossible as anyone else. We're doing this effort so that we can meet these deadlines on more and more projects.

    If you ever plan on using that code again, write it clean. You'll thank yourself later.

    --
    People are never as simple as their stereotypes. This applies equally to Christians, Muslims, and Emacs-lovers.
    1. Re:Don't scoff by kurowski · · Score: 1
      If you ever plan on using that code again, write it clean. You'll thank yourself later.
      Hell, why limit yourself? Much code gets used long past it's intended lifetime, and gets inherited and maintained by people who had nothing to do with it. Writing ugly code for something you think is temporary can end up getting your name cursed by the poor schmoe who is told to add a feature to it.

      Spend some time learning how to write clean code and make it a habit. The world will be a better place for it. You will gain the respect of your peers and coworkers. Women will love you and men will fear you. Presidents will bow at your feet and churches will spring up to worship you.

      Or, at the very least, the poor schmoe who inherits your last project won't curse your name.

  77. software manager managing bridge architects... by Anonymous Coward · · Score: 1, Insightful

    manager -> we need to ship this bridge in 3 months.
    engineer -> yes, but it's really big and really important
    manager -> yes, but it has to ship in 3 months.
    engineer -> so how much weight does it need to support?
    manager -> i dunno, I'll let you known in 2.9 months.
    engineer -> what is it bridging?
    manager -> why all these stupid questions, start building.
    engineer -> I should do an architectural drawing first.
    manager -> why bother, here's some metal, start slapping it together. Remember it ships in 2 months.
    engineer -> I thought you said 3 months?
    manager-> oh didn't I tell you, we heard a rumour that a competitor will be shipping their bridge in 2.5 months, so we have to beat them.

    continue forever.

    the reason there is no internal beauty is we (engineers) aren't given any time to build quality (although the argument could be made that the only way to build on schedule is by building quality). The other problem is, bugs actually translate into lucrative support contracts for most enterprise software vendors. Why improve quality? there is no revenue stream there. If users would SUE software development firms (the same way people would sue if a bridge fell when you drove on it) then vendors would suddenly find time in schedules for testing and quality.

    we do the best we can, given the pressures. My advice, try to learn to say "no" to your manager once in a while, and hire a QA manager with balls who won't let shitty software ship.

  78. Richard Gabriel, software aesthetics, and patterns by alispguru · · Score: 2
    Go look here for Richard Gabriel's ideas on this subject. In particular check out the Feyerabend project and one of his many "worse is better" essays, which has this to say about the current pattern movement and its effect on software aesthetics:
    More disappointing is witnessing this same effect at work in the patterns community. Christopher Alexander's ideas of patterns has as its smallest part the pattern form--the concept of patterns really has to do with pattern languages and QWAN (the Quality Without a Name). It is not about con-struction tricks. It is about building artifacts not only suitable for human habitation, but artifacts that increase their human inhabitants' feeling of life and wholeness. Alexander is all about beauty and quality, not about how to stick things together cleverly.

    Yet, the most popular form of software patterns is exemplified by those found in "Design Patterns," by Gamma, Helm, Johnson, and Vlissides, which contains little more than techniques for coding in C++ constructs found in other programming languages--for example, 16 of the 23 patterns represent constructs found in the Common Lisp language. There is no pattern language involved, and there is nothing about QWAN. Interest in patterns is coagulating around the so-called Gang of Four style, and it looks like things could get worse. In fact, I would say that patterns are alive and well as a form of documentation and a quest for clever solutions to common programming problems, and pattern languages, QWAN, and the quest for a better future are now on their way to the sewage treatment plant--the same place they went to in the world of architecture. Down with quality, up with clever hacks. Why worry about what makes a user interface beautiful and usable when you can wonder how to do mapcar in C++.
    --

    To a Lisp hacker, XML is S-expressions in drag.
  79. Give me a break by SpacePunk · · Score: 1

    If people could see the construction of their houses without paint, paneling, dry wall, etc... getting in the way they'd crap themselves. If people could crawl underneath bridges and see the corrosion and bird shit they'd crap themselves also. Software is suppose to work and be outwardly pleasing. Nobody gives a flying fuck if the code is beutifull on the inside. Just as nobody gives a fuck if a fat person or thin person is beutifull on the inside. Anybody who compares software engineering to physical engineering needs to have their heads examined then set apon with a ball peen hammer.

  80. Wonderful-Comparisons between software and bridges by sudog · · Score: 1

    So let's extend this analogy just a little shall we? How many moving parts does a plain bridge have? What sorts of user interaction is there aside from walking on it?

    If I had a program and all it did was add 2 to every number I gave it--well duh! There's the equivalent of a simple archway over a stream.

    But what about vehicles, automobiles? Machinery? Robotics? You think those systems don't have specific limitations in them? You think if you drive the wrong way down a one-way street, it's the car's duty to turn you back around again? No--and in a head-on collision, the best a car can do is crumple and absorb the impact of your stupidity, or flatten the opposing vehicle. The car is then a write-off. Period. Yet it sounds to me like you expect software to bounce back and survive catastrophy.

    If a bridge is built for x lbs of weight on it, and you dump 5x right in the middle, you think the bridge is going to be okay after that? But software should be able to. Ah. I see.

    Large software systems are so completely different from real-world systems that comparing them is silly. (And is that Visual Basic I see there to try to prove your case with?)

  81. Did anyone notice... by The+Slashdolt · · Score: 1

    That in the revision history that this is the 3rd version of this paper in almost 3 years?
    So it takes him almost 3 years to write a 10 paragraph essay with some VB code mixed in, and he is telling us we need to do better? Nice example Mr. Author.

    --
    mp3's are only for those with bad memories
    1. Re:Did anyone notice... by wolf- · · Score: 1

      Dude! I wrote nearly the same reply, then thought it was too harsh. But after reading your reply, I think I was mistaken. Your point is well taken.

      --
      ----- LoboSoft specializes in Digital Language Lab
  82. A better look by Lumpish+Scholar · · Score: 5, Interesting

    The cited article doesn't say anything profound. (I got particularly worried when he said, "global variables and GOTO statements ... may be exactly what the software needs to marry form with function," and when his example of beautiful software turned out to be a fragment of Visual Basic. "It is practically impossible to teach good programming to students that have had a prior exposure to BASIC: as potential programmers they are mentally mutilated beyond hope of regeneration." --said, tongue at most partly in cheek, by Edsger W. Dijkstra, in "How do we tell truths that might hurt?")

    Richard P. Gabriel (whose essay on "Mob Programming" was recently discussed on Slashdot) has a far more profound take on the subject. He has a summary of Christopher Alexander's work on architecture and "The Quality Without A Name," and how it relates to software; you can read the PDF version on his Web site, or Google's cached text version.

    Excerpts: "there are programs we can look at and about which we say, 'no way I'm maintaining that kluge' ... and there are other programs about which we can say, 'wow, who wrote this!'" He suggests how you can recognize software with The Quality: "every part of the code is transparently clear -- there are no sections that are obscure to gain effciency; everything about it seems familiar; I can imagine changing it, adding some functionality; I am not afraid of it, I will remember it." There are even suggestions, not how to make more beautiful software, but how to learn to do so.

    Gabriel helped start the "patterns movement" in the object-oriented community. Aside from the Design Patterns book, patterns (and especially generative pattern languages) have yet to make a significant inpact on software development. Maybe someday, maybe not.

    --
    Stupid job ads, weird spam, occasional insight at
    1. Re:A better look by Bodrius · · Score: 1


      Visual Basic is NOT BASIC. It's hard to overstate this. It is NOT the BASIC Dijkstra was talking about, and it doesn't even share the same problems.

      Yes, it is a mediocre programming language and it, too, mutilates programmers, but in a different way (I have been exposed to both, I hope the damage is not permanent).

      Visual Basic's problems are different from BASIC's, and although it is possible to fall into some of the BASIC pits, I don't think it is more so than C, for that matter.

      Visual Basics (particularly VBA) problems include:
      - Inconsistency (damn thing behaves differently on every computer, application, OS version, etcetera, and the changes in the objects versus the changes in the code are not always coherent).
      - Pathetic input/output system
      - Poorly documented (partially compensated by the huge userbase, but the help usually comes in code with no explanation of why it works).
      - A "magic word" feeling. If you know the "magic words" (undocumented functions or constants, etc) everything has been done for you. If you don't, you cannot do your job.

      Most of these, I guess, comes from a disturbingly polluted namespace you cannot get rid of.

      You end up feeling that you have to work for the language rather than the other way around, and you end up with an enormous set of undocumented libraries and great difficulties to create your own. The "programmer" is like a monkey in a weapons arsenal, looking for something to scratch his back.

      The problem with BASIC is just that it encourages quick, not-well-thought, non-structured programming.

      BASIC creates bad programmers. Visual Basic creates people who know how to make a function call, and consider themselves "programmers".

      --
      Freedom is the freedom to say 2+2=4, everything else follows...
    2. Re:A better look by Callitrax · · Score: 0, Flamebait

      every part of the code is transparently clear -- there are no sections that are obscure to gain effciency
      That would be code I would be embarrassed to write.
      As an illustration take these two math functions as an example:
      F(x) = .46x^3 - 1.4x^2 + 2.4x -.3
      G(x) = ((.46x - 1.4)x + 2.4)x - .3
      F(x) is cleary a cubic function.
      G(x) is more obscure as to what it does.
      But if you do the math F(x)=G(x). The difference between the two forms?
      G(x) uses 3 multiplications and 3 additions
      F(x) uses 6 multiplications and 3 additions
      Any program that uses F(x) in place of G(x) does have a name associated with its quality:
      Crap!

  83. "Literate Programming" by Animats · · Score: 2

    I sometimes suspect that "literate programming" is a gimmick to get around Stanford's policy that professors can own the rights to books they write, but software they write is considered a work for hire and the property of the university.

    1. Re:"Literate Programming" by WillAdams · · Score: 1

      Try again.

      TeX is in the public domain (and intentionally so). There're a number of notable extensions to it available, in particular Han The Thanh's pdfTeX.

      William

      --
      Sphinx of black quartz, judge my vow.
    2. Re:"Literate Programming" by SamBeckett · · Score: 1

      TeX was also written in CWeb.

  84. True, but code maintainability can be critical... by Richard+Steiner · · Score: 3, Insightful

    One can certainly succeed in meeting the user's initial basic requirements by writing a pile of spaghetti, but that doesn't make the writing of such sloppy code the preferred approach, at least in the general case.

    Unless you're writing one-off programs for your customers (and how many of those end up being used over and over again?), the long-term maintainability of your code must be kept in mind at all times.

    There's (usually) no guarantee that *you* are going to be the one maintaining the code in the future, at least many settings, and the people who will have to figure out how it works in order to maintain or enhance it will be extremely grateful if you lay your code out clearly.

    So will your users, as they will have to wait a shorter amount of time before that bug is fixed or the new feature added.

    --
    Mainframe/UNIX Bit Twiddler and long time Windows/Linux Hobbyist.
    The Theorem Theorem: If If, Then Then.
  85. Justification by metaphor? by RovingSlug · · Score: 1

    Arguing by metaphor is not valid. Even so, no real evidence is given supporting the mataphor.

    "Most software design is lousy." Evidence? Support? Oh, because the second paragraph describes ugly buildings in detail?

    "Beautiful programs work better, cost less, match user needs, have fewer bugs, run faster, are easier to fix, and have a longer life span." Evidence? Support? Of those measures on "beautiful" versus "ugly" programs?

    Reading constructs like "Just as a building should be..." pisses me off. We're talking about software. Give me measures of software, not buildings. That point doesn't even apply, since evidence is given for neither.

    Gross.

  86. Re:Ummm No.. There's a HUGE Difference..... by ChiefCrazyTalk · · Score: 0

    If you are writing software to control the raising of a drawbridge, or flight control for an airplane, or a thousand other possiblities, then people can die too. There are critical pieces of software in todays world, just like there are critical (and not so critical) pieces of architecure

  87. a saying... by Anonymous Coward · · Score: 1, Interesting


    There is a chasm
    of carbon and silicon
    the software can't bridge.

  88. open source and beauty of design by frknfrk · · Score: 2

    that's the beauty of open source programming -- and one of its downfalls. with open source, we CAN look at the internals of the software, judging the design to be a kludge (most likely) or something better. i say this can be a downfall, because with this comes the burden on a programmer who wants to open source some code -- making it 'pretty' enough to be released. We saw that with slash in the early years:

    Us: 'Show us the code!'
    Rob: 'It is too ugly and I do not want it seen yet.'

    (I suppose to be fair Rob's misquote should read 'Its too ugly'. Yes, the spelling is meant to be a joke.)

    --
    The REAL sam_at_caveman_dot_org is user ID 13833.
  89. how odd by Shoeboy · · Score: 0, Troll

    Sometimes, when you see some beatyfull software design, the tears start to fall.

    I've certainly worked with software that made me want to cry, but not because it was well designed.

    To steal from the Murray boys, if good code makes you cry, stay the hell away from anything on the Lifetime network. 'Cause you'll have to go on Zoloft to get over Steel Magnolias.

    Pussy.

    Your friend,
    --Shoeboy

    1. Re:how odd by Anonymous Coward · · Score: 0

      true dat, shoeboy, you would have to be one major pussy to cry over software design. like that faggot kid in American Beauty "I feel like my heart's going to burst..." PUSSY!!! SOMEBODY GET THAT FAGGOT A DRAFT BEER AND A PENTHOUSE, WE MAY BE ABLE TO SAVE HIM...

  90. Bad analogy by Anonymous Coward · · Score: 0

    Comparing software to architecture is absurd. If an architect had to build something that would be able to float on water, work in sub-zero temperatures, be stable on quicksand, and be 5 miles tall, THEN they could compare it to software. Architects deal with knowns and constants. Software design has to be able to work in so many different scenarios, often some which preclude being able to do the "pretty" thing. It has to work in the end, it doesn't have to look beautiful on the inside.

    The best design and architecture in the world still fails sometimes. People should be amazed at how much "ugly" design in software has been able to do, and do well.

    --Alex

  91. Bridges are *ugly* by Samrobb · · Score: 2
    Most software design is lousy. Most software is so bad, in fact, that if it were a bridge, no one in his or her right mind would walk across it... Instead of trying to create software that works in a minimal sense, we should be creating software that has internal beauty.

    If you want to follow your bridge analogy, then get out and take a look at a real bridge. Quite frankly, there's nothing very "beautiful" about it, except in an abstract sense, and even then, most likely from a distance. If you get right up close to it, you'll see rust spots, cracks, welds, patches, odd and seemingly arbitrary scars, and other features that look entirely out of place on a bridge... until you see an inspector's scaffolding hanging from the knobs you thought served no useful purpose.

    In other words, by your standards, bridges are a friggin mess. Really... I mean, they have no "internal beauty", once you're close enough to see how they're put together.

    Just like software.

    The folks using the bridge don't care about it's internal beauty, except peripherally... they care that the hunk o' steel and concrete under them doesn't give way and dump them into a river. Similarly, the folks using software don't care about it's internal beauty, as long as it doesn't give way and dump their data into oblivion.

    In fact, the only people who really manage to care at all about how bridges are put together are the people who build 'em. The same goes for software. There are plenty of reasons to write clear, easy to understand, well-documented code, without having to resort to some sort of appeal to a completely subjective quality like "beauty"; and there are plenty of ways to write high quality, reliable, high-performance software without making the same sort of subjective appeal. (Note that there is a difference, IMHO, between beautiful code and elegant code. I've seen some quite elegant hacks that had particularly butt-ugly implementations.)

    I'll go as far as to argue that while there are exceptions, generally, good software does not come from pretty code. Think about it - when your code is "beautful", first and foremost, that means that eventually you'll sacrifice reliability or functionality rather than produce "ugly" code. I'd rather ahve my source code be ugly and correct than beautiful and full of bugs any day of the week.

    --
    "Great men are not always wise: neither do the aged understand judgement." Job 32:9
  92. Give me a break. by Anonymous Coward · · Score: 0

    Don't blame the developers, blame the guys forcing timelines. The managers and the guys at the top of the monkey-tree doing the support, the analysts, and the pink-slip nervous bastards who breath down your neck in quiet harrassment ... they're guilty too. Bad design propagates down.

    A good carpenter never blames his tools. A good manager never blames his developers. A good developer doesn't give a flying fu^^ about design, because ... it comes naturally.

    Bit-wise and envied, with just enough cliché.

    Guck

  93. Right now.. by Axe · · Score: 1

    ..right now I am *supposed* to sit tight and fix a boatload of old, ugly code, apparently written by a crack addict. I know how to make it nice, tight, fast and clean - but they would not let me. Old one passed some joke of a QA, and nobody wants to commit their ass into rewrite - in this times the universal question is "what if it fails and I get laid off".. Sucks. I hate every line I look at, and use every bug as an excuse to clean up part of it..

    --
    <^>_<(ô ô)>_<^>
  94. Simplicity by istartedi · · Score: 2

    ...Simple programs have fewer bugs (because there are fewer lines of code which can be wrong), run faster (because there are fewer machine instructions)...

    int main(void)
    {
    unsigned long *foo,i;
    for (i=0;i<0xFFFFFFFFUL;++i)
    for (;;)
    {
    *(++foo)=0;
    }
    }

    Well, so much for those arguments. :)

    --
    For all intensive purposes, "whom" is no longer a word. That begs the question, "who cares"?
    1. Re:Simplicity by jedwards · · Score: 1

      that should be

      void main(void)

    2. Re:Simplicity by Plasmoid · · Score: 1

      Dude, your program isn't portable nor will it run ;)

      0xFFFFFFFFUL vs INT_MAX

      You might not be on a 32bit architecture.

      Also, foo doesn't point to anything, you haven't initialized it. Your program will almost certainly seg on the first iteration of the loop. Plus even if you did correctly initialize it you would miss the first unsigned long.

      You also have too many for loops. 1 would be sufficient, but yours will never end.

      You added complexity dude ;)

      --
      You don't exist. Go away. --SysVinit Halt
    3. Re:Simplicity by Anonymous Coward · · Score: 0

      Oh what a tragic waste of good humour.

      You appear to be missing a point or several.

  95. No financial incentive for good software by TWR · · Score: 2
    Software quality will not improve until there is a financial reason for it to do so. Build something physical which is of poor quality and you're likely to be sued and/or imprisoned when it fails.


    Build software poorly, and you not only lock a client into a system that's so bad no one else can replace you, but you get lots of billable hours trying to fix bugs and upgrade the software.


    When lemon laws apply to software (and they should!), hiring people to write software who are actually competent will follow.


    -jon

    --

    Remember Amalek.

    1. Re:No financial incentive for good software by mrbuckles · · Score: 1
      Actually, I would argue that there is a very real financial incentive to well designed software. Namely, it is easier to maintain and extend.


      The problem I've seen (and this is from building in-house software for, say, banks) is that the managers of software projects don't understand this fact. They only understand the known relationship between time spent on a project and cost. They don't figure the time that will be spent AFTER initial coding.


      The amazing thing about all of that is that there are thousands and thousands of pages of studies done on these very topics. Books are written every year to discuss this. It's a field of study unto itself. Yet, most managers you work for will still believe if you're behind on a project you should double the number of people working on it to get done twice as fast. At some point, the responsibility for these problems needs to be pushed up to people who can do something about it.

    2. Re:No financial incentive for good software by Bullschmidt · · Score: 1

      This arguement suffers from one problem. Its called the "Not my problem" problem. Given the amount of rotation in staff and projects, quite often, the person who originally wrote the code need not maintain it. So they can write code poorly, as long as they can understand it at the time of writing. Even if they do come back much later, they still only need to write it to the minimum clarity level that they will need, which is far less than the random schmo that comes along later to maintain it.

      --
      "Of all days, the day on which one has not laughed is the most surely the one wasted." -Sebastian Roch Nicol
  96. Programming Languages by GCP · · Score: 2, Interesting

    Part of the problem is the nature of programming languages.

    A tool like C++ would never be tolerated in the world of bridge building. Too prone to invisible screwups.

    Eiffel is an example of the sort of tool bridge builders might use. Eiffel will never succeed, though, because of the perverse nature of the programming tools market.

    1) Programmers love the mental challenge of mastering systems of arcane, complex rules. It's a macho thing. They don't automatically reject monstrosities like C++, as bridge builders would, because to do so makes them sound wimpy. ("I don't know what you're talking about, it's not hard for *me*....")

    2) Also, if programmers were to lose their careers over a single "crasher" bug, as bridge builders would, even they would reject C++ and go for something like an ubersafe Eiffel.

    3) There's tremendous language inertia in programming languages (though not as much as in bridge building technologies.) There may be thousands of programming languages out there, but most are virtually off-limits for practical projects. That's why things like C++ grow so much tangled hair. It's easier to learn one more round of gotchas than to learn a whole new language, buy and master all new tools, and change jobs to a company using the new language.

    If I created a really great new language, would it become popular? I'll take the 1 in a thousand risk of being wrong and state flatly "No."

    As long as we're programming with the languages we use, we'll have the level of bugs we have.

    --
    "Those who have never entered upon scientific pursuits know not a tithe of the poetry by which they are surrounded."
    1. Re:Programming Languages by Skapare · · Score: 2

      I'm switching back to my first language ... assembly.

      --
      now we need to go OSS in diesel cars
    2. Re:Programming Languages by scrytch · · Score: 2

      Yawn. Yet another "programming would be much better if everyone used My Favorite Toy Language". Eiffel, Ada, Java, LISP, ocaml, modula-3, it's always the same argument: that the magical property of being not-C++ or not-whatever-language-is-icky will transform all code into a paragon of quality, and that people are pigheaded ornery inflexible narrow-minded dinosaurs clinging on to their legacy language instead of joining The True Faith...

      I really am so weary of it.

      --
      I've finally had it: until slashdot gets article moderation, I am not coming back.
  97. YES! by Sludge · · Score: 2
    Please, make the people I have to answer to demand good, clean code. More often than not, clients of mine want the job done right here, and right now.

    I had one PHB try to freeze the project, bring his friend in, add features, and resume the project (rather than compensate us for the features). Please, make everyone understand what quality internals are, so that I may have an understanding when I demand the resources for such a thing.

  98. Analogy better than ever by Anonymous Coward · · Score: 1, Insightful

    No, you've improved the analogy. Lets take your first example: The wiring. Your theory is that I, as a users, shouldn't care if little thought or planning was given to doing the job since i "don't see it".

    Of course, if when I go down to my fuse box I just see an unlabled rat's nest of wires I'm going to be mad at whoever did the (half-assed) job. Then let's say I decide to add a room. The new contractor comes to me and says, "Well, we can't figure out how the first guy wired everything so we're just going to add a second meter for the additional room and give it a completely independant system".

    1. Re:Analogy better than ever by Anonymous Coward · · Score: 0

      Of course, if when I go down to my fuse box I just see an unlabled rat's nest of wires I'm going to be mad at whoever did the (half-assed) job. Then let's say I decide to add a room. The new contractor comes to me and says, "Well, we can't figure out how the first guy wired everything so we're just going to add a second meter for the additional room and give it a completely independant system".


      More likely he'd suggest that you ditch the fuse box completely and upgrade to a circuit breaker.

  99. Demeaning? Just realistic... by jbellis · · Score: 1

    I'm going to be modded down for saying it, but it's true: most of the people I have worked with are NOT capable of writing elegant code. This is particularly true of Perl programmers... :-/ As long as it ends up working (for a while) they couldn't care less how much of a maintenance headache they are creating down the road.

  100. Bull. by Axe · · Score: 1
    Some best code I have seen was written by science majors (physics, math, and yes even biology). Some worst code I have seen was done by CS majors with all the credentials.

    Knowledge of algorithms and methodology does not translate into clean software systems directly. Knowledge of the system that is reflected in software does. I think a great deal of bad software design is due to the fact, that all that wizard CS professionals knew zilch about what they where writing about. I would better hire a good biologist/physicist, who know how to program (and many of them do, then a CS major, who can quote pro and cons of sorting algorithms and C++ constructs in his sleep, but does not know squat about what he is coding about.

    Idealy, though, a good team is a mix of different skills.

    --
    <^>_<(ô ô)>_<^>
    1. Re:Bull. by Capt_Troy · · Score: 2

      How do YOU know it's good code? Your opinion means nothing to me. You are probably misintreperting something you do not understand. In fact, your post is a perfect example of the bullshit I was talking about in the original post.

      A good CS major does not just sit there and code to the specs a suit type hands them, they learn the industry so that they can write better code. Now perhaps you have dealt with shitty CS majors, but talk to any CS professor and they will tell you that nobody should be developing applications without proper training.

      And proper training is not joe blow who once wrote a program to keep track of his baseball cards then majored in biology.

    2. Re:Bull. by Axe · · Score: 1
      How do YOU know it's good code? Your opinion means nothing to me.

      Well, good for you. Continue in your arrogance happily ever after. Surprisingly though, my opinion means a lot to my employer and my collegues, for what it is worth.

      Or maybe you are not dumb, but just did not notice the "some" word? Well, I will give you the benefit of the doubt. As I did not only "talk" to CS professors, here at Stanford, I worked closely with them..

      As other poster noted - the most important ability - is the ability to learn, not the ability to sit through a particular course.

      --
      <^>_<(ô ô)>_<^>
    3. Re:Bull. by Merkins · · Score: 1
      Now perhaps you have dealt with shitty CS majors, but talk to any CS professor and they will tell you that nobody should be developing applications without proper training.

      While I don't totally disagree with your post, that bit is totally redundant. Of course a CS professor will tell you that, it is in the interest of their job security.

    4. Re:Bull. by Capt_Troy · · Score: 2

      Woah, Stanford. Well since you went ahead and tossed that big name college out there, I will have to concede my point. You must be right.

    5. Re:Bull. by Axe · · Score: 1

      In fact I am. Good luck. ;-)

      --
      <^>_<(ô ô)>_<^>
    6. Re:Bull. by Anonymous Coward · · Score: 0

      I believe what was meant was that you can run out and claim that you've run into bad CS major coders and good bio coders and be absolutly truthful...but that hardly means that that's the way the whole world works. Theory counts.

      Now, if all you want to do is write some VB frontend to something or do an MS Access database, then yes, you're write -- you hardly need theory to do either. However, I assume that you're talking about real, not toy, coding. If someone's writing a device driver, I want their algorithms not to be half-assed.

    7. Re:Bull. by Axe · · Score: 1
      Software systems I deal with are, unfortunately, far more complex then a device driver. Besides that, from my experience, - a person who could survive through Field Theory can pick up details about good algorith pretty fast. I will repeat myself - when looking for a good engineer, proven ability to learn, IMO, is more important then some particular narrow knowledge.

      That does not mean of course, that learning CS theory is unimportant. Quite contrary - I meant that it is SO important, one must have good brains to do that. Which does not quite correlate with what exact field somebody specialized in college and grad school.

      And yes, you are right - I only spoke about some examples of code - but what would I know? - I was not a CS major.

      --
      <^>_<(ô ô)>_<^>
    8. Re:Bull. by Anonymous Coward · · Score: 0

      I hate the guy down the hall with his Biology degree. He is slow (doesn't understand anybody here and the amount of time he needs is rediculous) and tends to write bad code (designs are ok).

      Hardware people OTOH are very good. We value them among our finest CS people.

  101. I got some beautiful code here... by jason_z28 · · Score: 1

    Dim Author as Idiot

  102. You're an idiot. by Anonymous Coward · · Score: 0

    Well, you've obviously never designed or written software.

    I would agree that bricklaying is not art, but how about architecture? The bricklaying of programming is the actual typing.

    I've expressed emotions in C++. Fuck, I've written outright poetry in perl.

    To play devil's advocate:

    What pretentious bullshit. Painting is NOT art. It can be closely compared to putting dots of color on a piece of paper, it is a CRAFT.

    Try expressing an emotion with dots of color on paper. It cannot be done. Please think before repeating these banal opinions that painting is art. It just isn't. Deal with it, and if you want to be an artist, learn to hack perl.

  103. If bridges were programmed... by An.+(Coward) · · Score: 5, Informative
    • Project managers would see the balsa mockup and tell the construction crews to just put the mockup in place because it's good enough to use as is.
    • Somebody would stop the project halfway through construction to insist that it be changed from a simple truss to a suspension bridge.
    • Somebody else would stop the project to insist that it be changed from a suspension bridge to a tunnel, and furthermore, to demand delivery of a tunnel for simple truss prices.
    • Massive traffic jams would occur as users stop at each end and call for help because they can't figure out how to drive across.
    • Architects would be sent out to tow cars and fill potholes.
    1. Re:If bridges were programmed... by verbatim · · Score: 1

      Adding to your comment,

      - they would have wireless Internet access
      - Drivers with older cars would need to "upgrade" their cars in order to access the new bridge.
      - Drivers would have to agree to a EULA in order to cross the bridge.
      - Tourists would be charged under the DMCA for taking pictures of it.

      :)

      --
      Price, Quality, Time. Pick none. What, you thought you had a choice?
    2. Re:If bridges were programmed... by scrytch · · Score: 2

      Massive traffic jams would occur as users stop at each end and call for help because they can't figure out how to drive across

      I've seen traffic rerouted for construction in such a haphazard fashion I have made a full stop while I figured out which way to go lest I drive into oncoming traffic or hit the end of the road because it just wasn't clearly marked, and it was night with no one in front of me to follow. If bridges were programmed, there would be a permanent cone zone instead of lines to guide traffic, and it would switch sides for the hell of it every so often.

      --
      I've finally had it: until slashdot gets article moderation, I am not coming back.
    3. Re:If bridges were programmed... by williamwallace14 · · Score: 1

      Last I recall routers and switches are programmed by "programmers". they are meant for the most efficient travel. So, the bridge won't be all that bad.

      -Wallace

      --
      "I am Jack's complete lack of suprise." -Fight Club
    4. Re:If bridges were programmed... by Mtgman · · Score: 1

      I just had to reply to this seeing as I'm experiencing many of those frustrations at work myself at the moment. Here is a quick summary of the genesis of the project. The big boss(my boss's boss) said he wants a way to look at any of our testing environments and be able to tell what release version of all the different apps we're using as well as all the third-party software we're using. Add in a way to track all the costs of those products and the people responsible for vendor relations. Then throw in fields and links to the different management pieces of this(what release each environment is housing and who is the release manager) and the hardware each environment consists of(server name, IP, admin, etc). All in all a fairly complex database for a project with no funding. Oh, and a web-based front end with security access control and various levels of update/viewing access. Myself and a co-worker worked, on our own time mostly, to put together a database model and implement a mock-up database in Access to get proof of concept so maybe we could get money to do it right with Oracle and Java(the corporate standards, don't rail on me for these choices).

      Project managers would see the balsa mockup and tell the construction crews to just put the mockup in place because it's good enough to use as is.

      The Access database is now being populated with real data. Given Access's pitiful relationship modeling abilities(Access '97 no less) many of the queries we had designed to make this useful if it had a full-featured database are un-implementable. But it exists and people are starting to use it. Kinda. This brings me to your second point.

      Somebody would stop the project halfway through construction to insist that it be changed from a simple truss to a suspension bridge.

      After designing the data model and having a couple of meetings with various team leads to assure it met their needs and that everything they needed tracked would be tracked and all the relationships as defined jived with reality, the project was shelved for a little while. When a licensing mandate came down from high up, we scrambled to find our licenses for all our software and accurately report what we were and weren't using and their costs. Several people pulled all-niters and weekenders to gather this data and put it into various spreadsheets and notes with vastly different formats than what we had designed the database to accomodate, after all the project had been semi-shelved right? Now the big boss wants this data put into the database. I train a few people in our oncall group(who is here 24/7 and whom the task of data entry had been given) on how the database works and how to correlate the spreadsheet data into the actual database fields. They start keying data and assure me everything is fine and they'll call if they have any questions. A little while later I'm checking on them and I find out that another manager has come in(not my boss, but one of her peers, both report to the same big boss) and told them that she can't understand how the database works, and that she wants everything to look like the spreadsheets. So the oncall group, unknown to me, stops inputting data into the database my co-worker and I designed, and builds a new one, drastically different from the old one with no capabilities to track anything more than very basic info about third party apps.

      Somebody else would stop the project to insist that it be changed from a suspension bridge to a tunnel, and furthermore, to demand delivery of a tunnel for simple truss prices.

      We recently had a re-org where another group, with even more environments was brought in. Of course they were told by the big boss that they would need to get their info into our database. So I had a couple converstations with their management and they sent me TONS of reports on the configurations of their servers and their software.(I guess now is a good time to mention that this is a fortune 100 company and that we're dealing with 15 environments each containing dozens of enterprise class servers in different datacenters as well as several mainframes. The hardware budget for my department alone, not counting this new group, is over 60 Million each year. Yes, we own several E10,000 servers. Oh and we also support various training regions in the classrooms where they train reps. About seven or eight hundred desktops of various ages and equipment configurations in each region.) Yep, desktop, midrange, mainframe. So now we've gone from tracking our group, to tracking a tiny subset of our group, to tracking our group and a huge amount of data in another group. Grr.

      Massive traffic jams would occur as users stop at each end and call for help because they can't figure out how to drive across.

      Oh, did I mention that I have emails from several supervisors wanting to know how to access this information and that I've suddenly become the keeper of the Access Licenses? And I no longer even recognize the database they're trying to get access to?

      Architects would be sent out to tow cars and fill potholes.

      Oh, did I mention that they have sent all this data to ME, even though I've specifically mentioned that I'm not responsible for data entry and given them contact information for the people who are? Oh, and they're expecting status updates.

      Grr.

      Steven

      --
      -- I have marked myself unwilling to moderate-- I don't have other accounts to artificially inflate the karma of
  104. 'programming is art' BS again! by kurt555gs · · Score: 1

    yes it is art. When software is the result of some ones ideas , and it is loveingly put together it is art , and most probably very good.

    When software is made by a team apporach , it is engineering , and although it may be edible , it cannot be great.

    I have seen this over an over, just because software can be made as engineering doesnt make it great.

    --
    * Carthago Delenda Est *
  105. As a non-CS major and software engineer ... by Daniel+Dvorkin · · Score: 1

    ... I think you're being a bit harsh. :)

    My degree is in Mathematics with Computer Science Emphasis, which means I got a CS minor and took math classes mostly relating to CS-y subjects (e.g. Linear Algebra, Numerical Analysis.) I compare the code I write to that written by the CS majors in my classes, and I don't think it's any worse than theirs. Furthermore, my boss seems to think my software is just fine, since he pays me plenty of money to write it. And in fact, there are a lot of mathematical techniques underlying good software design which most CS majors don't seem to learn.

    --
    The correlation between ignorance of statistics and using "correlation is not causation" as an argument is close to 1.
  106. Nah. . . by Anonymous Coward · · Score: 0

    I have never been hurt by software.

  107. Blame the mouse by Fastball · · Score: 1
    Compare grass roots software born from the free time of a single person or small group to that of a major vendor's bloatware. On one hand you have Perl, Emacs, VI editor, Linux and others. Not ironically text based. Then you have marketroids conceptions that incessantly seize control of your desktop. Smart Tags, countless plug-ins, JavaScript, VBScript, browser integration into the operating system.

    Nothing has facilitated the production of poorly designed software like the mouse has. When you sacrifice a single command prompt in favor of a GUI interface, you're declaring open season on your desktop. The marketroids are going to light up every pixel you have if even remotely possible. It's the difference between a tornado touching down on a little town's main street (read: command line) as opposed to touching down somewhere in Kansas (read: GUI).

    Companies like RealNetworks and Microsoft don't give a damn if their software works as long as it drives people toward their services and content. And we can thank the Internet for that. Software to them is more about battling over the Windows registry to become the default viewer, the portal or home page. It's about getting the user to put the mouse in the proper coordinates and clicking away.

    1. Re:Blame the mouse by Anonymous Coward · · Score: 0

      How does one contrast Emacs with bloatware?

  108. Good point.....understanding final function by Guil+Rarey · · Score: 1

    The author makes an important point about internal form and function following internal form and function.

    IANAH (I am not a hacker), but I do have training and experience in developing programs and systems to meet my needs as an accountant. This is my tale of hell.

    My company wanted to implement a new system to integrate accounting, reporting, and planning for sale and orders for our three main sites (in 3 countries). We're a capital goods manufacturer so each individual sales contract (not counting spare parts) is mostly likely unique. We hired an outside shop to put this together for us. I spent several weeks with the guy they brought in going over the "big picture" components of the system - what we need to the system to do, what the key data were, how they needed to be structured. Our discussion led pretty cleanly from first principles to a definition of tables, and a pretty complete set of functional requirements. I had a lot of fun finding the most compact, complete way to look at the information we needed. It was, dare I say, something I was really proud of, especially the data model.

    Ahh, user-boy, I thought to myself, your work here is done. Time to kick back, turn it over to the pros and check back in for beta test.

    Wrong.

    Way wrong.

    I kept getting questions. Lots of questions. Questions that indicated that, despite the many hours of conversation, the guy doing the coding did not understand the big picture and what he was being asked to deliver. (Now, partly, this is because the fscking consulting company had hired a guy whose background was grinding out Access databases to implement something that had an Oracle backend and an intranet-based front end.) However, I soon realized that the lead consultant did not have a clue what the hell she was talking about. We would explain why things needed to be structured a certain way, sometimes quite forcefully, and she'd wander off, implementing it some brain-damaged way, then come back to ask another question about a problem her "solution" had created. The underlying data model and table structure ceased to bear any resemblance to the concepts we had so carefully sketched out weeks earlier.

    Overtime. Overbudget. Clueless. The consultants were out the door. We put someone internally on to the project, and, sure enough, the only way they can get a clean product is to go back and do what we said in the first place.

    The point of all of this is that the consultants did not have a clue from first to last what they were doing. And it shows as a gawd-awful mess of broken tangled tables and useless spaghetti code.

    At this point, a year late, we still don't have a working system. (I'm so frustrated I want to go out and learn Linux, MySQL, and Python and do the g*damn thing myself for my own intellectual and esthetic satisfaction. If anyone knows a good tutorial for MySQL, please lemme know....)

    Beautiful code comes from grokking the end-user, not just the code.

    --
    Do not taunt Happy Fun Ball
    1. Re:Good point.....understanding final function by Anonymous Coward · · Score: 0

      A book on MySQL that is simply amazing and has a nice tutorial is MySQL by Paul DuBois.

    2. Re:Good point.....understanding final function by Anonymous Coward · · Score: 0

      I would suggest you avoid MySQL for a project that big and defer to PostgreSQL, an object oriented, transaction tracking database system.

      Python is nice, but I am not sure it would be fast enough for your needs. PostgreSQL has a nice connection to C++, which suggests that KDevelop may be a good GUI-RAD tool to use.

  109. This Article Offends My Professionalism by Anonymous Coward · · Score: 0

    I am ashamed of this guy's behavior; I have valid reasons for coding badly.

    1. All coders including me are lazy, and would rather patch something together than do it right. And bloat doesn't matter, since people will just buy better hardware to compensate. So flush quality, I don't care.

    2. Don't talk down to me man, I'm an engineer! Even if my Uncle John, a so-called REAL engineer who makes nuclear plants or something, says I should lose the use of the word "engineer" in my job title. Hey man, I graduated my correspondence course fair and square.

    3. The computer industry is run by young people. We lack the hardened fontanelles and experience to be able to do good work and excercise restraint, discipline, or create any code above the mediocre level. But hey man, the people lap our shit up! Let the market decide if it's good enought.

    4. If my employer (who makes a product you all know about) is willing to throw money and juggernaut stock options at me for meeting deadlines no matter what, who am I to give up my jackpot for stupid quality. Flush quality. what do I care.

    Basically, it's all about making a load of ca$hola, and then retiring to the Bahamas at 30 while the rest of you at home can fix what I made. And you'd best be thankful, I don't have to care as much as I do. It's dog-eat-dog, and the best product rarely wins. That's why you linux guys are at 5% of the market. You take too long, and fool around making Atari Emulators. Bill has to prop you guys up as competition because you suck so bad. And nobody will believe Aple is competition, since Microsoft practically owns the company.

    1. Re:This Article Offends My Professionalism by masq · · Score: 1

      > ....you linux guys are at 5% of the market

      Yes, we are - and it's the *TOP* five percent.

  110. When it's done. by verbatim · · Score: 3, Insightful

    It comes down to time and person-power. I think the biggest failing (from personal experience ;) )of most software/system design comes from either a lack of time or a lack of planning for time. The promise of "Technology" is here and now, but the bedrock is a sandy beach.

    The other important consideration is person power. It's not necessarily a lack of intelligent and capable people, but rather poor management of their time (either by themselves or from project managers). For example, working long hours in "crunch time" or being forced into the 9-5 cycle. Unfortunatly, my brain does not work on the 9-5. Sometimes I'll work for hours on end in an outpouring of inspiration while other times I'll be staring blankly at an equally blank screen.

    Another thing that corrupts software is the idea of "catch-all" systems. That is, does your web-browser _really_ need an IRC client? or, for that matter, an e-mail client? I think it would be helpful to break software down into individual, streamlined components that does one job - and does it really well, instead of doing a lot of jobs poorly.

    Just my 2 cents.

    --
    Price, Quality, Time. Pick none. What, you thought you had a choice?
  111. Absolutely! And furthermore... by avdi · · Score: 2, Funny

    ...Isreal and palestine should lay down their arms and live in peace; the oil companies should all band together to clean up the environment; all the children in the Third World should be fed; science should invent a cure for AIDS; and Palm should open-source BeOS.

    In the meantime, the author of this article ought to turn his attention to explaining to managers *why* they should care about beautiful software design. Until management gives us the time and budget to do otherwise, we engineers are just going to keep on writing code as well as we can within the contraints we're given. It's not like we *enjoy* writing crappy software.

    --

    --
    CPAN rules. - Guido van Rossum
    1. Re:Absolutely! And furthermore... by Anonymous Coward · · Score: 0

      "It's not like we *enjoy* writing crappy software."

      Actually I really enjoy it. It's kinda like, "I can't believe you pay me this much money to shovel so much crap! Suckers."
      -Jason of the 4th dimension

  112. Tell that to my boss ! by dtml-try+MyNick · · Score: 1

    "Instead of trying to create software that works in a minimal sense, we should be creating software that has internal beauty."

    Somehow I have a gut-feeling that my boss thinks exactly the other way around, make it fast, make it work, give the customer what he wants !
    The customer doesnt care about beauty, he wants to see something work as fast and as cheap as possible !

    --
    Life starts at the end of your comfort zone.
  113. Good design is bad by Anonymous Coward · · Score: 1, Insightful

    I know good design when I see it. I can produce good design. I practice good design in all my work.

    At the same time I must admit that good design is not good business. No, it does not take longer to come up and implement good design. The problem is most software engineers don't understand good design. They can't maintain it.

    Bad programmers can write code that other bad programmers understand and can maintain. They are the majority of the department so smart managers are wary of the one or two good designers they have.

    A tiny example:

    int strlen(const char *s)
    {
    int n;
    for (n = 0; *s++; n++) ;
    return n;
    }

    #define MAX_STRING_LEN 101 /* leave room for null character */

    int strlen(char s[MAX_STRING_LEN])
    {
    int i = 0,len;
    if (s[i] == 0) {
    return(0); /* don't forget empty string */
    }
    else {
    len = 0;
    while (s[i + 1] != 0) {
    len++;
    i++;
    if (i == MAX_STRING_LEN) {
    return(-1); /* error; need to revisit this */
    }
    }
    return(len + 1);
    }
    }

    The former implementation is more beautiful, but not something most software engineers could come up with. The uglier implementation is something they would immediately feel at home in. A good manager should discourage the better design "which only PhD's could understand and maintain."

    1. Re:Good design is bad by core10k · · Score: 0

      That's not an example of jack shit; both of those code snippets are too trivial to matter AT ALL.

    2. Re:Good design is bad by ahde · · Score: 1

      huh? How is #2 easier. How could anyone come up with that? Incrementing s in the loop declaration may not be obvious (though it reads more logically), but its a more likely solution. Here is one everyone has seen before and is arguably more elegant than your hack.

      int strlen(char *s)
      {
      int n = 0;
      while (s[n] != '\0')
      {
      n++;
      }
      return n;
      }

      or how about

      int strlen (const char *s)
      {
      int n = 0;
      return (while(s[n++]));}

    3. Re:Good design is bad by Anonymous Coward · · Score: 0

      Nice troll :-) [For the uninitiated/stupid - e.g. the moderator who gave this +1 - both implementations are terrible].

  114. You could be nice, but on the *other* hand... by kryzx · · Score: 1

    You could follow this

    Guide to Writing Unmaintainable Code.

    If we put this article in close proximity to Mr. Connell's, in a searing flash of heat and light they would negate each other in a matter/anti-matter like reaction.

    --
    "I don't know half of you half as well as I should like, and I like less than half of you half as well as you deserve."
  115. quality sausageware by terahurts · · Score: 1

    There is an old saying that using good software is like eating good sausage:

    Those who like it should *never* see it being made.

    Yummmm!

    (With apologies to vegetarians.)

  116. Bridge analogy by Kidbro · · Score: 1

    I bet most bridge building engineers aren't told my their managers that it's not important whether the bridge will fall down and kill people, if it's just done by next Friday!

    True, most software sucks, but it's usually not the fault of the coders...

  117. My favorite SWE quote from Murphy's Laws by pbox · · Score: 1

    If architects were to build like software engineers do, a lonely woodpecker could instantly destory a metropolis.

    --
    Code poet, espresso fiend, starter upper.
  118. Problem is getting managers to value good coding by zetetikos · · Score: 1

    It's not that hard to write good code. It is hard to get managers to value good code. I've never been a programmer on a project in which I was not directed by the project leader to develop the code in the quickest possible way and without takihng time to create documentation.

  119. Re:True, but code maintainability can be critical. by Anonymous Coward · · Score: 0

    There's (usually) no guarantee that *you* are going to be the one maintaining the code in the future

    I thought that was the point of writing sloppy code in the first place!

    Job Security: it's a wonderful thing ;-)

  120. management and interns by Sebastopol · · Score: 4, Insightful

    DISCLAIMER: this is not a cheap shot at interns: it is a shot at managers failing to properly groom young hackers into veteran hackers with the humility to focus on the what's best for the project, rather than deft coding tricks.

    i've seen dozens of interns and new hires come in with 1 or 2 semesters of C, and write lots of code, sometimes important pieces of code. management seems to think that if you throw enough newbies at a problem, it's the same as one or two really good programmers. this is a huge management oversight. interns and new hires need good solid mentors and time to develop and hone their skills, and project management needs to enforce design rules. unfortunately, newbies are very reluctant to code to design rules, I know because I always wanted to do stuff my way as an intern (eight years later I'm writing design rules... irony). the result is like a meatgrinder on full speed: code spewing everywhere that all looks different, and is not being tested, regressed or reviewed.

    I've seen projects with strict design rules and rule checkers plus a technical guru/godfather for the project owner: results, fewer bugs and fewer people needed to support the code, and i'm talking about million line simulators.

    solution: mentoring by veterans with large program experience (the really mean veterans, they are the best people to surround yourself with); and a strict adherence to design rules and revision control; and regression/coverage testing!

    --
    https://www.accountkiller.com/removal-requested
    1. Re:management and interns by ameoba · · Score: 1

      Hey, hiring scads of unskilled kids has made McDonald's a mulinational, multibillion dollar corporation, why should't it work for software design?

      --
      my sig's at the bottom of the page.
  121. It's tough... by deebaine · · Score: 2
    Perhaps the reason that people don't expect much from software is that we are legally prevented from doing so. Let's face it, selling software without warrantying it fit for *any* purpose is nonsensical, and everyone does it. There's a vicious cycle at work; no expectations breed no impetus to improve breeds no expectations...


    -db

  122. Yet Another Car Analogy by Anonymous Coward · · Score: 0

    Sheesh, another academic preaching about how all commercial software sucks and how we should spend more money to produce higher quality software.

    Guess what, more people and more tools and more training and more time means that the shoot-em-up-game you just bought costs $350. Would you pay that for a perfectly stable game? Or would you buy it at $50, enjoy the game, bitch and moan about the occasional crashes and hope that they release a set of patches?

    Quality is expensive. I think everyone would agree that a BMW or Mercedes is better engineered and higher quality than a Lada but very few people can or want to pay the extra money for a BMW. What makes you think that decisions about software would be any different. People want software to get them from A to B cheaply. Plus, software quality is not a status symbol.

    I'll also address your bridge analogy. Imagine if an engineer was asked to develop a bridge in the half the time, half the people, half the budget and half the steel. Could they guarantee that it would last 5 years? Would they consider it ethical to build it? These constraints (usually much worse) are the limits that commerical software developers face everyday. They one advantage that we have is that most commercial software does not mean the difference between life and death. When it fails it is usually an annoyance.

    Get real,

    Jason.

  123. It's still a flawed analogy by harangutan · · Score: 2, Interesting
    The "bridges and buildings" analogy has been done to death; so much so I suspect this whole topic is a troll. But at any rate, here are some important differences that may help explain why software appears to be created to a lower standard:

    1) Materials science changes only slowly, in small increments.
    2) The working principles of structural engineering scarcely change at all.
    3) The practices and processes by which bridges and houses are built evolve only slowly, and incrementally, over decades.
    4) The fundamental purposes for which houses and bridges are built never really change.

    Contrast that with the practice software engineering where everything, beit language, paradigms, principles, practice, materials and even purpose change radically within very short timeframes. Programmers are expected to track all these changes, and what's more, they have to deliver quickly and efficiently.

    In conclusion, I would assert that if architects and structural engineers were obliged to work in the conditions and culture in which programmers do, they would not succeed in building anything at all.

  124. You've never seen how a house is built, have you? by skoda · · Score: 3, Interesting

    Most software design is lousy. Most software is so bad, in fact, that if it were a bridge, no one in his or her right mind would walk across it. If it were a house, we would be afraid to enter. The only reason we (software engineers) get away with this scam is the general public cannot see inside of software systems. If software design were as visible as a bridge or house, we would be hiding our heads in shame.

    You've apparently never seen how a house is built. While the exterior finish looks very nice to the final occupants, the construction process and actual "code" (if you will) of a new home is quite sloppy; easily the equal to typical ugly code.

    Tract housing, in particular, are built as quickly and cheaply as possible. Wires are run rapidly, without much care to particular placement. Builders leave lunch trash inside wall interiors. Finishes are half-baked, details are of little concern. The materials used are the cheapest possible.

    Just like a program, what the buyer sees is the outside finish, and that's basis for their purchase decision normally. But look at how they are actually built, and you'd be afraid.

    People cut corners if they think they get away with it, be it bridges, houses, or programs.

  125. I know a lot of programmers, and this fact stands: by fobbman · · Score: 2

    Beauty is in the eye of the C-coder.

  126. Been there done that... by Anonymous Coward · · Score: 0

    While I agree with this essay, I can't help but feel a strong sense of deja-vu. This sounds alot like the original Unix philosophy, one that has to large extent been ingnored by the contemporty computer industry. Instead of building quality systems, the focus is more on presentation (i.e. Apple) or market share leverage (Microsoft). Even modern Unix variants, including Linux, have fallen prey to the false god of excessive ornamentation.
    I'm glad this view has gotten some amount of attention, but I'm pessimistic about any prospects of change. The processes and attitudes are to ingrained in our technical culture.

  127. Pretty code may not be covered in the budget by surfimp · · Score: 1

    I work mainly with Flash 5 ActionScript applied to web applications, and while that certainly *isn't* a real programming language, it is complex enough that issues of code cleanliness definitely arise. However, with website development budgets and deliverable deadlines getting tighter and tighter, the time it takes to really go through and optimize and comment your code sometimes just doesn't exist--or isn't budgeted for by the client. While that is no excuse in itself for ugly "Fruit Loop" code (a competent programmer shouldn't be doing that stuff anyways), sometimes the unfortunate reality seems to be that time and budget constraints force programmers to "just get it done". In a perfect world, we'd be able to get paid to take the time to perfect our applications, but in the real world, that's often just a fantasy, IMHO.

  128. it sucks because most "software engineers" suck by dirtydog · · Score: 1

    If you are like me, and you work in a large corporation, where you cannot attract truly good programmers because your projects aren't interesting, then you are stuck hiring bottom of the barrel, "Learn Java in 6 weeks!" hacks that don't know jack about writing software. I have to deal with developers who blame everything but their own code whenever there is an application problem. Every time, we have to go through our servers to prove that nothing is wrong with them, when everybody knows that the code sucks ass. 90% of these people have no idea how to even use a debugger. It almost makes me want to go back into development, but I don't know if I could stand working with the others. My suggestion is that we get legislation in place to require licensing exams for software engineers.

  129. I know it's always fun to whip PHMs, but... by Monte · · Score: 1

    There is usually a tradeoff between quality and expediancy.

    I agree entirely - but I don't think it's fair to lay this completely at the feet of management. IMHO there are a couple of major drivers here:

    1) Users are used to shitty software. I know it's becoming gauche to rag on MS here at /., but think about it... how many really decent operating systems and applications have the users experienced? As long as expectations of quality are low other factors (cost, ship date) will take precedence.

    2) There's no liability for software publishers. Just look at your average shrink-wrap agreement - would you buy a house or a car or a bridge if you had to agree that total failure of same was just tough titty for you, and the manufacturer had no liability? Of course not.

    I think the industry (software) is still too young to have worked out all the bugs - er, so to speak. I wouldn't be surprised to see some sort of certification or licensing come about for programmers, after a time. It's just a matter of how many people wind up dead due to fault software.

    1. Re:I know it's always fun to whip PHMs, but... by JoeyThunders · · Score: 1

      "would you buy a house or a car or a bridge if you had to agree that total failure of same was just tough titty for you, and the manufacturer had no liability? Of course not. "

      1) House: $200,000
      2) Car: $18,000
      3) Bridge: $(no idea but a lot I imagine)
      4) Software: $79

      Therein lies the rub

      disclaimer - I run a software development company, so I guess I'm biased...

    2. Re:I know it's always fun to whip PHMs, but... by RFC959 · · Score: 1
      $79?!?!?!

      If we're talking about Quake, maybe. Try using some "enterprise-level"* software. It costs thousands, if not tens of thousands of dollars, and eats up the time of a lot of highly-paid people. For example, I personally have been spending the last two weeks working pretty much full-time on one particular piece of horribly shoddy software, trying to get it to work. It's eaten about two man-months of time here, I estimate, and support from the vendor has been on the level of "Well, it works for us."

      * You know why they call it "enterprise-level"? Because it takes the resources of a whole damn enterprise to use the thing.

  130. Beauty for quality's sake makes better software by Squeamish+Ossifrage · · Score: 1

    Software has to:

    1. Meet user requirements.
    2. Meet user requirements (in 10 years).

    If your business plan includes any kind of long-term component, you know that initial sales are only a small portion of your revenue stream. If you write software for retail sale, the long term comes in the form of selling subsequent versions of your product. If you develop directly for large clients, it usually comes in the form of explicit code maintainance contracts. This is doubly true because most software has relatively few users for the initial release, and only gains widespread adoption with time.

    Either way, you're in it for the long haul. The known user requirements are not the end-point of your development effort, but rather the first of many waypoints. Maintainability and extensibility are everything: If you can't correct the bugs in version 1.0 and get version 2 out the door (both in a timely and cost-effective manner) you're not going to be selling much software. That's why an elegant design is worth the extra initial cost.

  131. time to rant by circletimessquare · · Score: 2, Interesting

    this is what academics do... they sit in ivory towers and look down on the messiness of the real world and lecture us about how messy it is.

    "those who can't do, teach"

    you read this topic, "software aesthetics", and you begin to understand why this saying is so apt.

    i'm sorry, but scenic pastoral allegories about bridges and houses makes me want to choke. has the author ever actually worked in the business world? you don't have 3 months to look at a business problem like it were a chess position or a game of go and wax and wane philosphical about "internal beauty". you have 3 days to give it a heartbeat and stick it in front of an end user and then wrench it's guts around 5 different ways while the end users completely mess around with the spec.

    if i do this, and some guy is going to criticize the loss of mathematical symmetry in my choice of algorithms to solve a particular problem i'm going to punch him. oh my gosh! i could have written the entire app stateless rather than stateful? i could dimensioned this array to use 10% less memory? these variables are redundant? WHO CARES!

    so go compose hiaku about the beauty of software or write code IN haiku, or whatever floats your boat about the serene inner symmetries about math and logic, and leave the real work to the real people in the trenches. ;-P

    sorry folks, but this is total bullshit! (i know, i'm not talking about systems that help my mother's surgeon operate on her heart, or trade my stocks, or send the next space probe mars-wards, but this criticism of inaesthetic code, applied to the 95% of programming that is not so death-defying, is inappropriate)

    look, as long as hard drives grow in capacity like weeds and moore's law on processor speeds holds true, software bloat is the only game in town. maybe in the days of the 6502 and 4k of memory, writing clear, concise, elegant code was not only kewl but necessary. but nowadays allocating 20k of memory for an object that, as used in code, is the logical equivalent of a boolean, is, well, a moot point! ;-P

    so let the greybeards look down on us and scowl at our waste... we can waste! it's OK. you are still an "alpha geek" or whatever you feel you have lost by not revealing the beauty of prime numbers in your code for the shipping company's bike messenger route tracker. oh dear!

    in fact, i'd rather see a discussion on the modern trend of "skinning" apps, or at least the gui in general... that is where developers REALLY have to pay attention (boy have i seen some doozies). the gui is where smart coding really does make a difference and where most programmers really do drop the ball awfully. the gui is where a discussion like this really can make a difference, i think.

    note: if you want to flame me and you don't work in the business world, please temper the thought with some empathy for us dilbert-esque programmers who report to dilbert-esque bosses. (that's the REAL source of my passion on this topic.) thanks ;-)

    --
    intellectual property law is philosophically incoherent. it is your moral duty to ignore it or sabotage it
    1. Re:time to rant by Curly · · Score: 1
      i'm sorry, but scenic pastoral allegories about bridges and houses makes me want to choke. has the author ever actually worked in the business world?

      No, the article is right---most code I've seen is abysmal, and it's not an academic issue; elegant design matters on projects that will live for awhile, for a couple of reasons:

      1. Code that is easy to follow is easier to get right than code that is not. (Of course.)

      2. Elegant code is more fun to write, debug, and maintain than random-scatter code. An elegantly designed code base attracts and keeps better programmers than junk does---nobody likes to work on someone else's mess.

      The second point is really this: If you spend a lot of time in code, the way you write that code determines what kind of world you live in; spending a little extra time (if that's what it takes) to make that world nicer pays off in joy, which matters to most programmers I've worked with.

      Of course, aesthetics are an individual issue. One programmer likes that the program is small; another treasures its documentation; another its speed; another its unique approach.

      Programming, because it takes place within the mind, is an intimate practice; this makes it difficult to tolerate aesthetic disagreements between programmers, which crop up everywhere. This gets in the way of (2) unless your programmers are unusually compatible or your team is very small. I imagine this crops up in every form of collaborative art, not just programming.

      --Pete

    2. Re:time to rant by duffbeer703 · · Score: 2

      If you are going to insult people, at least get it right:

      "Those who can do; those who can't teach"

      --
      Conformity is the jailer of freedom and enemy of growth. -JFK
    3. Re:time to rant by circletimessquare · · Score: 2

      ok, thanks for teaching me

      HAHA! ;-)

      sorry, i couldn't resist, go ahead and offtopic me ;-)

      --
      intellectual property law is philosophically incoherent. it is your moral duty to ignore it or sabotage it
    4. Re:time to rant by wolf- · · Score: 1

      has the author ever actually worked in the business world?

      From his main page:
      As a consultant in this field, I help large and small companies with all aspects of Domino and Notes -- including purchase decisions, email infrastructures, application design (Notes client and web), security audits, LotusScript, and general technical support. I serve as the resident security expert on SearchDomino.com. For more information about my Domino/Notes consulting click here.

      Code help from the world of Lotus and Lotuscript.

      --
      ----- LoboSoft specializes in Digital Language Lab
  132. Not a hill of beans. by Anonymous Coward · · Score: 0

    I look forwards to the general public gaining an appreciation of good code. Much of the discussion so far seems to revolve around how software is not hardware and how much harder it is than physical engineering. No comment on this issue.



    The point for me is that the general programming community (I) need to successfully explain to the general public (my mum) why some code is beautiful and other code is not. Until then the public will not pay more for good code than bad code. I am failing miserably so far.

    Please remember that the general public is still shaky on the concept of resizing windows and scrolling webpages. Spellchecking is a non-trivial exercize rather than F7 (or whatever).

    Ugly hard to use programs have been rightly discarded, so there is a basic appreciation of UI design. So there is hope, however don't forget that most apps are a commodity product and so the cheapest tin of beans will sell the most, since the contents will be very similar.

    In the same way that in the renaissance noble families supported the old masters, some corporations keep the more distinguished names in our field, so beauty is preserved in odd corners.

  133. Complete bullshit by rw2 · · Score: 2

    The software equivalent of a bridge is a slide rule. It's static, single function, well understood and reliable.

    Maybe if evey god damn software project weren't the engineering equvalent of a fucking concept car (along with all the robustness that they have) the software would work like a charm every time you hit a key.

    Until then, fat chance. It's still better to have a 90% solution today than a perfect one after you're out of business.

  134. Machine Beauty by TechyImmigrant · · Score: 1

    Machine Beauty is a book by David Gelernter that gives an excellent exposition of why beauty in technology is a good thing. I recommend it to anyone who wants a deeper understanding of the issues.

    --
    I should use this sig to advertise my book ISBN-13 : 978-1501515132.
  135. interesting... by h4x0r-3l337 · · Score: 1

    It's interesting that a person who writes about bad software design will create the HTML using Microsoft Frontpage, which apparently doesn't even know how to generate a bulleted list properly...

  136. My condo design is a mess ... I disgree! by iconnor · · Score: 1

    I the crawl space under my floor is unusable, the drain system outside is also inadequate, and the wiring is not very usable. I cannot run a simple network cable from my place to a neighbors - that to me is just as bad as any poorly named variable.

    The fact is we do live in poorly designed stuff. Just like you don't need to be a good designer to code, property developers don't need to be good architects to throw together a development.

    I disagree with the whole idea that IT is worse than other professions. Look at the mess lawyers/governments make with the law. Give me a poorly designed goto any day!

  137. The author's "house analogy" is poor by Blue+Neon+Head · · Score: 2

    The author compares writing programs to building a house - adding on unneeded features, he says, is "horrible design". However, one of the most important issues with code that is of less importance in construction is scalability. You don't expect your house to hold the proper framework for an eventual skyscraper. This is routinely expected of computer programs; software that does the job will live and grow until it ceases to perform. Thus his argument for minimality based on home design is somewhat inappropriate.

  138. Why do slasdot articles disappear? by Anonymous Coward · · Score: 0

    Where did this go:

    http://slashdot.org/article.pl?sid=01/09/03/2012 31 &mode=thread&threshold=-1

  139. What a complicated question! by gelfling · · Score: 3

    Gee that's a very tough problem. I'm sure I could say something meaningful about but I can't cover it in the allotted time or using the money you're paying me to do it.

    Why does quality suck? Why does performance suck? What kind of quality are you talking about? Functional, aethetic (I guess you mean elegant though), fixable, manageable? Those are all different axes of quality that represent different things, having different values and are achieved through different means and methods. The reasons they fail are myriad:

    1 Management doesn't have a clue
    2 Programmers don't have the skill
    3 No one cares if it's shit
    4 The customer is insane
    5 The customer is cheap
    6 There are too many changes
    7 There is no difference between success and failure
    8 The technology is crap
    9 Poor program/project management
    10 Cult of the hero
    11 A preference for predictable mediocrity over accidental brilliance
    12 The arrogance to believe that what you do is art but what everyone else does is 'engineering'
    13 No accountability for problems
    14 No time for design
    15 Thinking a packaged solution can be installed as-is
    16 Inability to create useful requirements
    17 Scope creep
    18 No test plans
    19 No QA
    20 Poor cost and time estimates

    Those are just the ones I saw today.

    1. Re:What a complicated question! by SillyWiz · · Score: 1

      I once arrived at a (fortunately) short project to find the specification /consisted/ of:

      1) The project will use Microsoft Access, because the client has already bought enough copies of that.

      2) The project will cost UKP 2000 or less.

      3) The developer will not speak to the end users: they're too busy doing real work.

      4) Whatever gets delivered gets vetted by the client management. Before any money is paid.

      I did about 2Ks worth of what we guessed would be useful software and bailed. The users were /intransigent/ about not changing their working practices (which consisted of /RETYPING/ Word documents with minor changes in each draft), utterly unable to make decisions, and utterly unable to understand that there are some things Access is not a good choice for.

      I have no idea what the hell happened at the end, I'm just glad I didn't stick around to find out.

      It's not the first time a project has been like that, it's just an extreme case. And yet all these users are surprised by the software that results...

  140. Living with your code by roseman · · Score: 1

    The get-anything-out-now mentality alluded to by a number of posters is certainly one of the worst things that came out of the dot-com boom (yeah, it was there before, but not at that level).

    Does anyone ever worry about maintenance anymore?

    I manage a small development team working on commercial software. Yes, its important for us to get software out quickly. But thats one of the reasons that we insist on good quality, clean and readable code.

    We leverage off our existing code base for each new iteration; some of the code has been in use for years (though now used in ways we never expected of course). If we didn't take the time earlier to make that code cleaner, we'd be paying the price everytime we go back and have to work on that code again, whether to just fix bugs, extend it to do something new, integrate it with a new package, etc. This is true both for the original programmers who wrote the stuff, other people on the team who have to wade into it, or new people we bring on board.

    I've done things the no-documentation, make-it-work, anything-goes approach before, and I know I'm never going back that way again, for anything more than hacked together demos. I expect everyone on my team (myself definitely included) to write clean, well-documented and understandable code, following our coding conventions. Everyone gets flak from everyone else when this doesn't happen (its quickly corrected). Sure, sometimes it doesn't happen in the very first cut on a tight deadline, but you can bet cleanup is the next thing that happens in the schedule.

  141. Of Beautiful Houses and Sleazy Contractors by DCheesi · · Score: 1

    What the author of this article doesn't realize is that many houses *are* ugly hacks, just not where you can see. The doors are pretty, the walls are painted, but the roof is leaky and the wiring is substandard. Just because houses look good doesn't mean they are defect free; there are probably dozens of cut corners and screwups in the walls and floors that will never be noticed, in addition to the few that will be.

    Software is the same way. As long as the internal structures and building methods are hidden from the user, and as long as not too many things break, the user will be happy.

  142. Abandon C as quickly as you can! by Norge · · Score: 1

    First, I think beauty is the wrong word to use. A bridge (or any other engineering project) can be beautiful without being terribly useful or reliable. I think we should be striving for high quality software. What is a simple way of writing more high quality software you ask? Stop using C, C++, or Java. Start using ML, Haskell, or Clean. Modern functional programming languages offer:
    1. Immutable objects
    2. Higher order functions
    3. Strong static type systems
    4. No pointers
    5. Garbage collected memory allocation system

    All of these add up to shorter, much more reliable code. I know there are some people out there who will protest that any garbage collected language will be slow. This is simply false. Thanks to strong static typing and a formal semantic that permits easy reasoning about optimizations, ML family language compilers produce code that is almost always faster than Java code and quite possibly faster than C code that has not been hand optimized. For those who are interested take a look at "Haskell vs. Ada Vs. C++ vs. Awk vs. ... An Experiment in Software Prototyping Productivity" and "Four-fold Increase in Productivity and Quality" for respectively an academic and industrial look at the productivity increase offered by functional languages.

    The one area of computing that most functional languages are not particularly well suited for is low level system programming. However, there are researchers working on that, and how many of us do low level system programming?

    Cheers,
    Benjamin

  143. Hiring Better programmers would help by donglekey · · Score: 2

    The software industry is known for many accomplishments, but is known just as stereotypically for a lot of crap and disregard for quality.

    On the other end of the spectrum seem to be anyone involved with games and 3D graphics, be they programmers or artists (with the exception of recent MMORPGs). Games and 3D graphics have made HUGE strides in quality and have not slowed down one bit. They are the things pushing computers to their limits and using every ounce of computing power to its full capability. How is it that these two related industries continually meet standards so high and continue advancement at such a pace? I think the answer lies in portfolios and the reconition of quality.

    In most software, you are using it because you have to. Standards are needed and many times what you have to use is not the best option, but you are locked in place. Windows.

    In the world of games you don't get hired with a CS degree, you get hired with a demo or a portfolio of demos. In 3D production there are no official degrees. No standardized education must mean no one is educated then huh? Fuck no. You get into a company with a portfolio. You show what you can do, and if its good enough, you're in.

    Reconition of quality is another big factor. The crap sinks and people don't buy it. They want games that are fun and software that works. 3D software is what made me want to program in the first place. The elegance, speed, ease of use, complexity, organization, and balanced nature still blows me away. Programs that suck get ingnored. Programs that rock are hot property. Studios are starting to use Linux in a big way. Why? Because its better. They reconize quality, that's what they buy and that's what they hire.

    I can't really get hired as a programmer. I don't have a degree. I know 9 languages and know a good amount about structure, organization, and design. I have written some intelligent programs, but it doesn't matter. Stop using personel directors, recruiters, and middle management to hire programmers. Programmers should be hired by other programmers. Not their job? Make it part of their job, give them help and don't tie them up with stuff they don't have to do, but when it comes to reviewing and interviewing applicants, it should be the senior programmers doing it. They should be looking at code and have some kind of portfolio in their hands, not sorting out the people who don't have degrees, because that is just one way for people to learn.

    None of this guarantees that crap still won't make it out the door, because the money and time restraints are still there. But at least this way it will be weighing down on skilled people and not the 'I want money, I think I'll program' type people who don't know what the fuck they are doing.

    1. Re:Hiring Better programmers would help by tjb · · Score: 1

      Dude, I don't have a degree either, but I got hired at a modem-chip company almost exclusively because I did send them code. Not that they asked for it, but I decided that I'd improve my chances by sending in some code.

      Along with my resume, I sent a 320x240 space-invaders program I wrote in straight 80x86 assembly. It wasn't a large, professional style project or anything (only about 750 lines of code, not counting art) but it demonstrated that I knew my shit. I program DSPs and small embedded devices now, and I have my insanely optimized little game to thank for it :)

      Anyway, the point is, even if companies don't ask to see a portfolio, show some initiative and send one anyway: it couldn't hurt. And besides, its not likely that an HR person could properly evaluate it so it improves your chances of an actual engineer or manager seeing your resume.

      Tim

  144. I'm doing my part, how about you? by Bowie+J.+Poag · · Score: 1



    I'm doing my part to try and improve things, and finding that nobody cares enough to help. Personally, I dont release jack squat until I can confirm to the best of my ability to test it that my code is clean, and solid. People who release anything less are either lazy or wreckless, IMHO. .

    So whats your excuse?

    Cheers,

    --
    Bowie J. Poag

    1. Re:I'm doing my part, how about you? by Anonymous Coward · · Score: 0

      Hi, Bowie, got a problem.

      My girlfriend is a wonderful girl, and good looking for someone who has a slight weight problem, but there's an area of personal hygiene that I think she could put more effort into. In short, her cunt smells bad.

      I know cunts aren't likely to be the sweetest smelling thing on Earth, but when I take my dick out of her, my dick smells putrid. I can smell her on it for days afterwards.

      How do I tell her to wash it? Do I just buy her some douche-bags or something? Help me out, man.

  145. Building codes for software? by Minupla · · Score: 2

    I know, I'm gonna get flamed till I'm golden brown for suggesting this, but think about it for a moment.

    Most every other device, object or institution that interacts with the general public has a set of rules, guidelines or industry accepted practices that are enforced.

    Any device that emits RF energy must conform to the appropiate licencing requirments in the country it is operated in.

    Any device that uses electricity must obtain the appropiate certifications before it can be readily sold (UL or CSA for US/Canada).

    Motor vehicals of all shapes sizes and types have to go through a whole battery of tests and certifications before they are allowed on our public roads.

    Now look at software. Badly designed software has the ability to do harm (MS Lookout trojans anyone?) So why shouldn't software be subjected to some sort of public examination? I'd be in favor of "crash tests" of software packages by some independant body like we do with vehicals. There is no legislative requirment that I know of that manufacters make 'safe' cars beyond the basics of seatbelts and such, but as a consumer, I look at the crash test results and I'm more likely to buy a car that has a good crash test report then one with an exploding gas tank!

    As software becomes are more and more intergal part of our day to day life, I think something like the FCC's rules for software might be required for network connected software: This software must not emit any harmful data into the Internet, but must accept any and all harmful data from the internet. Ie: No more buffer overflows.

    Ideally none of this should be required. Unfortunatly no software is an island anymore. Everything interacts, and unless we have some basic rules of the road, chaos will inevitably ensue.

    --
    On the whole, I find that I prefer Slashdot posts to twitter ones because I don't get limited to 140 chars before
  146. if you think software looks bad... by rayoslav · · Score: 1

    Then you really need to go watch some new construction happening. When the painters recover from thier shellac-induced highs they toss enough of it down to hide the shoddy carpentery. That nice marble seat in your tub? Held up by scraps of ceramic tile and a couple of pounds of mastic. This is caused by a simple fact : _Unions make people lazy._ The reason software is less than elegant in many cases is due to the urgency placed on developers for rapid development.

  147. Two problems by The+Pim · · Score: 3, Insightful
    There are two problems with this guy's approach:
    1. You can't learn to write good software by talking and reading about it in general terms. The best way to learn to write good software is the same as the best way to learn almost anything: practice, and get feedback from better programmers. Even though I think I understand where this guy's coming from, and I basically agree with him, I think his essay is basically pointless. I think the reason that so many of the posts here are critical is exactly that he is not specific enough to sway anyone who doesn't already look at the issue the way he does.

    2. To the extent that we do understand how to write beautiful software, we don't stand up for it. Although many posters make the obvious point that we are under pressure to get software done, this is not sufficient excuse for ignoring the values espoused in the essay, for two reasons: One, software that merely provides the required functionality may let the user get his job done, but typically requires him to learn the concepts used in the program and put up with its ideosynchracies, because the program doesn't work in terms of the concepts he already uses. This frustrates and alienates the user, and ultimately contributes to the low regard people have for computers. Look around you--almost every object pays some passable respect to usability and form. We shouldn't make (and sell) stuff that's ugly, cumbersome, confusing, and surprising, because it's dehumanizing.

      Two, software that is not conceptually clean is hard to extend. People often talk about maintainability, but it rarely gets priority during implementation. Why did Netscape's browser finally lose? Not because they didn't have good ideas for new features, but because it was internally such a mess that they couldn't improve it fast enough. This is not uncommon.

      So, even when we feel the very necessary pressure to get our code out the door, we need to push back in order to give more attention to beauty. We will benefit.

    --

    The evaluation of an action as 'practical' . . . depends on what it is that one wishes to practice.
  148. Check your premises, something is wrong by eschasi · · Score: 3, Interesting
    michael says:


    Most software is so bad, in fact, that if it were a bridge, no one in his or her right mind would walk across it. If it were a house, we would be afraid to enter. The only reason we (software engineers) get away with this scam is the general public cannot see inside of software systems. If software design were as visible as a bridge or house, we would be hiding our heads in shame.


    I'm sorry, Michael, but I must disagree. This weekend I had two wonderful counterexamples.


    We had our house built, in fine detail. That included making decisions about such seeming trivia as the knobs on the closet doors. It was a pain in the ass. But we got a helluva well-built house out of it.


    One part of this detailed process was selecting a builder. We knew from wandering thru unfinished houses that there were some real corner-cutters out there. It wasn't that their houses didn't meet code or fell down, but there's the letter of the rule, the spirit of the rule, and (best) is the urge to do it right. Our builder did it right.


    But he's the exception, not the rule. Open up the drywall on any house (or better yet, try to install some paneling) and you'll be surprised how much your house is out of true. We all get it, we all live with it.


    Even as well-done as ours is, tho, there are still some things that are hard to do. Like the pain we had this weekend running 10-baseT cable and coax to my teenagers rooms. Too damned many solid things in the way. Yeah, we didn't think of it in advance -- and twenty years ago, who did? Is this a design flaw? Nope, even the best of houses has errors.


    The other example from this weekend is building a computer for my sister. She doesn't need much; an older system will do the trick. So I went down into the Eschasi's Basement of Dead Computers and started scrounging stuff together.


    You know what? The mechanical design on most legacy PCs is light years ahead of their more `advanced' cousins, the workstation. My SS-10 is much harder to work on than the average PC. And let's not think about some of the other old systems out there...DECStation 3100, anyone?


    Why are PCs relatively good? Because they're designed to be cheap to assemble, and because economies of scale have helped made components standardized. So you get simple parts that plug together simply. For a counter-example, look at any automobile. It doesn't use standard components, so parts are custom-designed for ease of assembly.


    A modern PC, in spite of idiocy like the BIOS and DOS's legacy, is a thing of technical beauty. And so is some of the software we write.


    What distinguishes the good from the bad is (as so many have pointed out here) is (a) what you have to work with, and (b) what you're incented to do. With good tools and good standards and an environment where the software lifecycle is understood, good code is written. I do it damned near every day.

  149. Dumb question? by Logic+Bomb · · Score: 2

    This is NOT a troll. Seriously, isn't this question basically asking, "shouldn't we make software that works well and is relatively easy for another programmer to take over?" The point about "beauty" is somewhat relevant, in that well-constructed code has an elegance to it that other programmers can appreciate -- in the same way the Golden Gate does for civil engineers. But then you just get down to the same old ridiculous discussion about "what is beauty?", which is nightmare anywhere but DEFINITELY shouldn't be touched on Slashdot. ;-D Anyway, seems like a very silly question.

  150. oh, that sounds like by Anonymous Coward · · Score: 0

    >> programmers in XP projects are capable of writing ugly software.

    > Yes, and XP works anyway.

    hmm..

    yes it does, no it doesnt. Yes it does, no it doesnt. Yes it does, no it doesnt. Yes it does, no it doesnt...

  151. Re:*ACK* VB!! by Anonymous Coward · · Score: 0

    As a former C++ coder who is now suffering in that terrible hell known as "Microsoft Visual Interdev", I have to say that writing Visual Basic shouldn't be considered programming.

  152. Very clean code. by NotoriousQ · · Score: 1

    Vor sowe good examples how NOT to mrite your programs, check this site: IOCCC

    --
    badness 10000
    1. Re:Very clean code. by NotoriousQ · · Score: 1

      Sorry about spelling...still getting used to dvorak...forgot to check.

      --
      badness 10000
  153. What needs to happen by Todd+Knarr · · Score: 2

    My thought is that quality won't improve until software makers and authors are held responsible in the same way any other manufacturer is for defective products. If Ford, say, tried to say they weren't responsible for defective products beyond paying for a replacement car, any judge around would smack them for contempt of court for ignoring precedent before letting the jury take them to the cleaners ( see the Pinto case ). Until the same thing happens to software companies, we won't see any change.


    IMHO striking all those EULA provisions as illegal and enforcing consumer-protection rules for software would be a Good Thing.

  154. like it's a good thing by Johnny5000 · · Score: 1

    People are always bragging about what a hack job their code is, or how messy or dirty it is, but it works so that's the important thing. It becomes a joke.

    Personally I blame it on hungarian notation.

    My code's beautiful. Everything I write is gorgeous. :]

    -J5K

    --
    The libertarian solution to the failures of capitalism is to apply more capitalism til the failures are fixed.
  155. Beauty != Generality by Ian+Bicking · · Score: 2
    I think the pragmatist opinion that beauty is secondary to usefulness comes out of a confusion of beauty and generality. I'm not saying that usefulness isn't most important -- but beauty for beauty's sake doesn't conflict with usefulness very often.

    There's a tendency in people who Think Big, or maybe Beautiful, to make software that is more general than it needs to be. This monolithic design process -- where you Conceive The Program in one fell swoop, then Implement The Design -- that usually ends up ugly and not very useful.

    But when you appreciate that beauty is the balance between small and general, then you make things that are really useful.

  156. Good article, but... by KurdtX · · Score: 2, Insightful

    First off, I completely agree with the article, and am one of the biggest proponents of "beautiful software" I know, but...

    Not all software needs this much care Certainly if it's for you and your friends it can have all sorts of caveats, such as you can't have more than 3 windows open, and doesn't support adding and removing something at the same time, because the audience isn't big enough to justify the time. Sort of like how a lot of college kids build their own furniture out of 2x4s and cinder blocks. Which is sort of along the lines of:

    Some software is temporary Software with limited lifespan (especially those stopgap solutions) is often valued more if it is realeased sooner, so in my opinion it's acceptable for it to have rough edges. I think of it like those metal plates they put down to cover holes in the road while they lay pipes or whatever: they suck right now, but they'll be gone soon. Even for continuing projects a lot of features are faddish, in vogue while they are being designed, but by the time they get implemented, a new way is catching on. It's the pace of the industry that leads for so much corner-cutting.

    The complexity of large software projects is unprecedented I've often explained software to my (non-technical) friends as similar to building a car out of watch parts. And those are only for the smallish projects I've worked on. Software is virtually always a one-of-a-kind creation, so defects don't get "ironed out" over the production span. Actually, try taking 200 (or more) professionals from any discipline and see if they can work for a year on a project and see if they can produce something cohesive. Artists? They'd be too concerned about their individuality. Prototype car engineers? Ok, but what if they had to do everything by hand? That engine sure wouldn't be so smooth now would it?

    Point: Software creation is unique, in no other industry is there so little refinement of existing features, because there is such a high pace of invention. Only the Space Station seems (to me) to match software development in terms of scope, collaboration, and uniqueness; and it seems to have all the same problems as software development does.

    One last thing, these are excuses, but you should mostly listen to the article.

    --

    Kurdt
    I'm not anti-social. Just pro-technology.
  157. Stock options vs perfection by JustAnotherReader · · Score: 1
    Well let's see, if I meet the beta test date of Sept 30th then I get 33% of my 100,000 shares of stock immediatly vested. If I meet the next beta date of October 31st then I get the next 33% of my shares vested.

    So what are my real choices? Either I can hold out and write software that doesn't suck and give up tens of thousands of dollars, or I get the damn thing into beta on time.

    If I want to write great code then I work on my sourceforge project. If you want corporate code to be elegant then go bitch at the managers who tell us "You guys always pad your estimates too much. Instead of December I'm going to put you down for the end of September".

  158. Databases (Was:Good point...) by Anonymous Coward · · Score: 0

    You present an interesting example of bad design: MySQL. When database people dismiss MySQL, that's because the transactionless design of MySQL, besides putting your information at risk, betrays even the SQL name.

    But that's not all. SQL in itself is a mistake, a contamination of the relational model. This is not the place to explain the relational model for database management, its conceptual and practical relevance, but you can find something more at http://dbdebunk.com./

  159. Making it "beautiful" IS making it work. by Ungrounded+Lightning · · Score: 2
    I don't get paid to create beauty, especially not internal beauty. I need it to work, not look good.

    You're paid to make it work, make it keep on working, and do so in an efficient manner.

    That is WHY you must "make it beautiful". To do otherwise takes longer and costs more. A LOT more.

    One of the problems with this debate is the use of the vocabularity of aesthetics. That software with certain characteristics is also "beautiful" is a side-issue. The characteristics that make it "beautiful" are also those that make it:

    fast to write

    low in errors

    easy to debug

    easy to modify, augment, and improve.

    Being "beautiful" is pleasant for the programmers (which also improves productivity somewhat). But issues of "beauty" and "style" - AS beauty and style - are a red herring.

    And these characteristics that are usually only describable in these terms make an ENORMOUS differece.

    For instance: I habitually use these principles in my coding, and debug as I go. My work was once characterized as "... takes three times as long as anyone else, but it usually works."

    Bullshit.

    The techniques made my work so blazingly fast that I was able to deliver a complete, debugged, essentially error-free component in about three times what it took the other programmers to get to their first clean compile, or to do a debugging iteration. And by "essentially error-free" I mean that in over two years of work at one site, with thousands of lines of code, I had one error detected by someone else, in a preliminary internal release, before I had corrected it.

    But the result was that my time-to-completion was measured against everybody else's time-to-do-a-debugging-iteration. And the administration discounted my advice in favor of that of the "most productive" - read least careful - member of the team. And the bulk of the project iterated until the sponsor turned off the money.

    So this esperience was an example of how using the vocabulary of art to describe practical issues of programming methodology is actively counter-productive.

    --
    Bantam Dominique roosters crow a four-note song. Once you've heard it as "Happy BIRTHday" you can't NOT hear it that way
  160. Genu Project by ldumais · · Score: 1

    Genu the key,Isnt ? just search Genu into google.

  161. Re:Beauty is the code (enhance, embrace, and exten by poot_rootbeer · · Score: 1
    Litmus test of a website. Read the source of the first page. Is it clean, does it have extra lines, are there mixed case tags, is the formatting consistent?
    You're wrong. The questions you should be asking are: does this HTML render correctly in my browser? In other browsers? How quickly does the page load? Are there unnecessary HTML comments in the code (keep in mind, in a production environment, all HTML comments are unnecessary)?

    Having mixed-case tags is completely irrelevant to the PERFORMANCE of the website. It's a non-issue when writing the HTML code, it's a non-issue when transferring the document over the wire, it's a non-issue when the browser renders the document (unless the browser validates with XHTML 1.0 Strict). The important issue is not how nice the code looks to your eyeball; it's how nicely the code WORKS.

    (Please note that I am talking solely about markup languages like HTML; my comments may not be applicable if you extrapolate them to cover programming languages,)

  162. It's tough being a moderate... by smagruder · · Score: 2

    on the issue of software elegance. There is a middle ground on this issue, where code beauty/maintainability/simplicity can be weighed against expediency/commerce/requirements-meeting and a healthy outcome emerges. Of course, this almost always involves a political fracas with both Crap Coders who don't give a sh*t about the quality of their work as well as the Elegance Nazi's who won't accept anything that's not absolutely perfect.
    The best programmers, IMHO, are the ones who have the experience and social skills to influence both sides to "cut the crap" and get on with creating reasonably elegant and high-quality software in a reasonably fast manner.

    --
    Steve Magruder, Metro Foodist
  163. Case in point: SQL by leandrod · · Score: 1

    I posted almost the same thing as an AC by mistake, so here it goes again.

    Case in point: MySQL. When database people dismiss MySQL, that's because the transactionless design of MySQL, besides putting your information at risk, betrays even the SQL name.

    But that's not all. SQL in itself is a mistake, a contamination of the relational model. This is not the place to explain the relational model for database management, its conceptual and practical relevance, but you can find something more at http://dbdebunk.com./

    --
    Leandro Guimarães Faria Corcete DUTRA
    DA, DBA, SysAdmin, Data Modeller
    GNU Project, Debian GNU/Lin
  164. Simpler isn't always faster by beej · · Score: 1
    Simple programs [...] run faster (because there are fewer machine instructions)

    This can be true, but certainly isn't often the case. To optimize code for speed often involves contortions that do not clarify the code or make it simpler or easier to read.

    The real trick is making it fast and readable. :-)

  165. Software engineering isn't engineering by SimJockey · · Score: 1

    I'm an old school engineer (chemical to be exact) and to me, there is one thing that defines for me what an engineer does: have a sense of social responsibility. Doctors and lawyers are responsible only to their respective clients. Engineers are the only professionals who are responsible to society as a whole.
    Software engineering does neither. Nothing makes my skin crawl more than a MCSE calling themselves an engineer, in Canada we finally made that illegal. I make a mistake, and there is a big smoking crater and lots of dead people. I take that incredibly seriously. A software engineer makes a mistke, BSOD big deal!
    (Nothing critical to facility safety, in my experience, is controlled by software. It's all mechanical safety devices or discrete logic.)
    Computer science I can accept as an science. But software engineering has no sense of responsibility to the end user, let alone the greater good.

    --
    Laugh while you can, monkey boy!
    1. Re:Software engineering isn't engineering by tjb · · Score: 1

      Q: How well does your average military fighter jet fly without the software functioning 100%?

      A: Like a freakin' rock.

      When software needs to be written properly, it usually is.

      Space Shuttles, traffic-signals, air traffic control, and anti-lock brakes are all examples of things that completely (or nearly so) dependent on computers functioning properly to prevent people from dying and as a result, the systems cost more, but they work damn good.

      Tim

  166. But software ISN'T mechanical engineering by gtaluvit · · Score: 0

    If you are making a bridge, you are given specs for it, you design it, you build it, and you occasionally maintain it. However, once its built its done. With software you make an incredible design for your first specs. Then your asked to add features, maybe change some functionality. It becomes add-on after add-on. And if you need to make changes to a bridge, you don't tear it down, you just build over it. Well, with software, if you equate it to a bridge, you've taken a wooden-covered bridge and you turn it into the Golden Gate, with some cool pillars, maybe a dock, and some weird crane thing on the side that no one knows what it does but its left there "just in case." Quick dirty summary: SOFTWARE EVOLVES TOO FAST TO BE PRETTY

    --
    - gtaluvit (prnc. GOT-tuh-LUV-it)
  167. Java is inefficient by Procrasti · · Score: 2, Insightful

    Even Java works squarely against the goal of "efficient". Give me C++ any day.

    I've done projects in C, VB (im not proud), C++ (yep MFC et al, 5 years) and Java (1.5 years now), and I question the statement that java isn't efficient.

    I guess the gripe I have with this statement is your definition of efficiency. I won't argue that Java executes slower than an equivelent C++ program, after all it runs on a virtual machine that does have to do an amount of work to translate java byte code to native executable code, however, Moore's law applies here - machines and JIT (Just in Time) compilers will always get faster, as well as implementations of Swing and other graphics libraries.

    However, I also like to think of efficiency in terms of developer hours, support and maintainence. Java outshines C++ in its ability to clearly express your ideas in a way a machine can understand. It frees the programmer and maintainer of the details of memory management. Not that a developer doesn't have to understand memory management and the implications of holding references to objects, but that allocation and freeing of memory isn't a constant requirement. Every C++ program of sufficient complexity has to be tested and debugged for memory leaks - someone always forgets to add a destroy call somewhere.

    I won't even mention buffer overflow problems

    While I'm on the subject, and although I seem to be praising Java a lot here, there are always places for each language. I don't think Java would be a good choice of language to build a kernel in, for example. But a JVM based kernel? Well, a JVM couldn't be written in Java, could it? (think about that)

    And I wouldn't worry about Java being a proprietry language, as long as your java code executes in Kaffe and can be compiled with gcj (the gcc, java compiler, or something like that), then we will always have an open source program that will run accross many OSs and devices.

    To sum up, Java is generally a more elegent language than C++, this leads to code with quicker times to market, less bugs and less cost in support and maintenance - efficiency isn't everything, afterall, "premature optimisation is the root of all evil" -- Donald Knuth, and how much more premature can you get than in choosing the implementation language?

    1. Re:Java is inefficient by lavaforge · · Score: 2
      But a JVM based kernel? Well, a JVM couldn't be written in Java, could it?


      Actually, with the GNU Java Compiler you just might be able to...

    2. Re:Java is inefficient by Telek · · Score: 2

      I guess the gripe I have with this statement is your definition of efficiency

      Fair enough. I meant fast. And Javascript is even worse.

      Java outshines C++ in its ability to clearly express your ideas in a way a machine can understand

      How so, more than C++ OOP? Java is so very close to C++ OOP that I'm not sure what you mean.

      I will agree that Java has a lot of ADD IN LIBRARIES that come standard, however this is part of the packaging, not the language.

      I want to make a linked list in Java. Ooops, no pointers, sorry. I want to pass a variable to a function and have it modify it, oops, no pointers. I want to write a program that takes as little memory as possible, or reuse memory, or optimize it to use common options of the processor, oops, no memory management, no assembler. I would really like to see a pseudo assembler in Java, I think that'd be kickass. You can write a platform independant assembler (I did for my last job, well, it translated into a few different assembly languages).

      Java gets ease where it says "uhh, no, shut up, sit down, I'll do that for you (and BTW, you can't do that".

      allocation and freeing of memory isn't a constant requirement

      I never did understand this gripe. Whenever I put a malloc, I immediately put a free. Whenever I do a new, I immediately put the destroy somewhere. And there are umpteen packages that do both source-code level and runtime level checking for memory problems.

      I won't even mention buffer overflow problems

      In light of the recent IIS problems, I don't blame you. However there are packages that can scan for and test these things. And those problems are generally the result of sloppy programming in the first place, but I guess that's what the whole article is about. Yes, however, it is nice to know that you can't have that happen in a Java program.

      there are always places for each language

      Absolutely. Java is easy, quick and dirty. You can RAD things with great ease. If development time is an issue, and you don't have the needed libraries in C, then Java is a great language. Just as long as you don't need speed or to get to the nuts-and-bolts of things.

      But a JVM based kernel? Well, a JVM couldn't be written in Java, could it? (think about that)


      Technically you could, of course. But you'd have your JVM running on a JVM... =P

      And I wouldn't worry about Java being a proprietry language

      Never said that it was, nor is C.

      Damnit, I want a programming language that gives me access to the freeking carry flag! =). I've done math routines a lot, and the code is literally 10x faster when you can optimize it by hand in assembly. I love assembly for small things that you want speed for. Itanium assembly is amazing for that task too (but much much more complicated).

      I guess that my gripe is because I'm coming mainly from a C background where you can do things like memory management, pointer management, and inline assembly. I am a big one for code efficiency and speed. When you're writing something that needs to run fast (i.e. a server), it pains me great to hear the execs go "well, we are going to have to buy some more servers so other expenditures are going to have to be curtailed a bit", knowing full well that if they weren't running on Java, or if they gave us the time to optimize the code base, you could run everything we have on half the amount of hardware that we have currently.

      --

      If God gave us curiosity
    3. Re:Java is inefficient by David+Greene · · Score: 1
      I've done projects in C, VB (im not proud), C++ (yep MFC et al, 5 years)

      Please don't take MFC as a good example of C++ code! :)

      However, I also like to think of efficiency in terms of developer hours, support and maintainence.

      Absolutely. Programmer time is usually much more important than machine time.

      It frees the programmer and maintainer of the details of memory management. Not that a developer doesn't have to understand memory management and the implications of holding references to objects, but that allocation and freeing of memory isn't a constant requirement.

      I like the fact that you recognize all developers need to understand memory management. I've seen too many comments about how Java will save the world through garbage collection. They don't realize that you actually have to release the reference before it gets cleaned up.

      In my C++ experience, holding onto references causes far more memory bloatedness than real leaks. People don't spend enough time profiling their code.

      Every C++ program of sufficient complexity has to be tested and debugged for memory leaks - someone always forgets to add a destroy call somewhere.

      Often this is due to poor code/library design. Judicious use of auto_ptr and the various smart pointer classes available can eliminate most of these problems. auto_ptr is particularly useful in conjunction with exception handling. Constructors and destructors are wonderful things. Often a few well-designed classes can solve these sorts of problems. Now, one thing I will gripe about is the need to declare destructors virtual. That's bitten me badly in the past! Thankfully, good compilers warn about it.

      I won't even mention buffer overflow problems

      These should be a non-issue with C++. Anyone using bare arrays in C++ code should be shot. :) Of course, you can overflow std::vector but at least you won't overwrite the stack. But then I'd have to ask why you aren't using std::istringstream or an equivalent (possibly custom) streaming system.

      --

    4. Re:Java is inefficient by Turing+Machine · · Score: 1

      I want to make a linked list in Java. Ooops, no pointers, sorry.

      So? It's trivial to code a linked list in Java. The "no pointers" FUD is just that, FUD. References to objects in Java can be used for just about anything you'd use a pointer for in C++.

    5. Re:Java is inefficient by Procrasti · · Score: 1

      I want to make a linked list in Java. Ooops, no pointers, sorry. I want to pass a variable to a function and have it modify it, oops, no pointers. I want to write a program that takes as little memory as possible, or reuse memory, or optimize it to use common options of the processor, oops, no memory management, no assembler. I would really like to see a pseudo assembler in Java, I think that'd be kickass. You can write a platform independant assembler (I did for my last job, well, it translated into a few different assembly languages).

      Well, everything in Java is passed by reference. From a C++ programmer's point of view, rather than thinking, Java has no pointers, its best to think, everything is a pointer. Its far easier to program a linked list class in Java than it is in C++. I've done both. If you pass an object to a method, that method can modify the object.

      The only thing that it won't do as well is type safe linked lists, because Java has no templates, but have you ever taken a C++ template and tried to compile it in VC++, Borland C++ and gcc, #ifdef everywhere to get this to work.

      I never did understand this gripe. Whenever I put a malloc, I immediately put a free. Whenever I do a new, I immediately put the destroy somewhere. And there are umpteen packages that do both source-code level and runtime level checking for memory problems.

      Yeah, except when the server creates an object, and the client has to free it, or someone else quickly adds a member variable to a class and forgets to clean it up in the destructor. The fact that you even have to do this in the first place is the problem.

      Absolutely. Java is easy, quick and dirty. You can RAD things with great ease. If development time is an issue, and you don't have the needed libraries in C, then Java is a great language. Just as long as you don't need speed or to get to the nuts-and-bolts of things

      No, my point is that Java is a cleaner language. Packages instead of ugly namespacing. If you really need the speed, you can link C shared libraries directly to your Java code through JNI (Java Native Interface) for that 5-10% of code that really does need to be fast, or bit twidling.

    6. Re:Java is inefficient by Merk · · Score: 2

      "And Javascript is even worse." Javascript really has nothing to do with Java. It's an untyped, interpreted language with a syntax vaguely similar to Java. But there are things you can do with Javascript that you can't do in C. Lambda forms: "new Function("x", "x+6")", runtime modification of objects, etc.

      "I want to pass a variable to a function and have it modify it, oops, no pointers." Objects in Java are passed by reference, built-in types aren't, but it's trivial to wrap them in an object if you want a function to modify them.

      Re garbage collection: "I never did understand this gripe. Whenever I put a malloc, I immediately put a free. Whenever I do a new, I immediately put the destroy somewhere." Ok, but what about when the memory is allocated by a 3rd party library you're using? What if it is badly documented and doesn't explain which functions allocate memory and which don't? What about exceptions and errors? Sometimes knowing when/where to delete memory is a very complex process, and really, is this something the average programmer should be doing, or something a compiler/runtime/vm should be doing?

      Maybe I'm just lazy but I prefer to design a system rather than worry about memory. I've done tight C/C++ code (on the Palm Pilot among other things), and I've done Java. To me, Java is just less frustrating, and places fewer barriers in my way.

      C/C++ is really C/C++/preprocessor. When I include a file I don't want to care if it has already been included, but C/C++ requires that every header file be protected with ifdefs. Why can't the system take care of that for me? What about changing functions? In Java I change it one place, in C/C++ I have to change the header and the source. Why can't the system take care of that for me? I guess I'm just lazy but to me those things are minutia that I don't want to have to bother with. I realize that Java handcuffs me, and I would never choose it for something that had to be highly optimized or really small. At the same time, I'm glad it handcuffs other less skilled developers. If nobody can use pointers, goto statements, global variables, and other messy things, it makes maintaining code so much nicer.

      My biggest problem with Java is with the implementation, not the language. If it were designed from the start to be platform-independant code, but code that had to be recompiled for each platform, that would be great. That would fix most of the speed issues, except for the garbage collection.

      About beauty: Generally inline assembly, preprocessor junk, goto statements, pointer arithmetic, etc. are ugly code. Sometimes they have their place, but unless they're well documented they're really nasty. Because of this I think it's much easier to write beautiful code in Java.

  168. beauty is in the eye of the beholder by mj6798 · · Score: 2
    I agree that software aesthetics matters, and a lot of software is written without it. But when it comes to aesthetics, there are still a lot of differences of opinion. Some people really like the design of a certain widely used C++ GUI toolkit, while others think it's pedestrian and cumbersome. Some people think Swing is the greatest thing since sliced bread, others think it's a messy, bloated piece of overdesigned software.

    So, by all means, be guided by aesthetics. But don't expect that everybody will agree with your sense of beauty.

  169. what about women? by ftide · · Score: 1
    "Most software design is lousy ... if it were a bridge, no one in his or her right mind would walk across it."

    The U.S. workforce is still 90+ percent male in software and network design.

    Women think differently then men. According to some scientists they have more serotonin transmitters so some think they are smarter then men but do not quote me on this, verify it elsewhere ...

    I attended FreeBSDCon '99 in Berkeley and nowhere since then have I seen such a disproportionate ratio of women to men versus the average population (women at 50+ percent?). I think there were five women at the convention with hundreds in attendance.

    These numbers are highly indicative of either a great reluctance on women's part to get into software design because it doesn't work the way they think or men who discriminate/harass them, or both. I'm tired of it and I don't think I'm alone.

    A simple visual object-oriented programming language (successor to LOGO?) and a top notch GUI for Linux could ease this needed transition. Maybe a proportionate group of men and women working together cooperatively will develop this.

    --ftide

    1. Re:what about women? by Fixer · · Score: 1
      A simple visual object-oriented programming language (successor to LOGO?) and a top notch GUI for Linux could ease this needed transition. Maybe a proportionate group of men and women working together cooperatively will develop this.
      What, are you claiming women need a "simple visual object-oriented programming language"?? What kind of sexist bullshit is this? My co-worker is a woman, with a Masters in Comp.Sci, and she's damned good in both Perl and C++.

      LOGO? Is this flamebait? LOGO?! Next thing you'll be saying is we should re-write our operating systems in Pilot.. (kudos if you remember Pilot)

      --
      "Avast! Prepare for the rodgering!" THWACK! "Arrr.. me nards.."
    2. Re:what about women? by ftide · · Score: 1
      What, are you claiming women need a "simple visual object-oriented programming language"?? What kind of sexist bullshit is this?

      I don't know. You started this one with the word sexist. I said "could ease" but it wasn't a fixed and immutable clause in the statement or an implication of anything.

      This topic doesn't seem that important to /. moderation, re: "Score: 1". That's too bad since it's going to be a serious topic in the next few years.

    3. Re:what about women? by Anonymous Coward · · Score: 1, Funny
      some think they are smarter then men


      In my experience, they all think they're smarter than men.

  170. brain crash by www.sorehands.com · · Score: 1
    I run into many people every day, whose brain is has a BSOD. You can see it in their eyes.

  171. Standardize? by Anonymous Coward · · Score: 0

    What about standardization?

  172. Ever Looked at a House by XorA · · Score: 1

    Whoever wrote this obviously has never seen how badly houses can be built. How many times have you seen major disasters where everyone asks how did that building ever be allowed to be built. Engineering these days is a task on building something that will do the job for the least amount of money. No-one ever gives you the budget to improve a working section of code.

    G

  173. Zen and the art of Motorcycle Maintenance ... by akc · · Score: 1

    ... is a must for all software engineers.

  174. um, is it just me ... by codecowboy · · Score: 1

    ... or does anyone else find it is funny that the article discusses software aesthetics using Visual Basic code examples ...

  175. Interesting comparison. by Black+Parrot · · Score: 2

    > And I agree, standards in software design & implementation need to improve - particularly in the shrink-wrap world

    I own an automobile. There was a minor flaw in the design and/or implementation, namely the "low battery" light for that model did not always come on when it should.

    For this, they recalled my car and fixed it at their own expense.

    What happens when COTS software ships with a bug of that nature?

    The world is full of crappy software because people put up with it.

    --
    Sheesh, evil *and* a jerk. -- Jade
    1. Re:Interesting comparison. by KyleCordes · · Score: 1

      [they recalled my car and fixed it at their own expense]

      Perhaps the cost of (possibly) doing this was built in to the purchase price. Indeed, if they don't do this (at least with big problems) they would get in trouble with the government.

      If you wrote some code this year (and were paid this year), and 3 years down the road you are working somewhere else and a bug is that found in that old code, would you like to go fix it "for free"? If you had to do that, you would need to price it in to what you charged for your labors in the first place.

  176. too bad CS != software engineering by StandardDeviant · · Score: 2
    Maybe it's just the luck of the draw considering the CS programs I've looked at, but very few CS programs seem to emphasize *software engineering* as opposed to theory. (Don't get me wrong, theory is important, but theory and 50 cents will get you a cup of coffee when it comes time to actually build something).


    Software engineering can be taught, but IMHO the real prerequisits are a careful and analytic method of thought, along with the ability to absorb technical details like a dry sponge tossed in water, and the perserverance to tackle tasks that seem impossible. Any technical major in college will be sufficient to aquire these traits, because there are things of intellectual complexity to rival the worst of CS in many other fields (for example, IMHO the analysis of algorithms pales in comparison to quantum mechanics or group theory; and if you think Biology is simple I invite you to examine the Kreb's cycle or Citric Acid cycle at some point. ). The rest, quite honestly, you can aquire by going to a bookstore and buying books to fill in the theoretic gaps in your knowledge. And you don't really know anything until your first job.


    So saying that only majoring in CS gives you the ability to produce good software and judge the merits of software, is more than slightly myopic.
    Insight into solving problems with electrons flowing through silicon is by no means dependent on what formal educational background you have.
    Remember, Turing and Djikstra weren't computer scientists in the formal sense of the word (respectively their formal backgrounds were/are in mathematics and theoretical physics).


    Of course, coming into the art of software engineering from computational chemistry may have prejudiced me to some degree. ;-)

  177. Foundation by de_boer_man · · Score: 1

    Contractors, builders, city planners, etc. have the ability to pick the environment in which they build. Before a building permit is issued, studies are (usually) completed to make sure that the environment is sound and will support the proposed building.

    This is a far cry better than the foundation upon which software engineers build. The foundation that has been laid and cannot be changed is usually the underlying operating system. Without being able to change an extremely shaky foundation, an extremely shaky "building" is the result.

    This becomes even worse when all of the "building codes" are defined by the provider of the OS, but not all of these "codes" are published for the engineer to build from. No wonder the "building" software engineers create is so shabby! Give a contractor a rocky, uneven field with a stream running through it, don't tell him all of the building codes, make him and his workers build without breaking the ground (the environment in which the building is built) and make him work in the dark at least half of the time, and then we are approaching the conditions that M$ has given software engineers.

    --
    .sig wanted. Inquire within.
  178. UI by Traicovn · · Score: 2

    Perhaps that's why big designers have people whose single task is to do ui (user interface) and why good ui designers get paid so well.

    --

    [Something witty and intelligent should have appeared here.]
    {Traicovn}
  179. flawed response by srvivn21 · · Score: 2

    Not only is the UI supposed to look good, but the software is supposed to function well. It is very dificult to draw an analogy between physical objects and ethereal ones (such as cconnell and the bridge or you and the house/car). How do you correlate a really nasty bit of code that is completely unreadable but executes fast-as-hell? A turbo maybe?

    Sure I want my house's walls to look pretty, but I also want the behind the walls stuff to be well thought out and implemented. If the waste from the toilet has to travel up the wall, over the BR ceiling and then down to the sewer, I am going to be displeased with the results.

    By the same respects, if your car's engine is "covered in grease" it takes about 5 minutes with a degreasing spray to clean it up. So there are "all kinds of crap is sticking every which way" and "it doesn't make sense to the non-initiated". I am certainly not going to make much sense of even a well writen C program. But my programmer friend will (if the code is well writen, and he knows the language). Just the same way that my mechanic can make sense of the engine (if the engine is standard, and he is familiar with the tech i.e. fuel injection, diesel, etc).

    Just because the back end of a program is hidden from view, and/or would make little sense to the masses, does not justify discarding sensible software aesthetics. Just ask the Saab mechanic that has to pull the engine to replace the oil pan gasket. He'll tell you that function is not more important than form.

    1. Re:flawed response by penguinboy · · Score: 1

      Just ask the Saab mechanic that has to pull the engine to replace the oil pan gasket. He'll tell you that function is not more important than form.

      Or ask the owner who has to pay for that mechanic's hours of time to replace the gasket. There it shows that even though the customer need know nothing about the bad design, it definitely does affect them.

  180. There are reasons for it. by Karellen · · Score: 2

    Yeah, there is some truth in that, but...

    Most software written is written for the first time. Writing a new piece of software is not like building another house. It's like building the first house, or the first bridge, or the first power station. If one were already build, we'd use that. But there isn't, so we have to invent it as we go.

    And no matter how many houses or bridges you've built, it's really unlikely you'll build your first power plant correctly the first time around. There's stuff you just can't know about power plants until you actually get around to building one and see where your plans were wrong.

    Yeah - I can write a function (or object, or whatever) to do foo with my eyes closed. Just as a good engineer can build a wall or a tower. But until you put all your walls and towers together for this damn thing, it's really easy to miss the support beam you _really_ need to hold _that_ piece of roof up, even if all the rest of the roof, and all the walls, floors and plumbing work. And because it's _way_ too expensive in terms of time and money to pull the whole thing down and do it again from scratch, you jury-rig it. You have to.

    Of course it doesn't help that your schedules are normally set by someone else, who insists that you have to get this new piece of software out the door before anyone else, because getting to market first with a buggy product is more important (in their eyes) than getting it right. There's always time to get it right later they say, but if we miss getting to market first, someone else will have the mindshare and won't bother buying our product, even if it is better, if they've already got this other guy's product that _almost_ does the job and they've been promised a cheap upgrade and bugfix within the year.

    And seeing as they're the guys with the money, if you won't do it their way, they'll quite happily find someone who will.

    So you write and design this piece of software as you go, doing your damn best to make it Right given the (impossible) constraints given, but having to jury-rig as you go at times, telling yourself you'll get it right for version 2, having learned what you have. Meanwhile, your non-technical superiours look at you strange when you say that the internals are 'ugly' and that you really need to tear it all down and start again (which is what research - which is what you're doing, let's face it - is all about), and insist that version 2 will do fine being an extension of what's already there.

    _That's_ why it's ugly and doesn't work.

    --
    Why doesn't the gene pool have a life guard?
  181. #1 Peeve by Anonymous Coward · · Score: 0

    I know the man is brilliant, but in my opinion his code samples are CRAP. I know this will get moderated as flame bait, but it comes from the heart. One letter variable names should be OUTLAWED from languages. I don't know how many times I've had to wipe up the shit that someone left because they didn't take the time to think up better variable names. Second to this is variable names are that are sequenced. For example: a1, a2, a3.

    No doubt this will generate a lot of heat, but I know there has to be others who feel the same way.

    1. Re:#1 Peeve by Kalani · · Score: 1

      Not to mention that sequencing variable names can just be abstracted by using some container (arrays, lists, trees, etc.)

      --
      ___
      The ends are ape-chosen, only the means are man's. -- Aldous Huxley
    2. Re:#1 Peeve by Anonymous Coward · · Score: 0
      One letter variable names should be OUTLAWED from languages

      Except for counters or indexes in loops. Anything more than i, j, or k is overkill and actually distracts from readability

    3. Re:#1 Peeve by Anonymous Coward · · Score: 0

      Except for counters or indexes in loops. Anything more than i, j, or k is overkill and actually distracts from readability

      ESPECIALLY in counters indexes and loops. Everytime I hear someone mention these exceptions, I PUKE!!! Those harmless counters and loops always find their way into the program somehow, outside the scope of their original domain. If I had my way, they'd be outlawed without exception. And since I'm the programming manager, I get my way. No one in my shop gets to use one letter variables.

      By the way. You're fired!

    4. Re:#1 Peeve by Anonymous Coward · · Score: 0
      Those harmless counters and loops always find their way into the program somehow, outside the scope of their original domain.

      Sure, that comes when you don't learn how to scope variables.
      Try getting out of scope with this:

      for my $i in (1..10) {
      print "For the $i. time, I will not be out of scope";
      };

      print defined $i ? $i : "See? I told ya";

  182. A better anology is to building a condominium by zerogravitas · · Score: 1

    Building a dwelling is much more like your average software project.
    1) It has multiple subsystems. In a house, there is the roof, the walls, the electricity, ventilation, plumbing, the foundation etc. In most decent sized projects well, there are also many subsystems (database I/O, display widgets, parser, interpreter etc).
    2) Some subsystems are more critical than other subsystems. Most people are much more critical about the structural integrity of the house and then probably the plumbing/electrical, than they are about, say ventilation, or nicely placed windows.
    3) Look at the life cycle of most condominiums to see what "good enough" construction and design looks like. "Good enough" in condo construction means that the owners don't sue for about eight years (long enough for the original builder to duck financial liability ;)

    --
    Have a NICE day.
  183. Re:*ACK* VB!! by WildBeast · · Score: 1

    I may look like an idiot by saying that but dude I can't write in VB, it's too weird for me to understand.

  184. There is a lot of art to both by JohnTheFisherman · · Score: 1

    and a lot of science to both. I DO both, and I don't see any intrinsic difference. You start out with a problem, and you wish to create as elegant, straightforward, and cost-effective a solution as possible. There artistic flairs that can be applied to either, but both are scientific arts.

    If you do not see similar art in engineering, you aren't looking hard enough.

    1. Re:There is a lot of art to both by Ripsnorter · · Score: 1

      Yes that is true but usually with software engineering you don't end up solving the problem that you started to. That is the real art

  185. similiar, but different by NaturePhotog · · Score: 2

    There are a lot of similarities, but there are some important differences.


    Different people usually build the house than design it. The design by an architect can be done at a more sane pace, but once the building starts, it becomes very expensive to have delays or slow downs. In software, there's usually pressure from day one. Also, with a house as with software, you can have a great designer and a lousy builder/coder and end up with a less than optimal result. Or vice versa, though a really good builder/coder can sometimes save a bad design.


    One significant difference is that houses have some standards they have to follow, the Uniform Building Code plus local building codes (such as for earthquake safety). Houses also have periodic inspections during building (framing, electrical, plumbing, etc.) to make sure those standards are followed. Sure, the inspections aren't ultra-detailed, but they do keep the builder somewhat honest.


    Beautiful code usually has periodic inspections, too -- starting with reviewing the design. But too often such reviews are sacrificed in the name of the schedule. There was an interesting discussion about code reviews on /. a while back.


    Another significant difference is that in building a house, it's agreed up front what the design is going to be. If there are changes, people know it costs time and money. If standard sizes for doors, windows, etc., are used, it's cheaper and faster than doing custom sizes. Those lessons don't seem to be universally understood in the software world, though.


    Finally, the author notes that it isn't a perfect metaphore. But regarding his statement that:

    Readability is the one area of software aesthetics that does not have an obvious parallel with physical construction.

    There is a parallel: a good house requires a well-drawn design, and communication (written and spoken) between the architect and the builder. A good design includes a document with the things that standard architectual drawings doesn't include spelled out: what materials to use if they aren't standard, what colors, any thing to watch out for, etc. This is very similar to the need for clear, readable code.

    All in all, an interesting article, with some good thoughts. Even if the metaphor isn't perfect.

  186. The Life or Death Test by Grizzletooth · · Score: 1

    It is easy to see why software has evolved the way it has. Originally bridges were just logs over the river, they have gotten better because people fell off the logs and died. Life or death situations tend to sharpen the skills of prosepctive designers quickly.

    Military software doesn't have the same problems as M$ software. Because most military software has been designed with the "life or death" benchmark firmly in mind. Commercial software will never approach the design standards of bridges and buildings, simply beacuse no one will ever look at a subroutine and wonder, "will someone die if I don't re-code that goto?"

  187. Re:For who have been censored by ip banning: by WildBeast · · Score: 1

    I thought that Slashdot was against censorship.

  188. Elements of Programming Style by codefool · · Score: 1

    is also a must.

    --
    "Stop whining!" - Arnold, as Mr. Kimble
  189. His analogy would work if applied by Skapare · · Score: 2

    There are 5 kinds of causes of bridge failures:

    • Bad specification
    • Bad design
    • Bad construction
    • Bad maintenance
    • Accident or sabotage
    As you point out, bridges do FALL DOWN. Here is a list of major bridge collapses, including this one which I actually witnessed fall. And the expense of one crash tracked to an error in design can be enormous. This is area where quality is design is important, and usually is done. And given that the cost of the design work is small compared to the cost of materials, construction, and loss in the event of a crash, there is relatively little pressure to reduce costs by cutting back on the design diligence. That doesn't rule out trying to design for lower costs elsewhere, but still, that is rare due to the extreme costs of crash.

    Software doesn't usually have the extreme costs of a crash. Some exceptions do exist, like airplane navigation and medical instruments (and cases of bad software there is a concern, too), but in general, the cost of a crash is low compared to the cost of design, which is often very high. That means that cost cutting measures tend to focus on the design because that's where the costs are high, even though it's only that way because the other costs are low. So pointy haired managers will do their thing and we get software that sucks to some degree.

    If software did have the same cost ratios of a bridge, you can be sure the design quality would not be skimped on, and better software would result. In the sense of "if the economic model could be applied" the analogy fits. But of course reality is that the economic model is not the same at all. So I see where he is coming from with his analogy, and it makes sense, but we can't use it to solve the problem of why software sucks so much.

    --
    now we need to go OSS in diesel cars
    1. Re:His analogy would work if applied by benedict · · Score: 2

      The cost of a software design failure would be higher if software design firms were liable for the consequences of failure of their software.

      The implications of rules like that would be enormous, and I'm not sure that they would be beneficial. But I'm sure we've all wished for them at one time or another!

      --
      Ben "You have your mind on computers, it seems."
  190. Software has one purpose by jdevons · · Score: 1
    Software's one and only purpose is to do what the user requires.

    Now, we (software developers) are notoriously bad at finding out what the customer wants and then implementing it correctly - with that I'll agree. But I really do think that there has been progress in this arena...

    --
    I do everything the voices in my head tell me to...
  191. No kidding... by Keeper · · Score: 2

    The last house my parents bought was new. It came with bugs [defects].

    Flipping certain light switches would result in an exception being thrown [circuit breaker being chipped].

    There were some graphical glitches in the house rendering [missed paint in a few areas].

    One of the bedrooms had a half-assed bug fix [garage roof went through one of the windows; they fixed the problem by cutting the window size in half].

    I could go on, but you get the point. :)

  192. Bridges suck by TechnoWeenie · · Score: 1

    If bridges are so all fired wonderful, why do I have to creep along at 2 mph every day when I cross the bridge going home. If the bridge was so wonderfully designed, traffic shouldn't back up. And sometimes the traffic across the bridge stops completely. It's as frustrating as if my computer just locked and it takes 2 hours for it to reboot.

    They should build bridges like they write software ... when it locks up it just takes a couple of minutes to clear things up!!!!

    However wrote this article either doesn't use many bridges (at least not around here) or doesn't know how good the software is.

    1. Re:Bridges suck by philipm · · Score: 0

      just reboot with a police siren

  193. stinking code by spektr · · Score: 1

    Software aesthetics? Just look at the crappy HTML-code of this article:

    <p class="DefaultText" style="text-indent: 0.5in; line-height: 150%; margin-left: 0in">
    <span style="font-family:Wingdings">?<span style="font:7.0pt &quot;Times New Roman&quot;">&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;
    </span></span>Cooperation</p>


    What should be a <ul> is emulated with CSS and windings 8-bit characters (bullets, I suppose - they don't display on my system, because I'm not using windows!). A Frontpage-Consultant confesses his secret love for goto's and teaches us software-aesthetics using VB-examples. Strange times.

  194. Perfect analogy by SuperKendall · · Score: 2

    When I helped a friend refinish a basement, we did make sure that all the extra things like wiring and such were done well. The framing was all well put together with good lumber, the wiring all very efficient and well planned. The junction boxes were all open and easy to work with, room for expansion.

    Personally, I would be upset if I opened up my walls and found a badly done job (in fact that's often true of my current house as the builders were rather careless in spots).

    If the engine of the car is covered in grease then it's not working as well as it could, you're just asking for a breakdown. A well-designed engine is very pretty - have you ever been to a new car show?

    As for your manager not "giving" you an extra week to make it pretty - that's right, they'll never give it to you. You have to take it. Slowly over time they'll realize the benefit and give you more leeway - if not you can move on and try again. At least in the meantime you were able to work on something you were proud of instead of being the equivilent of a McDonalds worker, just punching a clock.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
  195. Failure has as many parents as success... by evilpenguin · · Score: 2

    It is a popular saying that success has many parents, but failure is an orphan. This is true as a parable, but not in fact. Failure, in fact, has many parents.

    One of them is economic. Quite apart from catastrophic civil engineering failures that result in injury, death, and vast property loss, there are innumerable engineering failures that merely have a steep price. When Ford designs an automobile and do not discover until production that the bolt holes on the block do not match up with the bolt holes on the transaxle, millions of dollars have already been spent tooling up the incorrect production lines. Millions more will have to be spent to correct the problem, not to mention the amount of inventory built prior to discovering the mistake. Since such errors are so costly, there is a strong economic incentive to avoid them. This is a cost far smaller than the collapse of the pedestrian bridge in the Vegas Hyatt, or than the collapse of the Tacoma-Narrows bridge, but it is a cost that can feel that heavy when the production engineering team has to explain things to the board of directors.

    While failure in software can indeed have high costs, it is realy on the level of cost even of the automotive example I use above. The plain truth is that there are bugs that it is simply not worth it to catch before the software ships.

    The virtual nature of software makes this an inescapable fact. If you want to see our economy screech to halt, require zero software defects.

    Consider as a comparison those places where software failure is roughly equal in consequence to mechanical failure, such as in implanted medical devices, or in launching manned spacecraft, or even in our (USA) overtaxed Air Traffic Control system. In these places, change control is every bit as rigorous as in the design process of civil engineering projects.

    Most software is bad because, frankly, most of it doesn't have to be that good and it would cost too much to make it that good. This is not to say that excellence should not be sought, nor to say that developers should not constantly be seeking new ways to improve software design and development, but, believe it or not, we actually do know how to make software with zero defects. Most developers and businesses are not willing to work within the controls that ensure this, or pay the price in slower development and longer time-to-market.

    In the long run, I think Free Software is the way to improve the quality of those applications (such as Operating Systems) that must indeed approach zero defects, since barring extremely rigid development methodologies that center around exhaustive code coverage and expected outcomes testing (test, design, code methods) coupled with a rigid system of change control and code review, we will never see zero defects.

    As a counter-example I would offer anecdotes from my own experience. One would be the dramatic improvements is error rates and development time I have seen by merely switching from a very fine, but bug prone language (C++) to Java. This is not the only reason to choose a language, but it is s good one. I am just finishing the development of a production floor control system in Java that took a team of six a mere six months to build with a near zero defect rate that would have (in my estimation, admittedly) taken 2 years in C++ and would likely have a number of latent pointer/reference errors that are difficult to discover and even more difficult to locate.

    So appropriate technology may be a more important predictor than methodology.

    Well, I'm really running on at length, but in my career I have seen the exhortation "we must do better" again and again, and very little changes because quality is expensive, and few people, if any, want to pay the price of quality software.

    Again, I say Free Software is your best bet, since you get much greater manpower on the code for "free" than anyone could afford to pay for...

    1. Re:Failure has as many parents as success... by ahde · · Score: 1
      I don't think that saying means what you think it means. Anyway...


      C++ pointer/reference errors are only difficult to track once lost. It's pretty easy to prevent them. The only time you need to do anything trick with pointers and references is when you're building optimized algorithms (where java wouldn't help you in the first place) or when you're setting up a back end library or UI.


      That's not to say it doesn't happen, but
      strncpy(a, b) is no more error prone than its equivalent if you don't try and get macho with operator .copy {strlib::string &a, char **b[0], char **b[x])

    2. Re:Failure has as many parents as success... by ahde · · Score: 1
      segfault
      core dumped

      I think I just proved myself wrong

    3. Re:Failure has as many parents as success... by evilpenguin · · Score: 2

      If you have written code as part of a large development team, you have seen innumerable cases where poiter work that should be easy turns out to be severly error prone. Your interface specifies a pointer to char pointer, but someone passes you a two-dimensional char array. That pass comes through multiple function calls before it gets to you. The program segfaults and, unlike in java, you don't get a stack trace. Find it. This will take you a while.

      Admittedly, C++ is better about this since you can const things and use references (which are a bit clearer than pointers), but not all C++ programmers know these things. Here, C++ backward C compatibility hurts a lot.

      It is certainly untrue that one has pointer problems only in optomize code.!

      There are quite a few tools to help with these problems; malloc replacements, stack guard libs, etc., but their use is scattershot and sporadic; not all compilers have such libraries available; not all shops believe in them.

  196. No my friend, yours is the flawed analogy by arantius · · Score: 1

    Code does in fact need to be "pretty". But what means "pretty" for code is different than for something else. Good code needs to be maintainable, because it is almost inevitably: an integral part of a larger whole, and going to be changed in the future.

    If a car manufacturer upgraded your car's engine every year, they would probably go to greater lengths to make sure that it fit in such a way that they could easily remove the existing engine, then replace it with the new one.

    The way code is *VERY* similar to the auto industry as you mention, is that extreme care is required to make each part not "pretty" but "properly". Every part has to meet strict requirements and tolerances. This is where the analogy begins to show differences.

    For the most part, pieces of cars are very carefully designed very smooth operating pieces of machinery. The bearings that let the wheels turn were designed with great care, and the people designing the bearings were probably very careful to talk to the people designing the wheels to make sure that either part would do exactly what they needed, and work together well.

    Two interfacing routines in code often do not have the same characteristics. A large number of programmers in today's field either: don't care or don't know how to make good code. I've been pained watching my coworkers code in the past, replaced existing routines with amazingly smaller and more efficient pieces, cringed as I watch "computer experts" just mash the arrow key and wait to be at the beginning of the line instead of just pressing "home".

    I think pretty is a very subjective word. Things will be pretty only from the right perspective. I believe the right eye can look at a house's wiring in the same way another would look at fine art in a museum. I've seen a lot of machines that nearly took my breath away, just because they accomplished their task so elegantly and cleanly. I've rarely seen code that did the same (in the workplace).

    --
    Health is simply dying at the slowest rate possible.
  197. word to that by binarybum · · Score: 1

    This is soo true. I believe that a major reason software continues to be disturbingly buggy is the lack of a quality control standard. If something is wrong with your house you have a contracter come look at it, if he finds that your walls were insulated with used coffee cups from McDonalds (found one of these in my wall) you nail the builder; there may even be legal options available to you. Same thing with a car or furniture. Average user may only notice that his door makes a noise, but the mechanic will notice that the manufacturer neglected a couple bolts. Very few people are going to find someone to crack open their source code to look for the origin of a problem when they notice a bug. In fact we are so far from a quality control standard that most people won't even report an obvious bug. Problematic software is the accepted norm. Also, going back to the car analogy, most software is essentially a car with it's hood welded shut since so little is open-source.

    --
    ôó
    1. Re:word to that by ahde · · Score: 1

      you could probably sue your software consultant too if he leaves a comment in your code like /*jimmy was here*/ That's even worse than a styrofoam cup in the insulation. The R factor loss aint as bad as all those wasted bytes in your source tree

    2. Re:word to that by philipm · · Score: 0

      that kind of attitude is why I don't comment

  198. Excellent book by Phrogz · · Score: 4, Insightful

    For a particularly good book describing the problem and situation (fabulous for understanding the flaws in most businesses software design methodology, and more importantly for convincing managers that this is the case) then you should read The Inmates are Running the Asylum by Alan Cooper, the 'Father of Visual Basic' and also author of About Face: The Essentials of User Interface Design .

    It's light on concrete solutions (although the foreward addresses why that is the case) but still a useful primer to read even if you want to solve the problem, since the first step to solving a problem is properly understanding it. It's so fabulously refreshing to see in print a rather respected person describing the problem as I know it to be true, and especially providing big-business, big-name, concrete examples to point to and say, "SEE! IT REALLY DOESN'T WORK TO SET ARBITRARY DEADLINES AND TO START CODING WITHOUT PROPER SPECS!".

    This issue is just a little bit important to me :)

  199. My House is made of Lego mindstorms by MrPants+tm · · Score: 1

    maybe your house is going to fall over but mine is strong as steel. Mindstorm steel that is. course its only 5x4x6 but hey those are the breaks for stability.

  200. Yep... by cr0sh · · Score: 2

    Just this past weekend...

    My SO and I were out pricing houses - something we have been doing lately on the weekend as we save (and scrimp and more) for the down payment to get our mortgage - fun, fun, FUN!

    Anyhow, we went to this one open house that was really funny. Looking around, and asking the seller, they wanted $205,000 (US) for it (way out of our price range, but we decided to continue to look around, for politeness sake). We went upstairs, and started looking around - one area that was funny was a closet we opened - and behind the sliding door was wall!

    It turns out that when the builder built the house, this room and the adjacent room had "side-by-side" closets - well, the second room had a larger closet than the one we were in, but the doors were the same size, so it was a really botched job.

    We left wondering what other "funkiness" was in that house...

    Reminds me of code I have seen...

    --
    Reason is the Path to God - Anon
  201. a thought by KuNgFo0 · · Score: 1

    A reason perhaps that designers do not open source their (closed source) projects after they've gone past their intended usefulness, is that their code was done terribly messy and they gain no benefit from going back and cleaning it up - and releasing this 'embarrasing' code may potentially harm future sales (No one wants to hire you after they've reviewed your past projects and seen how poorly they're written).

    1. Re:a thought by philipm · · Score: 0

      No I don't think its true. Most open source projects are low quality crap and noone seems to care. Probably IBM's 3 major contributions recently were the highest quality things we've seen in a long time.

  202. Perl Software Pet Peeve: not using warn and strict by linkyours · · Score: 3, Informative

    I just started a job recently where the previous developer of software that I'm modifying did NOT use warn or strict!!! How the hell do people justify that? I just don't get it... Not only do these tools speed debugging, they make your programs less succeptible to bugs.

    If anyone reading this does NOT use warn (invoked by putting a '-w' after your perl interpreter call, ie: #!/usr/bin/perl -w ), or strict (invoked by putting this after your perl interpreter call or package definition:

    use strict;

    then please do!

    You'll have to make sure your variables are scoped correctly (ie: my $scaler = 'whatever';), which may seem like a bitch but is HELPFUL!

    hehe, ok, enough of this. Hope you all are having a fun day.

    -japh

    p.s. I don't have a tv either, I recommend this if you don't like being brainwashed/desensitized, ;-p

  203. wake up and smell the technology by litewoheat · · Score: 0

    oh come now... in most cases software doesn't last long enough for it to be designed like something that does. technology moves too quickly for any company to invest time into writing perfect code. all these people who write about extreme software quality are the same people who get fired for making a project run late, very late. i don't know how many projects that i have been involved in, in one way or another, that were killed by the people who come in and say "let's design (and redesign) the whole thing to make it perfect, maybe we can even use the latest whiz-bang methodology i read about in the latest software engineering book". i still deal with people who get upset if something isn't perfectly designed documented and critiqued by a committee. maybe this kind of thing will make sense in the future when Moore's Law is repealed and there's a static technology base on which to engineer something that will last decades. but that senario is not within anyone's lifetimes.

    right now its all about time to market. microsoft knows this and profits by it. few other companies do hence they fail.

  204. I can claim the ugliest code of all! by James+Skarzinskas · · Score: 1

    I work a bit with TI-92 assembler, and you haven't seen ugly until you've seen this baby.

  205. Software as bridge/house by ahde · · Score: 1

    I think you should spend a little time fixing a bridge or remodelling a house before you hold them up as examples

    1. Re:Software as bridge/house by philipm · · Score: 0

      exactly!

      Its ovbvious that this guy never bought a house.

      Witht the current generation of particle board mansions going up on dime size lots here in MA, people are going to be learning about quality in, oh lets say 7 years. And they are going to be expensive lessons.

  206. 8086? by DrCode · · Score: 2
    That's when people got spoiled. I spent 3 years working on a word-processor in Z80 assembler when "PC" was a generic term, and extra memory beyond 64K was swapped in/out in 8K chunks. We even had spell-checking and support for right-to-left languages like Arabic.


    I wouldn't want to go back to the days of assembly-language, but you're right about it weeding out the incompetent. People who weren't with it just couldn't write assembler at all; but they often can churn out semi-working C/C++ code.

  207. I do this for XPLC by Pierre+Phaneuf · · Score: 1

    For XPLC, I do this "internals should look good" thing.

    There are some functions and code fragments that I re-wrote a number of times because they didn't have the right aesthetics to my eye.

  208. Re:You've never seen how a house is built, have yo by mj6798 · · Score: 2
    You've apparently never seen how a house is built. While the exterior finish looks very nice to the final occupants, the construction process and actual "code" (if you will) of a new home is quite sloppy; easily the equal to typical ugly code.

    Let me second this: most housing construction I have seen (in particular in the US) is pretty shoddy. However, as with software, if you build your house yourself using non-mass-production techniques, you know what goes into it, and you will end up with something that's more livable, more suited to your needs, more efficient, and often cheaper as well.

  209. Re:Richard Gabriel, software aesthetics, and patte by Anonymous Coward · · Score: 0
    It takes a certain level of arrogance to invent a whole sweeping theory just to explain the fact that people don't like your favorite programming language.


    Him and Stallman must be good buddies.

  210. Re:Java on Java by Anonymous Coward · · Score: 0

    IBM's Jalapeno JVM is written in Java..

  211. Ha, good one by ahde · · Score: 1
    building inspections.


    You kill me

  212. Good article by Anonymous Coward · · Score: 0

    I saw nothing to disagree with.
    And that's really quite rare.

  213. Good houses don't look beautiful by charvolant · · Score: 1
    If software design were as visible as a bridge or house, we would be hiding our heads in shame.

    Good houses often look like ropey software:

    • they have external wires going everywhere;
    • they have an extension built to house the cat;
    • you can get to the dining room by two completely different routes;
    • there's a priest hole that's been forgotton about;
    • there's a secret passage from the library to the kitchen;
    • there's a shortcut through the long gallery to the blue room.

    (Yes, of course I'm talking about an English country house. Software is complex and doesn't correspond to a two-up, two-down.)

    A good house got that way to serve the needs of the people who live in it. Not to satisfy the desires of the latest school of architectural thought. I always remember a TV program on a house designed by a minimalist architect. It looked like utter hell to live in; very aesthetically pleasing, though. Tom Wolfe's From Bauhaus to Our House is a pretty amusing read on what happens when aesthetic theory gets hold of the steering wheel.

    I like good software aesthetics. And there's a lot of advantages to having a good, well structured design that can accomodate the vagaries of user needs gracefully. But, ultimately, the aim is to provide something that is comfortable and natural to a user. The result is often going to look organic and messy.

  214. Let's analyze this a bit. by mindstrm · · Score: 2

    First.. the analogy to bridges... it doesn't hold up.

    Ugly code != unsafe bridge.

    Code that's not expandable and cleanly written is not necessarily bad, if it gets the intended job done.

    Now, I'm not saying there is no place for proper software engineering, and well-written code is always better than sloppy code... but let's remember.

    Not everyone has the time or effort to do really serious software engineering. If I buy an app, I expect it to do what it says it will do, no more, no less. If the underlying code is crappy, I don't care, so long as it doesn't affect my work.

  215. It just requires teamwork by Pedrito · · Score: 2

    Building good software (in the mid to large-system sense) is simply a matter of good teamwork, nothing more. Good teamwork means that the team comes up with coding standards that everyone practices. Good teamwork means that management from the top to the most junior program, have a way to communicate what the company needs and when it needs to be done. Good teamwork means that the team, from management down to the most junior programmer, agree on a system for developing requirements down to designing and implementing the software.

    While it's been a long road (longer than expected because of a lack of resources and a little too much confidence), we have come up with what everyone on our team believes will be a revolutionary product. Time will tell, but our customers and potential partners are mightily impressed.

    The team was fairly small. It started with two developers working together as architects and me as team manager. The team is now 5 developers (me being one of them) and me still managing and architecting. I'm not bragging. I learned from better programmers and better managers and did my best to provide what I thought I could provide. Through some luck and good teamwork, we've managed to provide what I promised and a whole lot more.

    The code is designed well enough that a recent hire (two weeks old) has already added significant functionality, yet the system consists of more than 40 individual components.

    Anyway, I owe it all to teamwork. I couldn't have done this alone certainly. I made a number of mistakes as a manager, and even as an architect, but I think that comes with breaking new ground. In the end, the overall design was solid enough that we've been able to survive changing and new requirements and still have a very stable and well designed system.

    Okay, looks like a long brag, I guess. Sorry.

  216. Better Code / Extreme Programming by mpcooke3 · · Score: 2, Insightful

    My personal experience is that extreme programming (XP) produces code that is exceptionally good quality at a low level but not so great at an overall architectural level.

    The reason for this I believe is the heavy use of Unit Testing. By testing first you have normally thought of a very elegant/simple design by the time you write the real code. It is also easy and safe to improve the code because you can check it passes the tests. But the tests also mean there is a great reluctance to change the overall architecture of a project because you will break hundreds of tests that will need to be moved, changed or rewritten.

    Another thing that helps with code quality in XP is the fact that you write it with a partner and within a week at least 5 other people will probably have criticised it :)

    1. Re:Better Code / Extreme Programming by drchrisharris · · Score: 1
      Unit Testing is just one of the pillars of XP. Refactoring is another. You should expect to go back and change your code to fit in with ever changing requirements. And that means at the high level as well.


      c

    2. Re:Better Code / Extreme Programming by p3d0 · · Score: 2

      It's one thing to have good intentions, and to want to refactor. It's another thing if the process you're using discourages it in practice.

      --
      Patrick Doyle
      I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
  217. It's the users, stupid! by csbruce · · Score: 2

    Say what you will about poor software quality, and I'm sure that there are various things that could be done to improve it, but the real problem is with the users. Most consumers are more interested in having software that mostly works today rather than software that works perfectly a year from now. This is how the markets work and managers know this, and they supply the market with inferior software in the shortest time possible.

    In theory, the software can be fixed in the second version if it turns out to be popular enough, but in practice, the same process happens over and over with each release. Screw it, ship it!

    In order to change this trend, consumers will actually have to hold out for high-quality software, rather than low-quality software available earlier.

  218. Talk about a gross generalization! by deepvoid · · Score: 1

    >> Most software is so bad, in fact, that if it were a bridge, no one in his or her right mind would walk across it.
    >> If it were a house, we would be afraid to enter.

    These lines have been so overused they are beginning to sound a tad trite. The fact remains, if the principles of engineering as applied to software, without the inadequacies of the development systems we get saddled with, software would be as robust as the bridge or the house.

    It is poor management, insufficient development time, impatient customers, and crappy infrastructure which are to blame for a large number of the wrecks out there. I have met and worked with many talented engineers who are given the same sort of commands Scotty got on the Enterprise; "Make it happen yesterday!" is the motto of our time, instead of make it happen right.

    Try just figuring out the exceptions to logic in the latest version of MSVC. Ad hoc operating systems aside, engineering anything usefull with the tools at hand can be quite an arduous and unnescessary adventure.

    Software engineers make an easy target, since what they must product takes more time then all other segments of a project. But you have to ask youself: Why does it take so long?

    The answer: When hardware engineers design a chip, whenever the come to a flaw in their design, instead of forcing a reexamination of the specification, they call it a feature and so the Software people have to work around that pothole. In addition, marketting wants a little more bang for the buck, so they want the software crew to slam in a new feature better done in hardware, but "oh, it can't wait for the next spin" Charlie wants it done in software now!

    Needless to say, poor communication in the analysis phase, poor modelling in the design phase and poor execution in the coding phase (read: programming is designing while coding, instead of designing before coding), result in a Frankenstein monster with more features than a Japanese microwave and twice as many bugs.

    If the managers could get off their cans an ensure these phases are followed AND supported, then the product would come out of the house rubust, usefull, and on-time (by realistic human standards).

    NOTE: There are 1278 bridges in California alone, which have failed federal safety guidelines and are in need of urgent repair. Have you seen the way they have been building houses lately?

    Grumble, grumble, grumble...
    ...now where is that coffee machine again?...

    --
    Fast machines, powerfull AI, impulsive invention,... All I lack is a good espresso machine!
  219. Accountability in Sofware Engineering by JohnsonWax · · Score: 1

    Last year I was talking with some high-ups in Boeing (VPs perhaps, I forget) about the need for licensing software engineers as Texas had recently begun doing, wondering what they thought of that move.

    While they agreed that there was need for accountability for software engineers (IIRC, these guys were planning YA-air traffic control network) their argument against licensing was that there were no defacto accepted standards for code. That is, it's obvious to license a structural engineer - there are building, seismic, etc. codes to adhere to that have been written down.

    Software has no such animals. No state (these are all state labor board issues) has ever written down that you should free a memory block after you're done with it, or check a pointer to see if it's null, and so on. Sure, these are accepted practices, but they aren't requirements.

    As to previous posters that suggest that buildings are chaotically built, they seem to be overlooking tiers of state and local building codes, building permits, inspectors, plus the need for contractors to be licensed in most states. There's a lot of checking and balancing to be done and if it's wrong... Well, in the case of buildings that engineers need to sign off on (3 stories and up + special purpose, in most states) structural failure can result in criminal malpractice suits and jail time. If people die and the engineer overlooked something, possibly manslaughter.

    Next time you are writing code, consider how you would approach the project and your boss if the prospect existed of the code causing bodily harm and you could be sent to jail? What if your code is used to control a traffic light, a power grid, an anti-lock brake system, an EKG display?

  220. Nothing new here by p3d0 · · Score: 2
    People have been saying this for 20 years. "Software should be better. It should be aesthetically pleasing. It should have the following properties. Blah blah blah."

    There are no insights in this article. Mr. Connell is just reiterating the sentiments we have all felt (or even expressed) at one time or another.

    --
    Patrick Doyle
    I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
  221. Programming is engineering by richieb · · Score: 1
    The moment it becomes an engineering science I'll quit. Engineering to me means no vision, no skill and no insight. Just following the orders, sir.

    But it is engineering already. Engineering is making of useful things by applying science, if appropriate science exists, or hacking (trial and error) until we build the thing we need.

    You should read some books on engineering (for example To Engineer is Human by Petroski).

    Someone described the difference between science and engineering by saying: "A scientists discovers what is, an engineer builds what never was".

    ...richie

    --
    ...richie - It is a good day to code.
  222. Software Quality by OceanWave · · Score: 1

    I fully agree with the point of this article. Being a programmer, myself, I sometimes find little "hints" into the operation of commercial software. Some of the most disappointing were applications written in "C" that the programmer used a "Bubble Sort" or other proportional to N^2 algorithm for sorting records. Never mind that "qsort()" is included in the standard 'C' libraries! Let me not even talk about Windows, with its unspeakable API's and grotesque inefficiencies. Some of which is so bad that I could program applications in assembly language faster than I could develop them to run under Windows.


    I am actually "getting out" of the IT industry, because I'm just plain frustrated. You can say that I can work with Linux or other alternative platforms, but the problem is the "accepted standards". Let's face it, most large companies have not gone to alternative operating systems for fear of "support"...never mind that these alternatives are far superior to the garbage turned out most commercial software firms.


    Some of the very old 8-bit computers had usable (and powerful) word-processors, spreadsheets and even development environments. They ran at 1-7 MHz. Our 1.2 GHz computers are choking on today's software! What is the problem! That PC in your home would have passes as a super-computer not that many years back. Most of what we are dealing with today is:


    • Rush to market - We are the software developers Q/A department, and not only are we off their payroll, but we pay them for tech support (their problem).
    • Poor engineering practice - These would-be developers that are incompetent or rushed. It could be unfamiliarity with the language or development environment, also.
    • Software companies are excluded from liability - I think the only way around it would be to pass a law stating that "any software company producing a product for profit cannot disclaim their liability in the license agreement".

    This last item would clean up a lot of the filth that clogs our hard drives. Can you imagine if Microsoft could be held responsible for the buffer overflows that worms like Code Red I and II take advantage of? Was it my imagination, or was this about the 50th one that was announced by various security organizations?


    We need to get back to the basics, and re-evaluate both the operating system platforms and the software design. People may scream that they would have to buy all new software for a radically different OS...But doesn't Microsoft force us into this already? We had to buy all new when 95 came out. A lot of things start to break as you go from 95 to 98 to Me to 2000 Pro. It's time to trash it and start fresh. And get back to basic, functional applications.


  223. Reliability of cars by Anonymous Coward · · Score: 0
    There is a lot to designing a car, or at least a car that holds up over time. How many people own a Gremlin, a Vega, or even a Chevette anymore, even if you wanted to hang on to one of these as a masochist's collectors item.


    Ever notice that cars seem to be holding up a lot longer these days. There is no fundamental change in their design, just a lot of attention to minor details. In order to do this, ever notice how little cars change these days? A Ford Taurus is pretty much the same deal as what they introduced back in 1986 apart from a multi-valve engine that is an expensive option.


    If Microsoft could stick with Windows 98 for 15 years, they may be able to make that reliable too.

  224. ( S c o r e : 4 , B u z z w o r d f u l ) by bk1e · · Score: 1

    s/Extreme Programming/Design Patterns/ or any other modern software practice and it makes just as much sense.

  225. Programming sucks because it's meant to by exa · · Score: 1

    You can't prevent programming from sucking because it's a mess from ground up. The good programmer knows the mess and deals with it. That's about it.

    PL design is my personal interest. I challenge anybody out there to show me a decent PL that's being widely used! Our systems are all flawed. C and C++ are not things that let you build beautiful structures. Any code beyond some scale written in these languages and on current systems will suck, especially if you get clueless programmers in the mix. (And I'm not saying that a _good_ language exists. Screw python,perl,java,... [and the list goes on] )

    Ah, and to those who claim that the mess can be elegant: NO WAY. 95% of all code on my GNU/Linux system is NOT elegant. No C code can ever be elegant as long as it is not the implementation of a simple sorting algorithm. Forget the language, everything is a mess. Our build/config systems are total kludgery. The UNIX *is* the biggest heap of junk, and what are we talking about? I'm not even talking about the 'doze side. This side is heaven compared to that hole of stupidity.

    That's what programming is like.

    It's got so little to do with physical construction. In the software world, what we build is logical, and it *is* complex. Humans are not smart enough to handle that much of complexity, and here we are.

    My point, though, is that even if we honestly wanted to build very good software it wouldn't be possible. You just need talented, smart and experienced programmers, and that's something you don't have. You can't just teach good programming like you can teach a simpler profession. It's sort of an expertise, like being a heart surgeon.

    --
    --exa--
  226. veteran progammers cost too much by Anonymous Coward · · Score: 0

    Or at least that's the attitude you'll get from some managements. They'd rather ship something barely workable and pay as little as possible in order to maximize their profits.

    Who loses? The consumer. Mostly becuase they don't know the difference between good software and bad software. I don't think Consumer Reports tests software the same way they test cars, for instance. One day, they'll figure out how to do so, and we'll see reliability ratings for different software packages.

    The day they start doing so, I guarantee you, software quality will improve. Companies listen to nothing and I mean NOTHING like declining revenues tied directly to product quality.

    Or maybe, just maybe, software quality doesn't matter to the consumer?

  227. This is typical XP evangelism, and as usual, it's supported by precious few facts.

    XP has its good points, certainly. However, it's not nearly as clever as it thinks it is. "Test first!" they claim. Where do these tests come from? The requirements, of course. What do they do? They lead you to implement code that systematically meets the requirements. S'funny, I coulda sworn that was what this "design" thingy was all about.

    And no, the fact that they UseIrritatingStyle for their LongWindedNamesForThings does not make them clever, either.

    I can certainly see the point of some of XP's major bases, but most of them aren't unique to XP, either. We frequently work in pairs at work, not just for a quick review, but really, for hours at a time, just as XP advocates. And yet we don't claim to use the XP approach. We refactor code a lot, and yet we don't claim to use the XP approach.

    In fact, the XP approach would likely have killed the project on which I work before it even started. Perhaps it's exceptional; it really is a MLOC project, it really has been going several years, they really did spend months to start with developing the framework on which it's based, and it really has paid off.

    Granted, it's over-engineered in places, which XP code should never be. Then again, I find it very hard to believe that an evolutionary approach such as XP advocates would ever have produced as well designed and integrated an approach as the senior developers on this project produced after weeks of forward planning.

    So, by all means highlight the strengths of XP. But let's leave the "Everyone should adopt it, because it's great, so there!" out, OK?

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  228. No no no. Your all wrong! by Anonymous Coward · · Score: 0

    CowboyNeal isn't pretty. -Jason of the 4th dimension (that means I'm stoned).

  229. i dont know by Anonymous Coward · · Score: 0

    Ok, I've been browzing threw a lot of these threads. And some of them comment a little bit about WinCE devices. I was once an Visor DLX owner. And I got a ton of modules for it. Total cost after buying the Visor and mods. (software no on really buys, they just find the cracked versions) The total was about $800. Then after realizing that the batteries (rechargables) started to last less and less I began to think. Why do i have this. what am i using it for. to play games, to transmit files, and to have a programmable remote. (I did use it for other things, but those are just examples) I was then thinking about just buying a Laptop. then I could just bring whatever I wanted where ever. Unfortunatly the cost was to high. Then I looked at a friend of mines Jornada.(actually a fellow worker) when He wasn't playing around w/ it I was. At 1st I admit it was a little confusing and was a little slow. but yeah, now I find out thats basicly because its a jornada. (the worse pocketpcs out there. Like an m100 is in the palm series. only one work. Yuck) but i got to basicly see how the operating system worked and played around w/ its features. I desided to look more in depth at what pocket pcs were all about (I work in a computer store so i have the luxury of trying these things out a lot) I came to the conclusion that I would but an Ipaq 3635. the reasons. number one. because its color. I was really getting sick of the grayscale ness of the visor dx. I wasn't about to spend $450 for the prism. When i got my ipaq for $440 again because of where I work. I think i would've only payed $380 or $390 for the prism. but seriously only $50 more and the improvement is a lot. you prism guys are proboly thinking. the prism is 16bit color where as the ipaq is only 12bit. the prism is better. unfortunatly there is no palmOS program that really uses all 16bits. So your 16bit Prism picture or game is going so show the same on the ipaq. the ipaq screen is also much much brighter then the prisms screen. the ipaq's cpu is a 16bit chip so in theory you could replace the screen, but im not going to risk that. next reason why i upgraded was because of the batteries. I was sick of the AAA batteries. even though i did have 6 rechargeable. they were only lasting for 2 days when i was running the visor. and about 1 - 2 weeks when i would just leave it off. w/ the ipaq with the screen light not on, it will easily last for 12 hours. when the screen light is on about 6-10 hours. this also will varry depending on what programs ur using and how much power they take. Turjah Episode II takes a lot of battery power. BTW. It takes 15-20 mins to fully recharge the Lithium Ion Battery in the Ipaq. With The PC Expantion card the Ipaq will last for 20 hours w/out having to recharge very easily. There is an external LIon battery also in the pc expantion card which will also recharge. Third reason, syncing is automatic. From the time I change something im writing on my paper to the time its on my Ipaq it takes 2 seconds and because i have officeXP it automaticly saves to whatever time i have it set to. thats for my excel, word, powerpoint, and outlook (calender/contacts/tasks/notes). Also with my ipaq I can send palmOS programs to anypalm device(peacemaker, came as part of the software package with the ipaq3635). But as far as i know WinCE will not recieve unless it is copied from another windows device/pc. I can send as well as recieve contacts, notes, and calender information. BeamWorks(palmOS) is an example program that can do that. the 4th reasons can basicly be found on this website.www.goipaq.com not only can i hook up a solarpanel to it and use the suns rays to power/recharge it. but i can but 2 5gig pcmcia cards in a duel pcmcia card expantion to make a total of about 10gigs of hd space. in the palm of your hand that is a lot of space. i can easily take out one of the 5 gig cards to leave 5 gigs still and have wireless internet or wireless LAN and use a broudband or even just a simply 56k connection to browze the internet anywhere in my house/ outside on my deck. and becuase i can put a keyboard and still keep the expantion slots i could do even more. on the ipaq you can change the os from Windows CE to a bottom down version of Linux. this bottom down version of linux is usb compadible. so there for, w/ a pcmcia card -> 2 usb adapter then 2 usb 4 port hubs you could have a lot of other devices, but if ur doing that much thats when u just goto the laptop. The next version of windows CE (4.0) is to have better USB and Firewire support. It is supported now. It's just a little tricky to use. Because there is also a pcmcia -> 2 firewire. as well as PCmcia -> VGA. and everything. I will proboly be posting more about these kinds of stuff on my website. www.kevintm.com .
    wow that was long. and only took 20 mins to write.

  230. Wow! by jd · · Score: 2
    There are more replies to this than I've seen on -any- non-Microspot topic.


    Back to the matter at hand, though - software problems are "complex" only in theory. Any given component can always be simplified. (That is the basis behind any heiratchical design technique, such as Jackson Structured Programming.)


    As any given component can be simplified, you can ALWAYS reduce it to a put-block-A-on-block-B level. This will NOT produce the "best" code, it is only guaranteed to produce working code.


    The challange - the REAL reason that programmers don't bother with Z, or JSP, or any other formal method, is to contract that expansion into something useful.


    Squeezing the expanded code, WITHOUT breaking any of the code, and WITH improving space & execution times, is not a trivial task. On this kind of scale, it can't be automated. There are no compilers with optimization routines capable of turning Z-specified code, at the most fundamental level, into useful, usable code.


    Nor are there any programmers capable of this task, or so it would seem, since virtually nobody even tries. (I include myself, here.)

    --
    It's a small world and it smells funny; I'd buy another if it wasn't for the money; Take back what I paid (SoM)
  231. Eat my shorts. by Anonymous Coward · · Score: 0

    Whiney-assed users.

  232. Remember when GOTO was magical? by N3P1u5U17r4 · · Score: 0

    Remember when you looked on in awe the first time you saw someone code

    10 PRINT "HELLO!"
    20 GOTO 10

    Many times you would go to the store and see this endless loop running on a vic20 or c64 but you knew how to stop it via CTL-C and replace the HELLO with your own name. (or "ATARI RULES" if you were an commodore hater)

    --
    You're Just Jealous Because The Voices Are Talking To Me.
  233. But bridges don't begin life as trade show demos by technomom · · Score: 1

    If I had a dime for every time a misguided marketing type confused a research demo or proof of concept written (heaven forbid in VB) by a summer intern for a working product and then promised a fully functional, fully tested, competively priced package tuned to a customer's whims inside of a month.....well, I probably wouldn't be spending the hours trying desperately to make it happen.

    technomom

  234. What is "elegant" code anyway? by foobarista · · Score: 2, Interesting

    Is it:

    1. Massively documented, heavily object oriented code with lots of reuse, designed for ease of enhancement and maintenance, etc?

    2. Tight, fast-executing code which, while it may be difficult to figure out at first glance, is powerful, resource-sparing, and generally cool algorithmically? Of course it is well documented, designed carefully, etc.

    3. Other standards of elegance?

    There are jobs for which (1) is the definition, and others for which (2) is a good definition - although my own bias leans toward (2). Note that systems built with (1) as the definition tend to be resource inefficient, but in many applications, this doesn't matter. Are you writing code which glues together a bunch of legacy db's and other apps or are you coding an OS or filesystem? To borrow a phrase from architecture: form follows function.

  235. BiggerBetterFasterNow! by lupine · · Score: 1

    Have you seen what they call houses nowadays, its pretty darn sad. Sure they don't fall down much, but they are stuffed full of fiber board, polypropylene, and blown insulation(where required by code). They stamp them out of cookie cutters and cut corners wherever possible. Shitty rugs, ugly linoleum, flat white paint, laminated cabinets. These things aren't build to last, they don't look good, and nobody cares! They drive their suv out to their suburban home and sit on their asses in front of the tv. art!? whats that?! Shakespeare in love playing on the movie channel?

    The general lack of quality in current software apps is a reflection of our society. Quality Craftsmanship is a thing of the past, mass production is where its at. Businesses and managers are pressured to bring products and services to market As Soon As Possible. Process design, peer review, and quality control of central components fall by the wayside as new useless features are added willy nilly in an effort to bolster sales. I try to write good software, but without proper project planning there is never enough time or thought allowed to enter the process. Sometimes I feel like writing quality commercial software is like trying to swim upstream.

    I have written some good tools that are used by many of our applications to quickly build linked customizable html displays of database data. I used another project as an excuse to build the tools. No time in the workplan for that! And have never been allowed time update and extend the tools even though it would clearly be beneficial and save time for many other programmers. Projects could be created with object oriented reusable code and modules well planed, organized, optimized etc, but clean code doesn't sell.

  236. Re:Perl Software Pet Peeve: not using warn and str by Anonymous Coward · · Score: 0

    p.s. I don't have a tv either,

    Then get one and bore yourself instead of boring others.

  237. Re:Inane analogies by MarkMac · · Score: 1
    Your reference to Richard Gabriel's article about Alexander's work and its relationship to software Design Patterns is quite appropriate as he points out that Alexander ultimately considered his concept of (architectural) Design Patterns to be mostly a failure for a number of reasons. Being overly simplistic and not taking into account other less tangible factors was certainly one of them. Alexander's concept of Design Patterns never did catch on in the field of architecture - and probably for good reason. (I seem to recall also seeing Gabriel's article published in at least one book on Design Patterns - it should appear in all of them!).

    The real issue though is that of the gross abuse of over-extended analogies and metaphors from other fields to justify one's own strong-headed opinion. Comparing software design to home building or civil engineering as exemplified by Connell is typical of this type of wrong-headed fuzzy thinking.

    Software design is software design. It is its own unique endeavor that may share all sorts of attributes with other activites but ultimatlely stands on its own. Software design has evolved into what it is now because that how it fits as a societal activity as determined by its practioners and product users. This means that software doesn't drive like a car, look like a house nor oink like a pig. And as Gabriel has pointed out, in the software field sometimes "worse is better"!

  238. Microsoft's best product by David+Gerard · · Score: 1

    is Excel.

    Why? Because, unlike NT or Word or whatever, it's the main application used by the people who sign the cheques.

    NT is not marketed to the poor bastards who administer it; it's marketed to their boss's boss's boss. And Word is not marketed to the secretaries. Excel is used by the people who sign the cheques, so they get something decent to use, that does its job well ...

    --
    http://rocknerd.co.uk
  239. The ananlogy is applicable... by bLitzfeuer · · Score: 1

    but crappy design and piss-poor implementation is everywhere, not just in software.

    When was the last time a vehicle was recalled because of improper wiring?

    The last time an airplane went down because of bad rivet placement

    Have you ever actually looked at the frame you house was built on during construction? I've seen frames with studs spaced out 30%-50% wider than the building codes spec out.

    K5's front page has a picture of a very famous bridge. (Who knew harmonics would do that?) And I bet no one, even the engineers themselves, thought anything was wrong with it 5 minutes prior that bridge came crumbling down.

    The devil is in the details. Don't assume that the next bridge you drive over is an elegant peice of engineering, I assure you it too has it's hacks, brute force tactics and hidden weaknesses. But like software those ugly pieces are hidden from the user.... right untill the point of failure.

  240. Re:*ACK* VBScript!! by EWillieL · · Score: 1

    I feel your pain -- BUT -- Visual Interdev is NOT VB! VBScript is indeed an abomination against God and Nature, but VB is maligned only because its early versions were implemented well enough to allow idiots to use it and thereby proliferate mounds of horrific spaghetti code (written without a plan, to be sure).

    I do often wish the idiots had been left out of the VB game, since I now have to go clean up after them (like on the project I'm working right now -- yeesh!). But to compare VB unfavorably to a language that still requires you to manage memory BY HAND in this day and age does everyone a grave disservice.

    --
    Ask your doctor if getting up off your ass is right for you! -- Bill Maher
  241. you'd build a bridge VERY differently by KyleCordes · · Score: 1

    Note that armies can toss up a bridge over a river in quite short order, if they really, really need to get across.

  242. Re:Perl Software Pet Peeve: not using warn and str by AllDewedUp · · Score: 1

    Enabling warnings is all well and good, unless you're using poorly-written system or third-party libraries. Then you're just stuck with all sorts of warnings filling up your log files or your console.

  243. Extreme Programming architecture by KyleCordes · · Score: 1

    [but not so great at an overall architectural level]

    Try turning the "refactoring" knob up higher... be more willing to make architectural enhancements. With plenty of tests in place (acceptance tests, not only unit tests), and minimal duplication in the code, it's remarkable how radically software architecture can be changed in a short time.

  244. Reminds me of an old joke... by Anonymous Coward · · Score: 1, Funny

    At a recent computer software engineering course in the US, the participants were given an awkward question to answer:

    "If you had just boarded an airliner and discovered that your team of programmers had been responsible for the flight control software, how many of you would disembark immediately?"

    Among the ensuing forest of raised hands only one man sat motionless.

    When asked what he would do, he replied that he would be quite content to stay on board.

    With his team's software, he reasoned, the plane was unlikely to even taxi as far as the runway, let alone take off.

    -----

    If the company I worked for made the software, the plane would start to burn, slowly. The cabin crew run around busily telling everyone that the plane was NOT on fire. The crew wouldn't tell the captain. That's because the captain is passed out. The plane is slowly consumed by flames, however, the passengers don't notice, because the temperature only rises very slowly. The plane then explodes (too late to do anything about it, after all, they believed the cabin crew), killing everyone. Falling back to earth, the captain wakes up and starts screaming "REBOOT IT!!!!!".

    How many of YOU would trust yourselves or the people you work with software that deals with life or death?

  245. Lots of software is described as having evolved... by crovira · · Score: 2

    It has evolved in the same way that melanoma can be considered to have evolved from healthy skin cells.

    Part of the problem lies with the root of the profession. Most software practitioners would compare themselves to doctors. Well with their media generated "Dr. Kildare" image of doctors.

    Real doctors harbor no such illusions of infallability. They know its called a practice for a rason. They're practising. Medicine unlike say, architecture, is far from an exact science.

    Most software projects start with simplifications based on unjustifiable assumptions and descend quickly into a managerial surreality where no regard is shown to the customer needs, marketability or even reality.

    Most people who cobble software together, like Frankeinstein stitching away in his laboratory, should consider careers in other fields: ("Ya wan' fries wi' 'hat?") They are too fuckin' ignorant to do it right at almost any level.

    Just because any fool can write a Visual Basic program with VisualStudio doesn't means that its a good idea.

    While the level of naivete shown by software developers at all levels, from the CEO to the janitor, might be delightful in a three year old it is downright frightening in alleged adults when you consider the degree of waste generated by the ineptitude of these cretins. They are forever re-inventing the wheel in the name of intellectual property. What property? What fuckin' intellect?

    The problem with comparisons to architecture is that they aren't valid. Architecture has standards groups, construction guidelines, review boards and comittees, material science and the one thing all architecture is in opposition to: gravity. Its residents may suck but the earth doesn't. Even at that people plunge down shafts, fall off balconies or trip and break off bits every year.

    How about automotive design? Until there were mandated to by force of law (and long jail sentences for murder,) cars had long solid steering wheels which could be counted on to impale the person behing the wheel in a head-on colision like a bloody butterfly to a display case. The Chevy Impala was also the Chevy impaler. The Corvair launched Ralph Nader's career. The litany of tragedy is not limited to one company or one continent.

    How about roads? The Romans built roads that are still in use. Yes. Nice flat roads on nice flat lands. Along mountain roads in many countries they plant a white wooden cross for every person who has died as the result of a plunge into the abyss at that spot in the road. (Bus plunges are specially showy but not as effective as a steel guard rail.)

    Most design isn't. Jonathan Ives may be brilliant at putting together pleasing designs but I wouldn't necessarily trust the guts if he had to put together the ENTIRE box, contents and all.

    Most software is inadequate crap slapped together by people who are trying something with one lobe of their brain tied behind their back. Its systemic and self-inflicted container-based stupidity.

    Most managers can't manage to keep out of the friggin' way or to keep their people supplied with guidelines and guidance. Most QA is dedicated to catching shit when the clients are already stepping in it. Most documentation sucks the wind that someone else broke. Its always late and never accurate and is usually written by someone whose grasp of any human language is, at best, tenuous.

    Hey! I wouldn't ask Proust to write a payroll program, why the fuck is some COBOL jockey writing a user manual? He can barely complete or comprehend a compound sentence. Nobody ever knows about the context that their software has to operate in.

    All in all, this is a pretty sorry industry.

    Now for the big pronouncement:

    This industry will be fucked as long as we use a container-based paradign for encapsulating software architecture.

    The very thought of encapsulation is a management fallacy.

    The management technique of drawing the box and cutting out everything that slops over the side is completely backwards.

    What fits completely inside the box is monotonic, generatable and hopelessly isolated.

    The strength of a system lies in the parts that slop over the edge.

    Systems are made up of objects and their relationships in the same way as a brick wall is comprised of bricks, mortar and the spacial relationships betwen the bricks.

    Architecture is not about bricks and mortar but about bricks, mortar and the space that is defined.
    Software architecture is about classes, objects and relationships.

    --
    MSBPodcast.com The opinions expressed here are my own. If you don't like 'em... Think up your own stuff.
  246. Art and life by dgroskind · · Score: 1

    In so far as programming is an art it is the art of the tradeoff. As the old saying goes: You can have it fast, you can have it good, you can have it cheap. Pick one.

    Among the issues that a programmer has to balance are:

    features

    reliability

    maintainability

    efficiency

    development time

    To a great extent, satisfying any one of these requirements means shirking the others. The resulting work is a compromise that will annoy and offend most of its constituents to some degree.

    The art, therefore, is in the process, not the result. As such, programming resembles politics in that a deal must be worked out between conflicting interests.

    A programmer can be artist but what he produces will rarely look like a work of art.

  247. If companies hired correctly... by imagineer_bob · · Score: 0
    ...and looked for experienced people with a good track record, there would be no software crisis.


    But if companies insist on hiring H1-B programmers who can't speak English and have dubious credentials, we get low quality software.

  248. This view is not based in reality... by OSgod · · Score: 1
    ..do you think every cut is perfect in a house? Do you think that every board is the exact right length? I have worked with builders for long enough to know -- good enough is when the ugly is hidden.

    Bridges are rated for a certain weight -- technically they could carry much more if built to the n'th degree -- should builders be ashamed that they did not maximize their material and design specs?

    Netscape needs to learn the lesson that bridge builders and carpenters did long ago -- it's not perfection, that's what trim is for, it's delivery on time and on-budget that counts. MS is learning that/has learned it (latest version 2 months ahead of schedule...).

    If a builder is a perfectionist they go out of business... they do good enough with trim, on time and under budget and lo and behold are considered true craftsmen.

    The sort of craftmanship most GNULinux people seem to think is required for software is limited to a very small set of craftsmen in todays world -- mostly in the furniture business for custom, expensive and trendy furniture. Not general purpose -- marginal players.

  249. I blame... by Anonymous Coward · · Score: 0

    the clipboard. I keep cutting and pasting the same crappy code.

    But, seriously, a lot of software has short life cycles and is written to do a very specific tasks. So a quick, ugly hack is sometimes preferrable over a well (long) thoughtout chunk of code.

  250. Re:Perl Software Pet Peeve: not using warn and str by thrig · · Score: 1

    { local $^W = 0; Third::Party::crap("foo"); }

    Or use the newer "no warnings" statement, and you can selectively silence the poorly written stuff.

  251. Re:Perfect analogy. by Pfhreakaz0id · · Score: 2

    This struck a nerve. It's when you have to dig and find out what a pice of sh*t it is you get mad. I've dug into code and thought "man, this is crap", but then again, it looks a lot like the code I wrote two years ago.

    But the other day I went to replace a toilet in my house (cracked base). When I pulled it up, I found a HOLE (I could see the dirt below the subfloor. Stuck into the toilet base was a thin metal pipe (think dryer vent pipe) rusted out, no wax seal, all the floor underneath rotted.

    Am I mad at the builder? Well, a little, but the house is 50 years old. I'm mad at the inspector who was too lazy to go 60 feet into the crawl space to look at this. One look at the pipe, you knew it was crap. And the black, rotted subfloor should have told you something..

    Similarly, I get mad at management for not LOOKING AT WHAT THE CODERS ARE DOING plus, of course, not backing coders when they say "this module is crap, it needs to be fixed -- excuse me "refactored."

    BTW, if you're curious, 14 hours later, replaced pipe with new PVC, patched it into the existing drain pipe (cast iron), replaced subflooring (got lucky there, tile was set in an two INCHES of mortar, stayed put fine while I replaced the boards underneath), jacked up a new extra support joist between two others, and installed the new toilet. You want it done right? Do it yourself. You program software right? And you think plumbing is hard? Nope, just messy and tiring. HACK YOUR HOUSE!!!

  252. Elegant Design - but then you have to implement it by Michael+Snoswell · · Score: 1

    I usually find that a system, once analysed, comes down to a bueatiful, elegant set of systems and flows that integrate and encapsulate the problem and often provide generalised solutions that alow for future growth and expansion. This usually happens afte r a lot of talking to the end users and pouring over the requirements spec and really understanding the problem.

    Then there's a pause. This may take hours or days or weeks (several months in one very large project I managed with several other code architects workingon the job too). In this period to the rest of the world (read: bosses) you're doing prtty much nothing but talking about stuff and having coffee.

    Then The Design hits like an epiphany, descending from on high and you just *know* it will work. The final implementation may have to make compromises in the name of speed or resources or the language, but the elegance is always there. You can see this in well written code.

    Try to explain this process to a non software person (like a mechanical engineer or a manager)...[sigh]

    --
    pithy comment
  253. Why should we listen to this guy? by swisener · · Score: 1

    Just for kicks I decided to check the HTML of the article. Not surprisingly, I find the following markup repeating:

    <p class="DefaultText" style="text-indent: 0.5in; line-height: 150%">

    Truly elegant HTML would have defined another class for this style. I suggest the author of this article pick up a copy of The Pragmatic Programmer and follow tip 11.

    DRY - Don't Repeat Yourself.

    --Steve

  254. Consumer driven, not quality driven. by tshak · · Score: 2

    We should expect the same level of quality and performance in software we demand in physical construction.

    Consumers are not willing to pay for such quality, or wait for it.

    --

    There is no longer anything that can be done with computers that is nontrivial and clearly legal. -- Paul Phillips
  255. Building Big Things by Pinball+Wizard · · Score: 2
    The problem with software engineering is that we don't have very good ways of building Big Things. A bridge is a Big Thing, but did the engineer have to design the process of smelting the steel? No, he gets "off the shelf" stuff to build his bridge and knows, because of the standards in place for steel and other bridge parts, he can make something that won't fall down.


    Software engineering is not at that point yet. We don't have rigid standards in place for stuff that is really at the raw material level in software. What our discipline needs is standard, off the shelf software components that have been proven to be both bug-free and to have used the best algorithm possible for its task. Some people claim that writing bug-free software is impossible, and maybe so, but we could still learn from other engineering disciplines and strive for a six-sigma level of quality.


    So what is really needed is a big, powerful, high-performance, and bug-free library that is able to perform common programming tasks. Preferably, it should have the ability to be called from a variety of higher-level languages. Come to think of it, if the underpinnings of .NET were built with real engineering standards, we might be able to start comparing our profession favorably to other types of engineering. Hopefully the fact that .NET is an open standard will encourage developers outside of MS to ensure that a high level of engineering exists. If .NET turns out to be less than promised, we still would need something to take its place. Whatever it is will need to be a standardized library that is big enough to accomplish most programming tasks, while at the same time having high performance and being bug-free.


    So far we aren't there. .NET is looming, but is unproven. What will be the standard library of code that will support future generations of coders in building the massive skyscrapers(compared to the modest houses of today) with the foundation and the tools we give them?

    --

    No, Thursday's out. How about never - is never good for you?

  256. Re:Perl Software Pet Peeve: not using warn and str by scrytch · · Score: 2

    If anyone reading this does NOT use warn (invoked by putting a '-w' after your perl interpreter call, ie: #!/usr/bin/perl -w

    Obsolete, use use warnings; for recent versions of perl.

    --
    I've finally had it: until slashdot gets article moderation, I am not coming back.
  257. Commodity, Firmness, and Delight by Anonymous Coward · · Score: 0

    If we compare software to Architecture, we see that at first the program only require that it meets the users needs. We look further and see that the software must be robust and allow for further expansion for new versions, or additions. Finally we see that if all is done properly, with an eye towards aesthetics, this software can be a thing of true beauty.

    Long ago it was proclaimed that Commodity, Firmness, and Delight are the attributes of Architecture. It is much the same, me thinks, in software design.

  258. check out Ada95 by RussP · · Score: 1

    Ada95 is widely recommended for safety-critical software systems. If you really want to write reliable, quality software, check it out.

    --
    I watch Brit Hume on Fox News
  259. ''inefficient'' languages by Tom7 · · Score: 2


    Right on. I'll gladly take a safe memory-managed language like Java to write my efficient code, since it means I can spend more time optimizing things which really matter (algorithms).

    By the way, there exist languages with the same abstraction qualities as java (safety, garbage collection, portability, etc.) which aren't slow in the sense that the original poster meant. Check out O'Caml, for instance. It's got a lot more interesting features than Java, and runs as fast as C.

  260. I got sick of writing bad software by elandal · · Score: 2

    At my former employer, software was written cheap. There usually were no requirements (at least no written ones), no real management, and the execs wanted the deals in.

    So, sometimes a project manager had a moment of brilliant thought when writing a schedule, time estimates, and budget, and happened to ask some senior developer "how long would this take, who'd need to work on this". With the answers (still not good, due to lack of information) he'd go on and get a decent schedule, time estimate and budget.

    However, then the sales intervened with "the customer needs this faster and won't pay that much". If the project manager again happened to understand what's going on, and asked the senior developer about if those changes were possible and what would need to be cut, and reworked the numbers, they'd still be over the sales requirements.

    Now, some exec who wants that particular deal in takes the numbers and the sales requirements (max time and money, both at most half the schedule and budget) and finds another project manager until someone takes the deal and decides he can make it happen.

    Of course then the schedule and budget are blown, the customer is unhappy and the company makes loss with the project.

    Some of us got sick with the company. We talked with the management, disagreed about the future, strategy, and basically everything there was. We walked out and formed a new company.

    Now, we have written project orders with written requirements and written acceptance criteria. We give reasonable estimates about time and money, and if the customer doesn't want to pay that much or wait that long, we don't get the contract. However, we still have customers who're willing to wait and pay for programs that work, are documented, and tested. And the developers are happier.

    And I'm a lot happier. Now I don't need to take deals that would need to be done "just well enough that the program works".

  261. Article doesn't ask the fundamental question by Anonymous Coward · · Score: 2

    Why should software be "beautiful"? Why should we care? Although I wouldn't use "beautiful", I'd use the analogy of the architecture of a house to software, as opposed to a bridge. Once a bridge is done, generally it stays the same. A house, on the other hand, is often expanded and modified a lot (depending on HOAs).

    From large software projects I've worked on, the original design had some sound principles, but it's architecture didn't allow it to expand to meet the inevitable requirement changes. Sort of like adding a room to a house or changing the size of a bathroom. One's idea of how the house would look was different from the next owner's (like programmers), so over time some houses look and feel like crap because of conflicting architectures. Or rooms are appended without thought so it's harder to move around the house. Just like it's harder and harder to add or change modules (classes) without introducing bugs due to bad software architecture. I'm living this problem of bad architecture in my current job, so I know of what I speak.

    As to other posters comments about how badly houses are built, I say if a house was like some software projects I've seen, you would have water pipes running straight across a hallway a foot off of the floor, outlets that aren't grounded, or stairways that go to nowhere (like the Winchester house http://www.winchestermysteryhouse.com/story.html). No, software is designed a _LOT_ worse nowadays than houses.

    When I have a new project or expand an existing one, I always try to take the time to decide if part of a class should be abstracted out here or implemented right there. I ask myself how do various classes interact. It doesn't really take that long to draw a sketch of what the architecture should look like. You don't HAVE to do a 100% UML set of diagrams [unless you have to :(] and down the road, it'll save WEEKS when the inevitable design change is asked for (threaded table access, or dynamic table sets per configuration). By abstracting various key items up front, making major architectural changes were done on time and under budget.

    As for the comment that we've talked about this a few months ago, it looks like we still need to talk about it some more. The software projects I've seen are still just as crappy as a few months ago, and the year before that, and so on. In fact, I think we should continue to repeat this post every few months until we get it right...

    Why should software be "beautiful"? Because your career and how people perceive how well you program may depend on it, as they will inevitably ask you to change it. Trust me, they will. The days of rigid monolithic military government (MIL-STD-1679) requirement definitions are gone (if they were ever there in the first place). Are you going to just sit there and whine about how difficult it is, or just do it and amaze others?

  262. Too simplistic by mulvad · · Score: 1

    I think the author has some good points even though they have been told before. I do think, though, that in all fairness to all software engineers the comparison with buildings is too simplistic.

    It is true that if the first design is awful, the engineers are to blame, but in reality I believe that most designs are - maybe not perfect - but at least suitable for the given problem. The biggest hurdle is when the requirements for the project changes, which could be compared to a regular house, that needs to hold a 70-story tall office building.

    It is no problem to do that, but to do it on top of a regular house might not be too easy. Is this then due to bad design?

  263. software is like building w/ toothpicks by MikeFM · · Score: 2

    I think in the book 'The Hacker and the Ants' there is a quote along the line of programming being like building out of toothpicks carefully glued together and if just one toothpick is out of place the whole thing comes crumbling down. I always liked that.. it seems very truthful. I might add that programmers are usually encouraged by those they work for to forget careful design and implementation and just duct tape parts together as quickly as they can make it work 'most of the time'.

    I like to write beautiful code.. as I imagine most real programmers do.. us geeks that live, breath, and dream in code.. but in real life there usually is not enough time or resources given to manage to write really well planned out code. This is why Microsoft sucks and a popular motto is "When it's done!" among the truely geeky programming houses and why open source will eventually kill most commercial software.

    With commercial software if it's ugly you aren't likely to get a second chance to really make it beautiful. With open source software it may start out ugly but over time can gradually become beautiful as people clean and fix it. The code is visible and so is everyone elses. You can help each other and learn from each other.

    --
    At what price learning? At what cost wisdom? The price is a man's peace of mind, and the cost is his life.
  264. We'd be screwed if people started coding better... by Mustang+Matt · · Score: 2, Funny

    I mean what would we do with all this 1 GHz+ processors and 512mb+ chunks of ram? If everyone starts coding better we could go back to older machines and be faster than we are now.

    --
    The man who trades freedom for security does not deserve nor will he ever receive either. - Benjamin Franklin
  265. Re:So-so book by Anonymous Coward · · Score: 0

    Silly, Cooper. Not the Inmates, it's the Wardens. The Wardens and Paroll Officers types are the ones running the Inmates in our asylum.

    Look at all your PHBs and examine your PMs. See the PHB requiring Developers to do work of the Business Analyst. Watch the PM repeatedly nag the Developer for a piece of code.

    The Inmates... they are doing as told, fighting to keep Monkeys off their back.

  266. About the author by Animats · · Score: 2
    The author of that article is one of the authors of Lotus Notes. Is that good or bad?

    I expect that software quality is about to take a sharp turn upwards. We're going into a recession. Places like HP and Compaq are laying off heavy hitters. The "Learn Perl in 21 days" crowd will go back to flipping burgers. We're going to see more people with CS degrees doing maintainance programming.

  267. "comments" in DNA by cowtamer · · Score: 1
    >admittedly assembler tends to have labels and comments and stuff

    actually, DNA does have "comments" (in a manner of speaking). It's called DNA Methylation

    This is nature's way of "commenting out" pieces of genetic code.

    from the link:


    Experimental evidence has shown that in certain cells there are heavily methylated genes and these genes are not expressed. On the other hand cells that have non-methylated forms of these genes are expressed.


    And I always get in trouble for leaving commented code in--it's actually Nature's way!
  268. He has released the source code by sasha328 · · Score: 1

    You know, if God/Allah/(insert your Creator here) would just release the source code ...
    It is called DUST.

  269. One problem with the premise of the article by PD · · Score: 2

    I agree that software should be beautiful. The real problem is that the judges of the computer program beauty pageant also think that this truck is beautiful. Seriously...if beauty is in the eye of the beholder, then why is it news that we should write beautiful software? Somebody should start a school where they teach nothing but artistic value in programming and post it on Slashdot. That would be real news.

  270. survival before aesthetics by cowtamer · · Score: 1

    So for me, and I'm sure most of the code jockeys on Slashdot, the "real world" is one where software is written, THEN MAINTAINED. Beauty is part of maintanence.


    Actually, a lot of software is written, THEN ABANDONED. Only the software that makes it to the customer first lives long enough to be maintained.

    Herein lies the problem: most software that "survives" in the market is crap that was thrown together to beat the other systems. Unless you're in a well-funded, stable environment with customers who know _exactly_ what they want [i.e., developing life support sytems, etc.], you have no choice but to produce software this way.

    If your program survives, you can go back and "refactor" your code to be prettier
    (I _really_ hate that word... :(

  271. development price... by anshil · · Score: 3, Interesting

    Hmm I fear posting so late nobody might read this, but well I'll post eitherway ahead.

    The fundamental goes about development costs. The article descripes the problem very well in software people can't see inside like in houses or bridges. Okay with OpenSource they can, but still most users won't :)

    The matter is as a project making super stable software is far to expensive to be compatitive. Software for airplanes and for nuclear powerplants is tested with other means than 'normal' software. These software is usually tested with a kind of profiler support, until it is taken sure that -every- branch of the software has at least been taken once, and every loop has at least looped 3 times during the test. This requires high qualified testers, beeing able to read and understand the source, and more important time, time, time, time, which is a lot of money. For high security systems this pays of course of. But again people cannot see how the bridge is constructed, say you will be buying a bridge, and it's a black box for you, you can't see it's fundament, you can't see how it's pillars are constructud, it's just a path from one shore to the other. Now for which of the two will you decide? Okay you'll evaluate both, and ran on both bridges a few times up and down, maybe send or two a cars over both. They're stand you're test, and you can't see the one that's build with super high quality means, build of concentrate and secured with steel cables, and the one that's a chaotic assembly of wood added and added to it until it did no longer break if the builders tried to walk over it. Now the first costs 10 times as much, which one will be bought? (remember you can't see the wood vs. steel)

    So for software, everybody wants graphics, GUIs, 3d, easy click and features, and features, and features, nobody wants a plain but constructed very carefully but boring/simply interface. Your costumers will need the features, are at least think they can't live without and leave you for featurefull wood bridge.

    OpenSource at least eases a little, since people -can- look how the bridge or the house is constructed, but really take yourself, did you ever looked in example at the sources of xfree, gcc, bash or any of the applications you use each day?

    In example when exploring the sources of the linux kernel I've a subjective of course safe feeling, most of the stuff looks nicely constructed, and is not super complicated. On the other hand other (opensource) software I looked at, you shudder, but think, well it runs aster all so I just better wont touch it. I'll not call names for this catagory since this would be just a flame, and maybe only because I didn't understand some stuff. But trust me for a quite some closed applications if you could look at the source (supposing you know C(++)) you would never want to start that application again :o) With source comments allied to the bridge example, /* we added this plank here, since if not the bridge will always fall down when poked 3 times in 1 second distances, we don't know why, but with it vanished. */
    In this case the construciton engineer would investigate and proparly discover it's some kind of harmonic vibrations that cause it to fall down, but for the (commercial) software enginner there is no time or money for this, he couldn't explain his chief they used up 6 weeks to find out why a plank more changed the harmonic oscillations, he just adds a plank and the problem vanished, so the problem is finished within the available resources.

    --

    --
    Karma 50, and all I got was this lousy T-Shirt.
  272. Have you seen BeOS? by Anonymous Coward · · Score: 0

    Addresses most of the author's valid concerns. http://free.be.com. Get some (TM) before it's Too Late.

    Steve Klingsporn
    steve@seapod.org

  273. Not Beautiful Code; Beautiful Results by VB · · Score: 2


    The point we as coders seem to consistently miss is that code isn't supposed to be pretty. It's supposed to provide utility to the human using it to make them more productive. Don't misinterpret me, pretty (better stated: more concisely and completely documented) code can co-exist within software that meets this goal.

    At the time I started using Dr. T's music sequencing software on a Commodore 128 I had no fscking idea what C was. I don't know what that thing was written in to this day. But I wrote over 75 songs in 2 years and haven't created that level of product in the past 13 years.

    I used Cakewalk 2.0 on Win3.1 for a couple years and was equally productive there until 1995. That's when music went away and I started hacking Linux because MickeySoft pissed me off so much with their "innovations" in Win95 that it completely killed my machine's ability to perform my most important task (writing music).

    Thankfully, with Win2k and it's better stability Cakewalk 9 and my killer 128Mbit Creative Platinum with built in MIDI have brought songwriting back as an option. Yeah, it's Windows, I hate it, and it screws me sometimes, but not so bad that I can't write songs now. Honestly, I'm not that interested in coding C, now that I can write music again. Trust me: my music is better than my coding, although my coding isn't lousy.

    What I want is Cakewalk for Linux and then I'll leave you talented hackers to your domain and drift back into that which I've wanted to remain in before all this sloppy coding pulled my sorry ass out of it.

    I don't care what the source looks like, but you should comment your code. I just want results. I'm sure most others do as well.

    --
    www.dedserius.com
    VB != VisualBasic
  274. we've upped our standards... by Festering+Leper · · Score: 1

    so up yours! :)

    --
    if you want people to think you know what you are talking about, just put ".com" at the end of everything you say.com
  275. The way I've always looked at it... by Anonymous Coward · · Score: 0
    In any software project you have three parameters:
    • Features
    • Quality
    • Time
    If you fix any one (or more) of those parameters, the others have to give.
  276. Re:Perl Software Pet Peeve: not using warn and str by Malcontent · · Score: 2

    Maybe when you have the time you could fix it and submit a diff to the author. Or perhaps you can submit a bug report. It couldn't hurt.

    --

    War is necrophilia.

  277. Componentize and Relate by BeforeCoffee · · Score: 2, Insightful

    Programming software is nicely compared to real world construction except that ...

    Building a house, a bridge, construction in general, that's all physical stuff. Humans are created to be good at physical stuff. Nature has given those industries an advantage. Everything in software development is by-proxy, it's all metaphor - pure language: more like poetry than mixing concrete. Humans are very good at metaphors too, but the pure metaphors found in software development often tax our limited processing powers in ways unrelatable in physical construction.

    Pile on top of that that, as was mentioned before, there are standards to these construction craft that have been refined over thousands of years. Software development has what, 50 years of science behind it?

    Finally, in physical construction, there are powerful tools (steam shovels, cranes, concrete, steel) that come "canned" or "out-of-the-box" to which there are no real parallels in software development. There is off the shelf software that looks good, but it never "plugs n' plays" like we really want it to. There are development tools, (debuggers, profilers, editors), but they are primitive by physical process standards.

    I suppose I could come up with a ludicrous example of software development, likening it to some sort of construction project where the site is in the wilderness, and I need to pave my own road to get my trucks to the site, and I have to smelt my own steel from my own mines once I get there, and then I have to make homemade concrete, and on and on ... but that would never be an relevant example: real software development is a convoluted and fluid transmission of ideas rather than a construction of anything - even in the ideal CASE tool driven, XP driven, UML driven, highly "engineered" environment. Again, it's a lot more like writing or speaking than like construction.

    This is why I believe that component development is on so many people's minds, why Enterprise Java Beans are looking SO attractive. Biz people and developers want powerful "canned" tools that they can "assemble" to form complete programs. They want relatability too, they want software processes to be easily relatable to physical or business processes.

    It's going to take more time; the tools and science will need to progress more. As CPU and memory become more bountiful, we'll waste more on frivolities that make the computer itself more relatable. This will, in time, help to reduce programming to more natural forms of human communication and interaction. The computer will eventually be able to learn about a problem space and "develop" solutions with a programmer's help.

    My hope is that the democracy and ubiquity of natural language programming will elevate the potential quality of code produced to that of fine literature or other great works.

    -- BeforeCoffee

  278. Because people think it's easy.... by Anonymous Coward · · Score: 0

    ..or they _think_ they can.

    To use the building example:

    If I need a building to conduct my business in, I don't go and build my own building. I know it's hard and I know that I probably won't be able to do it. Neither do I get someone who has just completed Jimbo's DIY bricklaying course to build a building. I know he won't be able to do it.

    Yet, many business are doing exactly that when it comes to writing software. They think that because they have a compiler and a "Teach yourself C++ in 24 hours" book, they can do it...

    Similarly, if I'm a researcher and I wan't to research the effects of weather on, say, a brick wall, I don't build the brick wall myself. I'm a researcher, not a builder. Yet (case in point - I work in a research organisation), we have all these Masters and PhD people who think that writing code for their research is easy. I spend hours getting their code to compile because they don't even know the first thing about scoping rules (for example)..

  279. Worse is Better by gojomo · · Score: 1

    Charles Connell's essay presents appealing ideas; it'd be nice to think software could be "more aesthetic". However, the truth is that Worse Is Better -- as Richard P. Gabriel will often argue (and other times refute).

    Exactly those things which make software "ugly" -- complexity, poor modularity, leaky interfaces, and sacrificing design and comments in the name of rapid deployment -- can also help make it more successful, commercially and socially, in the long run.

    Exactly those things which make software "beautiful" -- such as Connell's qualities of "appropriate form", "minimality", "component singularity", "functional locality", "simplicity", and even "readability" -- can in fact make software fail, as "great programmers" spend a bunch of time making "elegant solutions" that never catch fire, because they lack the immediacy and approachability of more haphazard solutions.

    While this idea may sound like an excuse to avoid doing up-front thought, it's actually a hard-earned lesson that what aesthetically appeals to good, well-intentioned programmers may in fact involve all the "wrong" tradeoffs.

    Read all the stuff on this topic at Gabriel's Worse Is Better pages, then revisit Connell's aesthetics peice, and Connell may seem downright naive to you.

  280. XP didn't work for us by GlenRaphael · · Score: 1
    programmers in XP projects are capable of writing ugly software.

    Yes, and XP works anyway.

    At a previous job at a company which shall remain nameless, we tried to adopt XP. Hired a couple guys who were into it. Sent all the programmers to official XP seminars. The plan was to do our next-generation server using Smalltalk, replacing an existing system written in C.

    It didn't work. After many delays and much miscommunication it became clear it was going to take too long to produce a product solid enough to replace what we had, if that ever happened at all. Eventually the company abandoned the whole project and went back to the old ways of doing things, fired all the XP guys.

    XP is not a panacea. It, too, can fail.

    --
    I play Nerd-Folk!
    1. Re:XP didn't work for us by acroyear · · Score: 2

      I'd call that an extreme case of biting off too much at one time. XP in and of itself is a cultural change. Turn around and change the language as well is gonna complicate things more. Early XP at a company should be the only "new" thing being done at one time. Once the programmers are truly XP's, THEN you can switch other parts of the environment.

      Also, there's enough missing in your description of this that would lead me to think that the company is blaming XP for a true LACK of design. There is still a design that needs to be followed, at the higher level, and an upper manager deciding which parts of that design get implemented in the XP way. Part of that design is in talking about how components done by individual pairs get integrated together again. That requires extreme communication at the early stages of work before you go through pairs together to "do this, do that, test it".

      Software is still complex, as much as XP tries to hide that. Non-trivial software still requires division of responsibilities and agreement of component interfaces so that later component integration can take place with relative ease (e.g., again in the XP way with two programmers, one from each component being attached at the time)

      Since XP requires extreme levels of communication and feedback, and the company was not achieving communication adequately, then its easily concluded that the company never really used XP, and therefore XP is not to blame.

      --
      "But remember, most lynch mobs aren't this nice." (H.Simpson)
      -- Joe
  281. He tries to show elegant code ... using Goto? by Anonymous Coward · · Score: 0

    Another no-no is multiple Dims on the same line:

    Dim AgeNumber As Integer, YearsToRetirement As Integer

    And line continuation?

    Msgbox "Are you sure you entered the right age? It should be between " _
    & MIN_AGE & " and " & MAX_AGE & "."

    No error handling around CInt?

  282. Complexity is in YOUR own perspective only by Taco+Cowboy · · Score: 1



    Simple or complex.

    Straight forward or beating around the bush.

    Keep It Strictly Simple, or make it as messy as possible.

    It's ALL up to you.

    I write software for a living.

    I can produce speghetti code, if I want to. I can make the software as complex and as difficult to use as possible, if I choose to.

    But why should I?

    Simple things come easier for me. I am a simple guy, living a simple life. Sometimes I make a mess out of myself, but most of the time, I ain't that messy.

    Therefore, before I start to code ANYTHING, I think, I plan, I scheme. I look at other people's code, I steal ideas from them, I mix and match things that I like, and I incorporate whichever is useful in the program I write.

    When all is said and done, what I aim for is to produce something that is simple, and yet powerful.

    Clumsy software not only hurts the users, it also hurts the authors too !

    --
    Muchas Gracias, Señor Edward Snowden !
  283. Older quality improvement techniques worthless? by CactusCritter · · Score: 1
    A lot of stuff from the 70's and earlier 80's seems to be unknown now. Was this due to proven lack of value or what?

    IBM developed the Chief Programmer Teams which included lots of mentoring and non-author code reviews.

    There was proof of correctness via p-notation. (I never really mastered it, but I thought that was my fault.)

    There was truly structured code. Dahl, Dijkstra, and Hoare had "Structured Programming" published in 1972. I only saw Dijkstra mentioned in thie discussion. Pity.

    There were Truth Tables, which presented all of the operational variable names and the affected variable names as column headings. The rows of the tables were all values (or irrelevacies) of the operational variables and the resultant values of the affected variables. (I never used the single Truth Table generator that I ever saw, but when I ran into very tricky logic, I would write a truth table for the situation. I could alway determine that the table was complete and that my encoding was a valid representation of the table.)

    Back, I believe, in the late 70's, there was a French firm named, IIRC, Mellisind. They had supposedly achieved good success by a business approach where they contracted for an analysis period which they felt adequate. Then they would inform the customer,if they regarded the job as feasible, how long it would take and how much it would cost to finish the job. Evidently, their success was overrated, but was it really?

    Were these all false hopes or do people just forget?

  284. What's YOUR definition of "BEAUTY" ?! by Taco+Cowboy · · Score: 1



    Your statement "Beauty for beauty sake makes crappy software" is rather vague.

    What is YOUR definition of "BEAUTY"?

    The word "BEAUTY" can mean DIFFERENT THINGS to different people. Beauty can be used to describe scenary, or bimbos.

    On the former, when beauty is used to describe a certain scenary, most of the time it means serene, gradeur, or simply pleasant.

    For the latter, yeah, it's "beauty" alright. Just that other than that skin-deep beauty, there's NOTHING ELSE.

    So... if your definition of "BEAUTY" rests on the BIMBO kind, then, you're right.

    Software developers who write beautyful, bimbo-ous software - such as Micro$oft's Windows - will get all the praises from people with a big vacuum in between their ears.

    However, the software developers who create beautiful software - in the sense of gradeur, awesome, and/or simply pleasant, need not worry about the "crappiness" of that software.

    --
    Muchas Gracias, Señor Edward Snowden !
  285. Millenium Bridge by Anonymous Coward · · Score: 1, Interesting

    Otherwise known as the wibbly wobbly bridge. Top architectural firm, key site across the Thames, modern computer software, and they forgot to take into account the 0.5Hz horizontal impulse generated by a crowd walking; only the 1Hz vertical impulse was designed in.

    So they have to redesign it, adding dampers to the bridge so it doesn't shake...

    So no, we still don't know everything about how to build a bridge.

  286. Beautiful code is ... by Keeper · · Score: 2

    Beatiful code is a for loop which takes up 10 lines between the (). 8^)

    Yes, I am indeed very evil.

    You'd be surprised how much faster code runs when you increment in the for loop constructs than inside of the loop.......

  287. A REPLY TO ALL OF THE ABOVE: by swagr · · Score: 2

    Almost always, functinality must be proportional to complexity. The converse makes no sense.
    Furthermore, depending on the skill of the developer, errors have a certain probability of existing per unit of code. More code = more errors.
    Now biologically: functionality of an amoeba vs functinality of a fly. Or, probability of getting cancer in a specific cubic millimeter of flesh vs. probability of getting cancer period.

    And now that I've made excuses for messy software... here's how to avoid it:
    "Never build an application."
    [instead]
    "Design a domain specific "language" that can be used to talk about applications in this domain. " -- The Pragmatic Programmers

    --

    -... --- .-. . -.. ..--..
  288. Analogies by Kynde · · Score: 1

    People seem to mix analogies and comparison now. If there's a _some_ similarity between coding on top of which an analogy can be made and bridge building. It does not mean that every aspect of bridge building and coding can be compared.

    Bullshit remarks like "we've been making bridges for centuries" just make me sick. (Heh, we've been making fire since the days when we didn't even wipe our butts and we still have fire departments.) Making counter examples than stating general laws seems easier, atleast for us, so why not use that on one's own remarks?

    Perhaps "that argument might do it" kind of thinking may very well be one of the major reasons so much of our software is so disfunctional.

    As a personal opinion, that is close to _the_ reason. Most people I know of, heck, even most people I work with, are sadly incapable of approaching in a sort of cruel, cold, strictly abstract way that some tougher areas of coding requires. And what creates problems is when these areas are being poked at without the programmer realizing that. Anyone who has studied or has some passion for maths knows that seemingly simple tasks may hide underneath overwhelming complexities. I guess that's something that programmes everywhere learn as they grow older and more experienced and get their beard and own set of horns on their forehead. :)

    --
    1 Earth is warming, 2 It's us, 3 it's royally bad, 4 we need to take action NOW
  289. Re:You've never seen how a house is built, have yo by orkysoft · · Score: 1

    A half-assed job is the American way, right?

    --

    I suffer from attention surplus disorder.
  290. On the contrary, bad design is often visible by Ukab+the+Great · · Score: 3, Insightful

    But you have to know what to look for. I've often found a badly designed user interface to be a real tip off that other parts of the software are crap. I'm not talking about pretty pictures and cute icons (which, unfortunately, is what a lot of people in the free software community think constitutes usability), I'm talking about whether widgets are laid out in an unambigous manner and whether operation of the interface is efficient and cognitively sound. If a company designs one part of the system in a very half-assed manner, they'll most likely do the same with the other part, too.

  291. AAAGH! Architectural Engineers Are Not Perfect! by Anonymous Coward · · Score: 0
    This hoary old comparison to bridge-building was rubbish when it was first made, and rubbish now - when will CS academics learn to have a bit of respect for their industry, and stop treating it like some retarded child!

    Physical engineering is every bit as bad as software engineering. Bridges frequently fall down, buildings frequently fail, construction projects frequently go way over budget and fail to meet user requirements.

    My grandfather, who was a civil engineer, discussed this with my father (a programmer), when the argument first reared its head. He said that the job of being "first across the bridge" is the most horrible job, and no-one wants to do it - because no-one trusts the designers or builders, even if they are the designers or builders.

    A lot of code is badly written, I'm not going to deny that, but we're not going to fix it by worshipping another industry which has almost as many problems itself.

    Find another argument, people!

  292. Jeez by Anonymous Coward · · Score: 0

    Instead of posting these things saying our software is awful, why don't you go off and do a university course which teaches you formally the problems of Software Engineering.

    Because thats this article is pointing out. The bleeding obvious.

    If you've had any formal training in it..

  293. $0.02 by sdijkstra · · Score: 2, Interesting

    In my view, there are two extremes in which a software project can be approached:

    I) Design it to death

    Take a few weeks to write specs that describe every nitty-gritty detail. Reduce coders' individual freedom to a bare-bones minimum.
    Advantages:
    - Client knows exactly, beforehand, what a piece of software will do and at least to an extent what the cost will be.
    - Programmers know exactly what their job is.
    Disadvantages:
    - Constant micromanagement is required to find out if the programmers in quiestion aren't cutting a few corners to meet their deadlines/to show off.
    - For a huge amout of time, no progress is visible, since everything is planned in advance. This could lead to a seizure or two when the deadline is there and the resulting software doesn't meet requirements.Also, tests can't really start before the project is completed.

    I suppose this method works best if you have a team of inexperienced coders and a rather large architect force.

    II) XP

    Together with client, draw up a list of requirements. Then hand out this list to all programmers who divide the work out amongst teams either made by themselves or by management. Make them develop on a shared, simulated test-implementation environment.
    Advantages:
    - Huge cost cuts are made in the design.
    - Obviously, since there is a shared, 'real-life' testing environment, testing can be done at any given time.
    - Kent Beck could give you about a thousand more :)
    Disadvantages:
    - Requires a lot of independence from the programmers themselves. Independence some, if not most programmers simply do not possess or even _desire_.
    - Assumes a good design will sort of 'come naturally' out of a joint team effort. I do not believe this notion will ever hold true, maybe only for small teams.
    - If one little cog in the XP wheel is missing, like continuous deployment and testing or constant peer-reviewing, the whole thing comes crashing down like, well, a badly built bridge because -guess what- the DESIGN is missing!

    XP works, I've seen it work, but only in small teams, on small to medium projects done only by REALLY good programmers.

    Conclusion: The old-style, Systems Development method of doing a software project is certainly up for a revamp, although I think XP is too 'Extreme' for most real-world situations. My clients generally _want_ to see solid design before they OK a project, they simply aren't content with just turning in requirements, and most certainly do not want to put one of their own tech people on the project (why else would they have come to us).

    I personally believe that there is a more elegant solution to the dilemma, which is combining the design phase of old with both generative programming and the development phase of XP. It may seem a bit bulky at first but with generative programming a lot of bulkiness is taken out of development, and people can start 'dumping modules' into the test environment almost instantly after design has finished.

    --
    __

    Not believing in force is like not believing in gravity.
  294. It's amazing how everyone knows the answer... by ralphbecket · · Score: 2, Interesting
    ...yet the code out there is still awful.


    Part of the problem is the languages people use: modern functional languages virtually force you into a safer, cleaner programming style and these days don't require you to compromise on efficiency; most imperative and OO languages lack any real facility for abstraction and in many ways just make you stupid. There is some hope: if you want the best of both worlds use OCaml - it's often faster than C with all the OO, abstraction and type safety you could ask for. It's imperative, to boot, if you have to think that way.


    Market forces place universities under pressure to just teach people Java/C#/C++/whatever is being used in industry at the time, rather than teaching students how to use abstraction to solve complex problems (as opposed to just ad hoc hackery). The debate isn't going to get anywhere, however, because people who demanded and got this sort of bricks-and-mortar-but-no-architecture degree don't want to hear it. They're in the majority and managers know what they're hiring, even if experience shows time after time that the results are bad.

  295. Most software criticisms suck by Anonymous Coward · · Score: 0

    This article argues for code clarity, fitness for purpose and elegance and then uses Visual Basic to illustrates his point. Now that's ironic isn't it?
    Even a quick python hack looks (to me) more elegant than his example...(note: brevity, multi-line strings, doc strings, printing multi-lines etc)

    I can go along with the sentiment of this article but the specifics gall me, I would argue that if you want code to be readable then TEXT isn't the best display mechanism at all. If you want to document your code then doing it in the same medium (text) as the code is non-sensical, it takes up real-estate when you're trying to focus on the task in hand, documentation should always be showable and hideable. ( If you've not guessed I'm an ex-Prograph user)

    I find it saddening that although lots of people recognize ugly software and coding environments, but their suggestions for improvements to the situation are so so limited. I mean, is tidy VisualBasic over ugly VisualBasic going to change anything?

    tom smith

  296. What unadulterated rubbish by Performer+Guy · · Score: 3, Interesting

    If software were a bridge you'd use it to cross an otherwise unpassable gap between two points, and NOTHING else. There would be 2 or three basic designs which nobody deviated from and nobody would have seen much innovation in decades if not centuries.

    Software is in better shape than this dumb article suggests. You can get better software, but you have to pay for it and folks don't want to. Pay in open source terms means have less software around than you need with developers concentrating their efforts on fewer projects.

  297. Re:Not this stupid painting is art' BS again! by Anonymous Coward · · Score: 0

    Just because you can paint, doesnt mean you're an artist, I've known lots of builders, painters and decorators, and none of them were artists!
    When are they gonna grow up, and go out and buy a computer and write some truely beautiful code????
    eh? eh? eh?
    come on then!

  298. Your Job by battjt · · Score: 1

    Which begs the question,

    What is your job?

    Are you a programmer, or are you "providing solutions"?

    You see, I think this whole thing with specs and software engineering is a hoax. Having the customer sign off on requirements, gives the development team an excuse point. The only way to completely spec a system is to write it. Any missing feature in the spec is a possible mistake or short for the development team. Now, if the spec writer can write down a spec that is as detailed as the final system, then why the hell didn't he/she write the system in a compilable language to start with and eliminate the chance of mistake due to translation from English to code?!

    My favorite mode of developing systems, is to get high level requirements, then prototype, then prototype, then prototype, then prototype, then prototype, keeping in mind that rewrites will be necessary, but should be incremental (rewrite chunk A this week, then chunk B next week, so that I never have to ask for 6 months to rewrite the whole system). The way, the spec is the code. The user describes a feature, I show them my interpretation, they describe another feature, etc. Very little room for miscommunication.

    just now ramping up on coffee...
    Joe

    --
    Joe Batt Solid Design
    1. Re:Your Job by plumby · · Score: 1

      In theory that's great - Almost XP, but there are a couple of problems

      1) What do you do about the user that says they are too busy to check what your new prototype every week?

      2) This seems to be based around GUIs. What do you do about capturing complex back-end rules - which product can be sold to which customer, what data needs to be captured for reconciliation, etc. Showing them a piece of software that correctly picks a couple of products out isn't going to convince most people that their requirements have been fully understood (and how are you going to even figure out what they want without some form of spec?), and showing them the code certainly isn't going to help.

    2. Re:Your Job by battjt · · Score: 1

      1) Then they are to busy to write requirements too. If they are to busy to explain what they want, then what can I do?

      2) Actually I don't do much GUI work. A user may ask for a complex search, for instance I just did a name matching system for a reinsurance company. The users couldn't express how to search for a name, which one was a better match, how to order the results; they had been trying to write requirements for 3 years and had an unacceptably slow COBOL program that was patched together with duct tape as a result. I built a couple prototypes in SQL/JSP, explained to them how they worked, then we wrote down an english description of the algorythms for posterity. The final interface to the system is a stored procedure, but we captured the requirements using SQL and JSPs.

      Users are not designers nor programmers. They don't know what is possible with systems, nor how hard certain things are to do with systems. My job is to solve information management problems; this usually results in systems changes, but sometimes only results in process changes.

      Joe

      --
      Joe Batt Solid Design
    3. Re:Your Job by SimonK · · Score: 2

      1. Tell them if they're too busy to use the system, you're too busy to write it for them. Seriously, you need to reach an agreement with clients when the project starts on how much work you expect them to do.

      2. You need to do a proper analysis - interview the customer's staff, write use cases. This is where XP falls down - how are you supposed to know the problem domain ?

  299. Years ago by TwoSmall · · Score: 1

    Probably nobody wants to think about changing for the better. Anyone read Ghezzi, Fundamentals of Software Engineering allready? The book is allready ancient but still stands.

  300. Any analogies of software to hardware are flawed by Baki · · Score: 2

    People not comprehending software keep trying to compare software to some hardware analog, such as bridges, constructing houses, conveyor belts and what have you.

    I have never heard one analogy that it correct, and nothing is so dangerous and irritating as analogies that seem to apply at first glance (since they tend to suggest a wrong fix).

    People, especially managers, keep being frustrating because they don't really seem to understand what their people are doing and they feel they don't have control. Then they envy the "neat and ordered" world of (e.g.) house construction, where you can see and feel concrete building blocks, have an architect making a design before etc.

    What they forget is that software is endlessly more flexible, and is also expected to be so. During construction requirements keep changing, also after delivery new features need to be added. The environment keeps changing (operating systems, hardware etc). Imagine to construct a house and then halfway and afterwards keep making big changes *all the time*, while also the environment changes (hills arise, climate changes rapidly (ice ages etc), rivers come and go, sea level changes etc).

    Obviously this means that those nice and orderly "standard building blocks" that many hardware engineering disciplines have does not apply very well to software, and thus design methodologies, techniques etc keep changing in a fast pace.

    Therefore any analogy with hardware construction is flawed and leades to counterproductive conclusions and methodologies.

  301. Training? by walterbyrd · · Score: 1

    To be a chemical engineer, you must have training in chemistry. To be an electrical engineer you must have training in electrical engineering.

    To be a software engineer? Any self-taught hack can call him/her self a software "engineer."

  302. pretty code by Magius_AR · · Score: 0, Flamebait
    You want pretty code? Simple.


    Change all existing code that looks like this:

    void myfunc() {
    while(1) {
    }
    }

    to look like this:

    void myfunc()
    {
    while(1)
    {
    }
    }

    Obviously more aesthetic, symmetric and eye-pleasing. Its step one towards prettier code.


    Magius_AR

  303. Wow, You get a spec? by FirstNoel · · Score: 1

    I'm lucky if I get a post-it note with a little chicken scratch on it.

    Actually the only time I get a "spec-like" thing is when I get it from other programmers. It takes a lot to teach the average user how to write a spec. Most of them never quite get it.

    I'd love to have real specs, ahhh let me dream....

    Sean D.

    --
    "Hmm. I am to metaphor cheese as metaphor cheese is to transitive verb crackers!"
  304. Re:Not Bridges, but Bridge Cranes by CharlieG · · Score: 2

    Nope, I haven't designed bridges, but have designed bridge cranes (and had my design checked by my boss). Bridge cranes really age a lot like bridges in theory, but they move around.

    I've also designed electronics (Including firmware)

    I'd say, in order of difficulty (assuming you are in the same part of the technology curve of each technology)

    1) a Bridge

    and then tied - electronics and Software, and a LOT of the problems in electonics come down to firmware problems (Hard Realtime is "fun"). That said, I'd dare some folks to trace out common noise problems in a prototype high density switching power supply (and the stuff you see in a PC power supply isn't high density)

    I'm a bit older than most of the folks here, and have had some fun over the years. I've gotten to recreate the Tech revolution. I started with steel working/machine shop work (which is still a hobby), went on to electronics, and am now a programmer. I've gotten to see how all these tie together, and trust me, they do

    --
    -- 73 de KG2V For the Children - RKBA! "You are what you do when it counts" - the Masso
  305. empty stuff by Anonymous Coward · · Score: 0

    oh gee, like what this article says is like, obvious.

    And oh gee, looks like you've got hundreds of replies already.

    What does the old adage say ?

    `Those who can... do. Those who can't... talk.'

    How many actual developers in that thread ?

  306. Re:complexity: art and rules by VDM · · Score: 1

    I suspect part of the software quality problems are given by the idea that programmers are like artists. Engineering is 95% "simply applying rules", 5% is creative, when the engineer has to find out how to do something new. 95% of software is "simply applying rules": but often programmers do not like rules. Or perhaps, due to the young age of Computer Science, we still lack believable rules.
    In the medical field, a change is ongoing regarding the approach to patient care, by means of the so-called "Evidence-Based Medicine". Following this paradigm, decisions should be brought following the most up-to-date scientific evidence about diseases, and not basing just on feelings and intuition, as some doctors do, thinking at Medicine as an art. There is a lot to discuss about how scientific evidence can be stated and so on (it's not the right place, here), but something similar could be needed also in programming, and it could be reached if programming practices aimed at real reuse of software components (tested and "certified" to work), at easy debugging and readability are introduced into work.
    However, the time constraint still remains (all efforts towards readability and reuse cost time), and is perhaps the most influencing factor for quality, in a short-termed programming strategy.

  307. it's as good as they want to pay for it by KGBear · · Score: 2, Insightful

    software is just as good as people are willing to

    pay for. I'm building a house right now and the

    contractors showed me the bottomline: cheap, fast

    or durable: pick any two. People don't want good

    or safe code. They want code to be cheap, sexy

    looking and more importantly, they want it now. Or

    yesterday. As businesses and individuals, we

    should stop behaving like whores and selling

    whatever the customer will pay for and be more

    like my construction contractors.

    1. Re:it's as good as they want to pay for it by pkesel · · Score: 1

      You mean unionize developers? Demand proper working conditions? Good tools? Proper materials? Reasonable delivery timelines? That's what unions have done for construction.

      --
      - Sig this!
    2. Re:it's as good as they want to pay for it by KGBear · · Score: 1

      No... That's not what I mean. The construction
      workers union is not very strong in my country. What I mean is users in general must try to understand the techonology at least as well as they understand construction. And we must stop giving what they think they want and start being fundamentally honest with that: "what you want is this, it'll cost this much and it'll take this long. On the other hand, maybe what you really need is this, it'll be this less expensive and take this less time."
      And then, of course, we must deliver.

  308. It's the buyers fault, not the programmers fault. by maitas · · Score: 0

    Crappy programmers are cheaper than good ones. People prefers to buy cheap software with lots of features, even if it doesn't work!! So right now the situation is that, or either you make crappy cheap software with lots of features fast and keep selling like crazy (Microsoft way), or you built expensive great code with only a fraction of the features (belive me, to add features to a given soft takes lots of time) and no single person will buy it.
    !!Don't kill the messanger!! Kill the software buyers!!

  309. It's buyers fault, not programmers fault. by maitas · · Score: 0

    Crappy programmers are cheaper than good ones. People prefers to buy cheap software with lots of features, even if it doesn't work!! So right now the situation is that, or either you make crappy cheap software with lots of features fast and keep selling like crazy (Microsoft way), or you built expensive great code with only a fraction of the features (belive me, to add features to a given soft takes lots of time) and no single person will buy it.

    !!Don't kill the messanger!! Kill the software buyers!!

  310. Why so complicated? by msheppard · · Score: 1

    If it was hard to write, it should be hard to understand.

    --
    Krispy Cream is people
  311. House design v software design by plumby · · Score: 1

    I agree wholeheartedly that many 'professional' developers have no appreciation of the importance of correct, maintainable code, but the comparison with house builder is rather flawed. Most houses are built to pretty standard designs. There are standard components (screws, tiles, bricks) that have standard ways of being assembled. This is not the case with software (or at least not the software this I tend to work on). Most software is custom-built to the design of the user (or possibly the programmers guess at what the user might want).

    There is a program on UK TV at the moment called 'Grand Designs' which documents people as they attempt to build their own homes, usually to a very individual and inovative design that they, or an architect working with them, have produced. This is much closer to most typical software development, and almost every house that has been built is overbudget and overschedule. Many do not get finished. As for quality, have you never seen reports of cowboy builders on house extension projects. Again, these are often ad-hoc projects, not working to existing design.

    Most house development is much more analogous to things like web shopping carts, that take a standard basic design and just build the new bits that customise the site. From my experience, most of these tend to be pretty smooth and successful projects (usually unlike the e-businesses that buy the sites :-) ).

    I agree there is a problem with software engineering, but exactly the same problems occur in the design and build of many other things, especially when the projects are not properly managed.

    1. Re:House design v software design by pkesel · · Score: 1

      House designs are built to architectural and structural standards. In the US there are national, state, and local building codes that say exactly what are best practices. These codes involve mandates for materials and techniques that have evolved over centures of building experience. Even if you are building someting nonstandard you've got to follow the code or your product is uninhabitable, or it might simply fall or burn down.

      Software development hasn't had more than a couple decades of disciplinary experience. The entire science of computing is in its relative infancy compared to architecture and manufacturing.

      This concern is what is necessary to push it to maturity, but the fact is we haven't figured out how to make software manufacture an industry. It's still an art, with both talented performers and charlatans alike, working with raw materials and ideas. When we can put software together with standard products like those at Home Depot or other do-it-yourself stores then you can expect the professionals to be pumping out well-engineered, reliable products.

      --
      - Sig this!
    2. Re:House design v software design by plumby · · Score: 1

      When we can put software together with standard products like those at Home Depot or other do-it-yourself stores

      You can. It's called Visual Basic, and products like it are responsible for people believing that they can code in the same way that tools at Home Depot make people believe they are builders or carpenters, and causes as many DIY disasters.

  312. Market maturity by pkesel · · Score: 2, Insightful

    The software market, and in fact the entire computer industry, is not mature enough yet to offer a high level of sophistication and uniformity. It's where auto manufacturing was in the early part of last century. There are a few mass marketers producing vanilla products for those who are dying to spend for it. They have the upper hand becasue people are going to buy whatever they can find. If you want a high scale product you're going to have to pay someone to make it for you. Otherwise you get what they have to offer, and it's good enough because it's the only thing you have.

    Computers have only recently become a mass market item. It's still a bit of a luxury item. When cars were at this point you couldn't count on their reliability or safety. It took decades of refinement, regulation, and standardization before they became the daily commuter that we rely on today. And still after a century you can't take even a bucket seat from one and put it into another, even from the same manufacturer, without adaptation.

    The sad fact is, you're probably born at that time when you'll never see a mature computing market. For the most part we're still working from the direct decendents of the first IBM PC. Still working from the first UI to make computers usable for about everyone. We're still defining what a computer is!

    --
    - Sig this!
  313. I want to but my client doesn't! by Toshito · · Score: 1

    I work on a data wharehouse for a bank and everytime my client ask for a change or an addition to this system, we propose him a clean and elegant solution. 9 times out of 10 he says that it's too expensive (looking only a the short term investment and not the long term benefits). And we have to come back with a minimal solution, sometimes he even demands a throw-away one-time solution. I hate it when we have to do ugly programming like that...

    --
    Try it! Library of Babel
  314. If software were a hard science... by Hard_Code · · Score: 2

    ...following that analogy, we could build beautiful robust software, in say, a century perhaps? Sorry, but real users want real software yesterday...not beautiful 100% bug free correct software ages from now. Programming != Engineering.

    --

    It's 10 PM. Do you know if you're un-American?
  315. Bad design always means trouble by synoniem · · Score: 1
    Working with engineers who actually design bridges I can tell you that a lousy design means a lot of trouble in the building phase of a project. And this are the same problems I face when I have to implement lousy designed software. And this has nothing to do with the beauty of the bridge or the code.

    So what is the big deal?

  316. Maybe if you didnt read slashdot you'd have time by Anonymous Coward · · Score: 0

    to make it bullet proof. lol

  317. Professional Engineers by Anonymous Coward · · Score: 0

    It's also worth pointing out that a professional engineer approves and signs off on bridge designs when they are filed for building permits. An engineer who approves a substandard design can be held personally liable in the event of a failure, or he can be barred from practicing the trade.

    How many of you design well enough to take legal liability for your work?

  318. Abstraction... it's there for a reason by Sierpinski · · Score: 1
    As a programmer, I write a lot of code. Different platforms, different languages, etc. My style of programming varies somewhat slightly from project to project, because no two projects are similar. I've had people ask for a one-time program, to use for a specific purpose, then trash it. Am I supposed to make the code in it perfect, when its going to be used for 2 days, and its needed 'yesterday'? No. I'm going to get it working to the user's specs, and then deliver.



    Sometimes people get lost in the idea of pretty code. The fact of the matter is, most people wouldn't think ANY code is pretty, because most people aren't programmers. Code is messy. It's like having a rock, coin, stamp, sports card, and (insert next innane collection here) collections kept in a huge cardboard box in your basement. It works. It's contained. It does what it's supposed to do. If you were moving, or planning on selling it all to someone at one time, is there a need to go through it and sort it out? No.



    Maybe that was a bad analogy, but the fact of the matter is, the organization of the code, has very little to do with anything. I'm not saying people shouldn't write effcient code, because there are always reasons why code should be smaller and faster, but does it matter how pretty it is if it works? That's like complaining to the garbage man that his truck is dirty. It comes by once a week and helps me out a LOT. I don't question his activities or the condition of his equipment. He's there and he's dirty, and I love him for it!

  319. Bridge Building by Feersum+Endjinn · · Score: 2, Interesting
    For a great book on the history of bridge building as a history of engineering in general, check out Henry Petroski's Engineers of Dreams. You will never look at a bridge the same way after reading this:

    Engineers of Dreams at amazon.

  320. If they built roads like we make software... by OldCrasher · · Score: 1

    A server is meant to stay up for 99.999% of some time period, normally a year.


    If a Motorway or Interstate were so built it would require 3.5 hrs of maintenance in 40 years, it would never be stopped for snow, car pileups, dear crossings, or grannies loosing their marbles and driving the wrong way down them.


    Interstates are the complex mix of rebar and concrete laid in more or less straight lines. They have no natural beauty.


    So why the heck need software that has to operate under the same rules need beauty?


    And why does this dolt think that goto's are pretty.


    Ellegance in software creation is at the writers discretion, if it is specified in the requirements then use a code beautifier, if its not then just make sure that the next sucker to maintain it has enough guidance to be able to carry out the job effectively.


    Expert: Ex, Has been; Spurt, Drip under pressure.

  321. If it's all you've got . . . by pkesel · · Score: 1

    Have you seen the Discovery/TLC shows where the forest people of the Amazon are building a bridge over a steep-sided river? It's a few trees tied together with some vines or braided bark ropes. It's got spindly supports. The hand rails are for balance, and wouldn't hold you if you fell against it. By our standards you could hardly call it a bridge. It'd never hold up to the traffic we see every day. For those people who have no other choice though it's an incredible benefit. Sure, it's a bit unstable and dangerous to use, but they've got to get from here to there and they've no other choice. They've used the skills and materials they have, and it's better than the alternative. Some day one of them is going to have a better idea. Some day they'll figure out that bridges with stone supports and nice flat boards are better. When they get there they'll build a better bridge, but their skills and materials are going to have to improve.

    Software is the same way. Most people dont' have an alternative. They can't make it themselves. They can't do without it. Meanwhile, we're looking for better boards.

    --
    - Sig this!
  322. Commercial versus Residential by 4of12 · · Score: 2

    Your analogy with construction intrigues me.


    Yes, I'm an engineer and I sit in front of a terminal coaxing C++ code into looking half way elegant, doing the job and being a pleasure to look at in the future instead of the pain that happens so much during the inevitable phase of maintenance and improvement.


    I also built a house a few years ago and obtained a general contractor's license so that the bank would trust me with doing the subcontracting.


    If you think that by virtue of "it's being in the physical world" that construction is some kind of nirvana where design elegance and the true art and beauty of the profession of engineering can flourish unimpeded, then think again.


    In terms of residential house construction, the whole endeavor is a mess.

    I could tell you the sorrowful tale I heard one Monday morning, when asking where John the other worker was, and was informed that, tragically, he was still in jail for DWI over the weekend.

    Or the framers that got cold one morning and built a fire on the slab to keep themselves warm, nevermind the sparks wafting through ultra-dry framing and expensive heavy logs that had been hoisted into place for the house.

    Or the initial 3 week time estimate for completing one phase of the job that stretched into 10 weeks, requiring constant rescheduling with subsequent subcontractors (never mind the heavier interest on the money I'm paying on the construction loan).

    Or the interesting "features" that crept in (and then had to be worked around) because various individuals couldn't read blueprints properly (no, the beam can't go there because there's a fireplace directly beneath it).

    Or the knowledgable foreman was out doing sales while the jobsite got staffed with ignorant, wet-behind-the-ears kids in charge of the project. The end result was a standing edifice that was "acceptable", but a careful scrutiny with a level and plumb line showed where shoddiness had crept in.


    I could whine for ages about my experience, but I'll cut it short to summarize my experience with house construction projects:


    1. Takes longer.
    2. Costs more.
    3. Good people are worth the money.


    Yes, things are different in commercial construction versus residential construction. Commercial buyers know it's not uncommon to pay $200 / sq ft and the more important the structure, the less allowance can be made for shoddy work. And that observation starts to address some of the issue in a more meaningful way.


    Usually, shoddy workmanship creeps in for a very good reason: it's cheaper to get shoddy work done that to get good work done. And most uneducated buyers look primarily at price and usually little else.


    It's all fine and good to exhort practitioners of the fine arts of construction or of software building to hone their skills and to take pride in their workmanship. But the root of the issue can be traced to the buyers of the services. They are the ones that need the education: they need to know the difference between shoddy software and good software and to learn to appreciate fine workmanship in software. As buyers, they are the ones ultimately responsible for promoting or denigrating the fine arts of software building.


    --
    "Provided by the management for your protection."
  323. This might be late, but... by ericvids · · Score: 1

    Quoted from the article:

    "... For many years, programmers were taught that global variables and GOTO statements are poor programming practice. In some situations though, these constructs may be exactly what the software needs to marry form with function."

    This poor guy has just ignored more than half a century worth of Computer Science developments in order to tell us to go back to the way of the GOTO, even for "some situations", because it has been proven mathematically by Dr. Edsger Dijkstra himself that every piece of code that can be done with GOTOs can also be done using if's, while's and their kin. (And it's more *koff*aesthetically pleasing*koff* that way, too, as opined by Dijkstra in his article)

    IMHO, marrying form with function is what this whole evolution from spaghetti code to structured programming to object orientation (and especially object orientation) is all about.

    --
    Pet peeve: Profane people propagating perfunctory pedantry.
  324. Re:Maybe if you didnt read slashdot you'd have tim by room101 · · Score: 1

    lol

    [man, this lameness filter really sucks!]

    --
    room101 -- how much can you stand before they break you?
    (they always break you eventually)
  325. Re:Most good programmers are capable... by mikehunt · · Score: 1

    Yeah, but the problem is how few "good" programmers there are.

    Let's fact it, most programmers write awful code but nobody
    ever gets to see it. I would estimate that of all the programmers
    I have worked with over the last 18 years that less than 10% of
    them could actually write well designed, well structured and
    maintainable code.

    Flame me if you will....

  326. People are more familiar with Software. by Stephen+Samuel · · Score: 2
    The only reason we (software engineers) get away with this scam is the general public cannot see inside of software systems.

    A friend of mine's father is a Civil engineer who does a lot of work on bridges. He refuses to use the Lions Gate Bridge between Vancouver andNorth Vancouver (he lives in North Van, and there are only two bridges between North Van and Van.).

    --
    Free Software: Like love, it grows best when given away.
  327. In that case, FSF's best product by yerricde · · Score: 2

    Microsoft's best product is Excel. Why? Because, unlike NT or Word or whatever, it's the main application used by the people who sign the cheques.

    The Free Software Foundation's best product is Gnumeric. Why? Because, unlike GNU/Linux or GNOME or AbiWord or whatever, it's the main application used by the people who sign the cheques.

    The KDE Team's best product is KSpread. Why? Because, unlike KDE or KWord or whatever, it's the main application used by the people who sign the cheques.

    --
    Will I retire or break 10K?
    1. Re:In that case, FSF's best product by David+Gerard · · Score: 1

      I mean that Excel is the only one where the one paying for the thing has to suffer it. So it's the only one with that sort of direct user quality feedback.

      --
      http://rocknerd.co.uk
  328. Beautiful Software is Easy to Remember by vodoolady · · Score: 1
    But meeting the requirements is a complicated goal, and well-designed software is an important part of the solution. I think well-designed software has a lot in common with more human designs, like music, and so to make well-designed software it has to be 'beautiful'.

    A system's archtitecture is the programmer's user interface. With that in mind, the goal of the interface is the same as any other: be pleasant to use. We usually say 'maintainable', but it's the same goal. To help achieve that goal, software architecture should be beautiful, because a beautiful architecture is easy on the mind. A well-designed system is easier to remember and reason about.

    Consistency and symmetry are the first two design guidlines that come to mind when people think about well-designed software, and of course software has to actually do what it was written to do. But beyond that, there are thousands of choices that depend on the engineer's aesthetics, and hundreds of choices where bending the rules gets better results. Classification is much more difficult that consistent variable names.

    A lot of these 'beautiful displays of complex information' problems were solved by old-school drafting fifty years ago.

  329. Java language misconceptions by yerricde · · Score: 1

    I want to make a linked list in Java. Ooops, no pointers, sorry.

    As Procrasti mentioned, every variable in the Java language not of primitive type (int, etc.) acts as a pointer. Just because you don't see a * doesn't mean it isn't a pointer.

    I want to pass a variable to a function and have it modify it, oops, no pointers.

    So pass a reference. If you're passing an object, don't clone() the object before you pass it. If you're passing a primitive, wrap it in an object (i.e. int foo; ... Integer bar = new Integer(foo);).

    I want to write a program that takes as little memory as possible, or reuse memory, or optimize it to use common options of the processor, oops, no memory management, no assembler.

    Reuse memory by calling System.gc(). Write assembly language either with Jasmin (an assembler for JVM bytecode) or JNI (a way to link in unsafe native code).

    Technically you could [write a JVM in the Java language], of course. But you'd have your JVM running on a JVM

    Not necessarily. GCJ can compile Java language source code into a native binary using G++'s engine.

    Damnit, I want a programming language that gives me access to the freeking carry flag! =). I've done math routines a lot, and the code is literally 10x faster when you can optimize it by hand in assembly.

    Then design a language that does such a thing. GCC is free software; you can start from that. And if you don't like the quality of optimizations that GCC does on your code, contribute a better optimizer.

    --
    Will I retire or break 10K?
  330. Code built like houses, houses built to code by jpallas · · Score: 1
    While there may be a lot of sloppy construction out there, there is a minimum standard for houses (construction codes) that is enforced during design (permit process) and construction (building inspectors).

    Software has no equivalent, and it shows. Typically, no one reviews a software design before implementation begins. (Hell, you're lucky if a design exists before implementation begins!) There are no minimum standards for the quality of the components (e.g., programmers routinely create a new linked list implementation instead of using a standard library). There are very rarely inspections during the building process (go ahead, try to get code inspections adopted at your work site).

    The result is that a sloppily built house, barring actual dishonesty by the builders or officials, is unlikely to collapse unexpectedly, leak uncontrollably, or explode without warning. Newly "finished" software programs, sadly, are likely to do all of those.

    I agree that "People cut corners if they think they can get away with it." In the construction arena, we don't just wring our hands about it; we put mechanisms in place to deal with it. In software, we just look for excuses.

  331. "Just throw more hardware at it"? Not always. by yerricde · · Score: 1

    Programmer time is usually much more important than machine time.

    I see your point with respect to comments. However, unoptimized code and inefficient algorithms are unacceptable for many server-side tasks where adding more hardware to a large computing cluster would incur prohibitive costs. For instance, an optimized renderer may help an independent motion picture studio's render farm finish a movie in 2 years instead of 3.

    --
    Will I retire or break 10K?
    1. Re:"Just throw more hardware at it"? Not always. by David+Greene · · Score: 1
      I see your point with respect to comments. However, unoptimized code and inefficient algorithms are unacceptable for many server-side tasks

      Which is why I qualified my statement with "usually." :) For the most part, development costs refect the time spent coding, debugging and maintaining. Good design can cut down on this. The sorts of memory problems discussed above can usually be solved with good design. Good design doesn't require the programmer to micromanage.

      Of course, any exponential-time algorithm will swamp any machine now or in the future given a sufficiently large dataset. :)

      --

  332. Hmmm... by Farmer-Al · · Score: 1

    Nice resume.

  333. I remember that Murphy quote ... by UnknownSoldier · · Score: 2

    "If construction workers built buildings the same way programers wrote code, the first time a woodpecker came along it would destroy civilization."

    At least we have OOP and Generic Programming to reinforce our "buildings" now.

    Getting this back on topic ...

    Code *can* be art. I've seen some beautifull code: Elegant, and powerfull. It's amazing how the elegant solution is usually smaller and less complicated then code written by someone who doesn't really understand the problem.

    If code, or math equations, can invoke an emotional response out of me, I'd say that qualifies it as partially being art.

  334. Re:Perl Software Pet Peeve: not using warn and str by RFC959 · · Score: 1
    Maybe when you have the time you could fix it and submit a diff to the author. Or perhaps you can submit a bug report. It couldn't hurt.
    Hey, some of us are working at real jobs, you know. Unfortunately, in much of the real world, you aren't given the source, so you can't fix it, and if you submit a bug report (assuming the vendor even has a formal channel for it), a) your boss will wonder why you're helping them with their job instead of doing yours, and b) they'll ignore it; chances are that they've already gone through three minor revisions between the time they shipped the thing and the time you send in the report.
  335. bridges by Anonymous Coward · · Score: 0

    Bridges would fall down much more often if:

    - people didn't go to jail when bridges fell down (just when they copied/de-rot-13-ed their competitors blueprints.)

    - the distance spanned by typical bridges doubled every 18 months... continuously over a period of several decades.

    - every bridge site has multiple competitors starting construction simultaneously; if you finish last you probably won't paid even if your bridge is slightly more elegant.

  336. Re:Perl Software Pet Peeve: not using warn and str by Malcontent · · Score: 2

    What you don't have time to submit a bug report? Give me a break. If you can't do it at work do it when you get home. If you are unwilling then don't use it and don't whine about it. There are plenty of commercial products that probably work just fine just pay your money and go about your business.

    Lead, follow or get out of the way. And in any case nobody wants to hear you bitch when you aren't even willing to submit a bug report let alone a patch.

    --

    War is necrophilia.

  337. He designed the Notes API and then writes this? by B00mZilla · · Score: 1

    throw the article out. Anyone who's had to do any serious type of Lotus Notes Development can tell you that he's being hypocritical, no matter how knowledgeable he is.

  338. i like that by cconnell · · Score: 1

    Clever,... My article and someone else's negating each other in a huge explosion. I'd like that.

    Chuck