Slashdot Mirror


The Poetry Of Programming

Lumpish Scholar writes "Sun's Richard Gabriel (possibly the only person with both a Ph.D. in computer science and an MFA in poetry) talks about "the connections between creativity, software, and poetry": "People say, 'Well, how come we can't build software the way we build bridges?' The answer is that we've been building bridges for thousands of years, and while we can make incremental improvements to bridges, the fact is that every bridge is like some other bridge that's been built.... But in software ... we're rolling out -- if not the first -- at most the seventh or eighth version. We've only been building software for 50 years, and almost every time we're creating something new.""

385 comments

  1. Bridges do one thing only by Anonymous Coward · · Score: 5, Interesting

    Defy physics between two points. Software changes because what we do with it can change.

    1. Re:Bridges do one thing only by Anonymous Coward · · Score: 5, Insightful

      Bridges don't defy physics in anyway. Just because you are ignorant of the physics behind them doesn't mean it doesn't exist.

    2. Re:Bridges do one thing only by HeyLaughingBoy · · Score: 1

      Software does one thing only: solves the customer's problem. What's the difference?

    3. Re:Bridges do one thing only by Anonymous Coward · · Score: 0

      What problem does Unreal Tournament solve?

    4. Re:Bridges do one thing only by Anonymous Coward · · Score: 0

      Hardware sellers not having a profit?

    5. Re:Bridges do one thing only by shd99004 · · Score: 2

      Defy physics? Yeah, good luck with that...

      --
      Will work for bandwidth
  2. Software Haiku by Hayzeus · · Score: 5, Funny

    Process swiftly crash NULL pointers everywhere O -- Electric Fence!

    1. Re:Software Haiku by Hayzeus · · Score: 1

      ...and you'll just have to imagine the line breaks...

    2. Re:Software Haiku by GigsVT · · Score: 1

      I think you are on to something. If everyone had to write haiku without line breaks, the stupid ones would become more apparent.

      Here's a hint to the other would-be joke haiku writers, if you take out the line breaks and it sounds like a totally unremarkable statement, then your haiku sucked. :)

      --
      I've had enough abrasive sigs. Kittens are cute and fuzzy.
    3. Re:Software Haiku by Reziac · · Score: 3, Funny

      Some haiku express
      Depths of insight and beauty
      But this one does not

      --
      ~REZ~ #43301. Who'd fake being me anyway?
    4. Re:Software Haiku by kisrael · · Score: 2

      My love of haiku
      Was small as a cicada
      And then got smaller.
      --Mr. Blue (Garrison Keillor, writing on Salon.com

      --
      SO YOU'RE GOING TO DIE: The Comic for Dealing with Death
    5. Re:Software Haiku by Anonymous Coward · · Score: 0

      Process swiftly crash
      NULL pointers everywhere
      O -- Electric Fence!
      ----

      Dummy! Didn't you read the man page?
      DON'T WIZ ON THE ELECTRIC FENCE

    6. Re:Software Haiku by Anonymous Coward · · Score: 0

      "Cicada" has to be one of the runner ups in all time (non Gaelic, non Scottish) must unlikely spellings in the world. I've never seen it pronounced any other way than "Katydid." Next to the island of Kiribati, which is pronounced "Kittibus"

  3. Yes by Anonymous Coward · · Score: 4, Funny

    Whenever I create software, it takes a lot out of me. Much like Picasso's painting, Michaelangelo's Sistene Chapel, ee cummings literary works (only I use more punctuation marks than she does), I am an artist. My work is meaningful and beautiful, and a part of me, which is why I release it under the GPL. For the GPL, itself, is also a work of art. It brings light to the darkness, it brings joy to the huddled masses of ones and seros yearning to be free.

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

      Well, the ode to the GPL there would be karma whoring, but since you're an AC I assume you just trying to prevent others whoring with similar comments.

    2. Re:Yes by owenb · · Score: 5, Funny

      ee cummings literary works (only I use more punctuation marks than she does)

      Ah, yes, the great emily ermintrude cummings. Her work was far superior to that upstart edward estlin, wasn't it?

    3. Re:Yes by Reziac · · Score: 3, Funny

      Stop writing your code in blood, and you'll not feel so drained afterward!

      And what's this ear doing on my desktop??

      --
      ~REZ~ #43301. Who'd fake being me anyway?
    4. Re:Yes by Dr.+Smeegee · · Score: 1

      Dude, That was such an up so ringing many bells downer.
      e. e. punnings

  4. Re:I wonder what would happen... by legoleg · · Score: 1

    Would it make it to the next century?

  5. Re:I wonder what would happen... by crashandburn99 · · Score: 2, Funny

    Would bring a whole new meaning to the term 'Blue Screen of DEATH' crashandburn99

  6. Re:I wonder what would happen... by Anonymous Coward · · Score: 0

    Why did you feel the need to share that?

  7. Re:I wonder what would happen... by GMC-jimmy · · Score: 2, Interesting

    I'm only getting a few things coming to mind if software were made similarly to the way bridges are made as this artical suggests.

    Copyright infringment, DMCA, patent suits, ect...

    --
    __________________________________
    Free your mind - Flush your toilet
  8. Get real by PhysicsGenius · · Score: 2, Insightful
    Something new every time? Then how come when I browse Freshmeat I see 18,000 IRC clients and a further 5,000 "aim workalikes"?

    The problems people face have barely changed in thousands of years. The problems that business (which uses 95% of the software out there) faces haven't changed in 200 years. The requirements are well-known. The solutions exist. The reason the software sucks isn't that you have a PHB, it's that you lack discipline to find and fix all your bugs.

    1. Re:Get real by sphealey · · Score: 2
      The problems people face have barely changed in thousands of years. The problems that business (which uses 95% of the software out there) faces haven't changed in 200 years.
      Amen brother. Although I would question the 200 years a bit. I recently documented a bug in an ERP system that violated a fundamental rule of double-entry bookkeeping. Those rules were codifed by the Medici's in the 1500s!

      sPh

    2. Re:Get real by redfiche · · Score: 2, Insightful

      I agree. We don't need to train code poets, we need to train software engineers. The problem with software development is not too much engineering, it's too little.

      --

      Brevity is the soul of wit

      -- Polonius

    3. Re:Get real by SpaceRook · · Score: 2, Insightful

      This is completely true. I've been reading Peopleware these past couple days. Besides the fact that the authors flat-out say that there are very few new problems in software-engineering (this was in 1987!!!), the real difficulties are often due to bad management and work environment. If you're creating something new "almost every time", you are doing something terribly wrong.

    4. Re:Get real by Anonymous Coward · · Score: 0

      So the internet, and all that comes with it isn't a relatively new problem that standard brick and mortar businesses have to deal with?

    5. Re:Get real by Malc · · Score: 3, Informative

      Self-discipline seems to be a key factor between good and bad developers. Especially when it comes to languages like C++.

      I've met people who are amazingly creative and churn out very innovative code... yet are incapable of testing it and making it production quality. Then I've met overly anal people who snuff out creativity in all the people around them, producing code that is late and uninspiring. The best developers are somewhere in between.

      I've noticed that many of the best developers were once or still are musicians... perhaps musical discipline is good training for being a software engineer. I also read an article in the National Post recently that published the results of a reasonably sized study: students educated in the arts including music also achieved higher and better results in maths and science.

    6. Re:Get real by fucksl4shd0t · · Score: 3, Insightful
      So the internet, and all that comes with it isn't a relatively new problem that standard brick and mortar businesses have to deal with?

      As a matter of fact, communication and information sharing and dispersal isn't anything new to business. Advertising and marketing are also nothing new to business. If the businesses hadn't spent so much time trying to make the internet "different" and instead applied the same rules and philosophies that have been known for hundreds of years to the internet, perhaps the dot com crash wouldn't have hurt as much? (I think it still would've happened, though)

      Just because something appears new from the outside doesn't mean it is new. How long has the word "network" been in the english language, anyway? Anybody know?

      --
      Like what I said? You might like my music
    7. Re:Get real by jbrownc1 · · Score: 1

      I don't think he's off-base at all. There's not just one portrait or one still-life or one landscape photo or painting, there's lots of them. They're all the same in one way, but all different as well, as each artist (insert programmer) tries to take the body of work that's out there and distill something better. Doesn't always work out, no doubt.

      Maybe if there were an MFA in Software, and if students did study code the way art students study art, then there would be fewer IRC clients and more good IRC clients, as they jumped in on existing projects and helped them along.

      I think his call for more iterative development, where the end-user was more involved in the process, would have made all those solutions that deal with the problems that business has faced for "200 years" less buggy to begin with. That and studying code from the "masters", as he suggests.

    8. Re:Get real by friscolr · · Score: 1
      How long has the word "network" been in the english language, anyway? Anybody know?

      my friend dictionary.com doesn't seem to know, but its rival sibling m-w.com says since 1560 as a noun and in verb form since 1887.

    9. Re:Get real by ProlificSage · · Score: 2, Insightful
      How long has the word "network" been in the english language, anyway?

      Almost 500 years, according to Merriam Webster. The first entry sets the date at 1560 AD.

      --
      Real software engineers regret the existence of COBOL, FORTRAN and BASIC.
    10. Re:Get real by digerata · · Score: 2, Insightful
      The reason the software sucks isn't that you have a PHB, it's that you lack discipline to find and fix all your bugs.

      I'm sorry, but there are other factors besides lack of discipline. One, in particular, is called: 'Get the fscking program out by this date or you're fired and we lose our market share'. That's one in which you have no particular control over. Its not a PHB, its the market itself.

      --

      1;
    11. Re:Get real by Anonymous Coward · · Score: 0
      Maybe if there were an MFA in Software, and if students did study code the way art students study art, then there would be fewer IRC clients and more good IRC clients, as they jumped in on existing projects and helped them along.

      whats the difference between Civil Engineering and Architecture? generally Archtecture gets bundled in with School of Art and Architecture and Civil Engineering with the School of Engineering. but both architecture and civil engineering are required to build stuff, like buildings and bridges. why should megalithic software be all bundled up in one place?

    12. Re:Get real by Anonymous Coward · · Score: 0

      I think we are not using the best words to describe the real problem. If we had to compare software with something, it would be probably to a mix of sociology and logic - but we don't. The real question is that when you "do" software (like everything else, bridges, poetry or gardening), you are not just fixing problems or satisfying needs, you are doing,let's say, your little bit of contribution to the world. You can choose to be or not creative (actually, many old and new forms of art are based on repetition). However, you should not forget that when you (or you company) writes an IRC client, a text editor or operating system, you are sharing with people *your* personal (or company) view of how comunication, editing, general hacking (and life and business itself) should be. Software, like poetry, may not be creative, but is a "living" thing.
      Have you readed you Karl Marx today?

      [.....]

    13. Re:Get real by ChaosDiscord · · Score: 2
      The reason the software sucks isn't that you have a PHB, it's that you lack discipline to find and fix all your bugs.

      So at my last three jobs when I was explicitly told by my boss "it's good enough, no one will find any bugs that remain, stop working on it and try something else", the problem is that I lacked discipline?

      Sure, there are lots of lazy programmers with a "it compiles, ship it" attitude. But there are lots of programmers who feel that their work is art that must be held to the highest standards. People who write for correctness, add lots of test cases, and carefully review their code. But those people are often in companies that are hostile to "wasting time debugging". Too many companies see something that works 90% and confuse it for a finished product.

    14. Re:Get real by Tacomanator · · Score: 1

      It's a lot easier to make a direct connection to the importance of safety when building a bridge than when building a piece of software (its no big deal to reboot a computer if it crashes, but try rebuilding a bridge in 2 minutes, or explaining to the loved ones of those unfortunate souls who were on the bridge at the time why the bridge 'crashed'). Perhaps as time goes by and software becomes more integrated in our lives software developers will start to recognize the same relationship, and worry a little more about the invincibility of their products.

    15. Re:Get real by lamz · · Score: 2

      I earned a degree in English before earning one in Computer Science. I agree wholeheartedly with the sentiments in this article. I was often bewildered that my CS professors always used 'bad' code examples in lectures, to show us what NOT to do, but it wasn't until reading this article that I fully grasped the contrast with studying literature, where you only see the best examples.

      Coders should remember that there are two interfaces to every project: the one that the end-user sees, and the one that the code-maintainer sees. This second one, in many cases, is more important to get right the first time, since a good programmer interface will allow modifications to improve the user interface.

      --

      Mike van Lammeren
      It will challenge your head, your brain, and your mind.

    16. Re:Get real by fishbowl · · Score: 2

      Some projects I've worked on, I'd have enjoyed
      doing more completion; but the problem is that
      if we spent the time and resources to get 100%, or let's say better than 80% complete and extreme quality, two things would happen:

      1. The business need for the project would have passed.
      2. The costs would have exceeded the benefit.

      So instead we go with "good enough to work and solve our problem" as a goal, instead of "good enough that we are willing to guarantee perfect results and great longevity", or even "suitability to tasks beyond the original scope."

      Now a bridge will not have outlived its purpose in the first quarter after the mayor cuts the ribbon. Also, I think about one bridge in particular wher I previously lived. I would have my morning coffee at a little restaurant on one side of the bridge, close to my house. At the booth I usually sat in, was a photograph from the late 1800's when the bridge was built, and another from, I'd guess, 1920, showing model T fords competing for space with men on horses and horse-drawn wagons. I'd see this every day, before entering into the little traffic jam that was the bridge.

      They didn't *design* that bridge for 1980's traffic and cars. And I doubt you could even say they overengineered the bridge; it just so happened that it was built solid enough for automobiles, simply because it was built to last.

      But, the point here is that a bridge is going to still be used long after it's paid for, long after everyone who ever worked on it is retired, and certainly will outlive the business unit responsible for its construction.

      If I were working on any project of such a scope, be it a piece of software, or a fifty year business plan, or a building design, then, "getting it done just enough to solve our immediate problem because we have other problems coming down the pipe" would not be a strategy worth considering.

      However, if I've got a problem to solve, I can't put myself in a position where I'm still planning and perfecting the design for the solution long after the problem has led my company to bankruptcy!

      --
      -fb Everything not expressly forbidden is now mandatory.
    17. Re:Get real by Anonymous Coward · · Score: 0

      Based on the affects of you're .sig it is two silly for me to even go their.

    18. Re:Get real by Anonymous Coward · · Score: 0

      The difference between the two is night and day.
      Architects are concerned with aesthetics and use of space. Civil Engineers are concerned with safety and whether or not the building can stand up to the environment it will reside in and how it will be used.

      You can also throw about a half a dozen physics, dynamics and chemistry courses in there for good measure at the undergraduate level.

    19. Re:Get real by dubl-u · · Score: 2

      If you're creating something new "almost every time", you are doing something terribly wrong.

      The way I look at it, if you are creating the same thing every time, you should teach a computer to do it. Computers are good at boring, repetitive actions; humans are good at figuring new things out. We should take advantage of that: good developers should strive to be doing as much new stuff as possible.

      But I agree completely that the problems in software development are mainly people problems, not technical ones.

    20. Re:Get real by Anonymous Coward · · Score: 0

      Or maybe its just the old truism that nerds take band.

  9. I'm curious about wheel reinvention by Anonymous Coward · · Score: 4, Insightful

    Are we really creating something new each time, or creating things in parallel? I'm not an advanced programmer by any means but I've taken a few classes and noticed that the typical approach is to have students recreate solutions to common problems for the purposes of learning (e.g. The Towers of Hanoi to learn recursion), are we enculturating ourselves to go it alone rather than look at what others have done before us?

    1. Re:I'm curious about wheel reinvention by Bodrius · · Score: 5, Informative

      The approach to studying physics is also replicating well-known experiments with shoddy equipment, no experience, and predicted results.

      This is not to educate scientist to repeat the same experiments over and over again. It's just that you cannot be expected to understand complex physics and create new experiments for new theories if you haven't seen and tried the building blocks first-hand.

      They don't teach you to solve the Towers of Hanoi because it's a "common problem". They teach you to use recursion to solve problems, and to recognize a "recursion problem" by its characteristics, by using Towers of Hanoi as a common example.

      --
      Freedom is the freedom to say 2+2=4, everything else follows...
    2. Re:I'm curious about wheel reinvention by aeakett · · Score: 1

      I think that geeks of all sorts (both computer, and engineering for example) have fiercely independent personallities. The difference comes when you consider the costs of development. Engineers tend to deals with physical structures that need to be built and tested. That means that they are more likely to carefully consider their design, and borrow from previous designs (since, if the design fails, the cost of hard materials to build another, slightly tweaked widget would be high). Computer geeks have the luxury of engaging in incremental development, and test as they build. This is (in my opinion) more condusive to "going your own way".

    3. Re:I'm curious about wheel reinvention by HeyLaughingBoy · · Score: 1
      Engineers tend to deals with physical structures that need to be built and tested. That means that they are more likely to carefully consider their design, and borrow from previous designs

      Bingo!!! One of Boehm's (?) "essential problems" of software is that because it is so easily changed, there is great pressure to make changes on a whim. But incremental engineering can be one of software's strengths when applied properly: the customer can start using the product before it's completed.

      To the original poster: perhaps a better way of teaching software would be to give students examples of OK and bad solutions to problems they are assigned and ask them to improve on the good solution while avoiding problems in the bad one. I agree that most students don't get an opportunity to see the difference between good and bad code...or good and bad designs for that matter.
  10. Try building a bridge... by gUmbi · · Score: 5, Funny

    Try building a bridge:

    a) with half the crew and materials required
    b) in a quarter of the required time
    c) that will be retrofitted to support train tracks and a second level
    d) that will be backwards compatible with the previous bridge
    e) that is better than your competitors bridge

    Jason.

    1. Re:Try building a bridge... by majestynine · · Score: 4, Funny

      In Soviet Russia, Bridge builds YOU!

    2. Re:Try building a bridge... by simong_oz · · Score: 2

      it's called civil engineering. Your point is? :-)

      --
      "Because it's there." - George Mallory, when asked why he wanted to climb Mt Everest, March 18, 1923 (New York Times)
    3. Re:Try building a bridge... by quintessent · · Score: 2

      Oh, and you have to design the bridge too...

    4. Re:Try building a bridge... by nrd907s · · Score: 5, Funny

      You forgot....

      f) Then halfway through the specs are changed and you are told to make a tunnel

    5. Re:Try building a bridge... by nelsonal · · Score: 1

      I have to ask where do these Soviet Russia jokes come from, have I missed the next all your base or something?

      --
      Degaussing scares the bad magnetism out of the monitor and fills it with good karma.
    6. Re:Try building a bridge... by Anonymous Coward · · Score: 0

      Talk about stupid analogies. What software engineers could learn from civil engineers:

      Try building a bridge:

      a) with half the crew and materials required


      It means software engineers should grow a spine and demand the crew and resources to get the job done instead of taking it up the ass.

      b) that will be retrofitted to support train tracks and a second level

      Again, software engineers need to show some testicular fortitude. NO civil engineer would allow such a radical design change halfway through implementation of a bridge.

      c) that will be backwards compatible with the previous bridge

      Bridges are inherently compatible. It's called having good requirements with a clearly defined objective instead of throwing in gobs of unnecessary features ("ooh! Chrome doorknobs! That'll definitely make this bridge safer!")

      d) that is better than your competitors bridge

      Better? You mean more flashy, but not more functional or reliable. For some reason, you think the word quality doesn't apply in the same way to sofware as it does to bridges. Quality, in the bridge sense, means: incrementally better methods, lots of reuse of basic building materials, it doesn't fall down, it lasts for years, and it is reasonably priced. Quality, in the software world means: methods that fall in and out of fashion every 6 months, poor material reuse that is equivalent to reinvention of the wheel in every conceivable language, it falls down regularly, it lasts about 2 years, and it's outrageously priced.

    7. Re:Try building a bridge... by ianscot · · Score: 2
      Try building one without paying adequate attention to the needs of the people who'll use it, you mean? That way you'll end up with the hybrid train tracks and the backward compatibility with commercial trucking and so on, sure. The only way a bridge like that gets built is when the engineer is too arrogant to solicit and pay attention to the needs of the people commissioning the thing.

      A good architect or engineer puts a hell of a lot more thought into those supposedly routine ("they only do one thing") bridges than software "engineers" put into their designs, at least from what I see. The point of this article is that software's much more unique and variable, but shouldn't that make us better at listening to the user?

      --
      "Fundamentalism" isn't about divine morality. It's about human authority.
    8. Re:Try building a bridge... by $rtbl_this · · Score: 2

      I think you stopped short:

      1. In Soviet Russia, we are belong to all your base
      2. ??? (If we needed to know, Comrade Stalin would have told us)
      3. Profit!!! (Well, distribute the profit among the workers, according to need).

      That should do it. Now why don't you go and visit your doctor and see if he can innoculate you against memes?

      --
      "Are you being weird, or sarcastic?" said Emma. I said I didn't know because I get the two feelings mixed up.
    9. Re:Try building a bridge... by rmohr02 · · Score: 4, Informative

      There's a family guy episode (There's Something About Paulie - Episode #23) in which the Griffins get a new car with a computer. They're messing around with the languages while getting directions, and when they switch to Russian the computer says "In Soviet Russia, car drives YOU." Then, later in the episode, when telling which way to turn at a fork in the road, the computer says "In Soviet Russia, road forks YOU."

    10. Re:Try building a bridge... by ajs · · Score: 2

      f) and that involves at least 10,000 moving parts which must be manufactured by 20-30 individual supliers, and all of which are unique to this bridge.

    11. Re:Try building a bridge... by rcs1000 · · Score: 2

      Am I being really stupid, but I don't understand all these "In Soviet Russia" comments.

      Please please, can someone explain it. (I assume it is a reference to something.)

      --
      --- My dad's political betting
    12. Re:Try building a bridge... by Anonymous Coward · · Score: 0
      Try building a bridge...

      f) that involves at least 10,000 moving parts which must be manufactured by 20-30 individual supliers, and all of which are unique to this bridge.
      You're obviously not a civil engineer--they like their bridges to stand still as much as possible... :-p
    13. Re:Try building a bridge... by kisrael · · Score: 2

      Yeah, I think it is a play on a old line by Russian comedian "Yakof Smirnov" or something like that. I don't remember the exact original joke, but he was a middling-poor comedian. (Probably better know for his "What a country!" line than this formulation, actually...at least that's what MAD magaine chose to rip on.)

      I had a book of his when I was young. My favorite joke:
      "In Russia, we have saying: Women are like buses.

      That's the saying."

      --
      SO YOU'RE GOING TO DIE: The Comic for Dealing with Death
    14. Re:Try building a bridge... by jgerman · · Score: 2
      Also add that some drivers on the bridge will invariably attempt to drive on the underside of it, go over it backwords, ect. and the builders will to be to blame if it doesn't work as expected.


      I'm the last person to bash any engineer for their work, but I get real tired of hearing how software engineers aren't "real" engineers.

      --
      I'm the big fish in the big pond bitch.
    15. Re:Try building a bridge... by surprise_audit · · Score: 2
      I think I saw this in the BSD Fortune program one time:

      If builders built buildings the same way programmers write programs, the first woodpecker to come along would destroy civilisation
    16. Re:Try building a bridge... by Daniel+Dvorkin · · Score: 2

      Yaakov Smirnoff (sp.) was actually a pretty successful comedian; I never found him funny, but IIRC his greatest success was at the height of the Reagan years, which of course was also the last great heating-up of the Cold War. His schtick was that he was a Soviet defector (which I rather doubt) and his jokes were pretty much a mix of the stereotypical immigrant's wide-eyed wonder at the US ("What a country") and ripping on the motherland ("In Soviet Russia ...")

      The basic gimmick of those jokes was kind of amusing: "In America, you watch TV; in Soviet Russia, TV watches you!" But it wore out fast, to say the least. The Simpsons gave him a very funny bit part in the Branson, MO episode -- he was one of the "performers you thought were dead."

      --
      The correlation between ignorance of statistics and using "correlation is not causation" as an argument is close to 1.
    17. Re:Try building a bridge... by Captain+Nitpick · · Score: 1
      Am I being really stupid, but I don't understand all these "In Soviet Russia" comments.

      It's a reference to Yakov Smirnoff's comedy routine from back when there was a Soviet Russia.

      The only actual example of a real Smirnoff joke of this form that I can find is:

      In America you can always find a party. In Russia the party always finds you.
      Which is rather more insightful than most slashdotters' attempts.
      --
      But then again, I could be wrong.
    18. Re:Try building a bridge... by richieb · · Score: 2
      I'm the last person to bash any engineer for their work, but I get real tired of hearing how software engineers aren't "real" engineers.

      I agree. Software engineering is engineering as real as it gets. The problem is that the science of computing is way behind the actual practice of programming.

      --
      ...richie - It is a good day to code.
    19. Re:Try building a bridge... by Anonymous Coward · · Score: 0

      Thank God you didn't go for

      f)profit!

      Now I just have to shoot myself for bringing it up...

    20. Re:Try building a bridge... by jokercito · · Score: 1

      That's nothin'. In Panama we will start kicking your ass for any more Soviet Russia comments.

      Kidding... maybe... not really.

    21. Re:Try building a bridge... by jschrod · · Score: 1
      No, then it's not a bridge, then it's a skyscraper. But wait, those get built successfully, too.

      The real difference is that civil engineers (and the companies that employ them) are bound by legal regulations and are liable for their work's success. The pressure to save costs at any price is there as well, perhaps even more than in software engineering - after all, the profit rates are much much smaller than in our business. They simply aren't allowed to skip essential safety measurements. If they could, they would.

      Similar safety measurements exist in the software profession as well. But we are allowed to skip them. Most real world software projects I've seen give a damn about elementar development methods. Hell, many developers I've spoken with think that a finite state automaton is something "academic" and worthless as such! And don't let me start about old-school COBOL and Assembler programers who still change their 70s programs by trial and error without understanding their structure. (I'm currently working on a project changing literally thousands of mainframe programs to adapt to current legal requirements.)

      Dick Gabriel is a wonderful and spirited person. I once had the fortune to spend a few days with him, it's an experience many people should have the chance. But obvioulsy he has had few opportunities to work in the grunges, and he has never worked with civil engineers. He spent his work time more with lunaries like jwz... :-)

      --

      Joachim

      People don't write Manifestos any more -- what's going on in this world? [Frank Zappa]

    22. Re:Try building a bridge... by Doc+Hopper · · Score: 2

      YAUP: Yet Another Useless Phrase

      Mechanical engineers build bombs.
      Civil Engineers build targets.

      Maybe that's the upgrade plan?

    23. Re:Try building a bridge... by JoshWurzel · · Score: 1

      Um...

      The point of bridge design to use as little material as possible and make it as easy to construct as possible.

      Contractors always get less time than they need to build it.

      Bridges are often retrofitted to support more weight and new technologies.

      *ALL* bridges are backwards compatible with older bridges, so take that software engineers!

      Every bridge I design must be better than the bridge the competitor is submitting for the same bid.

      Engineering is engineering, something many people don't seem the grasp. The building code may change (double entendre there), and so do the materials, but its all about figuring out the puzzle and optimization.

      So shut yer trap, smelly programmer!

    24. Re:Try building a bridge... by Anonymous Coward · · Score: 0

      Try reading the comment you're replying to you arrogant smartarse.

    25. Re:Try building a bridge... by Anonymous Coward · · Score: 0

      what is that supposed to mean?

      That all programs are made of wood?
      That all programs are the same small piece of wood?
      That woodpeckers should be hunted to extinction?

  11. ISO9000 by e8johan · · Score: 5, Insightful

    Using ISO9000 (define what to do, do it and document it), proper object orientation software is (should) built like bridges.

    Any major software company not reusing components and controlling the design/implementation process will fail. The reuse of components not only benefits the developers, but also the users (just look at KDE or Adobe's software, dialogs and tools are easily reused).

    The reuse of software requires direction, thought and documentation. You must know what it is that you try to do, break it down into sections (objects) and define the interfaces and interactions before you sit down and write any code. This is the most common mistake when coding and the biggest problem in open source projects that begin as small personal pets of the project initiator and quickly grows out of hand.

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

      (just look at KDE or Adobe's software, dialogs and tools are easily reused)

      I assume you are showing them as examples of how bad things can be, right?

    2. Re:ISO9000 by binaryDigit · · Score: 4, Insightful

      I worked in a company that received ISO9000 certification, and I can tell you that it doesn't mean squat. If you define what you are doing in a vague enough fashion, and document the crap you ended up writing, hey guess what, your ISO9000 compliant. It did not improve the software one bit. It's a lot like taking a test, when the test becomes the goal (vs what the test is supposed to achieve, measuring someones knowledge of a subject), then people have a tendency to focus on this new goal (passing the test) and actions become geared towards that goal vs the original. So all of a sudden it's not "hey lets improve our process and maybe we can achieve ISO9000", it becomes "hey lets change our process to achieve ISO9000".

      The nature of programming hasen't changed because the way we attack the problem is no different than 40 years ago because it mimics how humans attack problems. Break it down into managable chunks and try to make the chunks work together nicely. Whether it be structured or OO, the pen and paper change but the mind behind the pen and the words produced have stayed the same (i.e. not improved).

    3. Re:ISO9000 by Arkan · · Score: 1

      Sorry to bother you, but ISO9000 is not by any mean a solution. It's a tool, even in some way a grant of repeatability, but it was, is, and will never be a way to make better code.

      I know from experience that you can design complete shit, produce complete shit, and document complete shit, and claim it to be iso900x... and it's still complete shit.

      If you really want to promote code reuse, then have people work together, give them some time to design a carefully thought base API, and maybe they'll be able to reuse it in the next program you want them to make.

      You're right when writing that code reuse requires thought and documentation, but you can't give a direction, as you can't be sure what kind of problems your next program will have to solve.

      Anyway, cost-wize, coding well is too expensive. Just recruit some monkeys, preferably an infinite amount, and put them at task. The only thing you need is a good sales and marketing team to sell the crap produced, and good accounting department to falsify numbers.

      --
      Arkan

    4. Re:ISO9000 by lobsterGun · · Score: 1

      I agree with you that direction thought and documentation are essencial, but component reuse is overrated.

      In order to facilitate good component reuse the original compuments must be designed at a rather generic level. That's fine for cases where the objects represent simple constructs, but when the objects are to represent complex constructs you start running into the Law of leaky Abstractions, and you end up spending more time debugging side affects than you would have spent writing and testing a custom object.

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

      You make it sound like it is just a question of applying a few magic bullets. Reusing components is just one of many, many tools that play a role in writing good software.

      I have already seen a lot of software projects fail, despite being documented to death (or perhaps because of it), despite reusing components where possible (in some cases I'd say definitely because of this), and despite careful upfront thought and design.

      The reasons were usually complicated, but involve politics, absurd requirements, directional changes, changes in leadership, amateurish programmers, and many others.

      I'm not saying you should _not_ do the things you say, but if you have done any work in the real world you would realize that merely designing, reusing, and documenting is not nearly sufficient to guarantee success.

    6. Re:ISO9000 by p3d0 · · Score: 3, Interesting
      I disagree. I have yet to work at a company that uses real object-oriented components "properly" and yet all these companies are successful (though I'd rather not name names of course). One company was small enough that it produced only a single product, and a single developer knew the whole product inside and out. Anther was so large that they can throw manpower at the product to wrestle it into submission regardless of any lack of OO componentry.

      OO components are cool and all, but they are not necessary or sufficient to run a successful company writing software.

      --
      Patrick Doyle
      I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
    7. Re:ISO9000 by p3d0 · · Score: 2
      No, software hasn't changed because we have only been doing it for 50 years. That's not very long in terms of human scientific/engineering development.

      You and I wouldn't even recognize how software is built 1000 years from now. By then, I certainly hope most of it will have been reduced to practice, but even if it hasn't, I'm certain they won't do it the way we do it today.

      --
      Patrick Doyle
      I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
    8. Re:ISO9000 by binaryDigit · · Score: 2

      Well yes of course I'd expect software 1000 years from now to be vastly different as I'd expect computers 1000 years from now to be vastly different, that's not the issue. I contend that 50years in computer time is an eternity and the lack of advances in software development more market driven vs technology driven (as opposed to bridges, well at least more so than bridges). The problem is that the market is expanding and developers mainly react to this expansion. We also have a problem in that most development is centered around a very small set of development tools/environments (Windows/Visual Studio being the largest) and developers can only go as fast as the tools they have, and visual studio really is going nowhere fast (I've been using M$ stuff since MSC v3 and MSPascal v2 and still use to today)

    9. Re:ISO9000 by jgerman · · Score: 2

      Nor are they the silver bullet that is appropriate for all situation or solves all problems. Unfortunately, this is the attitude that's bred into kids in college, by professors who should know better. Such is life though, those that go on to actually be good coders, engineers, ect. will grow out of that attitude.

      --
      I'm the big fish in the big pond bitch.
    10. Re:ISO9000 by kisrael · · Score: 2

      Mod Parent Up! The The Law of Leaky Abstractions is a must read.

      --
      SO YOU'RE GOING TO DIE: The Comic for Dealing with Death
    11. Re:ISO9000 by p3d0 · · Score: 2
      The fact that "50 years in computer time is an eternity" is precisely because there have only been 50 years of computer time. During the first 50 years of bridge-building time, we might have said exactly the same thing in that field.

      Software is not special. It is just another human endeavor, and we are simply not very good at it yet because we have not done it for very long. The dot-com bubble was one piece of evidence for this: the mere presence of computers doesn't change all the rules of the free market.

      I agree with Richard Gabriel's assessment that creativity is needed in software, to the extent that we don't know how to reduce it to practice yet.

      --
      Patrick Doyle
      I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
    12. Re:ISO9000 by refactoringdr · · Score: 1

      ISO9000: Where quality is measured by board-feet of documentation.

    13. Re:ISO9000 by KevinDumpsCore · · Score: 1

      All ISO9000 can guarantee is that your failures are repeatable and well-documented.

    14. Re:ISO9000 by e8johan · · Score: 2

      You are too right, ISO9000 is only a tool, but if you're willing to use it, it can improve the quality of your products. I know that it makes work harder and introduces lots of paperwork, but if someone is going to take over your code, it is worth it.

      As for good code being too expensive, you are right again. It is sad, but true.

    15. Re:ISO9000 by e8johan · · Score: 2

      You are to hostile towards the ISO9000 solution. It is a formalized way of development, and a good tool, but with developers not wanting to use it properly, thinking that the extra documentation, planning, etc. are just a load of bull from marketing, then it will never work. You have to work with the tool in order to get benefits, and you have to adapt the tool to your business. So there are two conclusions, either you are not giving the formalized process a chance, or your formalized process isn't properly adapted to your business.

      As for the possibilities of getting ISO900x without erally doing squat, you are, sadly, right. But if you put it to use (with or without being certified) you can have benefits.

    16. Re:ISO9000 by e8johan · · Score: 2

      But the problem will not dissappear if you ignore it. I still believe that a properly applied formalized development process (possibly derived from ISO900x) can make things better.

      As for reuse being hard. It really is! But if you work in a one product, or one market (e.g. business support applications) company reuse can be achieved. Of course, if you have fourty products in ten different markets, it is hard to make general enough abstractions without buying yourself more problems than you solve. But some areas are always common, like the UI. Make all your product look and behave the same. With less effort you can make customers more happy (as they have to spend less on training).

    17. Re:ISO9000 by e8johan · · Score: 2

      If you dare to try it, look at your issues, adapt it (in your case, reduce the number of documents produced) it can be good.

      Bad developer: Where coolness is measured in obstructions... (if you work professionally, you'll need to formalize your development processes).

    18. Re:ISO9000 by e8johan · · Score: 2

      Isn't that better than them [your failures] being unpredictable and hard to find?

      Documentation is more important than you think in professional software development. If nothing else, you'll always know who to blame... :P

    19. Re:ISO9000 by e8johan · · Score: 2

      "merely designing, reusing, and documenting is not nearly sufficient to guarantee success".

      No, but they sure help!

      Bad management (which you seem to have experienced) is not a consequence of formalized processes (like ISO900x) but stupid managers and, sometimes, bad economy.

    20. Re:ISO9000 by binaryDigit · · Score: 2

      As for the possibilities of getting ISO900x without erally doing squat, you are, sadly, right

      Well I wasn't really trying to say that ISO9000 was worthless, just that last point. That a company that claims ISO9000 certification doesn't necessarily imply that the company has it's act together any more than anyone else. Just that they met the requirements to get it. It's just like any other type of certification, there are those who's goal is the certification, not what the certification's goal is. I wouldn't call myself "hostile" towards it, just not starry eyed that some (esp managers) get.

    21. Re:ISO9000 by p3d0 · · Score: 2
      Fine. I was just responding to your claim that "any major software company not reusing components and controlling the design/implementation process will fail", which I believe is patently false.

      Incidentally, after being a long-time OO components advocate, I now believe it never works in practice the way we imagine it will. They simply require more foresight than human beings have, and more planning than they are worth. It's like expecting every new construction project not just to build a thing, but first to design pre-fabricated parts that can be used to build all kinds of things. We don't expect this kind of thinking from any industry except software, and I believe it's unrealistic there too.

      When opportunities for good OO components present themselves, then go for it. However, making a specific effort to build software out of OO components is putting the cart before the horse.

      --
      Patrick Doyle
      I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
    22. Re:ISO9000 by e8johan · · Score: 2

      I do not believe in generic object orientation for anything except very basic components, such as lists, stacks and such. But also for the newer basic components, such as UI widgets, database interfaces, etc.

      In my professional experience I've build many applications interfacing one very complex data-structure (multiple interacting database tables). In this kind of projects it is still beneficial to develop an OO frameword onto which one builds a large array of applications for a range of different users.

      You are right about OO taking alot of planning and proofs of concepts, but this is getting easier and easier as refactoring and such methods are introduced. The efforts are only paying back if the OO framework is heavily utilized though-out the project, but this is the case in many projects.

      What I miss is the lack of automatic testing, such as test benches often used in electronics construction. This would make OO even better in multi-programmer environments. This would be harder to introduce, if not possible, without OO techniques.

    23. Re:ISO9000 by p3d0 · · Score: 2

      You have a good point, that refactoring mitigates the difficulty of creating OO components. To continue the already-strained pre-fab construction analogy: it's like discovering that certain parts of a building (like walls) are required over and over again, then designing pre-fab parts, and re-designing the buildings to use those parts. This does not require a tremendous amount of foresight; only pattern recognition. :-)

      --
      Patrick Doyle
      I mod down every jackass who puts his moderation policy in his sig. Oh, wait a sec....
    24. Re:ISO9000 by e8johan · · Score: 2

      I've studied the Law of Leaky Abstactions during the weekend, and have come up with a list of comments. All these comments are of course MHO.

      Mr. Spolsky argues that object orientation, or non trivil abstractions always leak, and that this is making programming unnecesarily hard. I would like to disagree. He starts his text by describing a very good abstraction that has been used and reused for many years in thousands of applications, the TCP layer, using the IP layer to provide easy message passing over the internet (or any other IP net by the way). He claims that the TCP abstraction leaks when, for example, a network cable breaks so that the communication cannot take place. I would like to say that this is a part of the abstraction: TCP connections can break. It is a natural part of a communications protocol and must be taken into account. TCP is, IMHO, a protocol used to send messages in one or more IP packages and to get them back they way I sent them. If the cable is broken, of course I do not expect my message to arrive. To put it in plain English, TCP allows me to send longer messages over a network and takes care of the splitting into packages and reassembly. That is all, it does not perfrom magic.

      Mr. Splolsky goes on with a number of examples of leaking abstractions, I'll comment them one by one here:

      • When iterating over two dimensional arrays the order that you access the items leads to different performance. This is mainly due to page faults (I'll ignore cache misses here). To solve this, simply use the right tool. If you want predictable response times and the ability to force a page to stay in memory, use a real-time OS. The general, flat memory space, OS abstraction does not guarantee access times. It does not even guarantee that your process is running all the time, a UNIX system might even swap out your entire process if you'r out of luck.
      • As for the SQL problem, this must be a problem in the language specification. It is a leaky abstraction, but you can always use another access method to retreive data from the database if performance is an issue. It is always hard to combine a high level abstraction with really high performance.
      • He goes on with files accessed over a network. I must ask a simpley question: what makes this a network problem? Local files can also fail. If the .forward file is located on a local harddrive that failes (CRC error in the actual file) you still experience this problem. This is a part of the file abstraction; Things can fail. Just as in the TCP example. This would not change if we went back to writing individual blocks to the hard drive platters, it would just complicate access, *alot*.
      • As for string classes, I will discuss this later.
      • The last example is just plain bull. The roof, wind screen and climate controls of a car is not used to abstract away the weather. Neither is traction control systems and such devices. These are simply tools that increase the comfort of the driver and passengers.

      Now, lets deal with the C++ string class. The example "foo" + "bar" is wrong. To declare a string constant, you should type string("foo") + string("bar"). This is just as odd as the declaration of long constants: 1L + 2L. I believe that the reason that C++ does not have a native string type is because C++ only knows scalar values (a string is a pointer which is a scalar value). This is due to the heritage from C.

      He goes on rambling about accessing OUT LPTSTR arguments, COM objects, ASP.NET flaws etc. These are bad abstractions by Microsoft and should not be concidered useful examples. Then to compain about Visual BASIC failing now and then for non-basic related issues; I dare to call VB an ugly hack. It is not a real tool to be used in professional software development. I get frightened when I see how many business critical systems that are based on VB code.

      Then he goes off topic (to use a /. expression). He starts to attack code generation tools and RADs. This is not abstraction, this is tools to allow people without the right competence and knowledge to try out programming. RADs are in fact _a_very_bad_thing_ as they encourages bad software development practice. They make it easy to forget how important it is to sitt down and thing before you start implementing.

      The next thing to complain about is that you need to know more to develop software today than ten - fifteen years ago. I do not find this strange as we construct far more complex and interdependent systems today. This while spending less and less time on planning.

      I'd say that the law of leaky abstractions is greatly exaggerated, but not entirely invalid. If you suffer from leaky abstractions you should concider changing tools or approach but not run away crying saying that abstraction is bad. Abstraction is a great tool, but as with all other tools it takes time to master. When used correcly it can reduce debugging time and increase the reusability. As a great example of code reuse I must point out that the TCP abstraction has saved thousands (if not millions) of source code lines. Just imagine if everyone had to rely on IP directly; How complex wouldn't the code be.

      Abstraction helps us develop better, more complex software and avoid reinventing the wheel every five minutes!

    25. Re:ISO9000 by e8johan · · Score: 2

      Please read this. It is my comments to TLoLA.

    26. Re:ISO9000 by kisrael · · Score: 2

      I don't think he's arguing that everyone should be programming at a lower level, and that abstractions aren't without some huuuge advantages...but they have to be the right abstractions, and more people should have an idea of what's going on behind the curtains than they do now.

      You make some convincing and some less convincing points about the examples he uses, but those are just examples. What he said rang so true for J2EE EJBs, which wasn't even an example, that I feel there's definately something to it. Even w/ JSPs; most of the time you can be very happy just editing your HTML-like page, adding some java here and there (not too much, hopefully--hopefully you've abstracted the parts that need straight java by putting them in well designed objects) but when things go really wrong, not very often at all, it's super useful to be able to examine the generated servlet that is the thing that actually gets compiled...

      --
      SO YOU'RE GOING TO DIE: The Comic for Dealing with Death
    27. Re:ISO9000 by e8johan · · Score: 2

      Ok, I admit I may have been a little too hard on his text. But the following quote from my reply sums things up:

      "I'd say that the law of leaky abstractions is greatly exaggerated, but not entirely invalid. If you suffer from leaky abstractions you should concider changing tools or approach but not run away crying saying that abstraction is bad. Abstraction is a great tool, but as with all other tools it takes time to master. When used correcly it can reduce debugging time and increase the reusability. As a great example of code reuse I must point out that the TCP abstraction has saved thousands (if not millions) of source code lines. Just imagine if everyone had to rely on IP directly; How complex wouldn't the code be."

      Leaky abstractions is not a problem in it self, the actual problem is that someone is using the wrong tools in the wrong situation.

    28. Re:ISO9000 by kisrael · · Score: 2

      Right, and what you just said is pretty close to what I took away from the article...I think he wouldn't have started with "look how cool it is that TCP works over flakey IP" if we wanted everyone to go straight to IP, just to avoid the abstraction.

      I think the thing that he's most obviously negative about is the whole "one click 'programming'" mentality. (For myself, I tend to like using well constructed toolkits, but dislike trying to modify other people's "engines", that kind of drive what I'm trying to do.)

      I think a fair summary of this would say the article is more of a state of the Union ("The Law of Leaky Abstractions is dragging us down") then a call to action ("Use only low level stuff!"...though a case could be made that he would say "So don't rely on tht crappy WYSIWYG-one click tool stuff")

      --
      SO YOU'RE GOING TO DIE: The Comic for Dealing with Death
  12. Advice for programmers by Anonymous Coward · · Score: 0

    As I look over this beautiful land
    I can't help but realize
    That I am alone

    Why am I able to waste my energy
    To notice life being so beautiful?

    Maybe partying will help.

    D. Boon

  13. i wonder by forkboy · · Score: 5, Funny

    I bet this guy owns that "Code Poet" shirt from Think Geek.

    --
    This message brought to you by the Council of People Who Are Sick of Seeing More People.
    1. Re:i wonder by dasmegabyte · · Score: 2

      Fuck you, I own that shirt. I wore it to work the first time and had to explain what the "poet" bit meant, since we programmed in ColdFusion. I wore that shirt to the first regional slam I went to after college; nobody understood what the "code" part meant. Most assumed it referred to either obfuscation poetics (which is fair, a lot of what I read was clang style word substitiution, heavy on puns) or some statement on the concept of idiolect. To misquote MC Paul Barman, "someone took too much semiotics."

      --
      Hey freaks: now you're ju
  14. Wrong by Reality+Master+101 · · Score: 5, Insightful

    The answer is that we've been building bridges for thousands of years, and while we can make incremental improvements to bridges, the fact is that every bridge is like some other bridge that's been built.... But in software ... we're rolling out -- if not the first -- at most the seventh or eighth version.

    I hear this theory every now and then, and it's just dead wrong. The fundamental problem is that a program is thousands of times more complex than a bridge. Imagine constructing a bridge out of hundreds of thousands, if not millions, of custom-fabricated tiny parts that have to fit together exactly right or the whole thing collapses. That's the correct analogy.

    When you also combine that with the fact that you can look at the totality of a bridge and get a "sense" of whether it's done right or not, at best you can only look at a few hundred lines of code at a time.

    --
    Sometimes it's best to just let stupid people be stupid.
    1. Re:Wrong by Mr_Dyqik · · Score: 3, Funny

      So it's like NASA's approach to building a satelite then? If you follow one of the more heavily documented programming techniques, maybe.

    2. Re:Wrong by Anonymous Coward · · Score: 0

      The fundamental problem is that a program is thousands of times more complex than a bridge.

      You don't know a damn thing about bridges do you? Hell, if you think software is developed with "hundreds of thousands, if not millions, of custom-fabricated tiny parts" you don't know a damn thing about software development either. I guess that doesn't leave much of a reason for you to bother posting does it?

    3. Re:Wrong by sphealey · · Score: 5, Insightful
      I hear this theory every now and then, and it's just dead wrong. The fundamental problem is that a program is thousands of times more complex than a bridge. Imagine constructing a bridge out of hundreds of thousands, if not millions, of custom-fabricated tiny parts that have to fit together exactly right or the whole thing collapses. That's the correct analogy.
      Sort of like a skyscraper? Or a large jet airliner?

      sPh

    4. Re:Wrong by Blindman · · Score: 1

      This is not to mention the fact that all bridges serve the same purpose. No matter what inovations happen in the art of bridge buidling, you are still trying to connect two previously unconnected pieces of land. In the case of software, the problems in some cases have not even been defined yet.

      I don't think that I agree with your analogy about custom-fabricated tiny parts, but I do believe that the original analogy is very wrong. A better analogy might be building construction, because of the variability of needs and flexibility of materials.

      However, in any case, I thing analogies shoud be stopped just like stopping a train (Oh, nevermind.)

      --
      I don't practice what I preach because I'm not the kind of person that I'm preaching to.
    5. Re:Wrong by RazzleFrog · · Score: 3, Informative

      I am guessing that you are an engineer. Bridges are extremely complex. Every bridge presents a new challenge. Watch a special on the building of the Brooklyn Bridge or the Tacoma Narrows. Read about the challenges of the proper Strait of Messina (Sicily) and Gibraltar bridges.

      As for telling whether you can tell if a bridge is right or not, The Koror-Babeldaob Bridge stood for 20 years before collapsing.

    6. Re:Wrong by mblase · · Score: 3, Insightful

      Imagine constructing a bridge out of hundreds of thousands, if not millions, of custom-fabricated tiny parts that have to fit together exactly right or the whole thing collapses.

      Sounds like the Golden Gate to me. Or the Tacoma Narrows, which is as good an analogy to Microsoft server software as I can possibly imagine.

    7. Re:Wrong by Anonymous Coward · · Score: 1, Interesting

      Also, this bit:

      "every bridge is like some other bridge that's been built"

      Is utterly, utterly wrong - unless you know nothing about bridges and go `yeah, i guess it sorta looks like that one`. In the same way that chinese and japanese looks the same when you don't know anything about either.

    8. Re:Wrong by plasm4 · · Score: 0

      lucky for us programmers that if a program hits a bug the user doesn't fall down a cliff unless you program for nasa i suppose

    9. Re:Wrong by jmcwork · · Score: 1

      There are a (relatively) finite number of methods to construct a bridge between two points. Once it has been built, if you carry a 5 kg load across it, then carry a 5000 kg load across, you can be pretty sure that it will support all loads between those two values. The 'artistry' in software means a great deal more testing is required to achieve the same level of confidence. (This example is paraphrased from an article that was in (I believe) Scientific American)

    10. Re:Wrong by Annoyed+Coward · · Score: 1
      Absolutely!!

      And who says there is no software like bridge. There are servers, applications that are rock solid. They won't break for months (sometimes years), and that is an achievement given the fact that it is complex piece of HiTech around us.

      Well, I am not talking about M$ products... u know....:-D

      --
      Hmmm... Ok.. Chivas on the rocks.
    11. Re:Wrong by Malc · · Score: 3, Insightful

      So you don't re-use the C library, or STL, or Java classes. etc? Over time we are creating more and more reusable parts that avoid custom-fabrication. I don't have to parse configuration files anymore as there is an abundance of good XML parsers that are far more flexible, reliable and robust than something I would custom build in a reasonable length of time. We haven't been making these libraries for long, but we're getting there.

    12. Re:Wrong by plasm4 · · Score: 0

      I've been awake for too long to not use the preview button

    13. Re:Wrong by simong_oz · · Score: 3, Interesting

      with respect, your post is complete bullshit. Bridge building is an art, and they are a hell of a lot more complex than your simple analogy implies.

      You know what, most engineers (I'm talking civil/mech/etc, not programmers) would love to be able to design and build with hundreds and thousands of custom-fabricated parts that do the exact job they are designed for. But you know what else? There is that small factor called manufacturing cost that prohibits this - they have to use standard stock and account for this in their design, and still get the thing to work.

      Your analogy is not a good one - you're comparing a program that could potentially have hundreds of applications with a bridge. Bridges are only one very small thing that civil engineers are involved with, so you should be comparing to a program that does a specific thing (for example, instant messaging), not to every program in existence.

      --
      "Because it's there." - George Mallory, when asked why he wanted to climb Mt Everest, March 18, 1923 (New York Times)
    14. Re:Wrong by binaryDigit · · Score: 2

      Well I'd disagree, kinda. While there may be a finite numbers of ways to construct a bridge, there are a greatly varying number of site and site conditions to build a bridge on. Each site having unique properties that require thought and creativity to solve. Span lengths, soil conditions, wind conditions, earthquake requirements, environmental issues, ergonomic issues, aesthetic issues, the variables are many.

      Your statement about the weights reminds me of one of my favorite Calvin and Hobbes comics. Calvin is riding with his parents in their car when they cross over a bridge with a "load limit" sign. Calvin asks "how do they determine the weight limits on the bridges?". His dad responds that they drive increasingly heavier trucks across the bridge until it collapses. They weigh the last truck and then they rebuild the bridge.

    15. Re:Wrong by Anonymous Coward · · Score: 0

      What about the first iron bridge?

      All the peices were custom made, and highly experimental. Put together by real engineers.

      It still stands!

    16. Re:Wrong by Schik · · Score: 1
      Similarly, there are millions of different computer configurations out there. Different OSes, service packs, hardware, drivers, etc.

      Writing software is like building a bridge that can be move from location to location without any modifications.

    17. Re:Wrong by binaryDigit · · Score: 2

      Right but not all pieces of software care about all those options. Pretty much no piece of software (other than the OS) cares much about storage devices, this has been abstracted away for them. They utilize an api and access things without concern for exactly what that thing is.

      To further beat the bridge analogy to death, you might have to move it to different locations without mods, but at each location you'd build the site up to facilitate the bridge. In this way the bridge could "easily" be made to fit many different locations.

    18. Re:Wrong by joss · · Score: 5, Insightful

      Fair comment, but if you mean to suggest that software could be designed like an airliner, consider this:

      When they make a new airliner, they model the entire thing on a computer first. The CAD model is an unambiguous model of the plane. Important subsystems in it are modelled and analysed independently and in conjunction with the components around it.

      So, if writing software was similar, we would first model the software on a computer. Oh, er, wait a moment. In an important sense, software is a design. The only unambiguous design is the actual software [otherwise we could make the design the programming language]. So, one could have a notion of starting with a fuzzy design and gradually making it clearer, but you can still end up with a bad design.

      When someone designs a bad aircraft, the design is modelled, flaws are found and the design is improved. Nobody builds the thing until they feel pretty sure the design is right. However, software is often bad for the same reason that an initial design of anything else is bad. If it was equivalent to an airplane, windows 95 for instance, once designed, would never have been built. However, once the design for a piece of software is complete, one has created the software. All the development money has been spent, so the makers will try to get what they can for it. It's *all* design.

      --
      http://rareformnewmedia.com/
    19. Re:Wrong by G-funk · · Score: 2

      And how much does a jet airliner cost? 50 million? And it's probably 30 million in parts.

      --
      Send lawyers, guns, and money!
    20. Re:Wrong by Anonymous Coward · · Score: 0

      Well empirically you can design airplanes without first modelling them on a computer--in the first half century of aviation, airplane designers did so quite successfully--so your analogy fails.

    21. Re:Wrong by leshert · · Score: 3, Insightful

      Software is not at all like a skyscraper or a large jet airliner. Punch a few holes in the wall of a skyscraper, or put a few bullet through the skin of an airliner, and they'll both still probably work safely.

      Write a couple of zero bytes at an arbitrary point in your favorite executable and run it. Chances are that it will fail catastrophically.

      That's what the OP meant by tiny pieces that ALL have to work in order for the whole to work. A small subroutine for a little-used feature that isn't even critical to the function of the application can usually take down the software more easily than the equivalent in any physical object.

      The reason is that the raw material of software is instructions to a machine. They are more abstract and therefore has less inherent resistance to damage than concrete or aluminum.

    22. Re:Wrong by Reziac · · Score: 2

      I think his example is more along the lines of "What if every bridge was made from hand-crafted bricks?" -- meaning, what if you couldn't count on the parts to exactly fit together, but had to hope that the suppliers contributing bricks made those bricks of more or less the same size and materials, even tho every supplier has a different idea of how bricks should be made.

      --
      ~REZ~ #43301. Who'd fake being me anyway?
    23. Re:Wrong by Kevin+Stevens · · Score: 2

      Well I think it is also important to realize that Computer Programming methodologies and architecture are still changing, and one day they may actually settle into "best ways" of doing things. IE, Mainframes gave way to PCs, which changed our programming styles from Mainframe/dumb display terminal to standalone apps, which then gave way to networks and client/server, to today's fashionable multi-tier Web applications. Each of these requires a completely different architecture. Also, keep in mind that most students go to school for "computer science," which is a very different thing from "software engineering." To compare to the bridge building scenario, imagine if a bunch of a bunch of material scientists had to go and build bridges for a living. There are not that many types of bridges, so it is much easier for a student to learn to build a truss bridge or a suspension bridge and focus on that, whereas CS types often come up with a new architecture each time. Additionally, bridges generally have ONE goal, to get things from A to B. Imagine now if that bridge also had to provide a habitat to the fish over the body of water it crosses, send daily status reports of all of its parts back to a central command center, alert cars that go over the bridge if their tire pressure is low, integrate or be built on top or use the parts of another rusting bridge that no one has any idea as to how it was built twenty years ago, predict how many cars and what types of cars are gong to be on it twenty years from now, and design around that prediction, have less upkeep and maintenance costs than the previous bridge, have the terrain over which the bridge is going to built change several times in the middle of the project, have what the bridge is supposed to carry change several times over the course of a project, etc, I think you see the point here before I ramble any more. I think a really key point is the fact that bridges do one thing in their life. 5 years after a bridge is built, no one goes to some engineer who is just out of school and says, you know that George Washington Bridge? We want boats to be able to cross over the top deck now, and have that done next week. Nor do they ask them to be able to handle triple the traffic their specs were maxed out to by only adding a few bolts. Could you imagine building a bridge over a river of water that suddenly turned into lava? In the case of the bridge, the engineers laugh at even the thought of doing any of these things. A programmer says yes sir, right away sir and does his best. The sad thing is, is that most of these problems are avoidable. I think over the next century, computing power and will far exceed most systems needs, and instead of solving the problems we can solve right now, we will be able to focus on building systems that are done, and dont need to be replaced every 10 years because of a drastic change in how computing is done. I am sure at some point in history, someone said "why the heck cant we build a bridge that doesnt wash away each time the rain rises."

    24. Re:Wrong by be-fan · · Score: 2

      This was in Tannenbaum's book. Designing a huge software program is nowhere near as hard as (the example he used) designing an aircraft carrier. The latter involves a far larger total investment in skilled man hours. However, the former is far more complex, because the seperate parts of a program are tightly coupled and can interact in unforseen ways. The seperate parts of the aircraft carrier, however, are loosly coupled, and changes in (again, his example) the toilets don't effect the rader system.

      --
      A deep unwavering belief is a sure sign you're missing something...
    25. Re:Wrong by TomHoward · · Score: 1

      Firstly parts of the application can be modelled and probably the best example of this is test driven development.

      Also, Reality Master's comment about custom fabricated tiny parts doesn't hold water. We should be reusing parts as much as possible. In C++ the STL provides (all though this needs to be greatly expanded) the same standardization benifits as those that occured in the building industry.

      The big difference with software is that so many vendors hide their code, making it a pain to develop standard components and allowing them to hide all their flaws.

      I'm not going to try and go all RMS on you, but for software engineering to become a real engineering field we need to start opening up to peer review, but the only way I see this happening is by force (not an attractive idea).

      To take your example, would Windows 95 have made it to market if the code was subjected to peer review before it was released? What if we had an organisation to certify that software is "safe" before it can be sold (like they have for buildings, bridges, cars, planes, ...) would it have passed? How much of todays software would?

      --
      Do you really think I'm go to put something novel here?
    26. Re:Wrong by Anonymous Coward · · Score: 0

      You can diagram a piece of software and get a sense if it was well-designed.

      Thinking that programs are thousands of times more complex than a structure is ignorant. Go to the Golden Gate and count each piece on it...every nut, every bolt.

      See, engineering involves calculating the forces on every piece before the structure is built.

      That doesn't happen with code unless you're working on the Space Shuttle. You think, whiteboard, code, repeat.

    27. Re:Wrong by Anonymous Coward · · Score: 0

      So...a train bridge is the same thing as a pedestrian bridge is the same thing as a bridge for cars? A bridge over water is the same as a bridge over land?

      Plus...how much software is just an interface to a database with some "application logic" in between? Whether it's figuring out stock quotes or inventory at Walmart...

    28. Re:Wrong by astroboy · · Score: 2
      However, once the design for a piece of software is complete, one has created the software.

      Right. So if only -- if only! -- there were some way of designing software without actually writing the code. Some sort of planning process, maybe involving thinking and writing but not necessarily typing. Maybe you could make something that was the same type of thing, but only a beggining of it -- some sort of proto-type. Hmmm.

      You could even try planning out the logic that would be necessarily before actually coding it.

      Nah, I guess you're right, there is no design process for software other than coding.

    29. Re:Wrong by JoshWurzel · · Score: 1

      Sort of like a skyscraper? Or a large jet airliner?

      No. Like a BRIDGE. ;-)

    30. Re:Wrong by TC+(WC) · · Score: 1

      There are a (relatively) finite number of methods to construct a bridge between two points. Once it has been built, if you carry a 5 kg load across it, then carry a 5000 kg load across, you can be pretty sure that it will support all loads between those two values.

      Except that you discover a year later when the bridge collapses that the 5000 kg load put small stress fractures in a bolt and the redundancies you designed in didn't hold... That would be a horrible way to design bridges... especially if you waited until after the bridge was made to figure out the basic limits of the design.

    31. Re:Wrong by TC+(WC) · · Score: 1

      And who says there is no software like bridge. There are servers, applications that are rock solid. They won't break for months (sometimes years)

      I understand what you meant... but I still find it kind of funny, since a bridge that broke after months wouldn't be so very rock solid :)

    32. Re:Wrong by edb · · Score: 1
      they have to use standard stock and account for this in their design, and still get the thing to work.


      Electrical engineers are quite accustomed to this kind of restriction. The calculations may tell you that you want a 513.24-ohm resistor in your circuit, but you know that they are manufactured as standard components in 490, 500, 510, and 520-ohm values, but with tolerances of

      • +/-20% (cheap)
      • +/- 10% (more $$),
      • +/- 5% (expensive),
      • +/- 1% (gawd-awful expensive),
      • +/-0.5% (if you gotta ask, you can't afford it)

      The thing that separates an Engineer from a Designer is that the Engineer understands the difference between Ideal and What is Available, and knows how to build tolerances into the design that will accept the variance in performance of What is Available, balanced against the cost, and still meet the performance specification.
      Four points to summarize:
      • Designers envision things that might not yet ever have existed; that does not mean they are possible given current technology and/or current best practice
      • Engineers (mechanical, civil, chemical, electrical, software, whatever) design Real Things made out of Real Components and Real Ingredients
      • Better Stuff (Components and Ingredients) costs more; Cheaper Stuff might be good, might be bad, might even be IDEAL, but you takes your chances
      • Engineers know that a robust design will include tolerances which accomodate the variance likely to be found in the Real Components and Real Ingredients used to implement the design, taking into account the cost for getting Better Stuff
      --
      In theory, practice and theory are the same. In practice, they rarely are.
    33. Re:Wrong by Anonymous Coward · · Score: 0

      More like a city them. And look how messed up most of them are :) In fact, we've probably been trying to get them right since the first ever town meeting was called in ancient Sumaria or wherever and we still haven't figured out what makes them work.

      City's are made of thousands or millions of individuals each with a unique preception of the city and how it must meet their needs. But because it must satisfy the needs of all residents it will probably never meet perfectly the needs of even a single one!!

      I think a similar problem for really big projects is that the full picture of the system rarily lives (correctly) in anything documented - not even any given snapshot of the code base - but in the heads of all the contributing engineers. And most of the time at least some bits are in the heads of people who've left the project! Answers to basic questions like: why did we chose this solution? How are these two pieces meant to communicate (the intended implementation and not the current probably flawed version)? Which bits are in the code because someone planned to do something with them in the future?

      There is a constant striving to close the gap between what everyone knows should be implemented and what can be changed without breaking something or everything :) Less art than politics. And the correct solution(s) will usually lose out whenever engineering decisions are based on political merit rather than technical merit
      Kevin

  15. Code Poet by WPIDalamar · · Score: 1, Redundant

    The TRUE code poet... Someone needs to get this guy the Code Poet T-Shirt from thinkgeek!

    http://www.thinkgeek.com/tshirts/coder/27ac/

  16. bridges =?= software by mblase · · Score: 5, Interesting

    People say, 'Well, how come we can't build software the way we build bridges?'

    Because they're not analogous. Bridges are designed to be used for decades, if not centuries, by hundreds and thousands of people and vehicles without anything more than routine maintenance. The closest equivalent in the technology industry would be the mainframe computer.

    "Ordinary" software, the kind meant to be used by consumers on their current PC which will be constantly upgraded, routinely unsecured and replaced within five years at best, is more like a gravel-top driveway with grass growing underneath.

    1. Re:bridges =?= software by driverEight · · Score: 1
      Ayeee! This is the same thing the uninformed have been saying since the dawn of the computer age. Unfortunately it isn't true. Code tends to live well beyond its intended expiration date.

      Ever wonder why there are still so many COBOL programmers out there? Why most Windows users still have an OS based on NT code dating from far more than 10 years ago? Why Linux users are using GNU rewrites of tools that date to the 70's or earlier?

      (Incidentally, does anyone have a reference to the NYT article about 2 years ago talking about compmanies that still use punchcards? I believe Ford was one of those mentioned, but understandibly most companies only admitted to punchcard use on the condition of secrecy.)

      --

      It's not the size of your .sig that matters, it's how you use it.

    2. Re:bridges =?= software by chain_from_hell · · Score: 1

      People say, 'Well, how come we can't build software the way we build bridges?' The way I explain it is by using the analogy of a car. Bridges are static. Most of them have no moving parts and the forces can be exactly calculated. A car has a LOT of moving and functioning parts. Gears, belts, valves, pumps, lights, handles, levers, ... They all have to work together. Some may be malfunctioning, and some may crash/stall the engine. No one, as far as I know, has been able to calculate in advance how much stress an engine as a whole van withstand, how long it will keep on running without problems. People have been driving cars for a hundred years, and still they break down. The mean time between failure is dropping, using electronics, other materials and other techniques, but they still break down. As is the same for software. Thousand pieces glued together functioning as a whole. Better standards and techniques are being adopted, but as cars will still break down so will software. Of course there's a commercial reason to. It is company suicide to build a perfect car, because new ones won't replace them and the cash flow stops. This is the same for software. People got to have an incentive to upgrade. Managers make those deadlines so tight for a reason: so you wouldn't make it perfect.

    3. Re:bridges =?= software by ajs · · Score: 2

      No, bridges are unlike software because people are all required to use bridges in roughly the same way, and the problem domains that a single bridge must solve are fairly narrow.

      A *much* better comparison would be a building. Buildings are complex things which are used by each occupant differently, and which have a very large number of problem domains to solve for.

      The result? Buildings require a great deal of operational maintenance and until fairly recently (50 years ago or so) building a large building was fraught with failres large and small. Even today, as building construction has become much more modular and well-understood, we run into things like under-tested wind stress leading to the need to completely re-rivit an existing building (this happend to one of the skyscrapers that went up in the 80s in New York).

    4. Re:bridges =?= software by Hal-9001 · · Score: 3, Insightful
      Better standards and techniques are being adopted, but as cars will still break down so will software.
      • The parts of a car or any mechanical system suffer from wear and tear, which is an unpredictable process that can cause the system to fail, so it's understandable that engineers cannot predict exactly when a given mechanical system will fail.
      • Bridges and other structures do not suffer from wear and tear, and so if one collapses, its usually because of an intrinsic flaw in the design, or in the way the bridge was built, or in the way the bridge was being used.
      • Computer code does not suffer from wear and tear, and code can be written to enforce proper use, so there is no reason for code to break except for an intrinsic design or implementation flaw.


      It is company suicide to build a perfect car, because new ones won't replace them and the cash flow stops. This is the same for software. People got to have an incentive to upgrade. Managers make those deadlines so tight for a reason: so you wouldn't make it perfect.
      I think I've heard that a company that made titanium wrenches went broke because all of their customers bought one wrench and never needed to buy another one. Seriously, though, this just about summarizes the Achilles heel of the software industry. It is impossible to build a car that never breaks down because when moving parts rub against each other, they wear each other down, and eventually they will wear each other down so much that one or the other or both will fail. On the other hand, it is theoretically possible to write code that will never fail. (For example, there is no reason for properly written "Hello, World!" code to fail, ever) It is just that as the complexity of functionality grows, the complexity of the code to enforce proper functionality grows even faster, and people are lazy and prefer to focus on functionality rather than correctness.
      --
      "It take 9 months to bear a child, no matter how many women you assign to the job."
    5. Re:bridges =?= software by starling · · Score: 2

      # Computer code does not suffer from wear and tear,

      Not in the conventional sense, but the context in which the code runs will change over time and this has the same effect.

      - A program which runs perfectly on one release of an OS might fail when the OS is upgraded.

      - An installation of an updated shared library can break the code.

      - Eventually the hardware will break and need replacing. Guess what - the old OS probably won't support the new hardware and will need upgrading, thus causing the program to fail.

      Computer code doesn't exist in isolation and if it's to continue to function it must be adapted to a changing environment.

    6. Re:bridges =?= software by simong_oz · · Score: 2
      The parts of a car or any mechanical system suffer from wear and tear, which is an unpredictable process that can cause the system to fail, so it's understandable that engineers cannot predict exactly when a given mechanical system will fail.

      Wear and tear is actually quite predictable - it's why you have maintenance intervals for your car. Component failure, for example, is described by MTF (or MTBF - mean time between failure), and components are specifically designed to avoid fatigue failure (a particular type of failure where the failure loads are much lower than the strength of the component/material and is caused by crack propagation). Nowadays, your average modern car is more likely to break down because of electrical failure, rather than mechanical failure. Outright catastrophic failure (ie. not predicted) of any component is quite rare (partly because we have 40+ years of experience behind us), and will almost always result in a recall. How many recalls are there compared to breakdowns?
      --
      "Because it's there." - George Mallory, when asked why he wanted to climb Mt Everest, March 18, 1923 (New York Times)
    7. Re:bridges =?= software by Hal-9001 · · Score: 2

      My point was that for a given population of a mechanical system, the phenomenon of wear and tear is a statistical process. For the population, it can be reasonably well predicted by statistics (mean, standard deviation, etc.), but for each individual case, it cannot be very well predicted.

      Contrast this to computer code, which should be as deterministic as a system gets. Yet software failure still appears to be a random process--under identical test conditions on a single machine, some software will crash sometimes and run fine other times. And software can be written to identify bit errors and correct them, so the only reason software fails this way is because of human laziness.

      --
      "It take 9 months to bear a child, no matter how many women you assign to the job."
  17. The "only"? by sphealey · · Score: 5, Informative
    I would have to seriously question the statement that Mr. Gabriel is "possibly the only person with a Ph.D in Computer Science and an MFA in poetry". Many computer people I have met have a lifelong fascination with language and literature. Particularly the academic types who pursue Ph.D's. I would guess that there are a fair number of people out there with that combination of degrees.

    sPh

    1. Re:The "only"? by crimsun · · Score: 2

      I agree with your sentiment, sphealey. There are indeed a lot of people who seamlessly combine the intense analytical nature of science with the flowing creativity of "the arts." I'm one of these "types"--I have degrees in both computer science and English, but my sanity will only permit me to pursue a doctorate in the former. =) Additionally, I once had a professor in my CS curriculum who holds doctorates from UPenn in both CS and English. Aside from the sheer boggling and incredulity that some proponents of either discipline regard, there's a strong undercurrent of resentment akin to the whole too-much-science/technology versus too-much-hand-waving-and-superfluous-literary-theo ry. I've had professors call me out for simply being interested in either (which is by far the most ridiculous load of crock). Who cares? After all, simply pursuing an "advanced degree" requires a strictness and diligence that hints at a passion most people blithely overlook.

      I'm reminded of the greats: Feynman, etc. I would add a chemistry professor I had named Holden Thorpe, quite possibly the most brilliant chemist and pianist I've ever met. It's far too small a world to say anything conclusive about being "the only one."

    2. Re:The "only"? by Chyron · · Score: 1

      I'm currently majoring in Computer Science and English Lit. My main focus will almost certainly be English Lit, but I'm a fairly competent coder.

      --
      "Beware of he who would deny you access to information, for in his heart he dreams himself your master."
    3. Re:The "only"? by be-fan · · Score: 2

      I second that sentiment, though I'm too young to have have a degree in either. There is something about literature that attracts programmer types. It's probably the parallel relationship they have with using lanuage to express abstract concepts.

      --
      A deep unwavering belief is a sure sign you're missing something...
    4. Re:The "only"? by ryochiji · · Score: 3, Insightful
      >Many computer people I have met have a lifelong fascination with language and literature

      I agree...not that I've met very many people like that, but I'm like that in a way myself. I don't have a degree, but I've taken as many English/Lit classes as computer science classes, and have seriously considered switching to an English major (from CompSci). And I speak 4 languages (well, two fluently, one at a conversational level, and I'm learning a 4th).

      Quite frankly, I'd love to be in a program like the one described in the article. The way computer sciences is taught right now seems so cold, detached, relentlesss, uninspiring and often irrelevant. Maybe this works for people who simply want to get a degree, get a job, and earn big bucks. But for someone who's in it for the love of programming (and has no ambitions of making money off of it), it's dull as all hell. That's why I like to take literature courses...at least those are interesting, thought provoking and inspiring.

  18. They'd invent the Toll Bridge (tm) by systemapex · · Score: 2

    It's quite obvious actually!

  19. some day by in_ur_face · · Score: 1

    i agree, we are still very young in the computing yet alone programming age. Every program we write bringns something new; whether it be something more efficient, code reuse, or learning a new aspect of a language.

    With the recent trends of OOD,OOP... one day we will be able to write code the way people build bridges. Even then we will still find ways to overcome current designs and code.

  20. Software isn't as much like poetry as he suggests by tmark · · Score: 5, Insightful

    Sure, there's a creative aspect. But there's a creative aspect to the bridge-building example he describes. And while maybe on any given program you're working on only the 7th or 8th generation at most, almost any programming task that people deal with has been worked umpteen times - maybe not by them, but by someone. Let's face it, most programming is mundane, whether you work for Bank of America or Playboy, and involves working mostly the same old strategies and structures for slightly different ends. How creative can you get with bubble-sort or linked-lists, or which you've probably used tons of times before ?

    The designers of the program - i.e., usually the project managers (*ducks*) or system architects do most of the creative work of conceptualizings how things will work and how they will meet the constraints of the particular problem. The programmers, most of the time, are brick-layers, carpenters and plumbers. Not that there is anything less noble about this latter work, but it's hard to call it creative.

    Most of the creativity in software comes from newly emerging fields like, say, robotics, AI, or computational biology, but usually this creativity comes from the algorithms which get hashed out and proven by theoreticians, not rank-and-file programmers.

    The closest thing to a proof that programming is mostly not art, that I can come up with, is this: bad programming is mostly identifiable by almost every programmer. But there is nothing close to a consensus as to what defines bad art, or bad poetry, or bad architecture. The latter judgements are far more subjective.

  21. Productivity Ruse by Anonymous Coward · · Score: 0

    I wear this tie
    just so I can loosen it,
    and look disheveled.

    That's the game I play,
    begging for a promotion,
    a brown nose fashion.

    I don't do this for the money --
    really, I've got nothing to
    do with it,
    except buy more things
    I'm unable to use,
    or a nicer car to stow them in
    while I fret over broken automatons,
    robots that are mine to control.

    I'm no diety, no ambassador,
    no megalomaniac but a mechanic,
    longing to chat idly with a machine
    that know my voice,
    needs me to operate
    and performs better while I'm around,
    trying to impress me.

    Many years ago I may have been
    a miller or a blacksmith,
    6 days sweating day until night,
    whistling through my ears as the mind
    concentrates on placing the hammer,
    following the gears and
    sparking iron,
    never thinking a boorish thought.

    Ah, but instead to mill the data!
    To forge queries and horde passwords!
    It's not the dream of a child,
    eyeing the romance of placing ones self in mortal danger,
    but it is more than a paycheck:
    to be an archivist
    and a tradesman.

    Must post anon because this is really a piece of shit. -- M

  22. you insensitive clod!! by SuperDuG · · Score: 2

    I have both a Ph.D. in computer science and an MFA in poetry.

    --
    Ignore the "p2p is theft" trolls, they're just uninformed
  23. Eh? by sporty · · Score: 2

    Did he just compare Windows to FreeBSD to Linux?

    I never could understand art :)

    --

    -
    ping -f 255.255.255.255 # if only

  24. That's what I love about programming by vadim_t · · Score: 4, Insightful

    Almost anybody can do something new. Not necessarily something awesome and groundbreaking like the O(1) scheduler, but pretty much anybody with some skill can make their little contribution in the form of a Perl module for example.

    I also like that in programming it's fairly easy to reinvent things. For example I'm pretty sure a few people reinvented bubble sort or linked lists while playing with a programming language without having read anything but the manual for that language. Gives you a nice feeling to find that you were able to come up with useful things on your own.

    1. Re:That's what I love about programming by RebelWithoutAClue · · Score: 1

      How about reinventing Djikstra's routing algorithm ? :-)

      (takes a bow)

      --
      "However beautiful the strategy, you should occasionally look at the results" - Winston Churchill
    2. Re:That's what I love about programming by Anonymous Coward · · Score: 0

      >Not necessarily something awesome and
      >groundbreaking like the O(1) scheduler.

      I'm not saying that I personally could
      have done it, or even close, BUT, I do
      feel the need to point out that such a
      thing should not be a huge challenge to
      anyone with the undergrad CS curriculum
      behind them.

      After studying (and really learning) the
      material presented by Knuth, by Rivest Leiserson and Cormen, Norvig & Russell, and of course, Hopcroft, this is the sort of work that should
      be expected from anyone!

      The perception that the scheduler is some sort of "awesome, groundbreaking" work is less an endorsement of Molnar's abilities (which are worthy of enormous respect - don't get me wrong!), as it is a sad comment on the state of the people with CS degrees who somehow scraped through college (they would use the word "finished") and didn't really absorb it.

      I've met several folks lately who took calculus all the way up to partial differential eqns, but somehow do not understand the math today. (And we're only talking maybe 4 years out of school.)
      That just tells me that someone took math "because they had to", learned enough to pass a test, and promptly forgot the material. It also tells me that they'll be very unlikely to apply that knowledge to anything, nor do the consider it important. I imagine a whole lot of the knowledge that was supposed to be gotten from all those courses on Automata and Discrete structures and Algorithms was forgotten as well.

  25. How come we can't .... by Chillblaine · · Score: 5, Funny
    'Well, how come we can't build software the way we build bridges?'

    Obvious reasons. Those foolish cavemen (or whoever) that built the first bridges didn't patent the design and copyright the plans. Then hide the bridge in big black boxes so nobody could try design something similar.

    They also didn't have to worry about the greedy land owners at either side of the river charging them huge amounts (or just refusing them) to get information on ground they needed to build the bridge ends on.

    $DEITY bless the software industry!

    --
    You Are Being Lied To.
    1. Re:How come we can't .... by Anonymous Coward · · Score: 0

      I think Chillblaine got it exactly right. As long as everything is secret, progress will be slow.

    2. Re:How come we can't .... by Reziac · · Score: 2

      No, but early bridge builders did have to worry about trolls taking up residence under the bridges, and charging everyone who crossed the bridge for a "bridge-crossing license"!! We don't hear much about the ones who refused to pay, because they got eaten.

      --
      ~REZ~ #43301. Who'd fake being me anyway?
    3. Re:How come we can't .... by Anonymous Coward · · Score: 0

      NullPointerException at line 9: $DEITY

  26. Additional notes... by PDHoss · · Score: 1
    "But in software, even with something such as Java(TM) 2, Enterprise Edition or the Java implementation (or almost any of the APIs we define), we're rolling out -- if not the first -- at most the seventh or eighth version."

    He then added, "The whole process seems to be very slow and only the engineers with the best memories seem to be able to roll these versions out in a reasonable amount of time. And first getting started in the morning... don't even go there. Also, look at our offices; the furniture looks cheap and it looks like it was set up for the lowest common denominator."

    A joke at Java's expense... don't take me seriously, please.

    --
    ======================================
    Writers get in shape by pumping irony.
  27. One word for you by Lemmeoutada+Collecti · · Score: 4, Funny

    Microsoft

    --

    You can have it fast, accurate, or pretty. Pick any 2.
    1. Re:One word for you by e8johan · · Score: 2

      I quote myself: "The reuse of software requires direction, thought and documentation".

      Microsoft may have good documentation in some aspects (compared to open source alternatives), but they lack direction in many senses; it seems as if they are driven by a wish to add more functionality instead of improving upon the problems they have since before. The backwards compatibility is also an issue, for example Word2k is pretty much Word97, with more features, instead of better features. The changes to the UI is suprisingly small, concidering the new functions that have been added.

      Also in the area of thinking Microsoft seems to have problems. For example OLE, OLE2, ActiveX, or DAO and ADO. Repetetive reinvention of the same functionality with an interface change as the direct consequence. Also the structure of Windows and for example the filesystems used have a history dating back to the eighties and the 8086.

      If they'd think about what they do, create more flexible solutions from the start and stop caring for software developed in 1984 (run it in a virtual machine, VirtualPC on a 1GHz P3 has more power than the computers used back in '84) they'd probably make better software.

      Do not get me started on all the little extras they've introduced in a (from the beginning) clean UI. Just the list of apps in the Win2k Add/Remove Software dialog makes me sick. Yet another area is their business practices, etcetera etcetera ad infinitum...

      To sum things up: I do not think that Microsoft has good reuse of components, nor good object orientation.

    2. Re:One word for you by kisrael · · Score: 2

      Also the structure of Windows and for example the filesystems used have a history dating back to the eighties and the 8086.

      If they'd think about what they do, create more flexible solutions from the start and stop caring for software developed in 1984 (run it in a virtual machine, VirtualPC on a 1GHz P3 has more power than the computers used back in '84) they'd probably make better software.


      Yeahbut...if you run it on a virtual machine, won't you have trouble getting it to interact with the rest of your shiny new OS? A lot of time people need legacy apps, not in isolation, but because of what they can do with the results. If your little VM is writing to its own VFS, you then have to set up little gatekeeps to make sure any files going from the OS proper is munged in a reversible fashion....in fact, you end up with something very similar to the MICROS~1 file system anyway...

      In general I'm reasonably impressed with Windows backwards compatibility, it is itermitently useful and the disadvantages of it are relatively hidden from me. (i.e. people would notice and complain iftheir old apps don't work, but retarding the progress of the OS is much more subtle.)

      I miss how on Windows = 3.1, when programs were iconized, you could use that as a fun little 32x32 canvas, and make little software toys. The taskbar made that obsolete, alas.

      --
      SO YOU'RE GOING TO DIE: The Comic for Dealing with Death
  28. Re:I wonder what would happen... by ch-chuck · · Score: 1

    Msft would never actually build the bridge, but they'd happily sell, at competitive price, a set of blueprints for new, inproved Advanced BridgeXP w/ patented extensions to the open High Level Traffic Shaping protocol (sorry, MsHLTS only works with MSHighWay) for a hefty fee and a legal disclaimer ("these blueprints provided AS IS w/o warranty express or implied as to useability or safety..."), but the state and taxpayers would have to do the construction. If any defects in the blueprints are found and corrected the state and taxpayers are responsible for obtaining new blueprints and the costs of implementing any corrections, incl wages of fitters, welders, construction equipment rentals, etc. Licensee of MSBridgeXP accepts all legal responsibilities for the safety of users, and indemnifies MSft of any and all risks. MSBridgeXP is protected by US and International copywrite treaties, and any unlicensed use will be prosecuted to the fullest extent of the law.

    --
    try { do() || do_not(); } catch (JediException err) { yoda(err); }
  29. Totally offtopic but interesting... by gravelpup · · Score: 1

    According to this page, it should probably be E.E. Cummings, caps and all.

    --

    Things are more like they are now than they ever were before.

  30. We need more geeks that are less geeky by Junks+Jerzey · · Score: 4, Insightful

    possibly the only person with both a Ph.D. in computer science and an MFA in poetry)

    That's wonderful! For some time now I've been thinking that perhaps a computer science degree is exactly what geeks don't need. Heck, they're already wrapped up in the tech world, and they'll spend the rest of their lives coding, so while not get well rounded early on. Get a degree in history or literature or creative writing, then get the computer science degree later.

    The uber-geeks are often the most stubborn, the most prone to get into Slashdot arguments, the ones who have the narrowest views. The more interesting techies with wider views often tend to get out of technical fields later on, because mindless code monkeys who think C++ is The Way and develop software by working 12-14 hour days, well, they're just so mind numbing after a while.

    1. Re:We need more geeks that are less geeky by SimplexO · · Score: 1

      ..so [why] not get well rounded early on..

      I'm currently a sophomore in (arguably) the best public school in the Midwest. It's a liberal arts and sciences school (gives a full education, rather than just focusing on my computer science major). I'm a Jazz musician. I'm really interested in how the psyche works, so I'm taking a bunch of psychology classes with it. I'd like to get into UI (as I really like to take programs and make them usable for the 'not-so-quick'). =)

    2. Re:We need more geeks that are less geeky by KjetilK · · Score: 1

      Hehe, I discussed languages with a girl yesterday who were about to start studying literature, and she thought studying dialects was geeky. Actually, I think that often, geeks have a fairly broad horizon compared to many other knowledgeable people.

      --
      Employee of Inrupt, Project Release Manager and Community Manager for Solid
    3. Re:We need more geeks that are less geeky by Daniel+Dvorkin · · Score: 2

      I'm not sure most of the "mindless code monkeys" actually have CS degrees -- the kind of narrow-language focus you describe is to me the indicator of a self-taught programmer who found one solution and stuck with it fanatically, or someone with a tech school degree/certification who's never bothered to question what he was taught. A good CS program teaches about several different languages, several different approaches in those languages, and how to organize your work efficiently enough so that you don't have to work 12-14 hour days.

      The bigger question, about being a well-rounded person -- well, you can be a geek about anything you study. You can be a CS geek, a math geek, a history geek, a management geek, a language geek ... Any college education should include a well-rounded list of subjects; that's what going to college as opposed to trade school is for. But ultimately it's a matter of what kind of person you choose to be.

      I'm a programmer, and a CS grad student, and I put a lot of work into those occupations. But I'm also a serious reader of history, an occasional fiction writer, a lover of music and dance. I'm passionate about politics, about fitness, about my family and friends. Those things don't interfere with my technical side; they complement it.

      --
      The correlation between ignorance of statistics and using "correlation is not causation" as an argument is close to 1.
    4. Re:We need more geeks that are less geeky by Anonymous Coward · · Score: 0

      based on my personal experience, there may be something to this. when i started my cs degree, i was in something of a "blended" class. the majority of people were your standard, garden-variety frosh, but a small group (about 10) were people who already held degrees in other fields and had decided to return to school to pursue cs. the academic backgrounds of these people were varied, but fell largely under the humanities: english lit, history, art, etc. this group of people tended to do better in the cs courses - produce tighter, more solid code, grasp concepts more readily - than the people without backgrounds in other fields. now, that was most likely due to the fact that these people had already been through college once and knew the ropes ... but we all liked to think it was because we were "well-rounded" (less geeky).

    5. Re:We need more geeks that are less geeky by Tablizer · · Score: 2

      That's wonderful! For some time now I've been thinking that perhaps a computer science degree is exactly what geeks don't need. Heck, they're already wrapped up in the tech world, and they'll spend the rest of their lives coding, so while not get well rounded early on. Get a degree in history or literature or creative writing, then get the computer science degree later.

      Or better yet, skip classes to party and shmooze with future PHB's. Otherwise you just risk being a poetry geek or band geek instead of a computer geek. IOW, you are talking about moving to a different tree when perhaps one should think about moving to a different forest.

    6. Re:We need more geeks that are less geeky by Caligari · · Score: 1

      I am doing precisely what you suggest :)

      Currently studying a BA Computer Science, which is half Liberal Arts, half Computer Science.

      It's working out great for me, I would've found pure computer science waaaay too boring. I get to spend time studying formal computer science and get to study something completely different (in my case, French).

      It's split accross the two faculties, Arts and Comp. Sci.

      I think its a great way to learn cool, mind expanding stuff AND come out with a degree which can get you a job.

      More people/universities should look at courses like this.

      Work both sides of the brain, baby!

      --
      The moving cursor writes, and having written, blinks on.
  31. s-a-r-c-a-s-m by Anonymous Coward · · Score: 0

    teaky teaky too.

  32. Not at all by Anonymous Coward · · Score: 0

    If you're creating something new "almost every time", you are doing something terribly wrong.

    It's called research.

    Not all of us are writing IRC/AIM clients.

  33. Re:Software isn't as much like poetry as he sugges by smcdow · · Score: 3, Interesting
    The programmers, most of the time, are brick-layers, carpenters and plumbers. Not that there is anything less noble about this latter work, but it's hard to call it creative.

    Sounds like you don't do much programming. Nor construction work, either.

    I agree with you that the higher level conceptualizing is important and very creative. But there is tons of creativity involved in solving lower-level, everyday-occurance types of problems, be they in software development or construction.

    Don't underestimate the importance in this. Creative, clever solutions to those seemingly unimportant (and often hidden) lower-level problems can go a long way towards getting the higher-level system concepts to work as designed. This is true for larger software systems and for building construction.

    --
    In the course of every project, it will become necessary to shoot the scientists and begin production.
  34. Call me a cynic but... by Hasie · · Score: 3, Interesting
    "We've only been building software for 50 years, and almost every time we're creating something new."


    And we've only been building transistors for 50 years and chips for 30? years, but most chips seem to turn out alright. And this with radical process changes every few years.


    I don't think that software is any more difficult to design than anything else - it's just that we don't try to design it! Software is written, not designed/engineered. Stuff is so easy to change later that we neglect the design phase and skip directly to implementation. Things like bridges and chips and most other engineering projects have to be right first time because they are almost impossible to modify later. Imagine what a bridge would look like if it were built like software!


    The only way to get round this is to apply sound engineering design principles to software. This means that one has to complete the design before one starts coding/building in the same way as other engineering projects.


    If we designed software the way we design bridges we would have much better software (or worse bridges ;).


    Soapbox mode off...

    1. Re:Call me a cynic but... by CrosseyedPainless · · Score: 2

      I'd agree. I'm in a Computer Science and Engineering program, and I think you'd be amused watching me build a circuit the way I'd write a program. Lay out a framework, make submodule stubs, implement them one by one, debug them individually before making them work together....

      Works fine for software, really, *really* sucks for hardware.

  35. arts vs. programming by fhwang · · Score: 4, Insightful

    In school I studied both computer science and fine arts, and I consider the two extremely different. The biggest, most obvious difference is that in programming, you have a very good sense of when you're done. If your specs (either from your client, or your programming assignment) are relatively clear, you can write your code and be more-or-less satisfied that you've met them. You can write automated regression tests if you want to really make sure. (These days I almost always write automated tests.)

    But for art? Forget about it. I can't tell you how many hours I spent agonizing in front of a painting or sculpture or comic book page, wondering if it was finished, if it had enough marks or not ...

    The two are very different. Not that one is necessarily better than the other, but they're very different.

    I think comments like Gabriel's often stem for a desire to get more respect for programming. Gabriel probably compared the respect that artists get, vs. the respect that programmers get, and decided that the way to get more respect for programming is to try to convince everybody that's a sort of art.

    His intentions are good, but you end up muddying the waters too much that way ... If everybody did programming the way artists do art, programming would be even more buggy and expensive, which doesn't do anything good for respect for the craft. The way to get more respect for programming is to figure out ways to make us all better programmers. Anything else is just a distraction.

    1. Re:arts vs. programming by Reziac · · Score: 2

      Actually, "knowing when it's done" is also a basic criterion for creating quality literature or works of art. You need to develop a feel for when it's complete -- the point at which one more word, one more brushstroke, one more touch of the chisel would be a mistake.

      --
      ~REZ~ #43301. Who'd fake being me anyway?
    2. Re:arts vs. programming by smallfries · · Score: 1

      Whilst you are correct that some programming is as you describe, it does not cover all programming. There are some sorts of programming that are closer to art than engineering, the problem is that it covers such a broad range that people can quite happily look at their part of the design space and say look, look its an art! Whilst somebody else looks at another part and says Look,look its engineering. They're both right.

      --
      Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
    3. Re:arts vs. programming by Tablizer · · Score: 1

      In school I studied both computer science and fine arts, and I consider the two extremely different. The biggest, most obvious difference is that in programming, you have a very good sense of when you're done......But for art? Forget about it. I can't tell you how many hours I spent agonizing in front of a painting or sculpture or comic book page, wondering if it was finished, if it had enough marks or not

      Sounds just like Emacs to me :-)

    4. Re:arts vs. programming by Just+Some+Guy · · Score: 2

      I feel the same, but with the two activities reversed. Ask me to draw a dog, and I'll whip one out in 10 seconds - look! There's a dog!

      But for programming? Forget about it. I can't tell you how many hours I spent agonizing in front of a data structure or algorithm or database, wondering if it was finished, if it had enough functionality or not ...

      To each his or her own.

      --
      Dewey, what part of this looks like authorities should be involved?
    5. Re:arts vs. programming by jparker · · Score: 1

      Not to sound glib, but if your specs (either from your client, or your art assignment) are relatively clear, you can paint your painting and be more-or-less satisfied that you've met them.

      You're describing the typical case, where people want code to serve a specific, identifiable purpose, and they want art that they like. (A criteria much harder to evaluate, as the producer of the work.) That's what creates the distenction. There are people who create art and code in very different environments.

      I've got a friend who's a creative director in an ad agency, and he churns out art as if it were code: for a specific purpose. He knows when it is done. Sure, there's things he would often like to improve, but they are not needed to serve that purpose, so they're left out. I'm sure many programmers feel the same way about much of their code; it doesn't do it in quite the way I'd like it to, but it does work, so it's good enough.

      On the other hand, I write code for video games, where my "spec" is often something like "make movement feel more natural" or "make aiming easier". Of course, this makes it very difficult for me to know when I'm done. How do you write an automated regression test to see if walking feels natural? (I'll grant that this method does lead to a good deal of bugs and expense.)

      I think that there's a good bit of creative skill required for programming, and there's also a good bit of analytic abilities required to be a good artist. ("I just saw this new exhibit of Foo's work and it blew me away!" Now figure out what made such an impact and incorporate or modify it for your own work.) The destinction that you're describing comes simply from the different uses, and is not inherent in the two crafts.

  36. Lack of constraints by Hayzeus · · Score: 3, Interesting
    The fundamental problem with software development is NOT that we're just new to it. The real problem is that the process itself imposes relatively few constraints on the developer. Put another way, there may be hundreds or even thousands of ways to solve a particular problem in software -- not all of them good, obviously, but workable nevertheless. Bridge-building (basically a metaphor for traditional engineering), on the other hand is constrained by basic laws of physics; there are a relatively few ways to build a bridge that will support a reasonable amount of weight.

    This lack of constraints peculiar to software development implies a couple of things:

    • Without the confining limits of real-world physics, software development tends toward increasing complexity since there is less to hold back the addition of new functionality over time (or even in the initial design). This is especially true for commercial software, where nifty features are a firm's bread-and-butter.
    • The lack of constraints makes it practically difficult to apply the traditional discipline associated with other branches of engineering. In a commercial environment especially, economic pressures tend to favor features and deadlines over stability. This is probably also true to some extent for personal or Open Source development.
    • Reuse of components can help -- the problem is that a component that doesn't behave EXACTLY the way a given developer wants it to is often discarded in favor of custom code. No electrical engineer would design their own timer circuit when a simple 555 might be adequate. But this kind of thing happens in software development all the time because it's relatively easy to do.

    If you buy into my little pet theory, most of the problems associated with software development will likely remain with us for some time to come.

    1. Re:Lack of constraints by HeyLaughingBoy · · Score: 2, Insightful
      Reuse of components can help -- the problem is that a component that doesn't behave EXACTLY the way a given developer wants it to is often discarded in favor of custom code. No electrical engineer would design their own timer circuit when a simple 555 might be adequate. But this kind of thing happens in software development all the time because it's relatively easy to do.
      If you buy into my little pet theory, most of the problems associated with software development will likely remain with us for some time to come.


      I agree with your little theory :-) Actually I've been wondering for some time why we can't build software the way we build hardware: by gluing together mostly off the shelf parts and adding some custom business logic. I think the problem is that, to use your 555 example, if the part doesn't exactly fit the requirement, we adjust the circuit elsewhere so a 555 will be fine (perhaps the powersupply is too high -- add a regulator) because we realize it would take a LOT of time to design a replacement that meets all the specs of a 555 that are important to us. But in software, the "engineer" thinks, "damn component is useless, I'll just create a replacement myself" and usually ends up with something that just barely works under the conditions he happens to use it, and the minute the program is stressed or gets out of range data, or other common occurrence, his poorly build custom component fails.

      We are well on the way to building software by components -- for the most part we use COTS databases, operating systems, compilers, and some lower level components such as XML parsers and libraries. But to go farther we need interchangeable "software parts" (think 74xx TTL) that are fully spec'd and glue together easily (I think this latter part is going to require increased use of frameworks).

      I should start reading up some more on frameworks that are out there. Perhaps look into creating some for the embedded systems I work on.
  37. Re:Software isn't as much like poetry as he sugges by Anonymous Coward · · Score: 0

    The designers of the program - i.e., usually the project managers (*ducks*) or system architects do most of the creative work of conceptualizings how things will work and how they will meet the constraints of the particular problem.

    Aah, it sounds like you've worked on a properly funded and staffed project!

    (Lucky bastard.)

  38. MSA by leoboiko · · Score: 1

    "So, the idea behind the MFA in software is that if we want to get good at writing software, we have to practice it, we have to have a critical literature, and we have to have a critical context. It looks like we may be able to start a program like that in the next year or so at a major university that I'm not free to name. It's probably going to be called a Master of Software Arts."

    I want that title.

    --
    Prescriptive grammar:linguistics :: alchemy:chemistry. Stop being a nazi and learn some science.
  39. Poetry and Code by Greenisus · · Score: 1

    I was the editor of my high school's literary magazine back in the day (I was always more of an English person than a math person), and my senior year I submitted a C++ Hello World as a poem to the magazine. Got a lot of strange looks but it got in.

    1. Re:Poetry and Code by kisrael · · Score: 2

      I was the editor of my high school's literary magazine back in the day (I was always more of an English person than a math person), and my senior year I submitted a C++ Hello World as a poem to the magazine. Got a lot of strange looks but it got in.

      I gotta ask--what brace formatting style did you use?

      When pixeltime.com (now sadly defunct, a site about cramming creativity into little 45x45 GIFs) had a "Y2K" theme for one month, I made a
      tiny plausible perl Y2K bug, the old "slap a '19' in front of the C representation of the year rather than add 1900"...wonder if anyone got the joke?

      You can learn more about pixeltime on my tribute site.

      --
      SO YOU'RE GOING TO DIE: The Comic for Dealing with Death
  40. MS bridge standard by Curialis · · Score: 1

    I have built a bridge that works just fine. But now the people on the other side of the bridge have decided they want my bridge to interface with their new Microslick Bridge Interface. This interface seems to be built on the same standard as mine but on their side only 2 of the 3 lanes seems to work. The interface documentation clearly states there are three lanes but one seems to be closed.

    After a brief call (with a fee) to the Bridge Support Line it turns out that most people did not use the third lane so that functionality was not implemented. Maybe in the next release of the Interface.

    There also seems to be a mandatory toll on the other side of the bridge. Unfortunately the toll booth operators don't seem to speak the same language that everyone on this side of the bridge speaks. It's close but the noun and verb order seems to be reversed. Confusing but we can work around it.

    After buying the Bridge Interface Development Kit it seems that this new way of talking to the toll booth operators is more efficient than the way everyone else has used the language before. Who knew.

    It also seems that the MS has patented a means of allowing a car to move from point a to point b where a and b are separated by impassable obstacles. So now I must license the technology I am using to interface with the MBI.

    I am glad bridge building is so easy.

  41. RTFA by Cap'n+Canuck · · Score: 3, Funny

    Gabriel's written 1000 poems in the last two years, which is about 1000 poems more than you have.

    [sarcasm]
    I bet youse hasn't written a grammatically correct post in their life.
    [/sarcasm]

  42. Not like this bridge, please by fingerbear · · Score: 1

    I don't think building bridges is as easy as he makes it sound. Here's one example he should take a look at.

    1. Re:Not like this bridge, please by gsergiu · · Score: 0

      Yes, that's one bridge that coudn't hold on to the wind. But, let me ask u this: How many programs have u seen that would crash at even the smaller sign of an overload, of an turbulence in the system, or just crash, even if in the system the sun was shining? I've seen lots of them, and u probably too. I would like to seem the same percentage of broken programs as in broken bridges. Most of the bridges are very stable, some broke, yes, but very few.

  43. can great coders be "taught"? by lutzomania · · Score: 3, Insightful

    I only have a minimal knowledge of coding, but I do know a bit about writing, and this guy's poetry (or at least the excerpt in the interview) is pretty bad. The rhythm is bad, there's no interesting, imagery, etc. But that's just my opinion (he said, knowing he was about to be flamed...).

    But can great coders be taught? I don't think so. A debate has been raging within the creative community for years about the value of MFAs. Many people see them as a cynical way for universities to bring in extra money by bilking minimally talented people who want to "learn" how to write.

    Just like great writers, great coders seem to have an extra intuitive "something" that the rest of us don't. In my experience, the best software engineer I've worked with doesn't even have a college degree. He started coding and studying math & logic on his own at age twelve and simply evolved from there. He was a kind of computer science savant. His talent was very impressive but very mysterious, just like Faulkner's, or Eliot's, or Bishop's.

    1. Re:can great coders be "taught"? by Todd+Knarr · · Score: 4, Insightful

      Well, you can teach the mechanics. You can teach poets and writers how the language works, why it works, what can be done that's gotten a certain effect. Similarly, you can teach people the mechanics of programming.

      What you can't teach is that extra something. In writers it's the uncanny ability to take some small bit from the real world and build a story from it. In poets it's coming up with that single image that the poem turns on. In programming, it's figuring out what the program should look like to do it's job.

      I suspect programming is close to something like bridge engineering. At an engineering firm there's probably dozens or even hundreds of engineers who can take the plans and specs and turn them into the detailed working drawings the construction people will need to actually build the bridge, but there's only a small handful of engineers who can take a blank piece of paper and a site and come up with the initial idea for a bridge that'll actually work and turn that into the specs and overall plans that everybody else works from.

      The thing is, programming isn't like building a skyscraper. It's like designing and building a skyscraper. People who ignore one part or the other will always have problems with the result.

    2. Re:can great coders be "taught"? by Anonymous Coward · · Score: 0

      I suspect there are some things that can be taught, but the actual creativity that goes into writing or coding is best acquired in some way besides formal education. Still, I strongly believe some kind of formal education makes most programmers and writers better at what they do and (hopefully) love. The ability to generate remarkable content probably should come naturally, but for most of us, the ability to work with formal aspects of writing (or of programming) likely does not come naturally. You can be highly creative or have an intuitive grasp of logic, but if you can't write the subject in a sentence or a variable in a line of code, you're stuck. Conversely, if all you know is form, you're still missing half your tools.

      So yes, I think great coders can be taught, but much like great writers, they can only be taught certain things.

    3. Re:can great coders be "taught"? by Reziac · · Score: 2

      I've worked with coders like the one you describe. When they're brilliant, they're dead-on, but when they make a mistake, even a *serious* mistake, they can't see it. But one could say the same about "great artists" as well.

      BTW I also checked out this guy's poetry, and (speaking as a writer/editor myself) you're right. He has the form but not the function -- he knows the mechanics, but lacks the talent for it. He only knows how to apply rhyme in its most basic physical sense. And he doesn't seem to understand that stringing words randomly about the page doth not free verse make.

      But there's no reason he can't enjoy doing it, even if objectively he's not very good at it :)

      --
      ~REZ~ #43301. Who'd fake being me anyway?
    4. Re:can great coders be "taught"? by smallfries · · Score: 1

      I think that you've missed the point he was making. Great coders aren't born with the complete ability to code and yes they still need education, but the actual greatness part is something that no amount of education will give you if you don't have it to begin with.

      --
      Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
    5. Re:can great coders be "taught"? by smallfries · · Score: 1

      Quite an interesting story. What was his name? What did he end up doing?

      --
      Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
    6. Re:can great coders be "taught"? by vbweenie · · Score: 1

      There are far worse poets about; even if he's sometimes a bit boring, at least he's not a belligerent bore.

      I don't follow the advice he's followed, about writing every day so's to get the practice in. Like most of the poets I admire (but like them only in that way and to that extent), I write infrequently and almost grudgingly, when I become aware of something that wants to be said. And I don't workshop poems, because the thing that wants to be said doesn't give a stuff if it gets critiqued or not and the thing that can be critiqued isn't the thing that makes a poem worth writing, or remembering.

      --
      Experience is a hard school, but fools will learn no other.
  44. Gimme Perl poetry any time! by tuxliner · · Score: 2, Informative
  45. Master of fine arts in software by I+am+Jack's+username · · Score: 1
    "because most of it is creative (in that [programmers] don't really know what we're doing when we start out)... [Bridge building engineers] don't have to reinvent the wheel... study the lives of great software designers." - Richard Gabriel

    How not to plan 101.
    How to ignore OOP 101.
    rms, the early years.

    Seriously tho, some good ideas mentioned.

  46. Dev-C++ Poetry by Thai-Pan · · Score: 2, Funny

    Dev-C++ 5
    What does "no mo mo mo" mean?
    Screwed up errors suck.

    Dev-C++ 5
    What's wrong with the debugger?
    Who wrote this crap-pile?

  47. Software... Engineering? by occamboy · · Score: 4, Insightful
    A huge problem with crappy software development is that it is not approached as engineering. Rather, projects usually start as kludges ("Hey, look at the cool thing I did this morning"), and develop into large or huge kludges.

    This is not real engineering.

    This sad situation has come about because it's too easy to do develop this mentality in the software world, where making quick changes is as simple as hitting backspace a few times and typing some new code. ("I don't have to plan! I can get it sorta right, then fix it later! It's easy!")

    When one is building a circuit, or a bridge, one can't simply make quick changes. Any changes are ltime consuming, expensive, and painful. Thus, REAL engineers actually plan stuff.

    (Not that there's no room for kludges and "screwing around". I always have a "Let's mess around and do neat stuff" period at the beginning of projects. But once this is done, and we've come up with some fun and clever stuff, we roll up our sleeves and do real engineering to build a real product. And, Hey Presto!, we end up with solid and usable applications.

    1. Re:Software... Engineering? by sydneyfong · · Score: 1

      Amen to that. By experience, (though far from a lot) I find that I code better and faster when planning before getting my hands onto typing the real code. However the very existence of a computer next in front of me lures me to type the code first and *then* to check if it's correct. Argh.

      I believe it might be of similar case with other people, but then it might be just me without proper training in coding ;-p

      --
      Don't quote me on this.
    2. Re:Software... Engineering? by DevilM · · Score: 5, Insightful

      The fact that software is so easy to change is exactly why we shouldn't treat software development like bridge engineering. While the software fail rate may be high and the software development industry may be in need of better practices, you simply can't apply bridge engineering to software development or you will lose a significant amount of cost savings.

    3. Re:Software... Engineering? by sv0f · · Score: 2

      This is not real engineering.

      I have a pet theory that the many software engineers who beat their chests about process and discipline have no idea what *real* engineers -- EEs, MEs, ChemEs, etc. -- know and what they do on a day to day basis.

      Let me give you a hint: Grady Booch, he ain't no Newton.

    4. Re:Software... Engineering? by ipjohnson · · Score: 1

      I think the fact your missing is that it takes alot more money and time to fix the problem after its been released rather than engineer it correctly the first time. I know this because my company has done cost analyse of fixing bugs. The further it is down the line the more it cost to fix .. point blank. So you theory of easy to change doesn't hold true.

    5. Re:Software... Engineering? by jgerman · · Score: 0, Troll

      Yes like the ultra-stable windows, versus that piece of shit Linux which always give me this blue screen and I have to reboot... or wait do I have that backwords ;)

      --
      I'm the big fish in the big pond bitch.
    6. Re:Software... Engineering? by richieb · · Score: 2
      When one is building a circuit, or a bridge, one can't simply make quick changes. Any changes are ltime consuming, expensive, and painful. Thus, REAL engineers actually plan stuff.

      Planning does not necessarily solve the problem. Even in bridge construction.

      In the 19th century there were a lot of iron bridge failures in England and the US, because metal fatigue wasn't understood well. Since bridges needed to be build, the engineer's hacked and bridges crashed (see "To Engineer is Human").

      But once this is done, and we've come up with some fun and clever stuff, we roll up our sleeves and do real engineering to build a real product.

      And how would you define "real engineering"?

      --
      ...richie - It is a good day to code.
    7. Re:Software... Engineering? by Anonymous Coward · · Score: 0

      The thing is that the timespan allowed to build a bridge is vastly different than that for software, especially business IT software.

      You can spend a year planning out a bridge because the river isn't going anywhere very fast. But if you spend a year planning software to solve a business problem, the problem will likely be totally different at the end of that year.

      Basically saying that programming should be like engineering is something that professors, managers, and diletants (sp?) say. Anyone that actually does it for real in the real world knows that things don't actually work that way.

    8. Re:Software... Engineering? by Anonymous Coward · · Score: 0

      Gotta love 14 year old kid moderators who can't tell a troll from a joke.

    9. Re:Software... Engineering? by DevilM · · Score: 2

      It isn't a theory; software is easy to change in comparison to a bridge. It may be costly, but it is still easy and ultimately cheaper proportionally than changing a bridge.

      Also remember that just because you can show how better engineering could have avoided a costly bug fix down the road doesn't mean it would have made better business sense to use better engineering in the first place. There is always cash flow to consider when working on software projects for businesses.

    10. Re:Software... Engineering? by Viking+Coder · · Score: 2

      Another way to look at this is that people are willing to spend a lot more to make sure that their bridges and airplanes are well-designed.

      The money simply isn't there to do the same thing for software.

      Highways cost over a $1,000,000 per mile.

      How much money is allocated to write a line of code?

      --
      Education is the silver bullet.
    11. Re:Software... Engineering? by dubl-u · · Score: 2

      It may be costly, but it is still easy and ultimately cheaper proportionally than changing a bridge.

      And getting easier and cheaper. With techniques like refactoring, you can significantly flatten the cost-of-change curve.

      Software also wins big because our tools and "materials" are advancing much more rapidly than physical tools and materials are. Component-based software also helps; bridge-builders can borrow ideas from one another, but they can't just copy 95% of somebody else's bridge and add on a couple new entry ramps.

    12. Re:Software... Engineering? by Anonymous Coward · · Score: 1, Insightful

      bridge-builders can borrow ideas from one another, but they can't just copy 95% of somebody else's bridge and add on a couple new entry ramps

      Actually, this isn't true. In bridge building, the components - bolts, rivits, I-bars, rebar, concrete, etc - are the same for every bridge; it's usually just the way they're connected that changes. This is one of the reasons bridge building is so reproducible: they don't have to figure out how to build nails or how to most effectively join two pieces of steel every time they want to make a new bridge, they can concentrate on how to best connect preexisting components with known characteristics. Software is just starting to get to this point, with the concept of components and loosely coupled systems.

      Ask yourself: how many list implementations have you written? I've lost count of the number I have. I bet most civil engineers have never had to make a bolt.

    13. Re:Software... Engineering? by William+Tanksley · · Score: 2

      Well said. SW Engineers and electrical engineers share almost nothing in their mindset and working conditions with "true" engineers: chemical, civil, and so on.

      This is not a fault of software engineers; if they did work like other engineers, almost no software would ever be built.

      -Billy

    14. Re:Software... Engineering? by sv0f · · Score: 2

      Well said.

      ;-) We think alike.

      Is it any coincidence that I've seen your name off-and-on on comp.lang.lisp over the years?

    15. Re:Software... Engineering? by Anonymous Coward · · Score: 0

      A bolt is a character set. We all use ascii. A list is an arch or a span or some other method of carrying weight over a gap. Every bridge has to decide on its own method of storing data, and there are several basic types, none of which is an engineering (design) feet anymore, although often enough an ignorant architect has to learn all over what's appropriate, and sometimes unexpected bugs surface (Tacoma Narrows) despite proper planning. More often than not, it's a poor user interface that manages to muck up a perfectly good piece of code (520 floating bridge) and usually it's office politics (carpool lanes) or buzzword compiance (HOV lanes) that are the root cause of the UI problems. And sometimes, it just wasn't engineered to handle the load (520 bridge), and don't forget that PEBKAC; plain old fashioned user error (Seattle drivers.)

    16. Re:Software... Engineering? by stripes · · Score: 2
      Another way to look at this is that people are willing to spend a lot more to make sure that their bridges and airplanes are well-designed. The money simply isn't there to do the same thing for software.

      Money and time. The only software engenering project that I know of that has been aproached like this is the space shuttle's software. It has had zero bugs detected during a mission. It has had a small (like less then a dozen) bugs that were found in deployed code though.

      The rather good article on the Space Shuttle code that I read years ago (in Fast Company??) one of the project members said "there is no reason we couldn't do with for MS Word...but the package would cost $36,000 a copy, and it would take 8 years to build even after throwing out most of the features -- who would buy that?"

      I expect you can find similar defect rates in the embeded medical software world, and other places where a bug would kill people (or in the millatary where a bug might fail to kill the Bad People)... other places where the wait and cost for "bug free" code can't be managed...well, you won't see it.

      You might come close in an airline reservation system though, or other things that have downtime worth milluions a minute... unless deploying the newer code can increse the $/min value enough to make the chance of having minutes without $ worth it... hmmmm..

  48. Packet Detection by tkarr · · Score: 1
    There once was a packet named Bender,
    He wanted to get to the end.
    But once and awhile,
    He'd get dropped...how vile!
    Poor Bender, he fell out again.
  49. Re:Software isn't as much like poetry as he sugges by Anonymous+Custard · · Score: 5, Insightful

    The mathematics behind many clever algorithms is simply astounding to me. The beauty of recursion is something as natural and poetic as music to me.

    But that's to me.

    Also, for me, most abstract art and whatever they call those paintings that are just a big red circle, is garbage. I think it's a waste of paint and is only meaningful to the creator. But millions of people believe this type of painting is artistic, even poetic.

    Until you get to professional levels, anyone can tell a lousy poem or an ugly painting. In professional levels, it becomes more subjective. Many people are employed as painters although they aren't good at making good art. $5 paintings sold at Sears have to be painted by someone. Similarly, there are a whole lot of mediocre programmers out there, employed as programmers in a low level job. Most programmers or even logical thinkers who aren't programmers can identify bad programming, just as most people who are even casually interested in art can tell when an unskilled and untrained hand has done the painting.

    But when a programmer sees a great algorithm for the first time, whether in a textbook or on a napkin, there's a certain beauty to it, a certain mathematical/locical poetry to it. The artistic pleasure comes from realizing what the artist was thinking when the made the art, whether it's an ingeniously simple technique for a peer to peer system, or a woman both in the distance and in the foreground at the same time in a Salvador Dali painting.

  50. Hacker/Poet by milo_Gwalthny · · Score: 3, Interesting

    I agree with the guy. Maybe because I'm not a professional software engineer. I write code to do things I need done instead of doing them myself (I Am Lazy.)

    In my first engineering job, before I had the creativity squeezed out of me by the brutal gears of corporate America, there was a whole department writing a CAD program using the engineering method: identify problems, solve problems, repeat. This program (meant to generate instructions to rewire circuits between design iterations) was thousands of lines long and worked about 75% of the time. The engineers had to go through the output and fix it by hand. The software people would say that each mistake was because there was a new wiring topology that the program hadn't seen before and then add code to do that particular change correctly. The program was like kudzu.

    So, I sat down one lunchtime and wrote a simple, elegant program (in REXX!) that would do all wiring changes correctly. How? I thought about how all of the engineers did it in our own heads, when fixing the mistakes this program generated. It worked. The other program was scrapped.

    When I left that job, two of my co-workers took over the program. They sat down and tried to decipher the program, where I used variables like "n" and "i", just like in BASIC class in high-school. They quizzed me as to meaning ("so, when n is 1, it means the pen is up?") and, quite frankly, I had absolutely no idea what it meant, it had come directly from my brain.

    It was exactly like my college lit class dissecting a poem ("so, he's really talking about sex?") I always thought about my hacking as creative, not analytic. I guess professional programming is different.

    --
    Milo
    1. Re:Hacker/Poet by 3am · · Score: 1


      When I left that job, two of my co-workers took over the program. They sat down and tried to decipher the program, where I used variables like "n" and "i", just like in BASIC class in high-school. They quizzed me as to meaning ("so, when n is 1, it means the pen is up?") and, quite frankly, I had absolutely no idea what it meant, it had come directly from my brain.


      So, you document poorly, and in the absence of documentation it is not easily understandable.

      If you know something well, you should be able to explain it to a child... I believe Feynman said that. To be totally frank, if you don't understand it well enough to explain it, it's probably not that great a piece of code. You might call it creative, I'd say it's disorganized and undisciplined.

      --

      A: None. The Universe spins the bulb, and the Zen master merely stays out of the way.
    2. Re:Hacker/Poet by Reziac · · Score: 2

      Someone once said that the difference between being an amateur writer and a professional, is that the true professional can turn on creativity as needed (it's a job, after all -- write another book or go to the poorhouse), whereas the amateur has to wait for the muse to strike.

      --
      ~REZ~ #43301. Who'd fake being me anyway?
    3. Re:Hacker/Poet by Anonymous Coward · · Score: 0

      And you spell like a stinky twat.

      Grandure is mispelled in your message. It is correctly spelled grandeur.

    4. Re:Hacker/Poet by milo_Gwalthny · · Score: 2

      I don't document at all... I'm not a pro, I generally code for my own use. My point wasn't see how great a coder I am, I'm not. My point was that software designed to spec is, IMHO, often an inferior solution to software designed from the gut. The best algorithms show flashes of genius, not design.

      I agree that if you understand something well you should be able to explain it (although I doubt you have children or you wouldn't say to a child)--that was my point: I didn't understand it, it came out of my gut and worked. That, to me, made it a creative process rather than an analytical one. If I had sat down, tried to understand the process and written code to address the problem as described, I would have spent a really long time replicating the broken code already in place.

      In any case, it was too small a piece of code to be disorganized, so maybe my entire comment is moot. It was definitely undisciplined. Frankly, I'm surprised anyone disagrees with me: every coder has had this experience--writing code without thinking about it that turns out to be the best they've written.

      --
      Milo
    5. Re:Hacker/Poet by j-beda · · Score: 2
      In any case, it was too small a piece of code to be disorganized, so maybe my entire comment is moot. It was definitely undisciplined. Frankly, I'm surprised anyone disagrees with me: every coder has had this experience--writing code without thinking about it that turns out to be the best they've written.

      One can "write from the gut" and still produce clean, readable code. You had an "gut feeling" for the sense of the algorithm that was needed for the task at hand - but you implemented that in a less than clear manner. Ideally, one gets a flash of brilliance, and then uses one's discipline, training, and experience to write clear, clean, inspired code. Similar examples can be drawn from "the arts", where writers, painters, sculptors and poets all are expected to do creative works, but use their training and experience to craft that creativity into realizations of their visions. It is hard work to learn how form a complete sentence, to hold a brush, carve a chunk of granite or find a good rhyme. It takes even more experience to know WHEN to form an incomplete sentence, splatter paint with your toes, use a jackhammer on the rock, or break the rhyming scheme.

  51. If a bridge was build with RAD.. by Quazion · · Score: 2

    Or maybe Rapid Bridge Development (RBD) then i wouldnt drive over it, speed is our problem not the knowledge....
    Lets slow down and do it right in first place. If you make a very big mistake in a birdge and it collapses you will be held responsible now with software noone is responsible since the licence reads so.

    Think about it, when your car explodes due a mistake in the car design you can sue the car company, sertainly if they knew they sold a flawed unit, if they would rush car designs like they do software designs they would know that it would hold some flaws...

    Maybe not just the designs some designs are good i guess, but then the implementation stinks...in the end.

    Fix it Fix it Fix it! :)
    Wake up and smell the coffee...

  52. That's neither art nor science... by sw155kn1f3 · · Score: 1

    That's neither art nor science... That's industry... right ;-)?

    --
    - Arwen, I'm your father, Agent Smith.
    - Well, you're just Smith, but my father is Aerosmith!
  53. I would probably call you something else... by joss · · Score: 3, Insightful

    > And we've only been building transistors for 50 years and chips for 30? years

    Yeah, but the problem has not changed much. They are refining the solution. Software is different because if the problem has already been solved, there is little point solving it again. Sometimes people come up with better algorithms for the same problem, but often they need to solve better problems.

    I have to ask, how long have you been writing software ? what great software have you produced ? Have you got proven success using this method or are you just talking out of your ass ?

    > This means that one has to complete the design before one starts coding/building

    This doesnt work. It was tried for many years, until people realised that its better to test assumptions along the way before committing to everything, hence waterfall model.

    Part of the reason it does not work is that software *is* a design. It makes perfect sense for bridges or buildings to be designed completely first. One can have an unambiguous design which is in a different medium to the finished product, eg as a CAD model. Then you can model how it behaves more cheaply than seeing whether the bridge falls down. Try finding an analogy to that for software, er lets model the software on a computer...

    The only totally unambiguous design for a piece of software is the software itself. If a design was unambiguous, one could define that as the programming language.

    --
    http://rareformnewmedia.com/
    1. Re:I would probably call you something else... by Hasie · · Score: 1
      "Then you can model how it behaves more cheaply than seeing whether the bridge falls down." Powerful CAD packages are very useful if used correctly. I have students who design circuits by simulating them and tweaking parameters until they work. The problem with this approach is that the design will not work in practice unless the simulation is perfect (not always the case), and this approach discourages thought about why things happen the way they do. There is no substitute for good design. In one specific case, many hours of simulation could have been saved by a few minutes of calculations and a "wierd simulation artifact" was actually a well-known effect.


      "Try finding an analogy to that for software, er lets model the software on a computer..." That's my point: The simulation model is the final product. I am not suggesting that implementing things to test whether they work is a bad idea - in fact I do it all the time. The problem comes when people forget what was just a test and start using it in the final code. Tests are often poorly written and documented, and are not intended to work in a completed system - causing more problems later. Another problem is that as soon as something works, it is left alone and alternatives are never tried because the alternatives have never been considered as they would have been in a normal engineering design process.


      Anyway thanks for the interesting response!

  54. Java use by PunchMonkey · · Score: 2

    I hope this doesn't sound like a flame, but Richard mentions:

    But the Java language is pretty successful, and folks write lots of apps in it.

    Can anyone point out uses of Java in popular mainstream products (that is - something the average /. reader would recognize).

    Mozilla, Windows, KDE, Gnome, X11, MS Office etc, etc. Aren't these all C/C++?

    The few Java apps I've tried, usually seem to be by amateur programmers and run rather slowly. Or am I missing the point and Java isn't really supposed to "compete" with C.... ?

    --
    I'll have something intelligent to add one of these days...
    1. Re:Java use by Anonymous Coward · · Score: 0

      you are missing something - buisness apps. Embedded devices. Corporate Intranets. Vertical market stuff. NOT the kind of apps you buy off the shelf at CompUSA.

      That said, I'm working in C++...

    2. Re:Java use by Slur · · Score: 2

      LimeWire is written in Java. InstallAnywhere is a Java installer for Java apps. Expect more to crop up here and there as VMs get better.

      --
      -- thinkyhead software and media
  55. Bridges by tony_gardner · · Score: 3

    One of the major strategies to get any complex project to work is to use off the shelf parts. For physical engineering, those parts are defined by standards, and their properties are well known _and_documented_. For instance if I want an M10*1.5 socket head cap screw of strength rating 8.8, the properties of that piece are very well documented.

    The problem with software engineering is roughly the same as if you made a bridge with every bolt individually hand made. It's a quality control problem.

    Physical engineering generally does the same thing as code building, use standard parts to build a variation on a theme. Creativity in the selection of standard parts will end up in an end product of unknown quality.

    It's not that creativity doesn't play a role, more that it shouldn't play as much of a role if quality product is to be made.

    1. Re:Bridges by Angst+Badger · · Score: 2

      Physical engineering generally does the same thing as code building, use standard parts to build a variation on a theme. Creativity in the selection of standard parts will end up in an end product of unknown quality.

      I think it goes deeper than that. Physical engineering isn't distinguished from computing in terms of standardized parts: most languages are standardized, many software and hardware interfaces are standardized, and, perhaps unsurprisingly, they are standardized by some of the same standards bodies that write standards for "real" engineers.

      The difference is that the way the standard parts are put together is itself standardized in mechanical construction. If you're building a house, you have to do so within the framework of the building codes. You would never, for example, use some leftover flooring material in lieu of proper roofing shingles just because you happen to be good with linoleum. Programmers, on the other hand, will frequently use standard parts in unusual ways, often to ill effect.

      This is why programming is more fun than building bridges, and why programs fail more often than bridges. That being said, in most software applications, no one dies when a program fails, which is definitely not true of bridge collapses. Perhaps in the minority of cases where software reliability is a life or death issue -- medical applications and airplane avionics come to mind -- more rigorous standards should be applied. The rest of the time, the costs outweigh the benefits.

      --
      Proud member of the Weirdo-American community.
    2. Re:Bridges by Anonymous Coward · · Score: 0

      There is no need for each bolt to be hand made. Simply select the one of highest quality, and run off a million copies of it.

      People who compare software engineering with bridge building simply don't understand the issues. It would make as much sense to compare it with cooking or baseball.

  56. Bridges and Software have little in common by sterno · · Score: 2

    The constant comparison of software development to real world engineering is ridiculous. There is one very serious difference between the two concepts. Once a physical construct is created, it cannot be easily undone or changed. Software is infinitely malleable.

    This difference, though seemingly small, makes a huge difference when it comes to designing of a system. If software was going to be designed to do one specific thing, and never change, it would be much simpler to develop bug free software quickly. But that is never the case. Invariably things are constantly being redefined as the software is developed and even after it's "done", there are several iterations of improvements and changes.

    A bridge, but contrast, is designed, and then it is built, and when it's done, that's it until it starts falling apart, and then the same process happens again. The iterations are over periods of decades, centuies, or millenia, depending on how well you build the bridge in the first place.

    --
    This sig has been temporarily disconnected or is no longer in service
  57. Re:Software isn't as much like poetry as he sugges by kigrwik · · Score: 2

    Very well said. Nothing to add. Except, maybe:
    MOD UP ! :)

    --
    -- don't discount flying pigs until you have good air defense
  58. PVCS is done in Java by Anonymous Coward · · Score: 0

    I had a helluva time a little over a year ago getting the latest version of PVCS running on Solaris 2.7 (maybe 2.8?).

  59. Re:Software isn't as much like poetry as he sugges by Anonymous Coward · · Score: 0

    you don't know what I do or do not do, fscktard.

  60. Some Code is Poetry ... Literally by FreeUser · · Score: 2

    Sure, there's a creative aspect. But there's a creative aspect to the bridge-building example he describes. And while maybe on any given program you're working on only the 7th or 8th generation at most, almost any programming task that people deal with has been worked umpteen times - maybe not by them, but by someone. Let's face it, most programming is mundane, whether you work for Bank of America or Playboy, and involves working mostly the same old strategies and structures for slightly different ends. How creative can you get with bubble-sort or linked-lists, or which you've probably used tons of times before ?

    I find whenever I am coding that it is a profoundly creative process, and while it may not always be poetry, it often is very akin to writing prose (as I have done). Indeed, in at least one case code is literally poetry, in an inspired implimentation of DeCSS as haiku:


    How to decrypt a

    DVD: in haiku form.

    (Thanks, Prof. D. S. T.)


    see http://www-2.cs.cmu.edu/~dst/DeCSS/Gallery/wsj-04- 12-2001.html for the rest ... slashdot's asinine lameness filter won't let me include it here. It concludes...


    Have mercy on me,

    Lord, and lesser judges, and

    on Jon Johansen.


    You are correct in part: coding also has very substantive aspects of engineering to it. You are incorrect to differentiate it all too greatly from architecture IMHO. Coding is actually very, very similiar to architecture: a blending of art and engineering in the creation of an edifice that is expected to be both beautiful and functional.

    You are wrong to assert some sort of "universal" agreement on what is and is not good code. My experience (admittedly only 15 years or so) is that there are many disagreements amongst professionals on these very points. Indeed, just like architects and artists of one school or another do tend to agree on what is "good" and what is "not", so to with programmers, and so too are there different schools which disagree with one another's aesthetics and argue vehemently amongst themselves as to what does, and does not, constitute good code.

    --
    The Future of Human Evolution: Autonomy
  61. Re:Software isn't as much like poetry as he sugges by Dr.+Smeegee · · Score: 1

    Word.
    As an English major who has just been paid for the completion of his first software project, I am enthusiastic about the possiblity of the two disciplines comingling.
    When I first had to master the Villanelle and the sestina for a creative writing class back in the eighties, I found my mind stimulated in a way unlike any thought process I had used before. When I began learning python last year, the tickle was familiar.
    Please don't be too quick to write off the similarities between the two crafts and especially entertain the possibility that observing fine code written by masters just might improve your own. The Master of Software Arts sounds like an acheivement to be proud of.

  62. Apples and organges by varjag · · Score: 2, Interesting

    Sort of like a skyscraper? Or a large jet airliner?

    Skyscraper will not collapse if it was built a ton or two heavier than planned. Jet airliner can fly with half of its engines completely off.

    In contrast, software has no redundancy. Throw a DLL out of project, and the rest of your code is useless.

    --
    Lisp is the Tengwar of programming languages.
    1. Re:Apples and organges by Yokaze · · Score: 2

      >software has no redundancy
      Actually, the software in planes is redundant. AFAIK, it is written by 3 teams in 3 different countries in 3 different type of programming languages.

      This should avoid introducing the same bugs by similar cultural background or programming models.

      Software can be made redundant, when your willing to pay for it.

      --
      "Between strong and weak, between rich and poor [...], it is freedom which oppresses and the law which sets free"
    2. Re:Apples and organges by PrinceOfStorms · · Score: 1

      Your comparison between some of a jet's engines and one of an application's DLLs isn't entirely valid. A word processor may function just fine for some time before anyone notices that it doesn't have a working thesaurus module or that a 14-pt font prints as 13.8pt, and even then it is still almost as useful for me. Try flying a plane without landing gear and let me know how well it worked when you get back.

    3. Re:Apples and organges by TC+(WC) · · Score: 1


      Skyscraper will not collapse if it was built a ton or two heavier than planned. Jet airliner can fly with half of its engines completely off.

      In contrast, software has no redundancy. Throw a DLL out of project, and the rest of your code is useless.


      You're paying for the redundancy in the first two examples, though... It's been designed in, because that's what proper engineers do. Software has less redundancy because it isn't programmed to have it.

  63. No way to compare by John_Renne · · Score: 1

    I think there's no way to compare building a bridge and building a decent piece of software. Everybody has his own speciality. I remember in Holland we let an architect build a bridge. It's a beautifull design but they had to strengthen in on all sorts of places after the first storm in autumn. I wonder what things would have looked like if we had let a computer-programmer build the thing. I'm pretty sure I wouldn't have passed the bridge in that case ;-)

    --
    /(bb|[^b]{2})/
  64. sure it is, but it depends on the coder. by twitter · · Score: 2

    It starts like this:

    #include std_beauty
    #include std_hack

    and in a couple of years I look at and ask, "What on Earth were you thinking?" After a few hours, I might understand what I was doing and am pleased, or feel stupid.

    Very much like poetry, no?

    --

    Friends don't help friends install M$ junk.

  65. Software is poetry , but in two forms: by 192939495969798999 · · Score: 1

    1) quick and dirty - like a trashy novel
    2) well thought out - like Shakespeare

    there's no way to do it cheap, fast AND good. Pick two of the three and that's what you can do.
    Plus, you always get what you pay for... cheap and good is really hard compared to cheap and fast.
    sir_haxalot

    --
    stuff |
  66. Code Poetry by strider(+corinth+) · · Score: 3, Interesting

    I had a great professor who once said that writing code is more like writing an essay than like any other human activity. His point was that code ought to communicate to its reader exactly what it's doing. While I agreed with him on that point, I've always thought coding was more like writing poetry:

    When you start doing either, you have a limited set of components to work with (words and grammar vs. commands, programming structures and such), and you put these together to form your work. A good programmer or poet tries to find the most appropriate of these components to use, and to arrange them optimally. Both require creativity, and the goal is (or at least should be) a work of elegance, beauty, and efficiency (the best poems don't waste a single word).

    --

    Love justice; desire mercy.
  67. Re:Software isn't as much like poetry as he sugges by Anonymous Coward · · Score: 0

    me too!

    a/s/l?

    me too!

    AOL loser.

  68. 1990 IOCCC's "westley" by trumpetplayer · · Score: 1

    You may remember this great C poem (hint here) from IOCCC. It compiles, produces topic related output, and even makes lint say some funny stuff about it.

  69. Bad programming by Catullus · · Score: 1

    Bad programming is hardly identifiable by almost every programmer. Consider one case of bad programming: an obscure timing-related bug in some multithreaded software which causes the system to die under load.

    How many "rank and file" programmers (as you call them) could identify and fix a problem like that without any creative thought?

    I would also take issue with your comment that "almost any programming task has been reworked umpteen times". Sure, the fundamentals have remained mostly unchanged (eg. what sorting algorithm do I use?). But every year brings different challenges, new communications protocols, faster hardware, different requirements, etc. Even accounting software has to change frequently to accommodate new tax rules and so on. How often does someone come up to the builder of a bridge and say "This now needs to support 1000 more pedestrians a minute. Oh, and each one needs to get to the other side in half the time"?

    You seem to consider "programmers" to be a lower form of life to theoreticians and system architects. I would argue that programming is an equally creative task - assuming that you work somewhere which allows it to be.

  70. Sigs lost over the years... by Jasin+Natael · · Score: 1

    Reminds me of an older sig I once used:

    "Assembly language: The Haiku of Code Poetry"

    One of my friends asserted that it was comparable only to Haiku in Japanese, since Assembly was just as unintelligible to him...

    --
    True science means that when you re-evaluate the evidence, you re-evaluate your faith.
  71. Re:Software isn't as much like poetry as he sugges by HeyLaughingBoy · · Score: 1
    especially entertain the possibility that observing fine code written by masters just might improve your own. The Master of Software Arts sounds like an acheivement to be proud of.

    This part I agree with. When I took my Software Project Management course, the two most useful aspects were listening to the war stories of this 60+ year old instructor with tons of experience and reading business case studies. Similar thing in my Software Quality Assurance and also OO Patterns classs. Seeing how software projects failed, and in some cases killed people really drives home the point that QA is not to be ignored and teaches how to (hopefully) avoid making the same mistakes they did. So I do believe that learning by seeing what others have done is a powerful tool.
    But where his argument falls apart is in treating it like an art. Engineering is already considered a creative process, but it's a disciplined creative process. The problem with software, as earlier posters have said, isn't too much engineering; it's too little.
  72. wallpaper zen by tamarik · · Score: 4, Interesting

    My initial reaction to this article was a bit different than those I've seen in the comments.

    Way back when... there were only ~25 lines on the screen and we got 1 compile a day (none at the end of the month), we printed all our source on z-fold greenbar paper and desk checked it. When we had something that was beginning to work, we'd hang the code on the wall and step back. If the pattern of the black ink flowed well; the indents and breaks were orderly, the code always seemed to work well. Where we saw disorder, there was the problem. We coded in COBOL, PL/1, basic, db3/Clipper, and 360bal. This worked for all of them.

    With the advent of X, we can now see 100 or more lines and modularity is much more popular. I haven't seen source printed with any regularity in years. Ah, practises change with the times and hardware.

    Coincident but unrelated to the timing of this article, I found an old Panasonic dot matrix printer yesterday. I've been telling the youngsters here about this method so we're gonna hook this antique up and see if that practise can still work.

  73. Bridges aren't easy by TheLink · · Score: 2

    Heck even roads aren't that easy.

    Lack of documentation? Well how do you think the civil engineers feel when they start digging up stuff and find power cables and water pipes where they weren't supposed to be? Then the project is delayed for everything to be rerouted.

    Later you get a bunch of people squatting on the land refusing to move. Then a bunch of environmentalists start chaining themselves to trees. Then you get some people sending you subpar stuff - concrete mix etc. BTW the deathrate in the construction industry is probably higher than the software industry.

    Some time back the newspapers here were running stories about the power company et all complaining about road builders digging up and breaking their stuff. The boss of a construction company called the respective industry bosses up privately and asked for accurate maps of where their stuff was. They couldn't provide them and so they had to shut up, and somehow the newspapers stopped running those stories :).

    As for design variations, civil engineers often have to change designs due to political reasons - this after supposedly everything has been approved. People start saying hey you need to build a new intersection here for _free_. Then the politicians start saying hmm maybe if you don't do it we might give subsequent projects to other people.

    --
  74. Learning to Peer Review (Critique) by jolshefsky · · Score: 4, Insightful
    I thought the most important concept in the article was that of the artistic critique. From the beginning of an artists education, they are taught the methods of critique. The situation is relatively simple--put your work in front of a body of people and have them make critical comments about it. The presenter of the work leaves it to stand on its own and tries to remove their own personal involvement from it: attacking a work is not attacking the creator.

    I received a bachelors in computer science in 1993 and have heard of these so-called "Peer Reviews" or "Code Reviews." However, not once was I taught that in school. It would have been extremely beneficial if computer science graduates had the skills of the peer review in the same way that recent fine arts graduates (theoretically) have the skills of the critique process.

    The two very different disciplines share some important characteristics. Students are taught techniques and are given the opportunity to hone their expressive skills. In fine arts, the emphasis is on the expressive skills--it's better to create a work of art that is very expressive even if the techniques are poor. Computer science, on the other hand, emphasizes technique over expression--it's better to make a program that works poorly rather than an elegant algorithm that doesn't compile.

    Unfortunately the computer science student is treated like an engineer and their creative skills are not taught, but left to the student to develop on their own, and, in part through attrition, functionally creative programmers leave college. Admittedly, a fine arts student isn't taught the way to express their creative ideas, but rather, given the opportunity to hone their implicit skills for expressing those ideas. Even better, through learning the process of the critique, they are given the skills necessary to continue to learn to improve on their own.

    --
    --- Jason Olshefsky

    Karma: Poser (mostly affected by adding this line long after everyone else did)

  75. An example of Perl Poetry by Walterk · · Score: 1
    Found here
    #!/usr/bin/perl

    sub lime_thought{
    study, each %day;
    if(you($seek)){$knowledge;}
    while(study){$ practice;}
    if(you($tie)){($many)=times;
    GOTO PERLMONKS,tell YOURPROBLEM;
    wait; $then; return $to.TheSite;
    read ($the,$monks,$answer);write THANKS;
    bless THEM; next $say,GoodBye;}}
    Some other stuff here and here
  76. Epic Software by Reziac · · Score: 5, Funny

    Truly epic software is written in iambic pentameter. Portable utilities are written in sonnet form. Quick-n-dirty kludges are written as limericks. Haiku is for batch files.

    --
    ~REZ~ #43301. Who'd fake being me anyway?
    1. Re:Epic Software by Fascist+Christ · · Score: 1

      Truly epic software is written in iambic pentameter.

      One line can be in iambic pentameter. An epic can have no meter. I like the others though.

      --
      TodayTM BillyJoelTM GoogleTMd for StitchTMes due to WindowsTM while RollerbladeTMing with an AppleTM and a PopsicleTM
    2. Re:Epic Software by iabervon · · Score: 2

      Ideally, all software should be written in iambic pentameter, to permit code reuse. (#include "dawn.h")

    3. Re:Epic Software by Reziac · · Score: 2

      Taking this advice to heart, I just tried to compile Childe Harold... anyone know what's wrong with the module "byron.h" ??

      --
      ~REZ~ #43301. Who'd fake being me anyway?
    4. Re:Epic Software by Anonymous Coward · · Score: 0

      Haiku is for batch files.

      #!/bin/basho
      mv frog ancient_pond
      echo "splash!"

  77. Learning to Program by DoNotTauntHappyFunBa · · Score: 1

    I think Gabriel's programming workshop concept is more novel than the software-to-bridge comparison. Learning about historical programs, learning about the lives of programmers, and writing hundreds of programs in a mentored environment would be an interesting approach. This may sound strange, but a lot of it happens already. There is already quite a bit of celebrity for some language inventors and other visionaries in the industry.


    Perhaps programming studios will be not so much like Renaissance art schools, but more like craft workshops such as Karl Faberge's, where different craftsmen had different responsibilities, but they all came together to create something wonderful. This is because of the mentoring aspect (oversight by more experienced craftsmen), and the fact that programmers often have to collaborate with other programmers (to say nothing of managers, testers, users, etc.).


    Although much of the proposed programming MFA program may remain a novelty, I expect some of it may filter out into the more standard undergraduate curriculum over time.

    --
    Well, hey, I didn't spend all those years playing Dungeons and Dragons and not learn a little something about courage.
  78. True. But. by TheLink · · Score: 2

    1) Most are just tinkering about. It's like all those projects in people's gardening shed. Tinkering is fairly affordable in IT. Freshmeat just happens to be a list of backyard projects, some backyards having space rockets or monorails, but most having benches, bird houses and so on.

    2) In software world if people want the exact same "bridge", they just make or buy another copy. The IT world does duplications far better than the construction world.

    3) Often people just don't want the exact same thing as everyone else. If you don't mind the exact same thing see 2). But in my experience many people and companies are different, want to be different etc. So even if everything goes open source, programmers etc will still have jobs. Plenty in fact.

    --
  79. Re:Software isn't as much like poetry as he sugges by shiflett · · Score: 1

    > The designers of the program - i.e., usually the
    > project managers (*ducks*) or system architects
    > do most of the creative work of conceptualizings
    > how things will work and how they will meet the
    > constraints of the particular problem. The
    > programmers, most of the time, are brick-layers,
    > carpenters and plumbers.

    In an idea environment, I completely agree with you. This type of environment generally requires that the project manager and/or the systems analyst/architect has significant experience in technology. However, even in this idea environment, these "visionaries" will solicit opinions and suggestions from the most experienced programmers (brick-layers).

    What I have found in many old businesses is that the management style has not changed at all in recent times. In many cases, the management has absolutely no experience in technology, and those who do are all considered equal, single-tiered so to speak. Thus, the most experienced people are not consulted for design and architecture strategies, and the management feels a need to decide these sort of things as an act of leadership.

    The result is that the programmers have to be the creative ones, because the "designs" created by the inexperienced management are incomplete and in many cases useless.

  80. I want to work with this guy! by Interrobang · · Score: 2

    For the last couple of years, I've been using bits and pieces of my 'copious free time' to research and develop a hypothesis of what I might call 'rhetorical computing,' that treats human-computer interactions as speech (in the technical sense) or rhetorical acts. I've mostly gotten started with the endeavour because I am trying to learn how to program from a rhetoric/logic paradigm instead of a mathematical one. So far, it's going along as well as could be expected. I'm getting exactly the results I figure I should, comparative to the amount of time I'm able to devote to it.

    In the meantime, I've been looking for scholars or practitioners who are working on similar things so I can possibly work with them, or, at least cite their papers and do the required field reading. I've already written to him. We'll see what happens.

    I do think there is room in the field for different kinds of approaches (all of yours too), and I'd like to at least be permitted (somehow) to follow this line of inquiry until I know it won't work, or until I know it will. That's why I see an opportunity here, and not just an(other) argument.

    1. Re:I want to work with this guy! by smallfries · · Score: 1

      That sounds quite interesting, could you expand on what you mean by a rhetorical paradigm?

      --
      Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
  81. Completely WRONG by Srin+Tuar · · Score: 2


    The designers of the program - i.e., usually the project managers (*ducks*) or system architects do most of the creative work of conceptualizings how things will work and how they will meet the constraints of the particular problem. The programmers, most of the time, are brick-layers, carpenters and plumbers. Not that there is anything less noble about this latter work, but it's hard to call it creative.


    This is the biggest, yet most common, misconception in the software world, mostly espoused by the idiot managers themselves.


    Sure it could work like that in THEORY, were a visionary architect foresees all the real issues, but down here in the trenches, never once have I seen that happen for anything but the simplest tasks.


    In reality the customer doesnt know what the want, the manager is a clueless suit who pumps out buzzwords, and the analysts do essentially nothing. And the lowly "plumbers" are left to figure out:

    • What the customer *really* needs
    • What the best level of abstraction is
    • How to implement specific details.


    The coders almost invariably shoulder the burden for all their "management" types, who, even if the are ex-programmers themselves, are flat out incapable of understanding the problems at hand.


    The reality of the situation is, the coders are doing creative work, and they are typically the only ones who even have the ability to design solutions.

  82. Why is software not as good as bridges? by Anonymous Coward · · Score: 0

    When the a Roman bridge collapsed, the engineer in charge was put to death. How much better would Windows be if we shot a programmer for every BSOD?

    1. Re:Why is software not as good as bridges? by Frobnicator · · Score: 2
      How much better would Windows be if we shot a programmer for every BSOD?
      Actually Windows itself is pretty stable. The Windows core has been around the block, has had billions of installations, and doesn't crash. The BSOD is usually a kernel check or a STOP -- a condition where Windows says that something really bad was prevented. Just like a kernel panic, it's actually a good thing, compared to the alternative.

      Most of the BSOD's in Windows come from shoddy software. The BSOD or kernel panic allows developers to find the device drivers, libraries, or other 'insider' code that is messed up.

      I've done a *LOT* of debugging, including wading through the kernel and drivers to find strange bugs (these comments are about graphics drivers specifically). I have seen device drivers with int 3's (debug interrupts) scattered through them. I have seen device drivers that obviously were using the 'minimal rebuild' options, resulting in slower and more-corrupt code. I have seen drivers that try to run (and usually crash) Pentium 3, Pentium 4, and Athalon instructions even though the CPU doesn't support those instructions. In short, drivers and applications, not the Windows kernel or API's, are generally at fault.

      When I do have the misfortune of having to do driver-level debugging, I have never, not once, seen a crash with the Windows NT/98/2000/ME/XP kernels. Inefficient, unoptimized and seemingly poor design decisions are in there, as are occasional functional errors and side effects, but as for crashes in the kernel, I have never seen one.

      If the same logic were applied to all software (If it crashes, you die) not even Donald Knuth would be left alive. And that would be a sorry state.

      frob.

      --
      //TODO: Think of witty sig statement
  83. NOT somethign new by xagon7 · · Score: 1

    It may be new to you with a fancy nice GUI.. but someone has probably programmed you code already (except for game artwork maybe). A bit is a bit is a bit. I have actually been getting burned out, because nearly anything "new" I would like to do has already been done... check out sourceforge. BUT on the other hand one of the beautiful things about Open Source is you can help build the project you are already interested in and make it better than if you have a non-pro go alone ;)

  84. Re:NOT somethign new -- Follow - up by xagon7 · · Score: 1

    The internet itself and the world wide web is a technology that has been in POS terminals for 40 years! .NET ---> same ole rehash -- Web Services ---L> someone say CGI?

    They all just look prettier nowdays.

    comon....

  85. IN SOVIET RUSSIA... by twofidyKidd · · Score: 1

    Programs write poetry about YOU.

    --


    Hades, PoD: Official Advocate
  86. The difference. by TheLink · · Score: 2

    The big difference.

    The problem is, in the IT world, the blueprint typically flies already :).

    So, many many people make a mistake of launching the blueprint and calling it version 1.0.

    Then they launch the "plastic/clay model" as version 2.0.

    Then they finally launch the "working prototype", and call it version 3.

    After fixing major bugs, they launch the real thing, version 3.1.

    Funnily in IT, many customers don't seem to mind paying lots of money to fly the blueprint ;).

    --
  87. Programming is programming by kin_korn_karn · · Score: 2


    Programming is art about as much as my turds are sculpture. One does not express one's emotions (except maybe greed or obsequiousness) through code. Therefore, it cannot possibly be art.

    It's also not engineering. Bridges do something that directly improves the world. Most programming just exists in order to funnel money from one corporation to another. You can do that with checks or briefcases full of cash, though that would require that people actually leave the office and workers cannot be treated as humans that need the contact of anything other than a CRT and CPU and kb/mouse, since they are weak-minded and would thusly cause the stock price to drop.

    I'm a programmer. I accept that my job isn't like anything else and is fundamentally useless and in fact detrimental to society. Why can't all of you? Human society ran for at least 5,000 years before the invention of the computer. These damn things are ruining our lives.

  88. Programming is like Bridge Building by pkinetics · · Score: 2, Interesting
    You build something to span two distances, objectives and functionality.

    IMHO, when comparing the two types of sciences people forget to continue with the analogy. Bridges tend to be fixed earth, lots of preanalysis work to build the foundation. In software development the ground keeps moving, you dig through one layer, and discover a whole different sediment layer.

    Bridges have specific principles, gravity, tension, etc. Our correlation could be hardware and software environments. How much stuff is cross compatible 100% of the time? Everything has got to be tweaked a bit before it will work somewhere else.

    To the best of my knowledge all bridges have been built on Earth. Let's see how well they would do on another planet. Same principles to start with, but a whole different factors to contend with. That's what its like in programming. We can write the if else, while loops, oop, sql whatever, but its not the same in different environments...

    anywho... the caffeine rush is on... brain going way too fast now... can't hold thoughts...

  89. So my Boss wanted me to build a bridge... by Crash+McBang · · Score: 3, Funny

    He came to me and said, It's gotta be narrow enough for a bicycle, but wide enough for a hummvee, It's gotta be recyclable and not harm a tree, It's gotta be password protected, Internet enabled, smaller than a table, and reuse is expected! UML and Visio for the design, we gotta have a prototype by next week, don't whine! Nobody can get hurt using this bridge, no time for testing, just do a smidge! We gotta release it soon, or the customer will swoon! Thank goodness that's done, now lets build another one! The next customer's needs are unique, let's use the same code and build it next week! So my Boss wanted me to build a bridge...

    --
    To put a witty saying into 120 characters, jst rmv ll th vwls.
  90. This is what I THOUGHT I'd be getting...... by Anonymous Coward · · Score: 0

    from my university's Comp Sci for Poets, but noooo...... only stuff about mouses and squeakers and all that high falutin' "oh look at me, i'm smart!" jazz. Not a singled blessed poem the entire time. What a rip off

  91. We know how to do software right by Animats · · Score: 5, Insightful
    If it really had to work, operating systems would be small microkernels that almost never change, like QNX, built into ROM. CPUs would have the fault-detection and redundancy of mainframe IBM CPUs. Fancy features would have an arm's length relationship with the important stuff, as with SQL databases. Crucial software components would have machine-checked proofs of correctness. Everything would be written in safe languages, like Ada or Modula for low-level stuff and Java for high-level stuff.

    It would have been hard to get to where we are now doing things this way. But now that we have the CPU power, it's time to start going in that direction.

    Cars went through the same evolution. By the 1960s, almost everybody in the US had a car, but the cars worked well for a year or two at best. It took Ralph Nader, Congress, and Japanese competition to bring cars to the point where they worked reliably. This happened over the objections of the auto industry; not until the 1980s did the auto industry finally accept that they'd been forced to do the right thing. Read Lee Iacocca's books.

    1. Re:We know how to do software right by lpret · · Score: 2
      I agree with you completely, and it's something that I've been saying for quite some time. I'm interested to see what you think will be the japanese car manufacturers of software. Will it be a specific area or is that the role of open-source developers? Or do you think there even is a specific point that we can point to at which we'll be "changed"?

      Discuss...

      --
      This is my digital signature. 10011011001
    2. Re:We know how to do software right by Anonymous Coward · · Score: 0

      sort of like the HURD??
      http://www.gnu.org/software/hurd/hurd.html

    3. Re:We know how to do software right by smallfries · · Score: 1

      Crucial software components would have machine-checked proofs of correctness.

      No they wouldn't. Its a common misconception that you can mechanically produce a program free from bugs. Firstly model-checking is hard because the state space is expodential in size (with respect to the program). Secondly certain properties are undecidable in logic (termination is the obvious example).

      Nice idea, but lots of really smart people have spent many decades working on it without getting much closer.

      --
      Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
    4. Re:We know how to do software right by Tablizer · · Score: 1

      It took Ralph Nader, Congress, and Japanese competition to bring cars to the point where they worked reliably.

      How exactly did Nader and Congress improve car reliability outside of safety?

      I have never seen one peice of legislation that forces quality (outside of medicine and safety).

    5. Re:We know how to do software right by Animats · · Score: 2
      Its a common misconception that you can mechanically produce a program free from bugs. Firstly model-checking is hard because the state space is expodential (sic) in size (with respect to the program). Secondly certain properties are undecidable in logic (termination is the obvious example).

      It is a common misconception that proof of correctness is impossible. It's merely difficult.

      The basic way you prove that a loop terminates is to define an upper bound on the maximum possible number of remaining iterations. That bound must decrease by at least one each time through the loop. If you can't define such a bound, you probably have a problem with your code.

      Undecidable termination isn't formally an issue for deterministic machines with finite memory. Sooner or later, you have to either terminate or repeat a previous state. That's not a helpful statement in practice, because you can write programs for which deciding termination is arbitrarily hard, although not formally decidable. But you don't write programs like that if it has to work. If you can't get it through the verifier, it has to be rewritten.

      See my 1983 POPL paper, "Practical Program Verification". I headed a team that built a verification system for a dialect of Pascal. It worked, but it took 45 minutes on a 1 MIPS VAX to grind out the proofs for a few hundred lines of Pascal. That's not a problem any more.

      There's been some good later work for Java, out of the now-defunct DEC research lab in Palo Alto. People actually do proofs of correctness for VHDL. For C and C++, though, the language semantics are so ambiguous that the problem is hopeless, which is why nobody tries.

      The hard problem is specifying what a program is supposed to do. But negative specification, where there's a whole list of things that should never happen (subscripting out of range, arithmetic overflow, infinite loops) is straightforward and verifiable. You can also verify key positive statements (we did things like "spark plug must file exactly once per cylinder time").

      The real problem with program verification is that it increases the cost of developing software. Total life cycle cost over all users would probably decrease for volume products, but that's not the current business priority.

    6. Re:We know how to do software right by Animats · · Score: 2
      I've been disappointed with the HURD effort. Part of the problem is that they started with Mach, which in retrospect seems not to be the way to do a microkernel. Mach started life as a set of interprocess communication add-ons to the Berkeley UNIX kernel, and has struggled to outgrow the Berkeley code.

      One thing we know now is that microkernel design is very tough. You can kludge together a UNIX-like OS without much trouble, and many people have done so. But there are key early design decisions in microkernel OSs which, if wrong, are not recoverable later in the project. EROS, for example, tried "persistence" at the kernel level, and they're now struggling to back out that decision.

      Download the free version of QNX, build the boot CD, and install it on a spare machine. There's a protected mode microkernel OS with really good performance. All the drivers are protected mode processes, as is the file system. It can be done. A lot of control systems that have to work run QNX.

    7. Re:We know how to do software right by Anonymous Coward · · Score: 0

      If it really had to work, operating systems would be small microkernels that almost never change, like QNX, built into ROM.

      I don't want QNX built into ROM. I don't want ANY OS built into ROM. I want to be able to upgrade it and switch it around, selecting new OS's for more specialised tasks.

      Now, an OS in Static or Flash RAM might be good (preferably some sort of re-writable memory without a limit on the reliable rewrites, but I don't know much about the limitations of that tech...)

      Then you could update the OS via a BIOS option, and provide at least rudimentary access control, so that the OS can only be overwritten with the users express consent). Then you'd need room for OS-RAM upgrades to allow for new and improved kernels, or for dual/triple-booting...

      Having many different OS's available is a strength, not a weakness. Having a fixed OS is not the best idea, even when you think you've discovered the perfect core OS code.

    8. Re:We know how to do software right by BollocksToThis · · Score: 1

      See my 1983 POPL paper, "Practical Program Verification".

      I'd like to... really, I would. But perhaps you can tell me how? A google search leads to a German website that happily tells me the names of the two people who wrote this paper... and nothing else.

      Where do we GET this paper?

      --
      This sig is part of your complete breakfast.
    9. Re:We know how to do software right by John+Hasler · · Score: 2

      > By the 1960s, almost everybody in the US had a
      > car, but the cars worked well for a year or two
      > at best.

      This is complete bullshit.

      --
      Warning: this article may contain humor, sarcasm, parody, and perhaps even irony. Read at your own risk.
    10. Re:We know how to do software right by greenrd · · Score: 2
      Buy an ACM digital library subscription, or visit your nearest university library and search the catalog for proceedings of POPL (Principles of Programming Languages?)

    11. Re:We know how to do software right by smallfries · · Score: 1

      Oops stumbled onto an expert. Didn't realise that I'd actually told one of the 'smart people' that I was refering to as working on the problem how to do it. I'll check out your paper as it sounds quite interesting, we've definitely got a subscription although normally the sites don't carry scans of the older stuff (well the ACM's worse for that).

      I'm actually working in a similar area myself looking at uses of specialisation so I'm quite familiar with how you write programs that you can analyse, I was just playing devils advocate ;)

      --
      Slashdot: where don knuth is an idiot because he cant grasp the awesome power of php
  92. re: reuse and OO by Tablizer · · Score: 2

    Regarding OO and resue. Most "in the know" practitioners *don't* seem to rank "reuse" as the most important aspect of OO. Here is some comments about it:


    http://c2.com/cgi/wiki?ReuseHasFailed

    And here are some of my comments and observations about OO and reuse:


    http://www.geocities.com/tablizer/reustalk.htm

    One problem I have seen trying to make "generic software tools" is that to make them truely generic it seems one has keep adding features and bloating up the interface to cover all possible wants of each client (user). After a while it becomes almost easier to build you own from scratch or copy some base code and modif it than to navigate and use the complex interface. Copy-and-modify seems less full of worms than reference-based reuse.

    IOW, copy-reuse works, reference-reuse does not, at least not for business logic. However, software engineering "rules" seems to prefer reference-reuse. Duplication is generally considered "bad". Understandable, but in practice it is not easy at all.

    As far as what the benefits of OO are supposed to be, I get different answers from different OO fans, many of them vague IMO. I give up. I don't know what the benefits of OO are supposed to be. The top candidates seem to be either that it reduces the impact to the code of changes in requirements, or improves the human grokkability of the result. I have not seen any good code evidence of the first and the second is subjective because different people grok differently.

    This whole OO thing puzzles me to no end. I don't get it. The shape, animal, and device driver book examples don't extrapolate to custom biz apps. I am either busted upstairs, or OO fans are mistaking subjectivity for objective benefits. I don't really question that it may fit thier head better, but I don't own their head.

  93. No object reuse in software??? by TheLink · · Score: 2

    I thought it's called CPAN?

    I dunno about the rest of you, but that's why I like Perl. It's practical. I know I suck, so I use as much prefab as possible.

    You geniuses can build your perfect shiny crystalline software atom by atom. If you have free time, and are feeling generous, make some prefab for us please :).

    As for those of you who suck but don't know it. You still don't know you suck eh? ;)

    --
    1. Re:No object reuse in software??? by jerdenn · · Score: 2

      Actually, you are thinking of Component Reuse. This is very much separate from Object Reuse.

      -jerdenn

    2. Re:No object reuse in software??? by TheLink · · Score: 2

      I'm ignorant. What are the differences?

      Are the differences why object reuse is rarer than component reuse? Or there's some other reason??

      --
    3. Re:No object reuse in software??? by jerdenn · · Score: 2

      Object reuse is typically done at the source code level. Class inheritance is a good example of object reuse. Component reuse is more often performed at the binary level. COM objects and CPAN are good examples of Component reuse.

      -jerdenn

    4. Re:No object reuse in software??? by TheLink · · Score: 2

      Thanks, still don't get it :(.

      With Java/C++ if I use something from a library and override a few methods is that object reuse or is that component reuse? Calling/execing some more or less external program is component reuse?

      So I'm still a bit blurry on how the definitions relate to Perl. Coz lots of CPAN stuff is source code in perl. And many popular modules are used as objects in programs.

      --
  94. Poetry as Programming by vbweenie · · Score: 1

    I studied poetry academically before I worked in programming (I started programming for fun around the same time I started reading poetry for fun - at about age 8). The practice of writing code and the practice of writing poetry are very similar in my mind; I don't mean that they're objectively similar, although there are objective similarities, but that subjectively the way it feels to be doing one is very like the way it feels to be doing the other.

    That's not to say I don't suck at both, of course.

    Anyway, here's a poem I wrote as part of a sequence called "Domain Names", which is a response to a question asked by the British poet Geoffrey Hill: What does the computer know of original sin?

    ***

    Corrupted bug report received in error:
    could not resolve address. This traces back
    unendingly, is lost at last amid
    a blitz of registers - beyond my skill

    if not all skill. Go high-level to bare metal
    in winding descent; resist light, heat and shards;
    get zapped in nether regions. Every black
    box has another black box inside it somewhere.

    The shortest path is a relaxed approach
    to the infinite: so route around bad sectors,
    solicit patches, number each release
    in cautious increments. Surely that kingdom

    looms aloft where art is catalogued,
    all things considered harmless. There the blinding
    magii parley, indolent in their robes;
    their elan earthed, exposed as commonplace.

    --
    Experience is a hard school, but fools will learn no other.
  95. public static int poem() by jhampson · · Score: 1

    public static int poem(){
    while(roses=="red" && violets=="blue"){
    iLoveYou=true;
    }
    return(1);
    }

  96. Reyers programming poetry by Anonymous Coward · · Score: 0

    mismanage, misappropriate, promote from without, promote for political gain instead of proficiency, refuse to QA, ignore results, set a separate set of criteria (one for employees you don't want to succeed and another for politically placed employees that can not make it on their own merits)

  97. Not at all. by pla · · Score: 5, Interesting

    This is not real engineering.

    I have done "real" engineering. I write (well, wrote) firmware, working very closely with EEs, and such tasks required quite a lot of careful planning. I "know" what "real" engineers do, and have done such in my own coding (though *only* as a requirement of ISO9000, which I consider useful primarily as six linear feet of kindling in case a major snowstorm traps me at work with no heat).

    That said...

    "Real" enineering, as applied to writing code, wastes time. A bunch of BS with no purpose other than to make management think they have a better grasp of how long it will take to finish a particular project. Every coding "paradigm" I've ever seen has the same purpose.

    Note that nowhere above there did I say that such methods actually *do* lend any stability or outcome predictability to a coding project. They provide a perception, nothing more, and a false one at that.

    I have written a LOT of code in my life. And I can say, quite honestly, that the "best" code I've written has felt more like writing poetry than any task of "engineering". Coding involves a creative, not analytic, effort. Anyone who claims otherwise may "get the job done" but will *NEVER* produce anything truly elegant.

    Now, don't get me wrong, programming involves a lot of math, and a lot of careful forethought. But to code well, people need to have the math they use so totally ingrained that it flows without thought. From the idea to the implementation, without any (explicit) intermediate steps (except perhaps a nice detailed spec, which you either already have as the goal to code to, or have to create, in which case it flows as a natural consequence of the task at hand). If a programmer can't do that, they will take too long to produce too little, and the result will feel very underwhelming.

    To make an analogy to actual literature, any two-bit hack can carefully follow the rules of grammar to string a series of words together and re-tell one of the classic plots. *Not* every writer can create the third age of Middle Earth and have the readers *believe* it.


    When one is building a circuit, or a bridge, one can't simply make quick changes. Any changes are ltime consuming, expensive, and painful. Thus, REAL engineers actually plan stuff.

    Complete and utter BS. When building a bridge, you use (as someone else pointed out) the 4000 years of "prototypes" available to decide what will work best. When building a circuit, you test it in any of a number of nice circuit analysis programs before building it, *then* build a few generations of proto boards, and only then commit to a release design. In the 10 years I worked closely with EEs, not once did I see any non-trivial board come out right on the first spin. They go through the same trial and error as programmers. "Oops, this line has too much noise on it, need a slightly lower-valued resistor" differs very little from "Oops, I forgot to check that call for failure since it should never fail anyway".

    Yes, "real" engineering involves careful forethought. As does "real" programming. but the implementation (in *BOTH* realms) very much counts as an art. I get so sick of people trying to say we need to follow such-and-such a proceedure to produce "good" results. I used to know one guy who did a lot of analog circuit design. He'd do very little while actually at work, then go home, get REALLY high, and produce some of the best designs you've ever seen. Tell me "real" engineering makes any mention of *that* as a design strategy.

    Coding, at its lowest level, involves nothing more than theorem proving. When you can propose a (terminating!) concrete algorithmic method for even something as "simple" as proving (or disproving) Fermat's last, then this discussion has some merit. Until then, we may as well argue about C++ vs Java, or tea vs coffee, or Shakespeare vs Spencer.

    1. Re:Not at all. by bucephalis · · Score: 1

      " Until then, we may as well argue about C++ vs Java, or tea vs coffee, or Shakespeare vs Spencer."

      C++, Coffee, Spencer.

  98. Re:Get Ada 95 by Anonymous Coward · · Score: 0

    >Especially when it comes to languages like C++.

    When you build 'bridge-like' apps you just don't use C(++)!

    Examples

  99. ADA by Peaker · · Score: 1

    is not a safe language.

  100. Why software isnt up to scratch. imho by p944 · · Score: 1

    Two reasons that software is not of the level of quality that people seem for some reason to expect (that of bridges obviously).

    1. Supposed Coders/Poets are also expected to be testers.

    I don't see why this is expected. You don't get the guy from Porsche/Ferrari who draws the design of how the car is supposed to look to actually build it down to the last nut and test every element of it.
    In my experience, coders and testers have a vastly different view of the world and the one cannot do the others job anywhere near as well.
    No coder should be without a tester - then at least the software I produced would be a lot better (proved to me on 2 projects done with a dedicated tester).

    2. Where is the comeback when someone writes some useless code? No comeback to either the company or the individuals.

    Try building a bridge and putting a disclaimer on it so that if it falls down killing everyone currently on it there's no comeback. Can't see too many people buying one off you or even walking over it.

    As far as I can see, the quality software is the stuff that absolutely must work or it waste X billions or will cause major issues if found out - e.g. fly by wire, missile guidance, space programs, operating systems (can't sell hardware without it so no cash in door).

    That, and the stuff that people do for love - Quake, OpenSource.

    1. Re:Why software isnt up to scratch. imho by Anonymous Coward · · Score: 0

      I was wondering when someon would mention this. There is more to coding than just windows,linex,etc. Every digital peice of equipement has some kind of code in it,(hell even a cpu has code written on the chip) and a programmer has to write that code.

      If I take a couple of railroad ties and lay them across a creek, its a bridge but are you an architect? Write a hello world program,you have written code but are you a programmer?

      Testing should always be done by someone external to the coding team. Why you say? As a programmer, I interpret the design into code. BUT the design does not always taken into account the user (USER "when I sit and click my mouse for 10 min while the program is processing it crashes") the tester is there trying to break your code, the programmer usually only makes sure that it is doing what the design said it should.

      Quality of anything is determined by the amount of time and resources utilized to building it. This is true. But in most fields if you add more people it does not necessarily reduce the amount of time. You can only have so many people operating the crane (for a bridge), you can only have so many coders in the same peice of code at the same time to. Managers dont seem to understand this, oh lets through more people at this and reduce the time they have tocode it. Rarely works, and usually causes a degradation in quality.

      Neil

  101. Re: reuse and OO by richieb · · Score: 3, Insightful
    One problem I have seen trying to make "generic software tools" is that to make them truely generic it seems one has keep adding features and bloating up the interface to cover all possible wants of each client (user).

    What I see is that most "generic" tools become so generic, as to be completely useless. I think one of the reasons Extreme Programming is catching on, is that it does away with this concept and advocates building the simplest thing that will work.

    Imagine trying to create a "generic bridge building toolkit". Certainly there are standard components from which bridges are built (i.e. bolts etc), but the idea of a generic bridge toolkit is silly.

    --
    ...richie - It is a good day to code.
  102. Re:Feynman by Anonymous Coward · · Score: 0

    Go ahead and try to explain Quantum Electro Dynamics to a small child. It is after all the work that Feynman got the Nobel for. Should be easy.

    By the by, Feynman himself only taught Beginning Physics post-Nobel for 1 year. It was an experiment. While it is great (it formed the basis for Six Easy Pieces and Six Not So Easy Pieces), Feynman himself found it to be a bit of a failure.

    Any in-depth, high-level concept is hard to communicate. It is even harder if you are not using terms the other person doesn't understand. Don't kid yourself.

  103. Mod this up +Interesting plz by Anonymous Coward · · Score: 0


    That was nice.

  104. Alternate uses for ISO 9000 by Anonymous Coward · · Score: 0
    There could be some creativity here ...

    • Pass the document through a shredder and use the resulting tatters to weave yourself a highly-flammable not-so-warm sweater.
    • Dip each page in a water-Elmer's-glue solution and apply to your favorite inflatable. Dry. Remove inflatable. Paint. Fill with candy and pommel blindfolded at your next office party.
    • Die trying to read the stupid document. Kill your organization slowly trying to implement the stupid rules in the stupid document. Join the dot-com bust and rubble.
    • Drain your company of thousands of dollars so you can attend worthless seminars to become certified in enforcing the ISO 9000. Return from seminar so painfully bloated with hot air and useless information as to render your manufacturing facility completely incapable of producing anything at a net profit.
    • Reply with your own useful application of a printed copy of the ISO 9000 standard.
  105. MFA in software by EmbeddedJanitor · · Score: 1

    Great, then I can flip burgers too!

    --
    Engineering is the art of compromise.
  106. aesthetic beauty by ryochiji · · Score: 5, Insightful

    Bridges have functional purposes, and some bridges are boring bridges that get you from point A to point B (or side A to side B, as the case may be). But many bridges also have an aesthetic (artistic) aspect, and I think that's what's being referred to.

    Personally, I think it's the same with code. Given the same specs, anyone can write functional programs that do the same thing, but when you get down and look at the source, some will have a sense of beauty that go beyond pure functionality. Or it's like that warm fuzzy feeling you get when you see a really cool algorithm, solution, or design.

    Or am I the only person who gets warm fuzzy feelings from code?

    1. Re:aesthetic beauty by Anonymous Coward · · Score: 0

      I think there is beauty in design. I consider coding an "art" in the way that is a developed/trained skill, and a well designed system (or even a small bit of code) can indeed be beautiful to its beholder, even though it is not intended to provoke thought like traditional art might be. (Or whatever the artist's intentions are.)

      I don't really get warm fuzzies from code, more from the satisfaction of solving a difficult problem.

  107. Re:Feynman by Anonymous Coward · · Score: 0

    Sure, I'd agree, if that was what the point was in the first place. This wasn't about fundamentally difficult concepts, though, this was about uncommented code with variables named 'n' and 'i'.

  108. Writing Software Is Not Like Building Anything by John+Hasler · · Score: 3, Insightful

    > People say, 'Well, how come we can't build
    > software the way we build bridges?'

    Writing software is like drawing up the plans for a bridge. The bridge gets built every time the program gets run.

    --
    Warning: this article may contain humor, sarcasm, parody, and perhaps even irony. Read at your own risk.
  109. TQM and buzzwords by Anonymous Coward · · Score: 0

    I think you're way off base and misinformed if you
    really think these ideas like using Ada and QNX
    would have any improvement in software reliability.

    Java? be real!

    machine checked proofs for correctness?? hmm.. who
    will write and check that program?

    computers aren't magical and there is no such software out there

    as far as the automobile comparison, bah. maybe
    we should have an airbag installed in the LCD panel?

    bah! it's all just buzzwords and java

  110. I know I'm being an OT troll/flamebaiter/whatever: by Anonymous Coward · · Score: 0

    Come on now, Windows 95 was perfectly acceptable at what it did. It managed to achieve backwards compatibility with a very, very defunct OS while incorporating parts of modern OSs. Hell, it managed to mix these two (conflicting) design goals and accomplish resounding commercial success, so IMO it really shouldn't be looked down on too much.

  111. Bioinformatics? by mindhaze · · Score: 1

    Hmm... I think when Richard Gabriel says this:

    "It always comes back to creativity for me. Creativity thrives through diversity. So, if you look at creativity at large, lots of poets, painters, playwrights, fiction writers, and so on feed off of each other's creativity, but selectively. It's like biology, with its great diversity, where what really works well in particular environments is selected for survival. "

    specifically "It's like bilogy".

    I wonder how well his ideals will translate to bioinformatics, where you're dealing with organisims programmatically. Pattern matching is a LOT like poetry. I'd bet Richard Gabriel would really dig Perl, however, he probably at least appreciates the RegExp in Java (since I suspect he probably doesn't do much outside of Java, considering he works for Sun).

    Very cool stuff... I only wish this MSA would take off a lot sooner.

  112. In Soviet Russia... by dagnabit · · Score: 1

    ...Ph.D. in Computer Science has YOU!

  113. Some Observations by small_box_of_stuff · · Score: 2, Informative
    I spend all day writing sofware, side by side with EE's and ME's and others designing and building control systems and other machines, and have been doing so for the last 10 years.

    The thing is, they screw up their designs just as often as I do, they build things that don't work well the first time just as often as I do, and they release stuff that doesnt do what the customer wants just as often as I do. And the outside companies we work with are worse.

    It's a complete falacy that more mature engineering disciplines are able to some how make things that work all the time, right up front. I heard this in school long ago, and with out any experience I took it as true. After just a few years of working with hardware engineers, I found it was complete crap.

    The crux of the issue is this. Building hardware is complicated. Building software is complicated. Building anything with a couple of hundred thousands parts in it is very hard. To do it right takes talented and motivated people, lots of time, and lots of money. Things need to be well organized, well planned, and well executed.

    I've seen a few people on this story post that many traditionally engineered things that people hold up as being examples of how to do it right, such as bridges, are much simpler than software. That is very true. Most circuts that our EE's build here, lets say they had 50000 things in them. thats quite a lot. but look at the things. the things that make up a circut are all very simple. one input, one output, performs a very simple operation. Its actually alot less complicated that a big piece of software. Write a program with 50000 addition, subtraction, and boolean logic statements in it, and you'll find youve got a very simple program. Take a look at an assembly dump for a simple hello world program, and your find that many thigns.

    Invariably, when someone says that engineering works with less complicated things than software, someone always trots out a 747 or a space shuttle by way of a counter example. Its true, these things are well engineered, work right, and are insanely complicated.

    They also took many (10-12?) years to go from idea to working tool, and took billions of dollars to make. Find me a software consumer willing to sit around for more than a year, and I'll be excited. Find me someone that doesnt think 600K for piece of software is insanly expensive and I'll be just as excited. The space shuttle software is often taken as an example of what could be done with good software enginnering, but they dont realize that the documentation budget for the space shuttle software is larger than many software companies entire revenue stream. The space shuttle's software teams customers are people that understand that if the software isnt done right, people and billions of dollars worth of stuff will be destroyed. You know what that means, they have the staff, budget, and time to do things right.

    You cant compare things like the space shuttle to a 6mo project to make data entry program. Dont even bother. And dont think that the problems you have in a 6mo data entry project can in any way be solved by tools designed and proven to work on the space shuttle.

    People have come to expect good software very quickly and for cheap. That comes with some problems, and its very hard to combat those problems. The programmers are often very poorly trained, the budget is tight, and the software is a moving target. I have yet to see a program I started to work on not change substantiatly from the time I started till the end. Spending 2 mo at the beginning designing things to the level of a 747 is stupid, because by the time the item gets out the door, it will have changed from a plane to a boat. that 2 mo was wasted.

  114. Re: reuse and OO by Tablizer · · Score: 1

    What I see is that most "generic" tools become so generic, as to be completely useless. I think one of the reasons Extreme Programming is catching on, is that it does away with this concept and advocates building the simplest thing that will work.

    Would you characterise XP as being against the idea of reuse, at least reference-based reuse?

    I think biz logic reference-based reuse works okay at a smaller scale, such as per module or per app, but not on an inter-app or inter-company basis.

  115. criticism of poetry, rather than poetry at website by rawdirt · · Score: 1

    where's the code?

    I'd really like to see some poems, in order to bracket the criticism that I see there.

  116. Re:Software isn't as much like poetry as he sugges by Tablizer · · Score: 1

    The artistic pleasure comes from realizing what the artist was thinking when the made the art, whether it's an ingeniously simple technique for a peer to peer system, or a woman both in the distance and in the foreground at the same time in a Salvador Dali painting.

    I don't know about Dali in particular (do you have a link to that painting, BTW?), but many artists don't get famous/recognized until *after* they die. They are often characterized as ametures or bad artists by the critics of the day.

    Also, those $5 Sears Painters may be "real" artists on the side, they just do the mass production gig to feed their kids until they are "discovered".

  117. Re: Haiku is for batch files. by SlashChick · · Score: 5, Funny

    "Haiku is for batch files."

    Hehehe...

    for each file in .
    do sed s slash leaf slash tree
    on every line found; done

    Okay, so that's a shell script... but it was just as fun to write. ;)

  118. Re:Yes ee cummings? a girl? by Anonymous Coward · · Score: 0

    huh? when did e e cummings become a girl?

  119. Re:Software isn't as much like poetry as he sugges by Anonymous+Custard · · Score: 2

    ...many artists don't get famous/recognized until *after* they die. They are often characterized as ametures or bad artists by the critics of the day.

    I think we'll see the same with computer technologies when old technologies start to resurface and we can fully understand their capabilities. If I knew which ones, I wouldn't tell you, I'd go and buy the patent on them :-). But you're right, times do change. It used to be that all programmers were nerdy guys without girlfriends. Now it's common for a programmer to be cool and socially (and financially!) well off (although we still have our fair share of nerds, such as myself).

    do you have a link to that painting, BTW?

    Look for "Paranoia (Surrealist Figures), 1944" on this page. It's not his most complicated painting but it is interesting to look at. Lower on that page is his painting "My Wife, 1945", which gives you an idea of how his mind would dart from one thought to another, mixing everything in his imagination.

    If you really want to see how well he could mesh imagery, check out his Metamorphosis of Narcissus. It's my favorite Dali painting.

    those $5 Sears Painters may be "real" artists on the side

    Hey, Sears paintings kick my paintings' ass any day :-)

  120. Win2k by Anonymous Coward · · Score: 0

    Doh, I thought MSFT has released 1999 different version of windows before Win2k!

  121. Re:Feynman by Anonymous Coward · · Score: 0

    Try explaining almost anything to a four-year old:

    "Why is the sky blue daddy?"

    "Well, honey, the water particles in the air have chemical characteristics such that they absorb... heck, blue just turned out to be the best color for it. Don't you think?"

    "I like blue."

  122. Software bridge... by Mazzaroth · · Score: 1

    Customer: I need to cross that river.
    Contractor: OK, let me study your needs, I will come back with a proposal.

    some time pass

    Contractor: Here it is... you need a bridge.
    Customer: Oh! Fine. Can you begin constructing it now? I want it for tomorrow 9 o'clock. Here is $500.
    Contractor: It is impossible! I can't built a bridge for tomorrow! And for $500 dollars!
    Customer: How come, it is just a bridge! There are plenty of bridges - I looked on the Internet! Here is $100 more. And your competition said he can!
    Contractor: My competition said he can??? I'll se what I can do.

    some time pass

    Contractor: Here it is! (showing a fragiler bridge made of ropes)
    Customer: Nice color. Can I cross it with my car?
    Contractor: Of course not!
    Customer: Then it is useless for me! I need to be able to cross it with my car!
    Contractor: This was not in the specs you gave us (with a wide small)
    Customer: OK then, can I cross the Atlantic with it?
    Contractor: You want to cross the Atlantic with a rope bridge?
    Customer: Do you mean your solution is not scaleable?

    and so it goes, and so it goes...

  123. learning methods of other disciplines by cbare · · Score: 1

    The important point to me was about training methods. The training and study methods used in the arts could be a useful addition to the art and/or science of programming.

    I have close friends in medicine. In their training, they are organized into teams based on a specialty, or subspecialty -- pediatrics, ob/gyn, surgery, etc. As a 3rd or 4th year med student, they are at the bottom of the line, under a first year resident, who in turn is under a few more advanced residents, who are lead by the chief resident. At the top, is the attending physician. At first this struck me as an overly rigid almost military style hierarchy, or something archaic like a guild or apprenticeship system. But, one benefit is copious amounts of mentoring along their progression through the hierarchy. This is great for transferring the hands-on practical knowledge and skills that are a necessary companion to theory.

    If you ask me, critical review of your own code with the aid of a talented and experienced developer, or critical review of code written by talented developers is entirely too rare, and most of us would benefit greatly. This kind of thing facilitates the transfer of good ideas and creative energy.

    --
    -cbare
  124. The Rhetorical Paradigm by Interrobang · · Score: 2

    Ok... How much do you know about rhetoric?

    Anyway, what I mean by a "rhetorical paradigm" in terms of programming and programming pedagogy is to attempt to learn and use programming as a speech act, or a linguistic construction, rather than (strictly) as a mathematical or logical algorithm. I'm trying to "code-switch" (if that isn't a horrible pun) concepts in programming to their linguistic and rhetorical analogues (examples -- mind...blanking...), like "grammar," "syntax," "graphemes," "propositions," "declarations," "case," "metaphor," etc., as a means of providing an alternate viewpoint, sort of like the people who approach higher physics through philosophy, if you catch my drift.

    My simplified and slightly different test case (not precisely programming, but a parallel, easier, but similar programme) was to teach myself how to use Unix-like command line syntax to perform various functions inside Linux, while treating the OS as a "language" spoken between the computer and the user. I haven't gone too far with programming itself yet, but that's mostly due to a lack of time and appropriate teaching materials. :)

    If you're interested further, please e-mail me at scripsit@starmail.com, and I'll send you a list of my reading and research materials so far.

  125. Innate understanding of grammar by ktlyst · · Score: 1

    Some of the posts mention that there are a few geniuses of programming and many many plodders, and you can't train the plodders. The geniuses will produce art, the plodders bricks. In my experience, those who pick up on grammar quickly can express themselves more readily in any language, whether artificial or natural. Poetry or code, both do something with words as opposed to merely describing reality, as simple statements do. (This is a branch of philosophy called Speech Acts.) If you can discern the parts of speech intuitively, you can make more interesting and meaningful expressions, because you have more mastery over the parts. Likewise if you have an innate understanding of logic and variables you will likely write code more efficiently as it's less likely to be buggy. Can this intuition and innate understanding be taught? I don't know the answer to this question, but you can teach techniques that encourage exploration of connection. Pythagorus linked astronomy and music and math. Diagramming sentences helps you see that there really is reason to rhyme.

  126. Hey! Hold on just a moment. by jabber01 · · Score: 2

    Fuck You!

    Just because people whose job is not critical can afford to "try something out" does not mean that REAL programs are not engineered - in the truest sense of the word.

    I've worked on code that controls nuclear plants. Believe me, it was engineered. It was simulated. It was revised in design and implementation countless times. It doesn't crash, it doesn't fail, it works better than most people's nervous system.

    Just because your idea of programming entails crap such as shell scripts and "quick and dirty" hacks, does not mean that programmers, REAL programmers, are not engineers, architects, and artists of the most discriminating caliber.

    Perl is a Swiss Army Knife. Slashdot, as a site, is at best, a covered bridge from Madison County. It is not a skyscraper. The people who write what you seem to consider "programs" are nothing more than white collar drones with workbenches in their garage and some power tools from Sears. Yes, any bank teller can go and build a deck in their back yard. This does not make them Professionals. Similarly, anyone with the most basal understanding of a language can put hammer to nail, and bang together a "program". This does not make them a professional Programmer.

    REAL programs run space ships (except those that crash. Those are written by people who carve Indian heads out of stumps with chainsaws), power plants, pacemakers and banks. REAL software, designed and engineered, instead of hacked together between meetings, is as intricate as any tangible piece of engineering. And, as it comes after 50 years, instead of 50 centuries, of practice, I think we're doing pretty damn well.

    The popular opinion of programming, the "shoot from the hip" attitude you claim as prevalent, is a problem. People think we all ride Razor scooters in our offices for God's sake. You and I clearly know better, but the word just isn't getting out.

    Every time some putrid pundit whines about "the IT shortage", I want to scream. There is also a shortage of qualified rocket scientists, and metallurgists - the bolts and rivets on the space shuttle are made by grunts who push buttons on a robot, after all. But the few qualified people that are there, put us on the Moon.

    There isn't a shortage of talent. It's just misplaced. It's thwarted by the weekend carpenters, who once read a "Learn C++ in 21 Days" book, and not command real salaries because they claim to be Programmers.

    There is REAL talent out there, and it usually works for ignorant fucks who choose bravado over skill and common sense. This is why so much retail software crashes at the drop of a hat. This is also why I think we need a "Professional Software Engineer" certification - just as we already have a "Professional Engineer" one. You can do engineering without it, but your work better be signed off on by one before it sees the light of day, and puts the public safety at risk.

    That is all.

    --

    The REAL jabber has the user id: 13196
    What you do today will cost you a day of your life

  127. Wrong analogy by zik0 · · Score: 1

    Programming is more like construction. Bridge building is a specific problem to solve, like sorting. Just like there are different bridge styles (suspension, cantelever, etc.), there are different algorithms for sorting (quick, bubble, etc.) And, just like there is different data to be sorted of varying amounts, bridges are built in different environments and different lengths.

    It also makes a difference if we are talking about large, production, highway bridges built by professionals, or plank-over-the-creek bridges built by the neighborhood kids.

  128. I write both code and poetry also by ZINGYWINGY · · Score: 0

    I can say that I agree. The big thing to understand is that writing is writing is writing. Whether you're writing essays, poems, music, code, recipes, fiction -- it's all vaguely the same process: put down the marks on the page (screen). Get up from your chair, go to the water cooler, think about it some more. Get inspired and rearrange the symbols in a new and better way. When you're finished some entity comes along and reads what you have written, maybe acting on it or just imagining what you've depicted. Whether the thing that reads what you've written is a computer or a person doesn't make a whole lot of difference.

    Nowadays I don't like people much so I am writing more for computers :-)

  129. Re:Software isn't as much like poetry as he sugges by ilyanov · · Score: 1
    Can code be poetry? There is a secret place where I sometimes find myself, its a magical place. A serene calm comes over me when I am there, the soft purring of my machig, the gentle tapping of my keyboard hardly distracts. There are brief and sublime moments when logic is no longer requires concious effort, it intuitive, and transparent, like breathing, where my instructions to move electons from one gate to another are in harmony. I have often tried to capture these moments, so that I can set them down in words but perhaps rightly, they are like the dreams you have just as you slip into slumber, try to hold on to them and you find yourself awake. I usually find these moments when I can abstract out arbitrary number of classes and substitute an interface, thereby achieving symmetry. I feel the poetry in code comes from some form of symmetry, where you have taken a number of seeming unrelated concepts and constructs and compress them into a singe idea; like einstien's mass energy concervation principle (in itself a supreme example of polymorphism or haiku poetry)

    I think the point the poet-programmer is trying to make is that though the set of words are finite, the reality the poet seeks to describe is infinite and ever changing. If code is another way of expressing something about the world we live in, then surely even a lowly, lonely programmer is a poet for there will ever be newer ways of putting words togather to create beuty.

    --

    life is all about searching and sorting

  130. You are the only one. by jotaeleemeese · · Score: 1

    Any task well done pleases an specialist of the same field.

    --
    IANAL but write like a drunk one.
  131. Grammar Police by zvogt · · Score: 0, Troll

    You struck upon one of my pet peeves.
    (One I had long forgotten.)
    Your sentence should read:
    "six LINEAL feet",
    not "linear".

  132. Real Programming is Evolution not Engineering by redelvis · · Score: 1

    I started off my career as a Software Engineer with degrees in both Computer Systems Engineering and Computer Science, but over the years I've feel the best software I develop is through an evolutionary process rather than a rigid design everything first based approach.

    Too often after spending weeks nutting out a design document with UML, dozens of use-cases, once you start programming and running initial versions of the software, the design will quickly become invalid and the design will be refactored to work better.

    The reason this invariable occurs is that software processes are inheriently complex systems. No matter how well thought out a design, it is impossible for anything but the most trivial of systems to envisage all possible states the program could end up in - this is because software processes are driven by dynamic input that is hard to predict. This is why the best understanding of how a program should work (and how it currently does not meet design requirements) is during the runtime execution of a program where it's dynamic behaviour can be examined.

    This is why I feel the higher quality software I have developed is usually the result of software where I start out with a preliminary design - don't try to solve everything up front, just spend an hour or two outlining a high-level approach. I usually break the problem being solved down into a series of simplier problems - program to solve them, profile the dynamic behaviour of the program to see how well it solves the program, then go through an iterative process to improve and extend the program.

    This is why writing good software is very different to designing a bridge. You can't iteratively design a bridge - it needs to be well thought out before you order the bill of materials and get a large workforce moving on it. However I feel that trying to fully work out a design of a software process before even trying out a simple version of it to see it's runtime behaviour can often be wasted. The design will rarely handle every possible dynamic situation the program can end up in. An iterative design-program-test process is the more efficient way of designing software.

  133. Oh no... by jotaeleemeese · · Score: 1

    Another tear-jerker of techno-serfs pretending that slaving in a keyboard is somehow artistic.

    Most unpleasent.

    When we program we invent something new every time!

    I wish we had payed more attention to concepts like code reuse.

    And then the cavaliers that say it is better to be high in drugs in opossition to apply sensible Engineering techniques to software design.

    If /.ers are the hope of a sane technological future I am betting in favour of Palladium, MS and the DMCA....

    --
    IANAL but write like a drunk one.
  134. Who lit the fuse on your tampon? by skintigh2 · · Score: 1

    Sheesh.

  135. Form and Function by Anonymous Coward · · Score: 0

    You can argue about software process or design but that misses the point. Software that is well designed, bug free, and works well may not necissarily be beautiful. However, functionality and beauty do not have to be mutualy exclusive. There are few things, even bridges, that are both beautiful and functional. This also applies to software. Beautiful and functional software is not a necissary goal, but it is a worthy goal.

  136. Re: reuse and OO by richieb · · Score: 2
    Would you characterise XP as being against the idea of reuse, at least reference-based reuse?

    Not at all. XP is for re-use. But in XP you discover reuse through refactoring. So, in XP you don't develop the "general problem solver", rather you write code to solve your current problem.

    When you get to the next problem and you see similarities, you factor the common code out.

    So with XP you not only get re-usable pieces, but you get pieces that are actually re-used.

    --
    ...richie - It is a good day to code.
  137. Re: your point. by Anonymous Coward · · Score: 0

    We've only been building aircraft for 100, years, spacecraft for about 50. If they had software's abysmal record, noone would ever fly...

  138. AppleTalk? by ffatTony · · Score: 2

    Acronymfinder gave the following definition for AARP: Appletalk Address Resolution Protocol

    I didn't realize famous actors cared about appletalk! They must be the only ones.

  139. Why is Peter Galbraith famous? by SpringRevolt · · Score: 2, Informative
    Sadly, I am a little late to see this posting, here here you go nevertheless....

    Strangely, IMHO, missed by the slashdot editors (on second thoughts, perhaps I am not so surprised) and the article itself was the paper for which Peter Galbraith is famous. The paper is Lisp: Good News, Bad News, How to Win Big, which includes the section "The Rise of Worse is Better" which he wrote while at Lucid.

    Peter Galbraith was respected and quoted by JWZ (or lucid/xemacs and Netscape fame).

    It was the ideas in Worse is Better that ESR rehashed and become the Cathederal and the Bazaar.

    i.e. Linux was developed using the "New Jersey" approach and GNU was developed using the MIT approach: The folowing passage illustrates this:


    Two famous people, one from MIT and another from Berkeley (but working on Unix) once met to discuss operating system issues. The person from MIT was knowledgeable about ITS (the MIT AI Lab operating system) and had been reading the Unix sources. He was interested in how Unix solved the PC loser-ing problem. The PC loser-ing problem occurs when a user program invokes a system routine to perform a lengthy operation that might have significant state, such as IO buffers. If an interrupt occurs during the operation, the state of the user program must be saved. Because the invocation of the system routine is usually a single instruction, the PC of the user program does not adequately capture the state of the process. The system routine must either back out or press forward. The right thing is to back out and restore the user program PC to the instruction that invoked the system routine so that resumption of the user program after the interrupt, for example, re-enters the system routine. It is called PC loser-ing because the PC is being coerced into loser mode, where loser is the affectionate name for user at MIT.

    The MIT guy did not see any code that handled this case and asked the New Jersey guy how the problem was handled. The New Jersey guy said that the Unix folks were aware of the problem, but the solution was for the system routine to always finish, but sometimes an error code would be returned that signaled that the system routine had failed to complete its action. A correct user program, then, had to check the error code to determine whether to simply try the system routine again. The MIT guy did not like this solution because it was not the right thing.

    The New Jersey guy said that the Unix solution was right because the design philosophy of Unix was simplicity and that the right thing was too complex. Besides, programmers could easily insert this extra test and loop. The MIT guy pointed out that the implementation was simple but the interface to the functionality was complex. The New Jersey guy said that the right tradeoff has been selected in Unix: namely, implementation simplicity was more important than interface simplicity.


    i.e. Linus used the "Worse is Better" method and RMS (ahem... :) did not, thus the GNU Kernel, however good it is is delayed somewhat while they Do The Right Thing.

    I encourage you to read the whole of Good News, Bad News - it contains insightful material on things other than Lisp (I should declare an interest in that I am a scheme programmer).

  140. Recursion is ugly by Vagary · · Score: 2

    The beauty of recursion is something as natural and poetic as music to me.

    Actually I just finished a grad-level course in Denotational Semantics of Programming Languages, and if there's one thing I learned, it's that:

    Recursion is ugly

    It's shocking how much complexity recursion adds to the mathematical description of a programming language. When I first learned functional programming I thought "this is so beautiful, it's just like mathematics". Well yeah, except that mathematical functions don't have to do anything! Recursion is such a pain in the ass, I think I'm going to avoid writing programs that use it on esthetic grounds.

    Mind you, the only thing uglier (much uglier) than recursion is local variables...and I think I have to choose one. :)

    1. Re:Recursion is ugly by Anonymous+Custard · · Score: 2

      It's shocking how much complexity recursion adds to the mathematical description of a programming language.

      I never said recursion wasn't completely annoying when trying to program it, but I still believe it's beautiful...once it works :-)

  141. Birds of a feather, flock together by Vagary · · Score: 2

    I believe the true link between Computer Science and English Literature / Creative Writing is that both are lacking in academic merit.

    CS, at least the way it's taught around here, is basically the bastard child of Mathematics and Engineering -- lacking the rigour of either. It's mostly populated by students who either didn't get the memo that Commerce makes more $ or don't have the necessary social skills. And the rest of the students went into it because they want to make video games or they decided that it was time to stop using their 1337 5k1llz for evil.

    From the opposite side of the coin, English has evolved into much more meaningful disciplines like Cultural Studies without completely killing off the original species. So now students who aren't actually interested in the societal questioning of the real liberal arts can get a degree for reading lots of books. Or if you think you're a good writer but realise that you'll never be good enough to do it in the wild, you can get a degree in creative writing. Never mind that almost none of the successful writers working today wasted their time with such a hypocratic undertaking.

    Both degrees are for people who don't like reality but want to pretend they can be successful. Both are for people who can't produce work that normal people can understand. Both practices consist of little more than mental masturbation.

  142. Re: Haiku is for batch files. by Reziac · · Score: 2

    [laughing] And just think of the consequences if your syntax is faulty: "You've got an extra syllable in line two, so don't be surprised when it deletes all your files!" or "There's no mention of nature -- so of *course* it got stuck in a loop!"

    Of course, that's nothing compared to what happens when you omit a semicolon in your epic source.. the hapless actor performing it won't know where to stop, and may well fall off the platform and break something!

    --
    ~REZ~ #43301. Who'd fake being me anyway?
  143. As a civil engineering student... by JoshWurzel · · Score: 1

    I find this kind of insulting. Bridges and software are equally difficult to design, just in completely different ways.

    Try writing a program using ONLY the objects and calls given by Microsoft/Apple/whoever and not creating any of your own objects, functions, or GUI widgets. Have fun writing anything more complex than a non-GUI calculator.

    Likewise, try building a bridge where instead of the limited set of member shape/sizes we currently have, you have an infinite number to select from, and your boss expects you to use the least amount of steel possible to save $$$. You'd be designing forever.

    At my school, Electrical/Computer engineering is the hardest engineering major to get into, while civil engineering is the easiest. The programmers think that this is because they're so much smarter, when in reality its only because the job market wants programmers right now and pays more than civil engineering does. I've put assignments in front of programmers who think they're god's gift to MENSA and seen them be stumped by STATICS (i.e. high school physics problems, F_net = 0).

    Bridges are just as unique as software programs. Every one must be uniquely designed for a loading pattern, soil profile, aesthetic requirements (something I almost NEVER see programs designed for), material limits (can't always use just anything), political maneuvering, earthquake probability, wind strength, and even geology.

    Civil Engineers Sound Off Like You've Got a Pair! Don't take this garbage from programmers. We may make less money, but we're far more attractive and don't smell nearly as foul. Not to mention more modest ;-)

  144. I'm calling Rat Shit on this one by Anonymous Coward · · Score: 0

    "We've only been building software for 50 years, and almost every time we're creating something new."

    I would like to see a list of people here who have ever created anything new with software (and what they did.) A program, an algorithm, a formula, a design pattern, ANYTHING.

    Thank you very much.

    It's only been in the last 50 years or so that bridge building innovations have slowed down. It only took 30 years or so for software to level off.

  145. In support of Peer Review (Critique) by harborpirate · · Score: 1

    I agree that peer "Code Review" is a very important process. We've implemented a code review where I work, and it has been very successful. In fact, I'd recommend using a similar process to developers in almost any situation.

    Attendance to our code review is not mandatory (unless you are submitting code), but we really encourage any developer who isn't in "crunch time" on their particular project to attend. Our code review really incorporates all these ideas:
    1) Peer review of code going into the testing environment.
    2) "Idiot check" testing by peer developers to try and break the code while still in the development environment.
    3) A place to showcase new, cool code - code that accomplishes a new goal, or accomplishes an old goal in a significantly better way.
    4) A place to describe new processes and/or methodologies that are being put into place for development. (For instance, one of the first things I did when I arrived was spearhead the use of source control software through this process.)
    5) A place to fawn over and discuss the latest software and hardware gagets. (mimio started showing up everywhere after one of these)

    The only thing that does not go into code review that makes it into the testing environment is "copy n' paste" code - code that is almost identical to another piece that has already been written. (A lot of our ASP pages are like that - call some stored procs, has a form, dropdowns)

    I can honestly say that code review has made me a better programmer. First of all, it puts extra sets of eyes on your code - and that makes a difference - I guaruntee people will spot things you did wrong. Secondly, it gives me a chance to see other code that is new and well written. Then I can incorporate those ideas later on in my own code.

    Furthermore, it prevents inferior code from going into the user acceptance testing environment and, consequently, the production environment. Every company has a few developers who write second rate or below standard code, and this weeds that code out before it can get in and screw up or slow down the system.

    Now, obviously, every developer does not have time to step through the logic on every piece of code that comes through. Thats not really the idea though - thats the developers job. Mostly readability, the use of standard naming conventions, and obvious problems are the sort of thing that is looked for. "Can I debug and/or modify this code if I need to without your help?" is a question I ask myself when reviewing. Generally, the only stuff looked at in heavy detail are pieces that are experimental, bottlenecks, or intricate.

    It only takes up about 2 hours of my week, and it makes all the code that goes into our system significantly better, as well as improving our programming skills. All in all, I'd say its a very worthwhile use of our time.

    --
    // harborpirate
    // Slashbots off the starboard bow!
  146. Program verification - free software by Animats · · Score: 2
    If you want to see a more modern implementation (1999) of many of the same ideas, see Extended Static Checking for Java, from the now-defunct Digital Systems Research Lab. You can even download their system, as well as read the papers. They knew about our stuff, they're good people, and I had real hopes for that effort. But the Compaq acquistion of DEC, then the HP acquisition of Compaq, killed that lab off.

    You can do machine verification for Pascal, Modula, and Java, and even some machine languages, but C and C++ are just too ambiguous to formalize. When C took over, the formalists just threw up their hands and gave up.

  147. Re:aesthetic beauty OT: sig reply by Anonymous Coward · · Score: 0

    what on earth does the S in RTFS on one of the thongs mean, read the fecking snatch?

  148. Software is thought. Bridges are matter by PinglePongle · · Score: 2

    The difference is not so much in how familiar we are with constructing bridges as in the fact that constructing a bridge is dealing largely with matter. While dealing with matter involves many challenges, far more of the parameters are relatively fixed - mass, tensile strength, density are all within well-understood boundaries.

    Compare this with software. Often, the basics from which we construct software, as well is it's boundaries and requirements, are nowhere near as well understood. Often, they consist of other abstract constructs - business rules, corporate policies, usability guidelines. They might be instantiated in some way - test cases, software components, interfaces to other systems. In some cases - e.g. embedded software - the boundaries are with tangible objects.

    One could thus suggest that the design of a bridge and the design of software share many attributes - they are both largely involved with abstract concepts. Bridge designers work with numbers and formulae representing the real world properties of their materials, requirements etc. Software designers deal with abstract representations of the real world for which their software is intended.

    However, there are also many differences.

    Bridge designers have usually got a larger body of previous work from which to re-use solutions. While the Patterns movement is making headway, and there is an increasing body of informal knowledge, we developers still have to re-invent a lot of wheels; for many domains, there's often simply no published information available.

    Everybody knows what to expect from the bridge, and the outcome of building the bridge is usually pretty unambiguous. It's rare for the people paying for bridges to disagree about it's purpose, and I know of no occasions when the marketing director decides - halfway through construction - that the bridge needs to cater for trains as well as cars.
    The intangible nature of software means that it's hard to explain what the software "does" until it's finished. This in turn frequently leads to conflicts between stakeholders - "it's an order processing system !" - "no, it's a sales force automation tool" - "no, it's an interface to our accounting software". This is why most software methodologies contrate on either improving the quality of the specification and the way it is communicated (e.g. the Unified Rational Process), or on producing tangible results early in the process, and making it cheap to change (eXtreme Programming, for instance).

    Once a bridge design is complete, the "construction" phase is typically conceptually straightforward - there are a lot of practical problems at a micro level, but the purpose of the design is to make sure that two teams starting at opposite sides of the river meet in an agreed place.
    With software development, I have found that conceptual problems extend all the way from the high-level design to the detailed implementation. No matter how well-thought out your object model, there are always details which are conceptually hard to solve. It's not unheard of for 2 software components which were designed to be compatible to fight like cat and dog when introduced to each other in the wild...

    I believe that trying to compare software development with other disciplines is futile. Software development is a unique discipline, with many disparate specialisations and a short history. It combines craftmanship with engineering disciplines, math with instinct, and no two projects are ever identical. That's why it's exciting (to me, at least), but that is also why it is such a difficult thing to do well.

    --
    It's all very well in practice, but it will never work in theory.
  149. Programming seems to be most efficient in..... by artsygeek · · Score: 1

    Well, I'm working on a project to teach computer programming as if it were a foreign language. It seems that grepping a computer program as one were applying a certain set of grammar rules in a written language, is in fact more efficient for those "verbally oriented". The corollary to this is that teaching computer programming as a branch of mathematics is best for the mathematically oriented.

  150. Analogy Considered Harmful? by Hognoxious · · Score: 1

    I think that software development is unlike civil engineering, and attempts to draw a parallel often lead to false conclusions; a few inches below pointy hair is the main danger zone.

    The fundamental difference is that physical, tangible products like bridges have form and substance. Software (or a song, or a novel for that matter) is pure form. Substance is a lot more difficult to change - there's a raw material cost, and it's subject to the laws of physics. Form isn't. That doesn't mean changing it's free, but it will usually be cheaper. Those pesky laws of physics are why you can't build a bridge anyware near as badly as you can create software; it would fall down before it was completed. We've all criticised code only to be told, in a whiny voice "well, it works"[1]. No laws of physics to bring it crashing down - just a different screen resolution, an address with an alphanumeric post code, introduction of the Euro, an invoice with 'too many' items...

    Ever fought your boss to rewrite something, when he thinks it would be better (i.e. quicker/cheaper) to modify the existing one? He's subconciously thinking about reusing the bricks from a knocked-through wall to build a patio. But there's no raw materials in a program. If you're thinking "But surely code is reusable?", you're right - but only if it's written the right way. You can recycle the form, but only if it's good form. OO is neither a sufficient nor a necessary condition for this.

    Moving on to the poetic side of things, I often find that if I get the concept right, the code almost writes itself. I have written programs that should have taken a week in one day - but only by spending the first four days thinking about it. I've even been criticised for "not typing fast enough", and for not writing "very many programs" and that they were "surprisingly short" - even though they had better functionality that the crawling horror they replaced. I've also had to modify code where the programmer clearly didn't get the concept right; I think we all recognise that when we see it.

    As to the bureaucracy side of things - I couldn't agree more. Partly the reason is as suggested - it means manglement can pretend it's in control - but I think a lot of it's driven by the misplaced analogy above. Moving or resizing a door is expensive, so it needs to be right to start with. Moving a GUI component isn't. In the former case, the overhead pays for itself, in the latter it doesn't. As to standards, I've never come across any that 1) when obeyed will always produce good code 2) when disobeyed will always produce bad code (my own personal ones excepted, of course). [1] Better than "well, it compiles", I suppose. Just.

    --
    Confucius say, "Find worm in apple - bad. Find half a worm - worse."
    1. Re:Analogy Considered Harmful? by pla · · Score: 2

      Wow, if I could mod in threads I posted in, you'd definitely get a "+1 insightful".

      I think you have really nailed the key difference, here. Kudos.

  151. if programming is like poetry.... by zelphi · · Score: 1

    ...I think I'm Dr. Seuss.

  152. cool by Anonymous Coward · · Score: 0

    That guy is cool. I like that idea poetry and code, code as art.

    Being a lowly self-taught programmer I have learned to code by instinct and intuition. I have written programs purely in hexadecimal on an x86 just for fun to see if I could do it. Mostly I stick with C and Assembler. I also love Python and find a use for that as well.

    Artists use mathematics too. Perspective, for instance. Look at Da Vinci's work. Lots and lots of mathematics in there. Was he an engineer or an artist? I say he was a true artist. Much of the stuff you do as a graphics programmer is also taught in Art schools but with a different perspective on it's application. Today with computer art it's all the same thing really. Instead of learning the Phong algorithm you learn to apply phong shading to your output. Etc etc.

    I think they should do away with Computer Science and just merge it all into Computer Engineering. Engineering in my opinion is an art. You are highly trained in math and science to create solutions to problems. Same thing with programming. You draw on science and mathematics but the end result is a piece of art, a listing of machine instructions that perform operations. The arrangement of the instructions are like atoms in a molecule. Arrange them one way you get a stable atom. Another way you get an ionized atom. Just a stupid analogy not meant to be a nobel prize winning speech mind you.

  153. Re:Software isn't as much like poetry as he sugges by Anonymous Coward · · Score: 0

    Yeah, bad programming is always identifiable: the fargin thing doesn't work, crashes, or gives the wrong result.

    You can not tell me you can look at highly optimized assembler code and instantly say 'oh this is bad code' or 'oh this is good code' you have to study it inside out and count it against what is true about the underlying machine architecture. And of course it has to work correctly. 'Good' code is both optimal and works correctly. But that is to the machine. It is bad if you can't friggin read it or follow it in any way (no comments or anything).

    In the end though a program is only bad when it fails to work or do what it was created to do. If it solves the damn problem but is written like crap it still works and therefore it can't be a *bad* program, just a really crappy written/slow program.

    The same thing with a bridge. A bad bridge is one that falls apart like that one they built and it shook up from harmonic vibrations ( I dunno what I saw it on discovery). It was beautifal design and wonderful except it failed to take into account the vibrations of the wind that caused it to oscillate out of control and fall apart.

    'BAD' is really a matter of personal taste in art. I consider bad code any code that is really sloppily written and hard to read/follow. Yeah I think Quake 2 is BAD code but a GOOD game! Don't care if it's good and works right if it has absolutely no comments and very poor structure it's bad. And then I think much music and art and literature is bad because of this or that. No doubt you'll think the music I like (heavy metal) is 'bad' and 'evil' and 'satan' but I think it's funny as hell and it cracks me up.

    Ok so from one aspect we can say good code must work correctly and run optimally on the machine. A matter of knowledge and engineering, not really artform. Thus programming is fairly mechanical, hence why compilers work. Except compilers never generate truly optimal code but must brute force alot of things because they can not understand concepts not programmed in them.

    But from algorithm perspective, it is more an artform of combining math and science togethor to derive a solution to problem. Further artform is to code it optimally for the target machine. Most compilers can not produce perfect machine code but a good programmer can and it is more of an artform and experimentation than a cookbook I know i have done it for along time and there are no magic books to help you write perfect code in machine language for say a pentium.

    Design is a true artform. Hacking out code for the designer is just mechanical. Not really much creativity in being a grunt coder. You just take the design and whatever part given to you and code it. As long as it works in requirements you did your job.

    But all work done by theoreticians in my mind is artwork. I think even programming is artwork in the sense of poetry. Now I am losing you but, every letter you type, each whitespace, your comments, everything that way is an artform to me. That is the poetry to me hehe. Not really the final machine code instructions although I like to think computers are poetic too in a monotonous way.

    Depends on how you look at things but I consider programming to be more of an artform than a science. Despite all the crap I ranted about, programming almost always comes down in the end into knowing nuances of your API and OS and knowing how to balance all this stuff togethor to work correctly. Even though manual says it works this way it never really does in reality. My experience with Windows and APIs and software is there are always funny exceptions you figure out by analyzing and testing to find solution to. Not in school! You do it by performing and practicing like a musician does with a guitar. Hence it is an artform not a science. And art relies heavily on science too, but it is not science. Yes it does go take some art classes it touches on all the same topics in science except with a different perspective on things.

    Blah!