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.""

193 of 385 comments (clear)

  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 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 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?
    2. 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
  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 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?

    2. 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:I wonder what would happen... by crashandburn99 · · Score: 2, Funny

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

  5. 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
  6. 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 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.

    5. 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
    6. 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.
    7. 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;
    8. 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.

    9. 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.

    10. 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.
    11. 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.

  7. 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...
  8. 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 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.
    6. 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.
    7. 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."

    8. 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.

    9. 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
    10. 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
    11. 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.
    12. 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
    13. 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.
    14. 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.
    15. 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?

  9. 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 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).

    2. 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....
    3. 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....
    4. 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)

    5. 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.
    6. 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
    7. 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....
    8. 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.

    9. 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.

    10. 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).

    11. 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).

    12. 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

    13. 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.

    14. 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.

    15. 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....
    16. 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.

    17. 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....
    18. 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!

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

      Please read this. It is my comments to TLoLA.

    20. 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
    21. 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.

    22. 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
  10. 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
  11. 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 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

    3. 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.

    4. 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.

    5. 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.

    6. 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)
    7. 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.

    8. 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.

    9. 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/
    10. 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!
    11. 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.

    12. 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?
    13. 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."

    14. 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...
    15. 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.

  12. 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 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).

    2. 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."
    3. 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.

    4. 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)
    5. 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."
  13. 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 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...
    3. 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.

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

    It's quite obvious actually!

  15. 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.

  16. 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
  17. 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

  18. 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.

  19. 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 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?
  20. 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
  21. 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 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.
    2. 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.

  22. 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.
  23. 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.

  24. 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 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?
  25. 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.
  26. 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]

  27. 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 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?
  28. Gimme Perl poetry any time! by tuxliner · · Score: 2, Informative
  29. 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?

  30. 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 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.

    2. 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.

    3. 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.
    4. 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.

    5. 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.
    6. 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.

    7. 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

    8. 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?

    9. 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..

  31. 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.

  32. 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 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?
    2. 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
    3. 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.

  33. 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...

  34. 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/
  35. 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 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
  36. 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.
  37. 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
  38. 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
  39. 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
  40. 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"
  41. 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.

  42. 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.
  43. 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.

  44. 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.

    --
  45. 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)

  46. 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 iabervon · · Score: 2

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

    2. 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?
  47. 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.

    --
  48. 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.

  49. 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.

  50. 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 ;).

    --
  51. 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.

  52. 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...

  53. 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.
  54. 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 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.

    3. 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.

    4. 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.
    5. 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?)

  55. 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.

  56. 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.

      --
  57. 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
  58. 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.

  59. 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.
  60. 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?

  61. 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.
  62. 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.

  63. 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. ;)

  64. 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
  65. 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 :-)

  66. 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.

  67. 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

  68. 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.
  69. 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.

  70. 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).

  71. 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 :-)

  72. 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.

  73. 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?
  74. 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.

  75. 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.
  76. 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.