Slashdot Mirror


We Really Don't Know Jack About Maintenance

davecb writes "The ACM has been kind enough to print Paul Stachour's and my 'jack' article about Software Maintenance. Paul first pointed out back in 1984 that we and our managers were being foolish — when we were still running Unix V7 — and if anything it's been getting worse. Turns out maintenance has been a 'solved problem in computer science' since at least then, and we're just beginning to rediscover it."

260 comments

  1. After the software is written it gets maintained by MichaelSmith · · Score: 0

    And that means the validation people run through their test book and create maybe 1000 or 2000 bug reports. These bug reports bounce around through the development teams acquiring cruft along the way. When the bug eventually stops bouncing somebody might have a go at fixing it. So they change something and if they can't see the bug anymore they go cvs commit right then and there. At the same time the other 1999 bugs are bouncing around, looking for a home.

    At the end of the (as we call it) bug fixing process the original software doesn't exist in its original form. It appears to pass most of the test sbut you would not be advised to lean against it or anything because something else might break.

  2. Wait a second... by Anonymous Coward · · Score: 1, Interesting

    Doesn't modular programming solve this problem? If you design the core software correctly from the get-go to be truly modular, then any changes in the future are a matter of swapping in or out desired modules, and snapping on new ones?

    Maybe I'm too naive, but is there REALLY that much spaghetti code these days?

    1. Re:Wait a second... by hedwards · · Score: 2, Insightful

      I take it you haven't noticed the 6 decade wait for a 64bit version of flash or the countless security bugs that resulted from somebody not thinking things through in an analytical manner before actually writing the code.

      Sure there's going to be bugs and exploits, and it can take a long time to port code, but a lot of it is self inflicted because of changes to the objectives or a failure to ensure that the code was properly engineered, commented and audited.

      Properly formatted and written code should be relatively easy to maintain or at least not a total nightmare.

    2. Re:Wait a second... by Darkness404 · · Score: 1

      6 decade wait? We have been waiting 60 years for a 64-bit version of Flash?

      Modular design can really allow for fewer security holes, along with making everything more maintainable for developers. For example, if the people who make the OGG codecs fix security holes an audio editor doesn't have to rewrite their program to use the new codecs. The problem really lies with bits of incompatibility technology, Flash is a great example of it, while Firefox, Chrome and Safari all have good track records on security, the fact that Flash seems to have a many-month lag between a vulnerability being exploited in the wild and a fix, mixed with how about 95% of people are using an outdated version of Flash leads to many preventable security holes of Flash was open-sourced or released fixes more frequently. But on the whole, modular design has eliminated many security holes, especially for smaller programs lead by one or two people because they can just update the libraries and re-plug them in and have the program work with little to no maintenance by the developers of the small app.

      --
      Taxation is legalized theft, no more, no less.
    3. Re:Wait a second... by NotQuiteReal · · Score: 1

      6 decades?

      Hundreds of millions have been born and died in that time period.

      Carpe Diem!

      --
      This issue is a bit more complicated than you think.
    4. Re:Wait a second... by Ethanol-fueled · · Score: 1

      6 decade wait for a 64bit version of flash

      That may have more to do with 32 vs 64 bit market share than the inherent bugginess of the software. I couldn't quickly find any fancy bar charts but the 64-bit market share is growing but not yet at a critical point and so there could be less motivation to develop the 64-bit flash, especially since you can run 32-bit browsers on 64-bit operating systems*

      * But that's a Windows-centric point of view, don't yet know the NIX-centric workarounds. Chime in, anyone?

    5. Re:Wait a second... by mlts · · Score: 3, Insightful

      Coding is important, but what is also important is program design and architecture. This isn't thought of that much as a smaller utility that "scratches an itch" just needs to be coded.

      However, larger projects, and projects with any security needs at all [1] need to have a lot of time put in to design security before a line of code is written. For example, a Web browser should see if it can run under a lower privilege context without preventing the user from downloading files. A Web browser plugin needs to assume any code it gets from a website is likely tainted, treat the code as suspect, and run it in a sandbox (CPU/filesystem/RAM limits, preferably enforced by the OS, and even better, able to have the code run in a limited context other than the user.)

      Compartmentalization is important, so instance of a program cannot interfere with another. This way, something that mucks with a cache directory only affects that instance, and cannot modify another. Same with a thread of execution needing protection from others that might get code injected into them.

      Separation of code modules that are vital to security is critical. This way, extreme code review can be focused on the security critical modules, while other modules (such as the one that renders stuff) can be reviewed, but it wouldn't have the extreme focus as the parser of incoming code.

      This stuff is vitally important, and can't just be bolted on without a complete rewrite. It has to be part of the architecture from the first line of code on. However, there are two benefits from having this integrated into a core program design. The first is that the security critical code is in modules that can be thoroughly scrutinized and audited. The second is that the program will be far more resistant to attack, and if an attack is done, it can be fixed far faster than a product that has no security in its core design.

      [1]: One would be surprised at what programs need security. Anything touching the Internet like a browser plugin, mail filter, or even a MUD server are just as important to have security factored in as a SUID root utility.

    6. Re:Wait a second... by Anonymous Coward · · Score: 0, Interesting

      Modularity is one of those things that sounds great when you're an academic, when you're a manager who has never touched code, or when you're an accountant.

      Such people think of real-world code as being completely interchangeable. To them, it's nothing more than the nuts or bolts they'd see at a hardware store. They think that programmers just grab some of these "modules", some of those "modules", put them in the same source file and BAM, we have working software.

      Of course, reality gets in the way and makes their theoretical world disappear instantly. Such modularity typically comes at a great cost. Even when using dependency injection and techniques like that, modularity is always a pipe dream.

    7. Re:Wait a second... by cayenne8 · · Score: 3, Insightful
      I can also add 2 words the add to the problem as much as anything else mentioned so far:

      Scope Creep

      --
      Light travels faster than sound. This is why some people appear bright until you hear them speak.........
    8. Re:Wait a second... by jaxtherat · · Score: 1

      Have a look at the code for the source engine. The code for this allegedly awesome engine if full of spaghetti and brain fail.

      --
      http://www.zombieapocalypse.tv/
    9. Re:Wait a second... by camperdave · · Score: 1

      Hundreds of millions have been born and died in that time period.

      Actually, the population of the Earth has at least doubled in the past 60 years, so that's billions that have been born and died without having a 64bit version of flash.

      --
      When our name is on the back of your car, we're behind you all the way!
    10. Re:Wait a second... by Belial6 · · Score: 2, Insightful

      Or in as in the case of many projects I have been subject to, Scope LEAP.

    11. Re:Wait a second... by Opportunist · · Score: 2, Interesting

      No modular system survives version +0.1.

      You have a perfectly modeled modular system, and you really think you thought of everything. Only to notice that someone comes up with some problem you didn't take into account. So what do you do? Redesign the whole modular system, unravel all the finished modules and rework them to fit the new interfaces you have to design? Nah, we can handle a single nonstandard data handoff...

      Do I have to go on?

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    12. Re:Wait a second... by Anonymous Coward · · Score: 0

      Some Linux distros have shitty/missing 32-bit back-compat. Otherwise nobody cares about 64-bit flash.

    13. Re:Wait a second... by Blakey+Rat · · Score: 1

      All video games are like this to some extent, except perhaps the longest-lived MMOs (which have probably evolved beyond that simply out of necessity.) At least, all the ones I've perused the source code for, which is a lot.

      I blame hard deadlines and crunch time, but I'm not sure if that's the real cause, or if it's just a different class of programmer writing video games. The excuse *used* to be optimization, but I don't think that applies nearly as much anymore.

    14. Re:Wait a second... by Dutch+Gun · · Score: 3, Interesting

      I blame hard deadlines and crunch time, but I'm not sure if that's the real cause, or if it's just a different class of programmer writing video games. The excuse *used* to be optimization, but I don't think that applies nearly as much anymore.

      I think the game dev industry is growing up. Part of it has to do with the fact that a mature codebase is pretty valuable nowadays, and modern games are so complicated, those who don't take good software development processes seriously end up with a technical disaster, and it tends to show. It's very rare for a game to be written completely from scratch these days. When I was started, it wasn't all that unusual to start over for each new successive generation of games. Some of the base libraries I'm working on are nearly a decade old - about when the company I currently work for was founded. They're well-tested and highly optimized. We'd be insane to toss these out and start over.

      You also have to differentiate between engine code and game code. By it's nature, game code is essentially a one-off project - essentially single-purpose code. Keep in mind that unlike commercial projects, if the requirements for version 2 of the game change, the code can be rewritten. There's no need to preserve old features or functionality unless the new game requires it as well, as each version of the game is essentially a new fork. To some, it looks sloppy to see hard-coded gameplay features, but it makes a bit more sense when you think about it in that light. MMOs do have it a little harder in this aspect, being so long in continuous development, so we have to think about things like preserving file format compatibility and such, similar to other commercial apps.

      Engine code is typically treated quite a bit differently. It has to be much more robust than typical game code. A number of games will be using it, so the code has to be both modular and highly optimized, as well as being fairly general purpose. Obviously, that's a fairly difficult combination, so developers typically put a lot more effort into engine code, and tend to be more protective of it.

      Oh, and good heavens, yes, we still have to optimize the hell out of our code (oddly enough, I've been doing that all last week). It just happens more often at the architectural and algorithmic level rather than at the functional level like it used to. It's true that we can get away with a lot more, but... we're also doing much more complicated things.

      --
      Irony: Agile development has too much intertia to be abandoned now.
    15. Re:Wait a second... by Tanktalus · · Score: 1

      I run 64-bit flash, you insensitive clod!

      Meme aside, I am. And, before it came out, I was running the 32-bit flash on Linux/AMD64 just fine, even with 64-bit browsers. At least under firefox. Under konqueror, konqueror would crash sometimes, though I've not had that crash in a while now - probably fixed in KDE 4.3.3.

      FYI: nspluginwrapper is what you need to run 32-bit plugins with 64-bit firefox (and konqueror, and, presumably, chromium).

    16. Re:Wait a second... by shentino · · Score: 1

      I'd guess it's that the PHB's, in all their imperial expertise, do not understand the need for abstract things such as commenting and modularization and whatnot, and instead opt to be hardasses about the one thing they DO know...numbers.

      Faced with the bosses breathing down their necks to shit code out as fast as they can, is it any wonder that they are sloppy? Any programmer in an environment like that who DARED to suggest that they needed good design would probably get fired.

    17. Re:Wait a second... by geminidomino · · Score: 2, Funny

      Tell me about it... There's so much feeping creaturism going on in my project that I have to make a SAN check to go to work every morning (if I fail, I go).

    18. Re:Wait a second... by nr · · Score: 1

      It's even possible to update/upgrade on-the-fly while the program is running. This is not a problem for client application as it's no issue to shutdown Open Office or Firefox to update, but a server program busy serving hundreds of clients that depend up on it.

      With Shared Libraries in C/C++ and classes, etc in other languages one can create a architecture design of empty skeleton to hold all code as individual loadable modules that can be loaded/unloaded anytime. So you can load v2 of a module, tell the app switch over to use the new module and then unload the old v1.

    19. Re:Wait a second... by Fred_A · · Score: 3, Funny

      Doesn't modular programming solve this problem?

      Theory, I'd like to introduce you to practice. You two are very different, you should have lots of things to talk about.

      --

      May contain traces of nut.
      Made from the freshest electrons.
    20. Re:Wait a second... by hey! · · Score: 3, Insightful

      Oh, modularity is undoubtedly a good thing. There's a word for non-modular code: crap.

      The problem is all the things you *can't* solve with modularity. Having chosen the wrong architecture because you had the wrong conception of the problem isn't fixed by modularity. You can swap out modules all day long and it won't help, because the problem is how the modules fit together. Then there are the interdependencies that exist outside your architectural conceptualizations; that pretty much includes most security issues. Your "modularity" is an abstraction you impose on the physical reality of computation. The black hats peek under the covers and find all the couplings you can "safely ignore".

      Then there are the things your module depends on: library versions, frameworks, operating systems, databases etc. The answer to this is that most "modules" aren't really very modular because they're coupled to these things; I think of these couplings as "vertical" couplings as opposed to "horizontal" couplings with other modules I create. The best answer is to de-couple modules from those things too, to isolate dependencies in a very small number of interface modules. But that's a lot of work, and a lot of times you've got to do it with programmers who have something like "Struts for the Ignorant Programmer" open on their desk, giving them concrete, cut-and-paste examples of how to *couple* their code to some version of a framework. Those programmers are so far from the ivory tower they're living in the treacle well.

      That's the problem of craft in a nutshell. You don't have unlimited time, but pure expediency can waste more of your time than anything else. You can start chopping down a tree sooner if you don't bother to sharpen your ax, and if the boss judges progress by ax cuts you'll probably end up doing it that way.

      --
      Post may contain irony: discontinue use if experiencing mood swings, nausea or elevated blood pressure.
    21. Re:Wait a second... by Chris+Mattern · · Score: 2, Funny

      6 decade wait? We have been waiting 60 years for a 64-bit version of Flash?

      You mean you don't remember Flash for ENIAC?

    22. Re:Wait a second... by Chris+Mattern · · Score: 1

      Tell me about it... There's so much feeping creaturism going on in my project that I have to make a SAN check to go to work every morning (if I fail, I go).

      How can you get any work done if you can't access your disk storage?

    23. Re:Wait a second... by NervousWreck · · Score: 1

      I once designed a website for a PHB. When he gave me a hard time I told him that he can pay me $175 an hour indefinitely for maintenance or he can have a website that other people can maintain. Guess which one he picked. Guess how long I would have lasted if I wasn't fire proof for the period I was working there.

      --
      I do not have a sig. You are hallucinating.
    24. Re:Wait a second... by Anonymous+Brave+Guy · · Score: 2, Insightful

      So what do you do? Redesign the whole modular system, unravel all the finished modules and rework them to fit the new interfaces you have to design?

      If you have to do that to accommodate a typical change in requirements, then your system was never really modular at all, was it?

      Modules represent, among other things, units of change.

      --
      If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
    25. Re:Wait a second... by jimicus · · Score: 1

      The FA deals with that by proposing you include version numbering in the interface itself.

    26. Re:Wait a second... by mhelander · · Score: 1

      That axe analogy is golden.

    27. Re:Wait a second... by Abreu · · Score: 1

      6 decade wait? We have been waiting 60 years for a 64-bit version of Flash?

      You mean you don't remember Flash for ENIAC?

      Sure, but in those days, "Flash" meant that a vacuum bulb had flared and died...

      --
      No sig for the moment.
    28. Re:Wait a second... by peater · · Score: 1

      I hear ya! A client of mine seems to use the word "small" a lot while scope leaping. Let's add another "small" box here and mebbe a "small" drop down there, as if making the controls smaller would somehow reduce my coding time. I went along for the first 2 leaps, then I started budget leaping. The controls don't seem so small to him no more. Bitch.

    29. Re:Wait a second... by wideglide · · Score: 1

      Sorry to diosappoint you here, but even properly formatted and written code deteriorates over time. And yes - i know what I'm talking about, maintaining a 40+ year old airline reservation system IS a challenge. And the code base constantly gets worse, as nobody can afford even a small rewrite and shortcuts bite us constantly ... the OPTICAL form of the code might be nice and pleasing to the eye but the technical functionality and cross-dependencies make your hair get white (if you still have some) and your teeth fall out ... wideglide

      --
      The sum of intelligence on a planet is constant. Nowadays we have more people. When classic goes away, so do I. Copy
  3. Grrr by Brian+Gordon · · Score: 2, Insightful

    "Software maintenance" has absolutely nothing to do with computer science. I wish people would stop calling business programming computer science. Computer science work gets done at universities and research institutions, not at Initech.

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

      Computer science work gets done at universities and research institutions, not at Initech.

      We do computer science over here at Penetrode. Oh, and btw, would you like to buy a magazine subscription?

    2. Re:Grrr by MrCawfee · · Score: 3, Informative

      How do you design software that is able to be maintained? Many of the techniques for software maintenance are designed by these institutions, so saying "Software Maintenance" is not computer science is a bit far fetched. Writing maintainable software isn't only in the Initech domain.

      And really if you are excluding software maintenance from the field of computer science, you pretty much have to exclude every other software technique. Techniques for writing maintainable code go hand in hand with every other development technique.

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

      BS. That's like saying that genetics occurs only in laboratories.

    4. Re:Grrr by Anonymous Coward · · Score: 1, Informative

      And really if you are excluding software maintenance from the field of computer science, you pretty much have to exclude every other software technique. Techniques for writing maintainable code go hand in hand with every other development technique.

      Exclude away. What you are describing is software engineering, which is all about these types of development techniques. Software engineering is its own field, and it is not computer science.

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

      ...or physical work only gets done in physics laboratories.

    6. Re:Grrr by Anonymous Coward · · Score: 0

      Computer science "work".

    7. Re:Grrr by Anonymous Coward · · Score: 0

      And really if you are excluding software maintenance from the field of computer science, you pretty much have to exclude every other software technique. Techniques for writing maintainable code go hand in hand with every other development technique.

      I don't see the problem here. Software development is not computer science. Software development is to computer science as engineering is to physics. This is computer science. This is not.

    8. Re:Grrr by Orion+Blastar · · Score: 1, Offtopic

      I beg to differ, in my computer science classes at the University of Missouri Rolla, they taught us software maintenance to go along with our programming classes. It is for more than just business software or application software it can be used for system software as well as operating systems, firmware, database applications, and everything else except the kitchen sink (but we are working on that one, he heh heh:).

      If you don't do maintenance for your software, it is a lot like not doing maintenance for your car, eventually you'll run into trouble and then it will be more costly to repair (how much is a day or two of downtime worth to your firm?) than it would have been to do the maintenance of your software.

      They don't teach software maintenance, debugging, documentation, legacy systems and legacy software, best practices, etc in computer science classes anymore, or the professors just skip over them or the students don't pay close attention anymore. Because I've worked with Comp Sci graduates that had no idea how to do any of them, and it was always up to be to debug their program and do software maintenance on them. Because I solved many problems that everyone else said couldn't be done, I kept getting promotions. But the work got really hard and I got stressed out and got sick and eventually got fired. It seemed out of a team of 30 developers, I was the only one able to fix the problems and avoid the system and servers crashing 12 times a day or more due to sloppy programming. But they fired me anyway for getting too sick at work, and keep on the sloppy programmers. I read the Microsoft Newsgroups they use for support and read by searching my former employer's domain name on how they struggled to migrate to Dotnet and couldn't get the Dotnet versions of the programs working as well as the ones I fixed and maintained. How could I, the only competent developer they had, been fired when they needed me for the Dotnet migration? It is simple, managers and developers don't want to do things like software maintenance or even debugging or best practices because they consider them "time wasters" and "unneeded expenses" and that the work I did cost them an expense they didn't need, so they didn't need me. But they were so blind to see that the work I did while it was an expense, it saved then millions of dollars in lost productivity, lost CPU time, cost savings in not needing to buy faster processors and more memory as my code ran tight and compact in lower ones, and days if not weeks of downtime and a dysfunctional system and software that takes them years to fix by hiring high priced contractors to do the work I would have done for my small salary.

      Yes I am convinced that if I am well enough to return to work, to become that high priced consultant and do debugging, best practices, software maintenance, etc because 99.9% of the market doesn't know how or doesn't want to do those things.

      Before they let me go the VP of IT told me this "You are a developer, developers are a dime a dozen. We get 500 resumes a week just for your position alone. We can easily hire someone at a fraction of your current salary who won't get sick on the job." After they let me go they realized that I wasn't some dime a dozen programmer, but too late, can't change the past. If they want me back, I'll be a high priced contractor with an iron clad contract that contains bonuses, stock options, and other things in it.

      --
      Remember, Slashdot does not have a -1 disagree moderation, and no, troll, flamebait, and overrated are not substitutes.
    9. Re:Grrr by SparafucileMan · · Score: 1

      Don't kid yourself, genius.

      Efficient software maintenance is directly related to the Halting Problem. I'm sure you could figure out a thesis about it. Or at least a proof.

      Besides, "business programming" involves many things, some of which includes problems (for example, my field, aerospace) that are ridiculously complex, certainly at least as much as a good 80% of any CS degree or thesis.

    10. Re:Grrr by Brian+Gordon · · Score: 1

      Development methodologies have nothing to do with computer science either.

    11. Re:Grrr by poopdeville · · Score: 2, Informative

      As a mathematician, I would have to disagree... computer program architecture is clearly in the domain of computer science, and properties of program architectures can be modeled algebraically. Indeed, this is why modern academic researchers work with data types that are initial algebras.

      Moreover, every computer program and function is a monad (or, equivalently, comonad). People make a living from ignoring that trivial fact and re-inventing ways to make monadic structure apparent, via OO programming.

      --
      After all, I am strangely colored.
    12. Re:Grrr by phantomfive · · Score: 1

      This article really doesn't have much to do with computer maintenance either. It is trying to address software maintenance from the point of view of a software developer, but it reads as though it were written by an academic who hasn't actually worked in the industry for years, and who is just trying to get credit for a publication.

      It first categorizes different ways of maintaining software, with no real rationale for choosing those categories, then goes on to describe a versioning system that somehow makes everything easy. They also throw in some nice 'hip' language like "Pointy Haired Boss (BHP)" and "You Don't Know Jack."

      Now, they are right that versioning is a useful technique in software development, but it is no more than that, merely a technique. Software maintenance from a developer's perspective is a broad topic involving many techniques for coding flexibly, including design patterns, encapsulation, writing readable code, etc. They have focused on one technique and present it as the solution to maintaining software.

      It is as if I said, "Don't use global variables and your code will be perfect." While it is reasonable advice, there's more to perfect code than using/not using global variables.

      --
      Qxe4
    13. Re:Grrr by lennier · · Score: 3, Insightful

      ""Software maintenance" has absolutely nothing to do with computer science. "

      And that attitude is EXACTLY why computing still sucks.

      If it involves computers, and it's an interesting unsolved problem - and guess what, a LOT of real-world problems turn out to be extremely interesting and extremely unsolved, full of all sorts of corner cases and exceptions to previously supposed 'laws' - then it's computer science.

      System administration is like artificial intelligence. It's a human-centric job involving a lot of common sense, and it can't always be readily automated because the rules keep changing. That ought to raise warning flags. .Like vision or language recognition, a lot of scientists seem to think administration is so easy that only dumb people bother to investigate it. So they don't. But that's the opposite of the truth. Humans are still stuck doing rote maintenance precisely BECAUSE it's so tricky to do that computers can't yet do it. Which means it's very, very interesting.

      A sensible approach to computer science would treat all phases of the development and deployment of information, computing and communication systems as computing systems in themselves. Yes, that involves crossing disciplinary boundaries. Perhaps that's more cybernetics or systems thinking or linguistics or sociology or psychology than computer science as it's currently narrowly defined itself to be. But in that case, computer science has defined itself out of the interesting part of the game - the impact and use of computing in the real world and what parts of this can and can't be predicted and automated - which would be a very sad thing.

      --
      You are not a brain: http://books.google.com/books?id=2oV61CeDx-YC
    14. Re:Grrr by Brian+Gordon · · Score: 1

      Programming language theory is computer science. I'll even concede that programming with a FP language is very computer science-y. Techniques for writing maintainable code is not.

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

      In that case, congratulations, you got some software engineering education in addition to a computer science degree. They're still different fields though. Broadly, software engineering is the practical side of building large software systems, and computer science is the theoretical side of computation. To borrow your analogy, it's a bit like expecting every mechanical engineer to be able to repair their own cars - quite a few of them will, and it may be related, but they're still separate things.

    16. Re:Grrr by tolkienfan · · Score: 1

      You are absolutely right about maintainability. Code is written for two main purposes:
      1. For a machine to execute or interpret
      2. For a person to read

      The programmer's intent should be plainly clear in every piece of code. Preferably without the need for comment. In cases where the code doesn't make its intent clear, a comment can be helpful - but preferably the code should be clear without it.

      That is, without a doubt, more art than science.

      I am disappointed, sometimes, by the lack of basic computer science in the industry - but I am CONSTANTLY disappointed by obfuscated code. Worst of all is where code and comments do not match... (and they're probably both wrong!)

    17. Re:Grrr by SpaceLifeForm · · Score: 1

      You got it dude.

      The problem is management is flat out fucking stupid
      and only worried about their stock options.

      Fucking stock options have screwed everything up for
      over 20 years now.

      The dumb ass pointy hairs can not recognize a
      good programmer because they are push-button.

      Worthless.

      Proper software development is properly done correctly
      up front, with *PLANS* for maintenance.

      --
      You are being MICROattacked, from various angles, in a SOFT manner.
    18. Re:Grrr by martin-boundary · · Score: 1

      Nah, over here we have undergrads for doing that :)

    19. Re:Grrr by Zalbik · · Score: 1

      Development methodologies have nothing to do with computer science either.

      Sorry for the ignorance, but is that true in university courses as well?

      I have a degree in mathematics (with a few CS courses), and a technical diploma in Info. Systems. My IS courses had a very strong emphasis on methodologies and writing maintainable code. I've always assumed a CS degree would have the same, along with the CS theory.

      If not, that explains some of the code I've seen written by some very bright people. Some of it (not all by any means) has been technically functional, but horrible maintenance-wise. Almost as bad as when I see code written by engineers (the "build physical stuff" kind, not the CS kind or the "drives a train" kind).

    20. Re:Grrr by NewbieProgrammerMan · · Score: 1

      Warning: This message may contain cynicism that some people may find offensive. Viewer discretion is advised.

      But they were so blind to see that the work I did while it was an expense, it saved then millions of dollars in lost productivity, lost CPU time, cost savings in not needing to buy faster processors and more memory as my code ran tight and compact in lower ones, and days if not weeks of downtime and a dysfunctional system and software that takes them years to fix by hiring high priced contractors to do the work I would have done for my small salary.

      It seems like it takes an inordinate amount of effort to sell doing maintenance/cleanup to management types, and I don't know enough about psychology or the "business" mindset to understand why that is. Let us know if you figure out the secret to being a high-priced contractor while still having a conscience and some integrity. I suspect that the most essential component of success as a high-paid contractor is being able to oversell yourself. Being able to deliver on any of it is optional.

      (Note: I'm just taking you at your word that you were that valuable...I've seen others (and, at times, I've done it myself) that looked at themselves that way, but couldn't code their way out of a wet paper bag.)

      --
      [b.belong('us') for b in bases if b.owner() == 'you']
    21. Re:Grrr by Anonymous Coward · · Score: 0

      So then why is it (Software Engineering) a major part of my university Computer Science bachelor (and an often picked Master course)?

    22. Re:Grrr by gtall · · Score: 0

      Yes, and expecting people to learn monads in order to do programming shows just about how far out there a lot of computer science is to building real systems. OO can be picked up shortly, go ahead and start explaining category theory to budding programmers so you can smugly point at OO and say "see, it's just monads". Oh, but you can do it all functionally. Fine, jump through all the painful epicycles one has to in order to code functionally. That's not going to build large systems where the large scale structure isn't functional and describing it monadically is a fool's errand.

    23. Re:Grrr by Fred_A · · Score: 1

      Computer science work gets done at universities and research institutions, not at Initech.

      That's because computer science isn't good for the company.

      --

      May contain traces of nut.
      Made from the freshest electrons.
    24. Re:Grrr by elnyka · · Score: 2, Insightful

      Programming language theory is computer science. I'll even concede that programming with a FP language is very computer science-y. Techniques for writing maintainable code is not.

      Many activities carried out every day for performing software engineering is not computer science. But good software engineering, the discipline itself, that is deeply root in computer science. Just like coding. Coding is not computer science, but good coding practices are rooted computer science.

      Principles and notions such as cohesion, coupling, modularity, comprehensiveness, patterns, complexity management, architecture, they all originate in computer science.

      I think you are right that software (and systems) engineering is computer science. But you might want to be precise as of why. Software Engineering is to Computer Science and Mathematics what the "physical" engineering disciplines are to Physics, Chemistry and Mathematics. The former cannot exist without the later.

    25. Re:Grrr by jimicus · · Score: 1

      System administration is like artificial intelligence. It's a human-centric job involving a lot of common sense, and it can't always be readily automated because the rules keep changing. That ought to raise warning flags. .Like vision or language recognition, a lot of scientists seem to think administration is so easy that only dumb people bother to investigate it. So they don't. But that's the opposite of the truth. Humans are still stuck doing rote maintenance precisely BECAUSE it's so tricky to do that computers can't yet do it. Which means it's very, very interesting.

      I've been a sysadmin for several years, and my own view on it is a variant on yours.

      IME, the sysadmins who don't automate the hell out of everything they can think of are the dumb ones. You've given them a bunch of boring, frequently repetitive tasks, a bunch of general-purpose computers that excel at boring, repetitive tasks and they don't put two and two together? Such people almost invariably spend most of the day chasing their tail.

      Unfortunately there are quite a few such dumb sysadmins - so many, in fact, that it's not unusual to find that the managers that hire them have come to believe that this is the general way of IT and there is little that can be done about it.

    26. Re:Grrr by Chris+Mattern · · Score: 1

      Moreover, every computer program and function is a monad

      "We are Monad. We are complete. We are instructed. Our purpose is clear. Sterilize imperfections. Sterilize..."

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

      I couldn't care less about building systems, I just want to learn.

    28. Re:Grrr by Stradivarius · · Score: 1

      I would think that folks designing programming languages would care quite a bit about what makes code maintainable. After all, designers want their creations to be used and valued, not to be some obscure relic in the dustbin of history. These days nobody's going to adopt a new language that is difficult to maintain.

    29. Re:Grrr by Gorobei · · Score: 1

      I've seen a couple of large scale real systems that are essentially functional+OO (i.e. conceptually monadic.) Admittedly, they are narrow domain (Wall St exotic derivatives stuff,) but it's about the only approach that seems to work if you have hundreds of programmers working together on a complex system.

      Epicycles can largely be avoided if you design these types of systems well. An epicycle is a sign that a programmer is misunderstanding the model: his code doesn't work, and you swoop in with education to fix it.

    30. Re:Grrr by TemporalBeing · · Score: 1

      I would think that folks designing programming languages would care quite a bit about what makes code maintainable. After all, designers want their creations to be used and valued, not to be some obscure relic in the dustbin of history. These days nobody's going to adopt a new language that is difficult to maintain.

      Programming languages are not the place to enforce code maintainability. That has to be very project centric - sure, there are numerous practices; but you have to choose the right practice for your project - for your architecture, design, language of choice, etc.

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

      The problem is that the CS people want to be all about the art. They need to learn to grow up and start doing actual engineering. This is true whether talking about student OR professor.

      It's also probably one of the big reasons why computer programming in general is in such the management mess that it is today - most all want to be about the art, not do the engineering, and thus it ends up becoming a very big management problem since most all don't know how to do things on time and on budget.

      Sad, but true.

      --
      Truth is like the sun. You can shut it out for a time, but it ain't goin' away. - Elvis Presley (source: imdb.com)
    32. Re:Grrr by TemporalBeing · · Score: 2, Insightful

      ""Software maintenance" has absolutely nothing to do with computer science. "

      And that attitude is EXACTLY why computing still sucks.

      If it involves computers, and it's an interesting unsolved problem - and guess what, a LOT of real-world problems turn out to be extremely interesting and extremely unsolved, full of all sorts of corner cases and exceptions to previously supposed 'laws' - then it's computer science.

      No true. Software Engineering solves a lot of unsolved problems without having to do computer science. Computer Science is about theory, not implementation. Computer Science deals with the Universal Turing Machine and treats all computers like it. Computer Science programs tend to not discuss how to do things with efficiency or with limited resources.

      Computer Engineering programs tend to talk a little about Computer Programming; but mostly focus on the engineering behind computer hardware (e.g. PCI boards, processors, etc.).

      Software Engineering is about producing products that resolve unresolved problems using standard practices. It's about architecting, designing, and otherwise engineering a product to meet that problem and overcome it. It's done with computers, solves interesting unsolved problems, and has a lot of corner cases and exceptions - far more than you find in most any Computer Science theory since the problems Software Engineering addresses are typically for limited memory/processor/etc, making the challenge that much more.

      And no, this is not a new definition of Computer Science, or Computer Engineering. It's just that so many Computer Scientists fail to understand the differences between Science and Engineering.

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

      Sounds like the difference between software engineering and computer science, in a nutshell.

      --
      By the taping of my glasses, something geeky this way passes
    34. Re:Grrr by jgrahn · · Score: 1

      I have a degree in mathematics (with a few CS courses), and a technical diploma in Info. Systems. My IS courses had a very strong emphasis on methodologies and writing maintainable code. I've always assumed a CS degree would have the same, along with the CS theory.

      Mine didn't, with some exceptions (reasoning about correctness has been useful to me). You learned such stuff the hard way, in hobby programming or in the compiler course, which implied writing lots and lots of C code.

      If not, that explains some of the code I've seen written by some very bright people. Some of it (not all by any means) has been technically functional, but horrible maintenance-wise.

      I'm not sure education would help. It could even make it worse -- teaching the latest fashion-of-the-week silver bullet. They focus on a lot of stupid yet buzzwordy things at my alma mater these days, e.g. "multicore" and "model-based architecture". Oh wait, maybe "multicore" was *last* year ...

    35. Re:Grrr by Orion+Blastar · · Score: 1

      First of all I get quoted for my legacy software knowledge and I've been doing software maintenance and debugging and developing for 17 years now. I have a lot of references that can back me up.

      I get offers from other firms to teach their developers Visual BASIC 6.0 for older Windows or Turbo C 2.0 for MS-DOS so they can better debug them and maintain them. I also get offers to migrate code to newer operating systems like Windows Vista or Windows 7 or both. But I have to turn them down because I am currently too sick to work since 2002. Once I get better I will start up my own small business for contracting, and teach my employees these skills.

      Management is not stupid, they usually give a six month contract to see if the contractor is any good. If they don't get good results, the contract is not renewed and the contract goes to another developer. I've worked as a contractor before so I know how it works as my contracts lead to full-time employment before, and I have a good track record.

      I usually will use a proxy like guru.com or elance.com to start doing small projects and then work my way up to full time projects, and then use them as a reference and in the contract state that I can use the source code to show to other bidders examples of my work, as long as they sign a NDA stating they won't use the code and that while I wrote it, it belongs to a different firm.

      I not only hold degrees in Computer Science, Information Systems, but also Business Management. I know how to talk business speak and talk to managers. I can also do auditing of a business and quality control to help bring down costs, as well as job cost accounting to see where the company is bleeding money.

      Over the years I have made enemies as I got picked for a job over others, or I got promoted and got a pay raise over others, who are jealous of my work. Some of them rate my comments on Slashdot as Offtopic, when they really aren't, as both my comments are about Software Maintenance and the relations to it. But note that I also get Interesting ratings because my comments are interesting. I am one of the most interesting people on Slashdot for that reason.

      --
      Remember, Slashdot does not have a -1 disagree moderation, and no, troll, flamebait, and overrated are not substitutes.
    36. Re:Grrr by Orion+Blastar · · Score: 1

      Classic Management is like that, I agree.

      Participative Management, Servant Leadership, Organizational Behavior, and other Business Management for the modern age can fix that.

      What is wrong with the USA and most of the world is that they are still under "Classic Management" that treats employees as slaves as it is based on the Pharaoh system from ancient Egypt in that managers are royalty and crack that whip (negative reinforcement) to get work done. Modern Management uses positive reinforcement and the managers gain knowledge of what their employees know and participate with them and stop being PHBs (Pointy Haired Bosses) and become Servant Leaders who serve their employees (Think Captain Kirk "What can I do to save my people?" and Star Trek like management) and empower them to make their own decisions and give them the tools and support they need to get their jobs and tasks done.

      --
      Remember, Slashdot does not have a -1 disagree moderation, and no, troll, flamebait, and overrated are not substitutes.
    37. Re:Grrr by Anonymous Coward · · Score: 0

      I would hate to work for someone like you.... Back in my day when men were men....

      Please go back to your porch and yelling at kids to get off your lawn.

      Computer Science degrees have nothing to do with teaching "legacy systems" and "legacy software". A CS degree shows that you understand the theoretical knowledge of computing. A CS degree is not intended to make people maintenance programmers or even good programmers. It is intended to make people Computer Scientists. You know those guys that think up nifty new ways on how to combat the problems that we currently have in the computer industry.

    38. Re:Grrr by Orion+Blastar · · Score: 1

      "You know those guys that think up nifty new ways on how to combat the problems that we currently have in the computer industry."

      You mean like code that does not scale nor is it backward compatible nor has it been properly maintained? All of which Computer Scientists have failed to do because like you they reject the concepts of software maintenance, legacy software, debugging, best practices, and software psychology?

      Being a Computer Scientist like you, would be like being a Natural Scientist and not following the Scientific Method. When I took Computer Science we had a thing called Logical Methods and Analysis and Design that included such things as software maintenance, proper documentation of code, software psychology, best practices, debugging, legacy software programming, scaling, security coding, and many other things. Being a Computer Scientist like you, means you skip steps, cut corners, don't follow a plan or flowchart, and write sloppy code that crashes the system and servers 12 times a day or more, and then blame someone else or something else for your problems and never took responsibility for anything in your life.

      Me, I'm the guy who takes responsibility for other people's messes and cleans them up. That is why you say "I would hate to work for someone like you...." and "Please go back to your porch and yelling at kids to get off your lawn." because you are a hateful bigot, a piss poor developer, and you mess up anything you touch and never took responsibility for anything in your life. You are the end product of a broken college system that fails to teach you the basics of even quality control much less "think up nifty new ways on how to combat the problems that we currently have in the computer industry" at all.

      I am one of the few people who "think up nifty new ways on how to combat the problems that we currently have in the computer industry" and that is why people like you refuse to work with me, because you are jealous of my abilities.

      --
      Remember, Slashdot does not have a -1 disagree moderation, and no, troll, flamebait, and overrated are not substitutes.
    39. Re:Grrr by Anonymous Coward · · Score: 0

      Amen to that. Even in Alan Turing's notion of computing, the computer was a person and not a computer alone. That means that from day one what is exciting about computer science has included the human factor in it. Maintenance is heavy on that part.

    40. Re:Grrr by Anonymous Coward · · Score: 0

      As someone with two degrees in Computer Science. and has been a Software Engineer for 20+ years: you are full of shit !

    41. Re:Grrr by Anonymous Coward · · Score: 0

      > Sounds like the difference between software engineering and computer science, in a nutshell.

      Partly. Computer science is not just about discovering the mathematical properties of logical devices, it's also about discovering the properties of things we build.

      After all, you can't really evaluate the big-O performance of a search algorithm that you haven't written yet!

    42. Re:Grrr by Anonymous Coward · · Score: 0

      You have some good points. My problem with OO is that it is too often the wrong monad for the job. This leads to abuses that can be much more clearly expressed using things like functors. If a programmer understands what the heck the factory pattern does, he should instantly recognize and understand a functorial implementation.

      http://en.wikipedia.org/wiki/File:Factory_Method_pattern_in_LePUS3.png

      Which do you really think is more maintainable?

      Also, it is important to recognize that "Monads" "are the same thing" as the interpreter pattern. If a budding programmer understands how the interpreter pattern works, he understands how monads act on data types. The best insight gained from monadic functional programming is that data types can and should be expressed in normal forms, essentially turning the business logic code into configuration files (written in your language of choice) to be parsed and interpreted. Mind you, I am not saying these "configuration files" will be trivial to read, but code written in such normal forms tends to be extremely easy to maintain.

  4. "Everyone knows maintenance is boring" by tomhudson · · Score: 5, Insightful
    FTFA:

    Everyone knows maintenance is difficult and boring, and therefore avoids doing it

    Taking code and cutting its size by half, fixing up all the screwed-up inconsistent formatting, while adding functionality and reducing bug counts, is a pleasure.

    It's all in the mindset. It's only boring if you limit yourself to the boring parts.

    1. Re:"Everyone knows maintenance is boring" by Anonymous Coward · · Score: 5, Insightful

      Taking code and cutting its size by half, fixing up all the screwed-up inconsistent formatting, while adding functionality and reducing bug counts, is a pleasure.

      What company do you work for where it is even remotely possible to accomplish all that and still meet your deadlines? In my world, you always wish you could totally refactor the code like that, but there's never enough time in the schedule for that. So instead, you "make it work" as best as you can, and that's about it. Maybe, if you're lucky, you can find enough time to do at least a partial re-write of the worst parts of the code, or tidy up an interface or two. But cutting the code size by half? Yeah right. I wish.

    2. Re:"Everyone knows maintenance is boring" by steelfood · · Score: 4, Insightful

      More likely, the code was written and documented badly in the first place, so it's not a matter of taking it and cutting it down into something more elegant. Instead, it's about trying to decipher exactly what's going on, then trying to figure out how to make it at least superficially better while trying to keep within the same crappy framework. This has to all be done within budget, or the work done will go to waste when the project's scrapped, and there won't be a budget for maintenance again.

      Maintenance isn't a rewrite from scratch to do the same thing, as much as we'd like it to be. Production systems have to be kept up. Migration to new code has to be both backwards compatible and produce enough visible results to make it worthwhile. It can't be too big of a change, nor too little. It's hardly any wonder software developers don't get to, and managers don't want to do it.

      --
      "If a nation expects to be ignorant and free in a state of civilization, it expects what never was and never will be."
    3. Re:"Everyone knows maintenance is boring" by theTerribleRobbo · · Score: 1

      Mod +1, Depressingly Accurate.

      I would love to refactor chunks of the systems I maintain, but when you're given a specific bug to fix and an hour to fix it in, it gets very hard to make more than superficial changes and do small amounts of tidying up.

    4. Re:"Everyone knows maintenance is boring" by tomhudson · · Score: 4, Insightful

      You don't tell them you're doing that ... you just do it. It's quicker anyway. Start by cleaning up the formatting and moving stuff into headers, some righteous macros to make the code more readable, etc., as a first step in "getting familiar with the code. After all, you don't want to break something while fixing a problem. You'll probably notice some code that looks like it's either "copy-n-paste" or dead. Keep it in mind.

      You'll find potential for simplifications as you go along, and you'll also probably find other bugs and stupidities, like parameters that are never used (that happens a lot as code gets modded). Code that doesn't smell right. Signed ints that are unsigned elsewhere. Potential buffer overruns. Unsanitized unput. In-line code that really should be in a separate function call both for clarity and for re-use. Look through the bug list - if the bug (or potential bug) you found is there, great - mark it as fixed. If not, log it, then mark it as fixed. Either way, your fixed bug count goes up - and if you can show that you've fixed bugs before they're found, that's just a bonus.

      Now start a bit more higher-level fixing. Nothing too wild, but if you have to add a bit of functionality, use that as an excuse to simplify the code that it touches. You'll probably confirm some of the dead code from the first step. Remove it. You'll probably confirm cases of multiple instances of copy-and-paste - refactor them as well into something a bit more same. Now you've removed a few more bugs, shrunk the file size, and added some functionality.

      Now that you've done that, review the code again, and look for more instances of copy-and-paste. Code that was written in a hurry will have LOTS of it, so you'll definitely be able to give it some more w8loss treatments. And since you didn't bitch and moan TOO much about making the mods, and they actually work, they'll probably be happy to let you graze on the bug-fix list. There's always bugs, nobody wants to touch them, and as you clean up the code, you'll see it start to shrink.

      A 50% reduction on crappy spaghetti code is reasonable under those circumstances.

      At that point, you own the code. You're in the loop for changes that might break it. When you say, "okay, but it's going to take x time" they're more likely to actually listen. Consider it office politics for nerds.

    5. Re:"Everyone knows maintenance is boring" by digsbo · · Score: 3, Insightful

      Maybe it's just me, and maybe it's because I'm not a junior level UI guy, but I've never had someone give me a deadline like that. Weeks, maybe, for big chunks of problem/functionality/integration, but I am starting to think that's just a cop-out junior-ish programmers give to excuse not taking the responsibility. Who gives the hour deadline? Based on what? Are they technical managers, or just small-company tyrant CEOs pulling time out of the air to assign for the fix? Is this taken seriously? Not trying to be sarcastic, I just don't see this. My managers give me respect, and generally always have. I think you're doing something wrong (but I could be mistaken).

    6. Re:"Everyone knows maintenance is boring" by tomhudson · · Score: 1

      You're there anyway - why not clean it up a bit. Every file you touch, clean it up (because people in a hurry always leave a mess). It'll help decipher what's going on, so you're less likely to fubar something.

      Do that often enough, and the code becomes more workable, and you'll begin to see duplication that can be remedied with no impact, as well as find a few errors. Check the bug list - if you've found the source of a bug, tell the powers that be that, while doing the mods, you found the source to bug xyz. Then log the fix.

    7. Re:"Everyone knows maintenance is boring" by Grant_Watson · · Score: 1

      I don't know what the GP had in mind, but maybe it's a significant bug (e.g., showstopper) on a production system?

    8. Re:"Everyone knows maintenance is boring" by MichaelSmith · · Score: 3, Insightful

      But if you have 20 or 30 branches for deployed systems and your fix needs to be imported into most of them then your clean up is viewed as a total PITA because now it is not clear why you made all those changes.

    9. Re:"Everyone knows maintenance is boring" by Hurricane78 · · Score: 1

      Well, I once realized, that all code basically is "throwaway code". Meaning, that you only can do proper evolution of a software project, if you do a complete rewrite from time to time.
      That is, because the basic usage and purpose of the program changes with time. New, better paradigms get discovered, etc. And they don't fit with the old basic architecture.
      If you just endlessly patch them on top, you get something like Windows ME, Internet Explorer, or MS Office.

      So you make clear cuts: You stay with the old paradigms in the old code base, and just perfect that one, fix all the bugs, etc. Meanwhile you slowly use more and more resources to transition to the new code base, written with a really proper foundation of design, adapted to the new usage patterns and purposes. Backwards compatibility really should not even be considered here! Importers, yes. Real compatibility: No way. Because that would be the opposite of a clear cut, by not allowing 100% freedom to redesign it properly. Which means you drag along the old crap anyway, despite it not fitting into the new ideas.

      That's why I now always use a 4.1-part versioning scheme:
      "G.M.m.p b", where
      b: Build number. Including "beta"/"alpha"/"RC" status, etc.
      p: Patch number. Drop-in update with no functionality change at all. Only bug/security fixes.
      m: Minor version number. Drop-in update with functionality changes.
      M: Major version number. Can not be dropped in just like that. Big functionality changes. But no paradigm changes.
      G: Generation number. Complete rewrite with paradigm changes. Up to being a completely new program. Comparable to the number in movies or games. Like GTA 2, GTA 3, GTA 4.

      Also as with games and movies, different generations can co-exist for a long time. Allowing the old version to become perfected and allowing people their own choice of when to move.
      The rule is that the old generation can only be abandoned, when each and every single function of it is available in the new generation. They can be different, or not needed anymore because of the new paradigms. But they have to be there. No exceptions!
      That is one big reason why people do not want to switch to Linux, Firefox or OpenOffice from Windows, Internet Explorer and MS Office. They still lack that tiny feature that makes it more effort to switch, than to stay an suffer the shitty product. It's human nature of inertia-caused efficiency.

      That is why it's so bad that how KDE3 now gets abandoned, despite KDE4 still being close to alpha state (yes I talk about KDE 4.3) in terms of comparable fullness of functionality and all-around polishing.

      --
      Any sufficiently advanced intelligence is indistinguishable from stupidity.
    10. Re:"Everyone knows maintenance is boring" by bjourne · · Score: 5, Insightful

      That's great, until your huge refactoring introduces a new bug. And it will, you can't expect to refactor a decent sized body of code without breaking something. When it does, it doesn't matter that the code is 100 times more readable and extensible, or that you fixed ten other bugs while doing it, your ears will get hot. Because you broke something which means more work for someone else and that the count of outstanding bugs was just incremented.

      This happens in the places where each bug report has to be annotated with about two dozen different abbrevations and numeric codes so that the correct departments and bug examiners will get to look at it. When it takes two hours to file bugs and each bug has to be examined by four persons, you can forget about filing bugs about "potential problems." Bug reports are for the issues customers have complained about and nothing else.

      What about the next bug report that comes on? If it can even remotely be associated with the new code you wrote, then it will be. Because yours is the only new code in what is otherwise a totally legacy code base with hundreds of band aids. Expect to take the blame.

      And then you have the original author of the body of code you just killed/refactored. He wont be so amused about you rewriting in one week what he spent four months writing. Expect to hear nitpicks and complaints from his side. You won't be able to ask him anything about the code anymore because "you destroyed it."

      So yes, while refactoring code makes it better, you wont make many friends while doing it and you are taking a huge personal risk. Especially if you are doing it secretly.

    11. Re:"Everyone knows maintenance is boring" by shmlco · · Score: 2, Interesting

      "... some righteous macros to make the code more readable..."

      OMG, somebody fire this jerk. In most cases adding macros MAY make the code more readable for you, but the next poor guy who comes along can no longer look at that section of code to see what's going on, but must now combine the code he's reading with a macro that he can only assume was implemented properly in the first place.

      And if by "righteous" you mean some complex and convoluted code boiled down into a single line... then you should not only be fired, but shot.

      Unless the above should have been in [sarcasm] tags, in which case, the immortal words of Miss Emily Litella apply. (grin)

      --
      Any sect, cult, or religion will legislate its creed into law if it acquires the political power to do so.
    12. Re:"Everyone knows maintenance is boring" by shmlco · · Score: 1

      "Maintenance isn't a rewrite from scratch to do the same thing, as much as we'd like it to be."

      Meaning that you can't figure out how the previous developer did what he did, and if you rewrite it from scratch at least YOU will understand it.

      Unfortunately, that doesn't help the next developer, who's now totally unable to read and parse your brilliant semi-logical code...

      And wants to rewrite IT from scratch.

      --
      Any sect, cult, or religion will legislate its creed into law if it acquires the political power to do so.
    13. Re:"Everyone knows maintenance is boring" by Anonymous Coward · · Score: 0

      I forwarded your post to Steve Ballmer, and he was so impressed that they're now rewriting MS Office from scratch. not.

    14. Re:"Everyone knows maintenance is boring" by Anonymous Coward · · Score: 1, Insightful

      That's an astonishingly naive response. Here's several reasons why:

      1. You casually dismiss the "no time" issue by claiming that refactoring is actually faster than just making it work. That may be true in some cases, but when you're talking about half a million lines (not exaggerating) of legacy code, it's not that simple.

      2. There are other developers to consider, especially when you're talking about such a large code-base. You can't just go off and decide to undertake a major overhaul of the code without coordinating with the other developers. Good luck getting them on board with your big plans, when they are already working 60 hours a week trying to get their actual assignments done. Undertaking such a major refactoring effort would undoubtedly pay big dividends in the long run, but in the short term it's going to spell disaster.

      3. Your whole argument is built on a heap of assumptions. You're just pulling numbers out of thin air, and assuming they'll work in all cases. You're also assuming that management isn't going to notice what you're up to. Yeah, I know all about the pointy-haired boss stereotype, but my bosses aren't so conveniently stupid.

      Believe me, I really wish refactoring was just a simple matter of having the will and the know-how, but in a lot of real-world situations, that's just pure fantasy.

    15. Re:"Everyone knows maintenance is boring" by syousef · · Score: 2, Insightful

      Taking code and cutting its size by half, fixing up all the screwed-up inconsistent formatting, while adding functionality and reducing bug counts, is a pleasure.

      Clearly you've worked only on code that needs a bit of tidy up. Try reading code that hasn't been documented well if at all, and looks like it's been run through a code obfuscator (ie not just poor formatting), then realising that not only is the task the code is suppose to accomplish not documented, but the people who wrote the original code left while you were still in primary school. Oh by the way it's part of a poorly integrated but critical system and if any part doesn't work exactly the way the old part did, you're in trouble because the whole system falls apart.

      The trouble is even a gifted coder is likely to miss something, and those that review will have a shallower not deeper understanding so while they MIGHT pick up something important don't hold your breath. Realistically your only hope in many cases is to start fresh with a new analysis and design and replace your critical system big bang style (while trying not to go grey worrying over that approaching day).

      It's all in the mindset. It's only boring if you limit yourself to the boring parts.

      Most of the time, I'd kill for boring. I don't come to work for excitement.

      --
      These posts express my own personal views, not those of my employer
    16. Re:"Everyone knows maintenance is boring" by oldhack · · Score: 1

      You don't tell them you're doing that ... you just do it. It's quicker anyway...

      You could have made the wrong call, chasing dead end, the time is up and what was required is not done. Happens as often as not, though experiences improve your percentage.

      Yours is a utopian scenario.

      --
      Fuck systemd. Fuck Redhat. Fuck Soylent, too. Wait, scratch the last one.
    17. Re:"Everyone knows maintenance is boring" by dgatwood · · Score: 3, Interesting

      That's great, until your huge refactoring introduces a new bug.

      This is why you refactor the code alongside the original. Fix bugs in parallel. When there's a new bug, you roll back to the old, non-refactored code and see if it goes away. If so, you stay on the old, crappy code until you can fix the new, cleaned up code. Then you swap back to the new code. You repeat this testing phase until switching on the new code doesn't introduce any critical regressions, then continue living on the new code for a few months before nuking the old code.

      Yes, this is slower than doing development on a single version of the code, but it's a short-term penalty until the code is cleaner and more flexible, at which point you then make up for the period of slowness in the minds of your bosses by proceeding to successfully add twelve new features in a single week---you know, the ones that have been punted for six years because they were too risky to make in the current fragile code base.

      The trick is to alternate between rewrites and enhancements. Don't stay focused on rewrites too long or you'll seem unproductive. Don't ignore it for too long or you'll find yourself blocked and eventually become unproductive. The only way to survive is to stay somewhere in the middle.

      --

      Check out my sci-fi/humor trilogy at PatriotsBooks.

    18. Re:"Everyone knows maintenance is boring" by NewbieProgrammerMan · · Score: 2, Insightful

      That's great, until your huge refactoring introduces a new bug.

      You can always make sure you've got some legitimate reason to have done the refactoring/redesign. I got away with rewriting a section of code that the owner of the company had cordoned off with comments like "DO NOT TOUCH, YOU CAN'T MAKE THIS ANY FASTER" because I made it run about 10 times faster. (Honestly, how can you ignore that kind of comment if you like programming?)

      I checked in a bug fix (with unrelated speed improvements included) that introduced another bug, but also dropped application CPU usage from 75-100% to under 10%. The owner was initially pissed, of course, but I fixed the bug I introduced in under an hour, and showed that it was still a lot faster in addition to working correctly, and in the end the only reprimand I got was, "well, don't do that again without asking."

      For the next few years I kept replacing bad code if I had to touch it, and, no, I didn't always ask first. I was more careful about testing my changes and (since the standard development model at this place was "seat of your pants" anyway) I rarely had any issues because of it.

      Refactoring bad code is only scary if you're afraid to take responsibility for the code you put out.

      --
      [b.belong('us') for b in bases if b.owner() == 'you']
    19. Re:"Everyone knows maintenance is boring" by Aceticon · · Score: 1

      It only works if the project is small enough that a sole person or a small team (max 3 persons) can take ownership of the whole code base.

      If you do the cleanup you suggested on just part of the code, you're only introducing "yet another style of coding" to the code base: congratulations, you've just increased the complexity of the code base and made it less stable.

      I've seen this kind of code where multiple people at different times have tried to "enforce their vision" in the code they controlled: without exception this resulted in systems composed of multiple blocks of code which fit badly with other blocks of code (thus often any changes to one block of code will break something else somewhere else), each different enough that you have to figure out each one in turn as if they were different code bases.

      After learning how to properly cleanup and refactor code, the next lesson a Software Engineer learns is to do it like a surgeon: carefully, precisely and in such way that other parts are not damaged.

    20. Re:"Everyone knows maintenance is boring" by Anonymous Coward · · Score: 0

      Where I work, you cannot change even a space without a change request. And you have to justify each line of code you check in. Refactoring won't work there, unless you can get 5 levels of managers to approve it...

    21. Re:"Everyone knows maintenance is boring" by Anonymous Coward · · Score: 0

      I wish I worked with you.

    22. Re:"Everyone knows maintenance is boring" by Aladrin · · Score: 1

      Even the 'boring' maintenance can be made fun by doing it right. If you have had to do a task more than twice, or can see doing it multiple times in the future, it's obviously something that can use some automation.

      In the rare case that it really -does- need a human eye on it, simplify it to such an extent that the boss would love to give it to someone that makes 1/4 your pay, and then you only have to deal with unforeseen problems with it.

      When (as a smaller company) our system admin quit, I got stuck with all his non-sysadmin duties. (There wasn't much to do system-wise at the time, so that was most of his job.) Over the course of a few weeks, I turned his job into a series of scripts. Eventually, I integrated the scripts into our administration system and now customer service ends up doing most of it. When the dust finally settles for current projects, I'll be moving the last little bit I have to do over to the outsourced programming team.

      Turning those tasks into automated or simplified processes was almost as much fun as my regular coding work.

      --
      "If you make people think they're thinking, they'll love you; But if you really make them think, they'll hate you." - DM
    23. Re:"Everyone knows maintenance is boring" by omglolbah · · Score: 1

      If the bug you introduce slips through testing and ends up halting an oil refinery and costing the company ## million dollars you tend to get more anal.

      I for one do not fix "bad code" without completely and utterly covering my arse. And have a work order.. And have backups... And get the code changes reviewed and signed off on... BEFORE putting them into the repo...

      While you can do refactoring and cleanup on a lot of code... sometimes "it works" is good enough. It wont be touched again until the system is modified and in the case of where I work that usually means a full rewrite of code. (mostly because the hardware has changed too much in the 15 years since the last update... the oil/gas industry is notoriously slow to adopt new tech :-p)

      And on the responsibility issue?

      Damn right I'm afraid to take responsibility... I doubt all that many professional coders enjoy the thought of costing their company hundreds of millions of dollars due to a fuckup that halted an oil refinery :-p
      Changing the code is cumbersome ass hell administratively for a reason...

      Aaaand, time to go back to being grumpy in my cubicle.. :-p

    24. Re:"Everyone knows maintenance is boring" by NewbieProgrammerMan · · Score: 1

      If the bug you introduce slips through testing and ends up halting an oil refinery and costing the company ## million dollars you tend to get more anal.

      Well, of course. But then the oil refinery is going to have risk-averse management willing to pay more for risk-averse software development, and I don't have the detail-oriented personality needed for that kind of analness. So I wouldn't be touching that code anyway. ;)

      For what it's worth, if I worked in the class of business you're in, I'd not be looking to take responsibility for anything I didn't have to. They probably don't pay non-management people enough to warrant that level of concern in what comes out of your business unit.

      --
      [b.belong('us') for b in bases if b.owner() == 'you']
    25. Re:"Everyone knows maintenance is boring" by omglolbah · · Score: 1

      Well, I make around 72k USD a year which is ok I guess.

      But you might be surprised how hard they press to cut costs in development in some areas ;)

    26. Re:"Everyone knows maintenance is boring" by Anonymous Coward · · Score: 0

      While not breaking anything in a 20M SLOC program.

      I worked on guidance, navigation and control software maintenance. If I messed up and the 7 levels of testing after me didn't catch the issue, people could die. Further a multi-BILLION $$$ vehicle could be lost with cargo worth hundreds of millions of dollars.

      In 7 years, I introduced 2 errors. When I left, the entire 11 person team had 1/2 errors per year error rate. One of the errors was specifically questioned by me and considered by a team of 15 people for 3 weeks before we decided to do nothing about it. How did such a low error rate happen? Process, checklists for checklists, formal reviews and a little skill. We had 1 computer scientist in the team. The rest of us were engineering and math majors. I think CS people don't like rules or process.

      For example, we couldn't reformat source code. Every line touched had to be touched for a valid new requirement. The compiler output nicely formatted code, so the source format wasn't important. Our initials were tagged to every LOC that was touched. Talk about personal responsibility.

      An error was defined as "not meeting the intent of the requirements." Performing a calculation 1 pass late was considered a major error in this real-time system. The highest priority code ran at 25Hz, so 1/25th of a second late was an error.

      OTOH, we were very expensive. My code is still flying. Watch the EXTREMELY smooth shuttle landing in 11 days.

    27. Re:"Everyone knows maintenance is boring" by NewbieProgrammerMan · · Score: 1

      That sounds like good money to me. :) It's not enough to make me willing to take responsibility for things that could cost a client millions of dollars, but I could definitely do software development again for that kind of money.

      However, you might be surprised how unsurprised I'd be concerning silly business decisions nowadays. ;)

      --
      [b.belong('us') for b in bases if b.owner() == 'you']
    28. Re:"Everyone knows maintenance is boring" by omglolbah · · Score: 1

      Sometimes I miss working in a less "important" place though..

      I used to do exhibit development at Bergen Science Center (www.vilvite.no) which while it paid quite a bit less, it was more stimulating from a creative standpoint.

      Money is good, using your skills also.. but sometimes being able to build something with the sole purpose of showing how something works to kids can be damn rewarding! :D

    29. Re:"Everyone knows maintenance is boring" by Cro+Magnon · · Score: 1

      With one subsystem I worked on, it wasn't that I couldn't understand it. It's that nobody could understand it. It went years with no changes more complicated than one line fixes because everyone was afraid to break it. Finally, I got to rewrite it for Y2K, and everyone agreed that it was a vast improvment over the old crap.

      --
      Slow down, cowboy! It has been 4 hours since you last posted. You must wait another few hours.
    30. Re:"Everyone knows maintenance is boring" by Cro+Magnon · · Score: 1

      Clearly you've worked only on code that needs a bit of tidy up. Try reading code that hasn't been documented well if at all, and looks like it's been run through a code obfuscator (ie not just poor formatting), then realising that not only is the task the code is suppose to accomplish not documented, but the people who wrote the original code left while you were still in primary school. Oh by the way it's part of a poorly integrated but critical system and if any part doesn't work exactly the way the old part did, you're in trouble because the whole system falls apart.

      Been there, done that. At the end of the process, it WAS fun. But, I did pick up extra gray hairs during the process of getting from the old spaghetti code, with meatballs, to something that humans could understand.

      --
      Slow down, cowboy! It has been 4 hours since you last posted. You must wait another few hours.
    31. Re:"Everyone knows maintenance is boring" by molo · · Score: 1

      I think he meant macros in your editor to format the code.

      -molo

      --
      Using your sig line to advertise for friends is lame.
    32. Re:"Everyone knows maintenance is boring" by tomhudson · · Score: 1

      And then you have the original author of the body of code you just killed/refactored. He wont be so amused about you rewriting in one week what he spent four months writing. Expect to hear nitpicks and complaints from his side. You won't be able to ask him anything about the code anymore because "you destroyed it."

      Getting over that one is easy - show them the bug, the solution, and offer to let THEM file the bug fix. You get them on your side, you get the code cleaned up, and you get increased communications. It's simple if you don't see this as an exercise in boosting your own ego at the expense of others, but as a task that is inherently interesting, like any puzzle.

      Case in point: One day, I found, fixed, committed, and logged as fixed, 28 bugs. This overwhelmed testing, obviously, as well as the guy who was the maintainer of the code. So, next day, I sent him the diffs and let him edit and commit. Problem solved - except that he couldn't keep up with committing the diffs. So, in the end, we ended up that I'd send him the diffs, he'd look at them, and if he had no beef, I'd commit them and he'd pull the changes out. As for logging the fixes, who cares who got credit? (but since I had root access on the machine hosting svn, it was no big deal to get his password and log them as fixed by him so as to reduce conflict).

      Also, there's no reason why you can't make the fix, and comment it out, with a "NOTE: Candidate fix for bug #nnnn. Send blame to me@youknowwhere.com". This way, anyone looking at the code sees (1) that there's already a potential fix, and (2) that there's a contact to discuss it with.

      Also, refactoring should never be "huge" on production code. Incremental. As limited in scope as you can make it. But even with those restrictions, a 50% reduction in bloat over time is reasonable, because a lot of code is copy-and-paste, because people are in a hurry. If you explain to them that you KNOW that it's not their fault that they had to do a quick copy-n-paste, that it's f***ing marketing that always over-promises, and that you're doing it so that we can ultimately make our own lives easier, they'll get on board. If you act like a total ass and go "gee, that was stupid of you", of course you're going to get a big F.U. in response.

      As for taking the blame, if you can't stand the heat, you really should get out of the kitchen. We don't have to produce perfect code when fixing it. Just better code than it was before. It's an iterative process, after all. If we fix 10 bugs and introduce 1 new one of equal or lesser severity, we're way ahead of the game. Saying "Oops - I had a brain fart when I wrote that" isn't that hard to do. It'll get people laughing with you, and not at you.

      Just some thoughts. But yes, I really do enjoy fixing code. Even ghastly, undocumented code. Yes, it makes me want to scream sometimes, but when it starts coming together, it's NICE!

    33. Re:"Everyone knows maintenance is boring" by mcgrew · · Score: 1

      Bug reports are for the issues customers have complained about and nothing else.

      This is of course not the fault of coders, but the PHBs, but it's what's wrong with commercial software. Can an electrical or automotive engineer here tell me if you have the same problems with your PHBs?

    34. Re:"Everyone knows maintenance is boring" by tomhudson · · Score: 1

      OMG, somebody fire this jerk. In most cases adding macros MAY make the code more readable for you, but the next poor guy who comes along can no longer look at that section of code to see what's going on, but must now combine the code he's reading with a macro that he can only assume was implemented properly in the first place.

      People will often hard-code a value, figuring that eventually, they'll "fix it". "Eventually" never happens, so you have your code littered with hard-coded magic constants.

      Which is easier to figure out, ERR_INDEX_OUT_OF_BOUNDS or -4096? OP_UPDATE_CLIENT or 32.

      Which is clearer:

      unsigned long mask = 8196;

      ... or ... unsigned long mask = CUST_IS_ENABLED & CUST_HAS_BALANCE;

      Now, let's see an example of what happens if we then use a macro ...

      #define DB_DEFAULT_NAME "whatever";
      #define DB_DEFAULT_HOST "boxen_489" // NOTE: don't want to use localhost by default!!!
      #define DB_DEFAULT_PORT 40000 // NOTE: this is to connect to the second instance by default
      #define DB_DEFAULT_USR "db_acct_496"
      #define DB_DEFAULT_PW "hey_stupid!"
      char* DB_name = DB_DEFAULT_NAME;
      char* DB_host = DB_DEFAULT_HOST;
      char* DB_usr = DB_DEFAULT_USR;
      char* DB_pw = DB_DEFAULT_PW;
      int DB_port = DB_DEFAULT_PORT;
      #define DB_USE(mysql_resource) mysql_real_connect(mysql_resource, DB_host, DB_usr, DB_pw, DB_name, DB_port, null, 0);

      This ensures that sane defaults are used (for that particular app) if nobody changes anything, but that it can be changed at runtime. Defaults are set in one place, code is simpler to maintain, and easier to read. Any time you can fix it so that you always have defaults that "just work", that they can be set in one place, and that you can make it simpler to read, you've increased maintainability and squelched a few potential bugs.

    35. Re:"Everyone knows maintenance is boring" by tomhudson · · Score: 1

      For most of your arguments, please read my responses elsewhere. There's no reason why you can't clean up small areas of code, and the time savings will start to add up.

      As for:

      Good luck getting them on board with your big plans, when they are already working 60 hours a week trying to get their actual assignments done

      This is a management problem. If people are doing 60 hours a week on code, they're working well below peak efficiency, and probably introducing more bugs than they're fixing. It also indicates that management either didn't allocate resources properly, over-promised, or otherwise screwed up in their planning. In other words, they didn't "manage" properly.

      It's also a programmer problem, because programmers often don't have the guts to say "I'm past my peak. I'm going home. See you guys tomorrow." and confront management over the screw-up over resource allocation and planning.

      How many times has coding become a negotiating session, where each side is trying to bargain as to how long it'll take? That's just stupid. If you say "One to two days" they hear "one day", and then cut it in half. So you add an extra day, they still cut it to one day, because they expected you to add the padding ... and $DIETY help you if you run into something unexpected - which you will, because it IS buggy code if you have to fix it, so there's going to be something unexpected by definition.

      1. Refuse to play the "negotiate how long" game. Be honest. And be up-front that you're being honest. "Honestly, it'll take what it takes. Or do you want me to lie and pull a number out of my rear end that we both know is BS?"
      2. It's not your responsibility to fix managements' screw-ups. They didn't allocate the resources, or they over-promised? The only way to prevent that from happening again is to not let them make it your problem - because it isn't your problem. Make it clear that it wasn't the programmers who over-promised, but the marketroids, and respond positively with a "Yes we can do it - here's what we believe it's probably going to take in terms of people and time."

      Failing that, book in sick and start interviewing for another job. As a coder, you can fix broken code, but not broken business processes. And if you're a manager, stop trying to manipulate people. There's a big difference between managing and manipulation.

    36. Re:"Everyone knows maintenance is boring" by tomhudson · · Score: 3, Insightful

      Then you have a process and management problem, not a coding problem.

      One person should have the authority to approve or disapprove.

      It's like when you make a complaint, and they say "I'm sorry, I can't do that." The proper response is "Then why am I wasting both of our time talking to you? Please pass me to someone who can."

      Strictly a management problem.

    37. Re:"Everyone knows maintenance is boring" by Anonymous Coward · · Score: 0

      That's great, until your huge refactoring introduces a new bug

      Originally, the concept of refactoring was based on a thesis which laid out the semantic equivalences for the transformations used. Since then, the concept of refactoring have been refactored as messing with the code, apparently.

    38. Re:"Everyone knows maintenance is boring" by tomhudson · · Score: 1

      I wish I worked with you.

      Everyone who's worked with me on code has, when the time comes to part ways, thanked me. They've seen me stand up to the boss for them, they've seen me take the heat for their screw-ups rather than point fingers, etc. Heck, I've even written their reports for them, their on-line dating ads, negotiated claim settlements with their car insurance, done their backups when they haven't, recovered them from those backups when the inevitable "Oh shit ... ummmm... do you have a copy of all my files for the last year? I think I deleted them", taught them stuff they should have already known but didn't, helped the testers find the bugs, made the coffee, bought snacks for everyone, tried to explain the boss's point of view to everyone so that they could see there's two sides to it, taken the boss aside and told him when he's pushing against a piece of string or being really counter-productive, told him to F off when he's gone too far overboard, etc.

      It's the right way to work, and I've been doing this for too long to bother with the BS of negotiating how long something is going to take, or how many corners can be safely cut. In case of urgency, I'll cut as much as I can, but there's a limit before it gets counter-productive, and having to do it logged into a live server, editing the code, recompiling, linking, etc., sure, I'll do it, but I'm going to be extra cautious, and it's going to be replaced asap with code that's properly fixed before I do anything else, so kindly don't bug me for the rest of the afternoon :-)

    39. Re:"Everyone knows maintenance is boring" by tomhudson · · Score: 1

      Our initials were tagged to every LOC that was touched. Talk about personal responsibility.

      THAT is a key point. There should always be an @blame line or equivalent. I put my external email there, so that even 10 years down the road, if a problem comes up, they know who to blame, or who to ask.

      And congrats on your code.

    40. Re:"Everyone knows maintenance is boring" by Amouth · · Score: 1

      or a list of Bugs/features/changes that have a milestone down the road and avg out to stupidly short amounts of time.

      i get that daily - "lets tack this on the list - its small compared to the list" - repeat every couple days. and yet they expect it to take exactly as long as it should have when we started..

      --
      '...if only "Jumping to a Conclusion" was an event in the Olympics.'
    41. Re:"Everyone knows maintenance is boring" by tomhudson · · Score: 1

      You don't tell them you're doing that ... you just do it. It's quicker anyway...

      You could have made the wrong call, chasing dead end, the time is up and what was required is not done. Happens as often as not, though experiences improve your percentage.

      ... if you haven't developed the nose for bugs, then you're wasting your time anyway. Some people have it, some don't. It's like some people are afraid to question code because it mostly works. If they haven't got the "nose" for it, debugging is going to be hell for them. Boring. Frustrating.

    42. Re:"Everyone knows maintenance is boring" by evil_aar0n · · Score: 1

      Just happened to me, the other day. In spite of our "take the time to do it right" slogans all over the place, I have to have $this done _today_, even if it sucks.

      We're not a small, back-ass outfit. We're a global, Fortune 25 or so. And it's not an isolated incident.

      --
      Truth, Justice. Or the American Way.
    43. Re:"Everyone knows maintenance is boring" by digsbo · · Score: 1

      If it's a major bug on a production system, hack it and enter a new bug that it needs to be properly fixed later. Keep it on your boss' desk. If people don't understand that adding work makes the project take longer, argue with them. Argument is how pushy people get stuff from the world. So push back. Hard, if you have to.

    44. Re:"Everyone knows maintenance is boring" by steveha · · Score: 1

      OMG, somebody fire this jerk.

      Don't leap to conclusions like that. If he is an old-school C programmer, "macros" may just mean "constants".

      If you have C++, you can do

      unsigned int CUSTOMER_CODE = 486;

      but in boring old C that would be

      #define CUSTOMER_CODE 486

      Now, if you are talking about something like these then I'm with you. Up against the wall!

      Or of course he could be a LISP programmer. Because we all know that macros are what gives LISP its awesome bone-crushing power.

      Unless the above should have been in [sarcasm] tags, in which case, the immortal words of Miss Emily Litella apply. (grin)

      I had to look that one up. "Never mind!" So now we know.

      steveha

      --
      lf(1): it's like ls(1) but sorts filenames by extension, tersely
    45. Re:"Everyone knows maintenance is boring" by Dragoness+Eclectic · · Score: 1

      You're my kind of programmer. I've done this sort of thing at almost every job I've worked at--fixed the horrendous legacy code so it worked better, faster and was now documented. (When refactoring, also document.) I'm good at software maintenance, and tell prospective employers that at interviews.

      Also, people skills. Word. It's amazing how much more cooperative people are when you're not a dick. A little humility and empathy with your neighbor goes a surprisingly long way. Politeness counts.

      --
      ---dragoness
    46. Re:"Everyone knows maintenance is boring" by CptNerd · · Score: 1

      Wish I had mod points and hadn't already commented. I'm working as part of the O&M team at a big gov't project, and I enjoy the hell out of it. Over the past 25 years I've done development, I've used the latest "cutting edge" silver bullet language/OS/paradigm, and it seems to have given me the ability to ferret out, diagnose and fix problems that I find with software of whatever age. I find I like things like police procedurals and real mysteries much more than I did when I was younger, and it may be related. Finding the solution to an intermittent bug, or one that's deep in some legacy function is kind of like being in CSI unit, except the strangeness of the code is more like being in a real-life X-files episode...

      "Sorry, Scully, no human being could have written code like that..."

      "Mulder..."

      --
      By the taping of my glasses, something geeky this way passes
    47. Re:"Everyone knows maintenance is boring" by jgrahn · · Score: 1

      You don't tell them you're doing that ... you just do it. It's quicker anyway. Start by cleaning up the formatting and moving stuff into headers, some righteous macros to make the code more readable, etc., as a first step in "getting familiar with the code.

      And you just made it much harder to diff the code -- an invaluable debugging tool. That might piss me off.

      After all, you don't want to break something while fixing a problem. You'll probably notice some code that looks like it's either "copy-n-paste" or dead. Keep it in mind.

      You'll find potential for simplifications as you go along, and you'll also probably find other bugs and stupidities, like parameters that are never used (that happens a lot as code gets modded).

      No, unused parameters is the *first* thing you see, when you turn on all those compiler warnings which your elders invariably fail to turn on.
      gcc -W -Wall -pedantic -std=c89 is your friend.

      Code that doesn't smell right. Signed ints that are unsigned elsewhere. Potential buffer overruns. Unsanitized unput. In-line code that really should be in a separate function call both for clarity and for re-use. Look through the bug list - if the bug (or potential bug) you found is there, great - mark it as fixed. If not, log it, then mark it as fixed. Either way, your fixed bug count goes up - and if you can show that you've fixed bugs before they're found, that's just a bonus.

      That's fine in a sense, but you have to realize that when you're new you don't know what's important. You don't know which parts are likely to change. You don't know the actual, unwritten requirements. You don't know the cost of an error. You don't know if the users will come to you if you make an error, or to your boss, or just silently suffer.

      For example, the piece of code I've maintained on and off for years sucked when I got it -- C++ as written by a C programmer forced to use C++. Guess what? Most of it still sucks. I still get scared and angry when I read it. But the parts *which mattered* have been improved. In this case, the few areas which are likely to get added functionality, i.e. the areas where I have had to add functionality in the past. As for those sucky parts, I know that they kind of work (well enough so noone has complained anyway). I just look the other way, and trust them.

      On the other hand, I *do* refactor code more than most of my coworkers. And I know that the *real* changes which people *want* couldn't have been done quickly and correctly if I hadn't. But I sometimes think it's a character flaw -- a kind of territorial pissing, to make the code mine. And I sometimes think that even though those people who came before me were complete morons, they worked hard and they succeeded: their "sucky" code is so good that people are willing to pay me to maintain it.

    48. Re:"Everyone knows maintenance is boring" by Anonymous Coward · · Score: 0

      Refactoring bad code is only scary if you're afraid to take responsibility for the code you put out.

      Who said anything about scary?

      I'm no novice programmer, and I've done more than my share of refactoring bad code. But you and everyone else who replied along the lines of "it's easy, all you gotta do is..." are assuming that your means and methods will work in all situations, and that when someone says "but there's no time for that", that they really mean "but it's too big and scary."

      Get real. Your own anecdotal experiences aside, you're not the only programmer who knows how to refactor code. Sometimes when people say there's no time, it's because there really is no time!

    49. Re:"Everyone knows maintenance is boring" by shmlco · · Score: 1

      "Now, if you are talking about something like these then I'm with you. Up against the wall!"

      Since he said, "some righteous macros", I had to assume he meant more than just a few constants.

      "I had to look that one up."

      Kids these days... (grin)

      --
      Any sect, cult, or religion will legislate its creed into law if it acquires the political power to do so.
    50. Re:"Everyone knows maintenance is boring" by tomhudson · · Score: 1

      You don't tell them you're doing that ... you just do it. It's quicker anyway. Start by cleaning up the formatting and moving stuff into headers, some righteous macros to make the code more readable, etc., as a first step in "getting familiar with the code.

      And you just made it much harder to diff the code -- an invaluable debugging tool. That might piss me off.

      You could try this - diff can be set so it ignores trivial formatting changes, like whitespace, newlines; second, if you're that worried about it, you shouldn't be diffing the source, but code that's been passed through the first stage of the compiler so that you're diffing the code as the 2nd stage of the compiler sees it - after comments, white space, etc., have been removed. If its all the same when the compiler sees it, the compiler isn't going to complain (there's a command-line switch for generating it ...)

    51. Re:"Everyone knows maintenance is boring" by bjourne · · Score: 1

      I doubt you are working in a large company, in which case your naive attitude just wont fly.

    52. Re:"Everyone knows maintenance is boring" by Anonymous Coward · · Score: 0

      That's great, until your huge refactoring introduces a new bug.

      This is why you refactor the code alongside the original. Fix bugs in parallel. When there's a new bug, you roll back to the old, non-refactored code and see if it goes away.

      I'm impressed. When you introduce a bug you always are able to detect it right away. As far as I can tell, most programmers introduce bugs inadvertently, and sometimes don't know they've done it. They show up later, in QA if they're lucky, or when the customer's application fails. Your technique may work for exceptionally talented programmers, but for most programmers it invites disaster.

    53. Re:"Everyone knows maintenance is boring" by tomhudson · · Score: 1

      And on the responsibility issue?

      Damn right I'm afraid to take responsibility.

      ... and this is an attitude that has to change. Other professions, you ARE responsible. Engineer or architect who did work on a bridge that collapsed? You're responsible. Author who wrote something defamatory in their latest book? You're responsible. Running a day-care and you hired a child molester? You're both responsible.

      This "it's software - I'm not taking responsibility for it even though I worked on it" attitude is what allows extremely buggy software to ship. If the individual coders were held to the same standard as individua workers in any other profession, they would be a lot more reticent to allow a module they've worked on go out without them going over all the code it contains themselves. We'd see a lot fewer "quick fixes" and more in-depth analysis to find the real problems, and also to eliminate the mind-set that "bugz iz no my problemo".

      Take a bit of pride in, and responsibility for, what you do, or find something else to do that you CAN take pride in.

    54. Re:"Everyone knows maintenance is boring" by tomhudson · · Score: 1

      Sometimes when people say there's no time, it's because there really is no time!

      Then that's a management issue. They screwed up either in allowing something to go out w/o adequate resources for testing, some similar bad decision.

      The "there's not enough time" excuse is just that - an excuse. It's always preceded by a series of bad decisions that could have been avoided. More resources, less feature creep, a more reasonable timeline ...

      There's never enough time to do it right, but there's always enough time to do it over - badly.

    55. Re:"Everyone knows maintenance is boring" by tomhudson · · Score: 1

      I spoke to an engineer friend of mine, and their professional body and their code of ethics means that they can, and do, refuse to sign off on, for example, structural changes without proper testing - that THEY can observe first-hand if necessary, to satisfy themselves before giving their written approval. And if the boss tries to fire them over it, good luck trying to hire another engineer - the professional order black-balls the company.

    56. Re:"Everyone knows maintenance is boring" by Anonymous Coward · · Score: 0

      I doubt engineers taking more responsibility would fix that. We do what we can with what we are given. I have to justify changing anything to management and -they- decide if something is worth fixing or not.

      In the systems I've worked with in the past 2 months I have found several faults but none of them have been fixed. Mostly because they have no "practical effect" in the system, but still could cause problems in some cases...

      I hate not fixing them, but I sure as hell wont modify a system without permission.

      It is not up to the coder when something ships. If something is not done you have two choices. Do a quick fix, or ship it broken.

      Which one do you think keeps you employed?..

      And I never said I didnt -take- responsibility. I hate it, I would rather not. Mostly because I never ever write anything from scratch at work and always build on a system that is so horribly made that I want to stab someone with a sharp object.

      The world is far from perfect. I would love to only release good and proper stuff out of my custody but damnit, I cant be at work 36 hours a day. And There are only so many people able to work on these systems within the budget.

      And as a final comment:

      When a bridge falls down because management decided not to fix or investigate a "possible flaw" in the design due to too strong a focus on making quick money the engineer is not responsible. The management is. I always flag problems to management when they decide to cut resources or time.. but they make that decision, not me. If I had to take that kind of responsibility I would hardly be a "lowly engineer".

      Now that I'm done ranting I'll get back to doing something constructive .

    57. Re:"Everyone knows maintenance is boring" by tomhudson · · Score: 1

      When a bridge falls down because management decided not to fix or investigate a "possible flaw" in the design due to too strong a focus on making quick money the engineer is not responsible. The management is.

      No, the engineer is. We had a coroner's inquest up here that included hauling in the original engineers to testify specifically because they are responsible. They signed off on it. They can't use the "Nuremberg defense" of "I was just following orders." We need to have the same ethics as other disciplines - this would help nip a lot of problems in the bud. Pressured to do a quick-and-dirty fix? This would relieve some of that pressure, so you can get it right.

      The engineer's code of ethics makes it clear that an engineers' first responsibility is to the public, not their employer:

      1 Engineers, in the fulfillment of their professional duties shall (1) Hold paramount the safety, health and welfare of the public.

      ... and some exerpts

      3. Professional obligations.
      Engineers shall be guided in all their relations by the highest standards of honesty and integrity.
      b. Engineers shall advise their clients or employers when they believe a project will not be successful.

      2. Engineers shall at all times strive to serve the public interest.
      b Engineers shall not complete, sign, or seal plans and/or specifications that are not in conformity with applicable engineering standards. If the client or employer insists on such unprofessional conduct, they shall notify the proper authorities and withdraw from further service on the project.

      3. Engineers shall avoid all conduct or practice that deceives the public.

      7 a Engineers in private practice shall not review the work of another engineer for the same client, except with the knowledge of such engineer, or unless the connection of such engineer with the work has been terminated.

      8. Engineers shall accept personal responsibility for their professional activities, provided, however, that engineers may seek indemnification for services arising out of their practice for other than gross negligence, where the engineers' interest cannot otherwise be protected.

      So, engineers are personally responsible, but under section 8 they can take out an insurance policy to cover their liability for anything except gross negligence.

      s/engineer/programmer/gi;
      s/plans/code/gi;

      Why do programmers insist that they shouldn't be held to professional standards? This code of ethics, applied to programmers, would not only prohibit coders from working on code that is of dubious intent (spyware, overly-intrusive web sites that don't conform to data protection laws - I'm thinking specifically of Facebook as one that got caught), but require them to whistleblow. It requires cooperation between the original coder and the maintenance programmer if possible, so the company can't just say "they're too busy - just fix the damn thing!"

      If we want to be treated as professionals, we need to act like professionals. Professionals aren't allowed to put the paycheck before ethics.

    58. Re:"Everyone knows maintenance is boring" by dgatwood · · Score: 1

      You roll it back at the point when you catch the bug. If you maintain both in parallel for several months as I suggested, then the odds of missing an important bug are fairly low.

      --

      Check out my sci-fi/humor trilogy at PatriotsBooks.

    59. Re:"Everyone knows maintenance is boring" by mcgrew · · Score: 1

      That's what I would have guessed. Kind of the opposite of commercial software developers (as can be seen in comments in the thread by programmers).

  5. Move the functions to Business by Hyperhaplo · · Score: 3, Insightful

    No, I'm serious. It's the latest Trend (tm).
    Cut the IT production support budget, cut the IT staff, move the functions that used to be IT Prod support to business and let their budget handle it.

    If you can't see the humour in seeing a business person make direct live updates to a database table in Production (IT doesn't have Production access.. but Business does .. [go figure]) then you probably can't see that SEV1 sailing in from over the horizon to make your day just that little bit more special.

    As for business editing files directly in Production because the cost of having IT do it (process - backup file, edit file, copy file to prod with due authorisation, verify the change) can just be avoided.

    After all, we don't really need to pay for Production Support and System Maintenance and Documentation. The system works without these things, doesn't it?

    What could possibly go wrong?

    --
    You have a sick, twisted mind. Please subscribe me to your newsletter.
    1. Re:Move the functions to Business by Opportunist · · Score: 1

      Are you looking for a consultant? I think I can free a few ... years?

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    2. Re:Move the functions to Business by Anonymous Coward · · Score: 0

      You work at Srpint, don't you?

  6. Maybe I'm just young and foolish... by XPeter · · Score: 2, Funny

    But I really love maintenance. Sure, the job comes with tremendous amounts of stress but it really entertaining. In CCNA, there's nothing better than subnetting a large network :)

    --
    "The difference between genius and stupidity is that genius has it's limits" - Albert Einstein
  7. Important forgotten steps by Lord+Grey · · Score: 5, Insightful
    • One Iteration Planning Meeting (minimum four hours in duration)
    • One Integration Planning Meeting, to schedule changes with all other changes (minimum three hours in duration)
    • Twenty Stand-up Meetings (two per day for ten days) so everyone can tell each other why they're behind on the planned changes
    • Two scheduled Backlog Meetings to reschedule the planned changes that won't make it into this iteration
    • Six presentations to the Senior Management Team of at least one hour each to communicate our effective Change Management Strategy
    • At least three Tag-Up Meetings, called spontaneously, because some people still just don't get it, originally scheduled for 30 minutes each but extended to 60 minutes because exactly one person in the room wanted to argue
    • One Retrospective Meeting, which no one wants to attend because they're already behind on the backlog tasks
    --
    // Beyond Here Lie Dragons
    1. Re:Important forgotten steps by dkleinsc · · Score: 2, Insightful

      See, I've always looked at meetings primarily as a way for project managers who have no technical work to do on the project to feel like they're doing something.

      In fact, this purpose explains the following relationship:
      Number of meetings per week = Stress level of project manager / Time remaining before project deadline

      So early on, you can expect a kickoff and a couple of weekly status meetings. As the deadline begins to loom, suddenly you're looking at 2-3 meetings per day per developer, with many meetings getting called at the last minute. It makes the PM feel like they're doing what they can to make things happen quickly (even if it doesn't), and keeps them from having to face the reality that the project will be late, they can't do anything to prevent that, and they will be held responsible.

      --
      I am officially gone from /. Long live http://www.soylentnews.com/
    2. Re:Important forgotten steps by NoYob · · Score: 4, Insightful
      You know, if you numbered them, then you can write a book (of course add a lot of fluff and unsubstantiated horseshit) called "The 7 Habits of Highly Ineffective Software Teams", have it published, be a huge hit, milk the fucker with another book called the "8th Habit", workbooks, do lectures at $50,000 a pop, and after a couple years, retire rich!

      Dipshit PHBs would be buying them left and right!

      --
      It's NOT me! It's the meds! I'm on 1000mg of Fukitol.
    3. Re:Important forgotten steps by antgiant · · Score: 1

      Am I the only one who can't help but read this post to the tune of the Twelve Days of Christmas?

    4. Re:Important forgotten steps by steelfood · · Score: 1

      And nobody to take charge and responsibility for it all.

      A project done well needs a strong leader who can manage both the needs of the users, the coders, and upper management. Only then can things happen. Without somebody like that, all you'll get out of it is an office tug-of-war between all of the interests. It's why leadership and direction are such important qualities in management, and why companies try to hire and keep the best.

      In fact, it's why the CEO having a vision of where the company's going, and able to keep everybody sold on that vision, is so important. There are probably a million people with the kind of charisma and intelligence as Steve Jobs. But there's only one Steve Jobs, because he's the only one who knows where Apple is going--he's the only one who knows where he wants to go. He's made mistakes in the past perhaps, but only he's fully able to comprehend the lessons learned from those mistakes and meld it into his vision.

      --
      "If a nation expects to be ignorant and free in a state of civilization, it expects what never was and never will be."
    5. Re:Important forgotten steps by bertoelcon · · Score: 1

      As the deadline begins to loom, suddenly you're looking at 2-3 meetings per day per developer, with many meetings getting called at the last minute.

      Wouldn't that hurt the problem by taking developers off getting the project done to talk about what needs to be done?

      --
      Anything can be found funny, from a certain point of view.
    6. Re:Important forgotten steps by HighFalutinCoder · · Score: 1

      You missed the last bullet point: "Quality Software...Priceless" (or perhaps in this case, timeless)

    7. Re:Important forgotten steps by poopdeville · · Score: 1

      Yes, which is why any sane project manager will put that shit off so his developers can develop that super neato unreasonable thingie he wants done.

      --
      After all, I am strangely colored.
    8. Re:Important forgotten steps by jweller · · Score: 1

      You must still be in college. Your reason and sense isn't welcome out here.

    9. Re:Important forgotten steps by bertoelcon · · Score: 1

      Really? I am (in college) and they are not very well liked right here either. I keep telling them a smart ass is still smarter than a normal ass.

      --
      Anything can be found funny, from a certain point of view.
    10. Re:Important forgotten steps by Anonymous Coward · · Score: 0

      Quiet, you're sharing our company's proprietary software engineering department procedures!

    11. Re:Important forgotten steps by Anonymous Coward · · Score: 0

      Indeed.

      I was a Program Manager at a company that does a lot of internet search and book scanning.

      Coming into the role from being a researcher, I was dead set against meetings. I was an engineer once, long before I was a PM - a real one, not a software programmer, although I've done that too.

      Hate meetings. No meeting *ever* sped up project completion. I used to think a PM was someone who's hired to make up for poor management. After being a PM, I'm positive it's true. ;)

      I was forced into meetings by *my* management who felt *I* wasn't doing my job if my calendar wasn't booked solid with meetings (as theirs were).

      So I quit.

      Just as soon as I fully vested. :)

    12. Re:Important forgotten steps by theJML · · Score: 1

      Wouldn't that hurt the problem by taking developers off getting the project done to talk about what needs to be done?

      Tell that to the managers who set-up and require attendance at the meetings. Meetings are one of the most misunderstood problems in modern software development. They're both very important for the vision and requirements in the beginning, and the worst thing for productivity during what were productive times. I agree, some short stand up meetings can be useful, and even a few bug scrubs or update meetings, but by in large, the meetings with developers need to happen as closely to the beginning of the project as possible, and then infrequently afterwords. Management doesn't always understand that meetings may help them understand what's going on, but really screw up the focus and forward movement of the project as a whole when used as noted above.

      --
      -=JML=-
  8. Re:After the software is written it gets maintaine by Animats · · Score: 1

    So they change something and if they can't see the bug anymore they go cvs commit right then and there.

    Yes. Bug trackers should have statuses like "Developer in denial" for situations like that. (Mozilla's bug tracker has a "WORKSFORME" status which is used far too much.)

  9. That's mighty elitist of you by SuperKendall · · Score: 3, Insightful

    "Software maintenance" has absolutely nothing to do with computer science.

    Actually, it does.

    I have a real Computer Science degree, so I know what computer science is about. And while a lot of corporate programming is more drudgery and form assembly than anything, there are a lot of applications of computer science in the real world - from scalability issues in large systems, to proper use of encryption.

    Furthermore the supposedly boring area of "Software maintenance" has a ton of research potential focused around the optimal path to producing correct code. Do code review help? How to team dynamics factor in to code quality? Does Test First really improve code? What even defines code quality? There are programs within companies that experiment with different methods to improve code output, and those experiments are even more valid than ones performed at research institutions since they work on a real-world code base solving a real problem using real people. In fact I would go so far as to say and research being conducted outside of a company on aspect of code quality improvement is pretty much worthless, which is why it's important for researchers to partner with real companies for some studies.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
    1. Re:That's mighty elitist of you by onefriedrice · · Score: 2, Informative

      I have a real Computer Science degree, so I know what computer science is about...

      Except what you go on to describe is software engineering, not computer science. I'm not picking gnats either; the distinction is very real, and I would hope it wouldn't be lost on someone with a "real Computer Science degree."

      --
      This author takes full ownership and responsibility for the unpopular opinions outlined above.
    2. Re:That's mighty elitist of you by Anonymous Coward · · Score: 2, Insightful

      You're using the new definition of CS not it's traditional meaning.

      The combination of academic elitism, a societal trend toward specialization, and a CS tendency to sub-divide complex problems have combined to split the traditional, interdisciplinary Computer Science into multiple sub-fields in the last decade.

      Traditionally we had Computer Engineers to design and build hardware and Computer Scientists to design and build software to make use of those devices. (The business world added Computer Information Systems specialists who could translate the jargon of the other two into something comprehensible to ordinary folks.)

      The old CS is a combination of mathematics, science, and engineering all rolled together. The interdisciplinary nature provided great energy, but perhaps trying to hold such an unwieldy mess together was futile. Now we have the "pure CS" crowd restricting itself to the mathematical foundations with occasional small steps into science. The engineering aspects are claimed by the new "Software Engineering/Infomatics" field and the "Information Technology" area provides a nice holder for those "practical" issues of actually using technology.

      Hopefully after another decade folks will see the folly in over-specialization.

    3. Re:That's mighty elitist of you by pchan- · · Score: 1

      A Turing machine cannot solve the problem of software maintenance. You cannot model software maintenance as a finite state machine. There is no algorithmic solution. There is no space-time trade-off that you can make improve the situation.

      It is not a problem to be solved by computing. It is outside the realm of Computer Science, and clearly in the lap of Software Engineering.

    4. Re:That's mighty elitist of you by Anonymous Coward · · Score: 0

      Stop redefining Computer Science to just the Algorithmics sub-field and assuming that's the only valid definition.

    5. Re:That's mighty elitist of you by Brian+Gordon · · Score: 1

      Hopefully after another decade folks will see the folly in over-specialization.

      You mean, as science advances fields will get more and more specialized and specialization won't stop?

    6. Re:That's mighty elitist of you by Anonymous Coward · · Score: 0

      No

    7. Re:That's mighty elitist of you by Anonymous Coward · · Score: 0

      Specialization is very important for the advancement of knowledge because it allows us to focus on a subset of the problem space. But not stopping to look at things from a high-level perspective is dangerous and CS of all disciplines should recognize the need for both breadth and depth.

      There's a growing trend for interdisciplinary study right now among other disciplines, but CS is headed in the opposite direction and assuming that in about 40 years it has matured to the point that it can and needs to be safely sub-divided into distinct sub-fields.

    8. Re:That's mighty elitist of you by SuperKendall · · Score: 1

      A Turing machine cannot solve the problem of software maintenance.

      That is true but does not mean it's not a valid sub-field with equal importance. The same kinds of issues exist in "real" engineering disciplines where a plan must go from conception to reality involving many different people.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    9. Re:That's mighty elitist of you by SuperKendall · · Score: 2

      Except what you go on to describe is software engineering, not computer science.

      True the latter part of my post is less pure science. But that does not mean it is not valuable too, which is why I went on to mention it even though somewhat tangental, and is as worth of research as more "pure" computer science issues would be.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
    10. Re:That's mighty elitist of you by Anonymous Coward · · Score: 0

      Subfield of Computer Science that are to be excluded by your arbitrary definition:

      Computer graphics, computer vision, operating systems, human-computer interaction, database, networking, natural language processing, artificial intelligence, computer security, computer architecture, and yes, software engineering.

      (You disagree? Then describe me an algorithmic requirement for realtime 3D rendering, or task scheduling under interactive load.)

      A Turing machine cannot solve the problem of software maintenance. You cannot model software maintenance as a finite state machine. There is no algorithmic solution. There is no space-time trade-off that you can make improve the situation.

      You can say your totally arbitrary definition of computer science excludes SE. Whatever. That doesn't change the fact that SE is considered a valid field of computer science and studied throughout computer science departments in the world's universities.

    11. Re:That's mighty elitist of you by pchan- · · Score: 1

      I completely agree with you, it is a very real engineering problem that requires serious academic examination. This is a good candidate for something like that Software Engineering Institute. The issue is one of writing software and managing a code base. It is a logistics problem. Maybe it can only be solved by a new language or method of source control or verification. In that area, yes, it's open to computer science to explore. But in general, it's a code architecture, testing, development methodology problem, which is the concern of software engineering.

    12. Re:That's mighty elitist of you by crispytwo · · Score: 1

      And pretty soon, no one will know anything about the broad picture and maybe only know something about what they are specialized in.

      We see this already with the crowd of students entering the work force now with one OS and one or two programming languages, and a handful of ideas that don't connect the dots.

      Oh well, the renaissance of computer science is over, long live the technicians.

      BTW - maintenance is for those who use software, not for those who create it. Who, in their right mind, would want to maintain anything? "Not I", says the mathematician; "Not I", says the philosopher; "Not I", says the monkey.

    13. Re:That's mighty elitist of you by tolkienfan · · Score: 1

      I concur that the definitions of Computer Science and Computer Engineering are changing, but what bothers me is the lack of understanding of many foundations of computer science to be found in CS graduates.
      I've been interviewing a lot over the past couple of years. I mostly look for people who demonstrate good problem solving, intelligence, some knowledge of the subject, and the ability to enter into technical discussions.
      But it's disheartening when many graduates haven't done algorithms, data structures, analyzing run-times and space requirements.
      Our software has very short time frames, and we really expect candidates to be able to choose appropriate data structures and algorithms to fit those requirements. A good knowledge of the engineering side of things is important too, but without that foundation candidates are non-starters.

      I'd also like candidates to be able to make a clear argument of why a particular algorithm solves the problem - not a rigorous proof, but the basic argument. That's pretty rare though...

    14. Re:That's mighty elitist of you by tolkienfan · · Score: 1

      Computer Science is not limited to things that can execute inside a turing machine. A large body of computer science is made up of correctness proofs - which, strangely, weren't written by programs running on a universal turing machine, for one example...
      What is and what is not in the realm of Computer Science is not defined by what can run inside a turning machine.
      I also doubt that the turing machine will be the end of Computer Science.

    15. Re:That's mighty elitist of you by onefriedrice · · Score: 1

      I'm a fan of precise language. It has nothing to do with elitism, and of course I realize that applied science encompasses many disciplines. I find nothing wrong with incorporating more specific terms as these areas of research are refined.

      --
      This author takes full ownership and responsibility for the unpopular opinions outlined above.
    16. Re:That's mighty elitist of you by Anonymous Coward · · Score: 0

      Nobody questioned value of software maintenance. Just where did you get your degree?

    17. Re:That's mighty elitist of you by Anonymous Coward · · Score: 0

      Use of precise language would mean using a new term for the restricted subset of CS that is now being called Computer Science and leaving the older broad meaning alone.

      When the sub-field of software engineering splintered off there was a quieter and more subversive splintering by the algorithm/computability group. Instead of choosing a new name they insisted that their sub-field was "true CS" and that all of the other sub-fields should split off like SE and leave the CS label to them alone.

      To those of us who remember the first few decades of the discipline the term "elitist" seems very appropriate for that situation.

    18. Re:That's mighty elitist of you by Anonymous Coward · · Score: 0

      A Turing machine cannot solve the problem of software maintenance. You cannot model software maintenance as a finite state machine. There is no algorithmic solution. There is no space-time trade-off that you can make improve the situation.

      Now, where would I found a proof of all of this? Even an exact formulation of the problem of software maintenance would suffice in this case.

    19. Re:That's mighty elitist of you by Richard+Steiner · · Score: 1

      "An expert is someone who knows more and more about less and less until they know absolutely everything about nothing."

      I forget where I saw the above quote (I would guess a tagline on FidoNet), but it sometimes seems to apply.

      --
      Mainframe/UNIX Bit Twiddler and long time Windows/Linux Hobbyist.
      The Theorem Theorem: If If, Then Then.
    20. Re:That's mighty elitist of you by mhelander · · Score: 1

      What if the problem of software mainteinance could be broken down into sub problems, each of which having an algorithmic solution?

  10. Good luck by ZosX · · Score: 1

    A lot of admins are pretty wary of throwing the latest and greatest on their boxes for the simple reason that it may, or shall I say, will break things. Its no fun to throw a service pack on to find it has nuked your installation, or upgrading your mail server to find out that your configuration isn't global to the new version. Now that sort of thing happens. I'm just saying there are all kinds of little issues (or huge ones) that can arrive. At least with older software you already know the faults and are prepared to work around them. Security has become the number 1 reason that software is now a continuous version stream with patches rolling out every 6 minutes. The UNIX-like OSes of the world have always handled this concept more gracefully, but when you look at windows that wants to reboot 4 times a week for updates it seems much more like an afterthought. Even linux can handle most updates without a reboot or hiccup. You don't even have to know that they occur of you like. If they can figure out how to swap the kernel live, we might start to see some really insane up times. I don't understand his argument. Most server type operating systems have few issues with updating themselves on the fly. There are a lot of insecure, unpatched boxes out there, but that is more bad administration than anything. Is there something that I am missing here or is he talking about ease of migration with data and new versions of software and keeping types universal so that they will interface with different versions? THAT is a problem. Like, for instance, I've been having some fun compiling old versions of stuff on Ubuntu and trying to figure out what library versions it was compiled against. The fat binary blob is not such a bad idea when you have terrabytes of space... :)

    1. Re:Good luck by Anonymous Coward · · Score: 0

      Well, do you want all your problems at once, or one at a time? I've worked with something that worked sort of like they describe and if I ever design a programming language I will design it like this. It even could update existing objects if the fields had changed, although for technical reasons that had to be done on-demand. But it knew when all objects were converted so it could throw away the converter.
      P.S. "reboot 4 times a week" - are you trolling here? Windows wants to reboot once a month at most, and often it doesn't want to reboot at all, since often updated files aren't open. Still, I urge you to read http://technet.microsoft.com/en-us/magazine/2008.11.windowsconfidential.aspx since it describes why Windows reboots sometimes, and why maybe Linux should too. The only way around the problems Raymond addresses is to do what they did in TFA, or to use lots of deep magic, possibly introducing mysterious heisenbugs.

    2. Re:Good luck by RAMMS+EIN · · Score: 1

      ``Security has become the number 1 reason that software is now a continuous version stream with patches rolling out every 6 minutes.''

      Which is why I am such a fan of distributions that don't do feature updates. Keep everything the same, only sending out updates to fix bugs.

      ``The UNIX-like OSes of the world have always handled this concept more gracefully, but when you look at windows that wants to reboot 4 times a week for updates it seems much more like an afterthought.''

      I am not so sure. I think Unix got lucky, in that it grew up in a world where computer security was much less of an issue than nowadays. By the time Internet worms and the like became widespread, Unix had had a long time to mature, and faded to the background enough that people had mostly forgotten about it (how many people know what HP-UX is anymore?)

      So you don't see a lot of malware targeting Unix, because it isn't such a big target, because there are a plethora of different, non-binary compatible versions out there, and because most of the outdated versions are mostly out of use and forgotten, whereas the up to date versions are quite mature.

      The big exception to this is popular software that is getting many features added to it rapidly, such as the Linux kernel, various popular desktop programs, and many, many web applications: these are both rife with bugs and often break compatibility on updates. On the other hand, they're still popular, because people want those features.

      The beauty of the Unix universe is that you can have it your way. You can have a stable system with few bugs and little maintenance, or you can have a cutting edge system with the latest features, at the cost of more bugs and time spent on maintenance.

      --
      Please correct me if I got my facts wrong.
    3. Re:Good luck by Joey+Vegetables · · Score: 1

      In the grand scheme of things, Windows and Mac machines, as well as mobile devices, spend between most and all of their time operating primarily as thin clients accessing data housed in UNIX and Linux servers. They always have. Almost all software in widespread use today is distributed, and almost all distributed software contains UNIX and/or Linux components. Thus, the attack area of UNIX and Linux is huge. The clients can often serve as attack vectors against the servers (and the converse is true as well). UNIX and Linux simply are designed better . . . not perfectly, for sure, and not even best in their class (OpenBSD has a substantially better record than either), but still much better than Windows, which has always had the burden of needing to be backwards-compatible with software written for its ABI, and which therefore has limited flexibility in terms of its ability to adapt to increasingly sophisticated security challenges that all connected systems must face if they wish to survive.

    4. Re:Good luck by steveha · · Score: 1

      I think Unix got lucky, in that it grew up in a world where computer security was much less of an issue than nowadays.

      I disagree completely.

      UNIX was designed as a time-sharing system, with many users sharing the same (very expensive) computer. Thus, from the first day, it had security designed in.

      Where UNIX got lucky was that its initial deployments were in low-threat environments, where the security didn't really need to be bulletproof. So, people found security holes and it wasn't a huge deal; the UNIX guys just fixed them. Bored university student finds a way to gain root on the computer, hole gets patched, continue for a couple of decades. By the time of the Internet, UNIX was reasonably solid.

      In comparison, Windows was initially designed to own your whole computer; remember that the earliest versions ran on top of DOS! The design was, just like DOS, that you had full privileges over everything at all times; it was your computer. And, on top of that, Microsoft added every feature they could think of. Then, with Windows NT, they started trying to retrofit multi-user security on top of Windows. By the time of the Internet, Windows was far from secure, and we have been dealing with the consequences ever since. (Remember how the "WinPopup" service used to be enabled by default and people got spam popped up in their faces? Oh, boy.) And there really isn't any good excuse for the way Windows requires you to reboot so often; my Linux systems only require rebooting when I update the kernel.

      Microsoft would have done well to study UNIX and copy it's ideas from day 0. As Henry Spencer famously observed: "Those who don't understand UNIX are compelled to re-invent it, poorly."

      So you don't see a lot of malware targeting Unix, because it isn't such a big target

      But Linux is a big target (running lots of web servers) and you still don't see a lot of malware targeting it. It's much easier to attack Windows, and there are so many Windows machines out there, that most of the effort goes into attacking Windows. But if Linux was a soft target, crackers (or even automated worms) would be taking down web servers in much greater numbers than we are seeing.

      The beauty of the Unix universe is that you can have it your way. You can have a stable system with few bugs and little maintenance, or you can have a cutting edge system with the latest features, at the cost of more bugs and time spent on maintenance.

      I agree.

      steveha

      --
      lf(1): it's like ls(1) but sorts filenames by extension, tersely
    5. Re:Good luck by davecb · · Score: 1

      Actually there was one high-threat environment in the v6 days, PWB (Programmers WorkBench). It had competing contractors using it as a front end to a production G(E)COS system, and they exposed a number of silly security issues.

      --dave

      --
      davecb@spamcop.net
  11. Numeric function calls by argent · · Score: 2, Funny

    FreeBSD 1 and FreeBSD 2 had slightly different semantics for some system calls, but FreeBSD 2 changed the system call numbers, so it was possible to modify the FreeBSD 1.1.5.1 kernel to run the binary Netscape for FreeBSD 2.x by implementing the new API for one call in the old kernel. Alas, I can't find the patch now, which is embarrassing because I was the one hosting it... about 15 years ago.

  12. That is not maintenance. by SuperKendall · · Score: 5, Insightful

    Taking code and cutting its size by half, fixing up all the screwed-up inconsistent formatting, while adding functionality and reducing bug counts, is a pleasure.

    Yes it is.

    But that is not maintenance, as practiced by any rational company. That is development or (more specifically) optimization.

    Maintenance is about solving a problem code is having, with the absolute smallest number of changes possible. Even new features can fall under this heading when software is in true "maintenance mode" in order to avoid a lot of excess testing.

    I actually don't mind it, as it is a different sort of challenge to take a code base you know little about and introduce a working change with as little code as possible. But it's not as glamorous as fresh, raw coding.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
    1. Re:That is not maintenance. by Anonymous Coward · · Score: 0

      > Maintenance is about solving a problem code is having, with the absolute smallest number of changes possible. Even new features can fall under this heading when software is in true "maintenance mode" in order to avoid a lot of excess testing.

      Wrong. This is the exact mindset that leaves us with unmaintenable code.
      Maintenance is about doing the requiered changes to keep (or improve) the level of usefulnes _and_ quality of the software. Doing the absolute minimum is in fact eroding the quality.
      An there's no such thing as "excess testing".

    2. Re:That is not maintenance. by deoxyribonucleose · · Score: 1

      Taking code and cutting its size by half, fixing up all the screwed-up inconsistent formatting, while adding functionality and reducing bug counts, is a pleasure.

      Yes it is.

      But that is not maintenance, as practiced by any rational company. That is development or (more specifically) optimization.

      Maintenance is about solving a problem code is having, with the absolute smallest number of changes possible. Even new features can fall under this heading when software is in true "maintenance mode" in order to avoid a lot of excess testing.

      I actually don't mind it, as it is a different sort of challenge to take a code base you know little about and introduce a working change with as little code as possible. But it's not as glamorous as fresh, raw coding.

      Software maintenance tasks fall into one of four categories:

      1. Corrective maintenance fixes bugs in the maintenance object.
      2. Preventive maintenance fixes bugs which have not yet been reported (including e.g. problems that would hinder application scaling).
      3. Adaptive maintenance works around bugs in external objects (the O/S, the DBMS, integrated apps, whatnot).
      4. Perfective maintenance makes the application easier to maintain in the future.

      Perfective maintenance is what the grandparent post is talking about. A rational company balances these four kinds of maintenance against the expected future lifetime and current value of the software investment. Now, most software owning organizations are less than rational, but that's a different problem!

    3. Re:That is not maintenance. by arethuza · · Score: 1

      "Preventive maintenance fixes bugs which have not yet been reported" - surely though these bugs have been found by some kind of testing? Otherwise how do you know that they are actually bugs or are actually fixed? I've seen so many "optimisations to help scaling" over the years that were performed without any empirical evidence as to whether they actually helped or not. Quite a lot actually made things a lot *less* scaleable.

    4. Re:That is not maintenance. by Aceticon · · Score: 3, Insightful

      I believe that no developer can ever become a good or great developer without having done significant maintenance on someone else's code - your really only learn the true value of "coding for maintainability" (i.e. basics like commenting complex code, avoiding copy and paste, fail-fast code and such) when you're landed with fixing/improving code that was done without any such concerns.

      That said, software maintenance is often a frustrating, painful process in anything but the freshest of code (and sometimes even is code "just out of the over").

      It's especially unpleasant when one is faced with fixing/changing software where some or all of the design or the code were done by (often long gone) less experienced software developers.

      The bad news is that as you become more experienced you see more and more "glaring problems" with the design/coding on any system you have to fix/improve, which can be infuriating at times (for example, when the design and development of an important sub-system was given to a team composed wholly of average/below-average developers with 4 years of less of experience and you are tasked with fixing it)

      The good news is that the outsourcing wave has caused a bubble in IT in India, resulting in loads of people joining IT for the money (most of which should never have done so) so there is a whole lot of really, really bad code out there which will be providing freelancers (like me) with highly-paid maintenance work for years to come.

    5. Re:That is not maintenance. by deoxyribonucleose · · Score: 1

      "Preventive maintenance fixes bugs which have not yet been reported" - surely though these bugs have been found by some kind of testing? Otherwise how do you know that they are actually bugs or are actually fixed? I've seen so many "optimisations to help scaling" over the years that were performed without any empirical evidence as to whether they actually helped or not. Quite a lot actually made things a lot *less* scaleable.

      Um... in an ideal world, sure. Scaling is just an example. Potential buffer overflows in low level code, wasteful roundtrips, insecure password storage, UI inconsistencies, ignored edge cases... You can only afford to create and maintain so many tests. If you do other kinds of maintenance, you are going to discover shortcomings that can be addressed.

    6. Re:That is not maintenance. by plopez · · Score: 1

      My maximum is, "be kind to the maintenece programmer because it may be *you*". This esp. true in small development shops.

      --
      putting the 'B' in LGBTQ+
    7. Re:That is not maintenance. by plopez · · Score: 1

      I meant to say "maxim". It's 6am where I am.

      --
      putting the 'B' in LGBTQ+
    8. Re:That is not maintenance. by Cro+Magnon · · Score: 1

      When I was doing maintenance, I did "evolution not revolution". My main focus was usually fixing a specific problem, but I had no qualms about cleaning up some of the crap while I did so. Obviously, I didn't have time to make significant improvements at one time, but if I was working on the program long enough, a tweak here and there would eventually add up to noticable improvements.

      --
      Slow down, cowboy! It has been 4 hours since you last posted. You must wait another few hours.
    9. Re:That is not maintenance. by SuperKendall · · Score: 1

      Wrong. This is the exact mindset that leaves us with unmaintenable code.

      And that is the mindset that leads to sev1 outages with emergency fixes on weekends. Thank you no.

      There is absolutely a place for code improvement, as any application should have code quality improvement paths alongside new features. But if you are working on an app where the ONLY plan to get quality improvements in place is to sneak them in with bug fixes - run away.

      --
      "There is more worth loving than we have strength to love." - Brian Jay Stanley
  13. Re:After the software is written it gets maintaine by Hyperhaplo · · Score: 1

    That is terrible.

    On the other hand, thanks! I'm going to suggest this for our system.. perhaps condense it to 'DiD" and wait to see how long it takes for them to notice..

    --
    You have a sick, twisted mind. Please subscribe me to your newsletter.
  14. six sigma by bunbuntheminilop · · Score: 5, Funny

    Could a six sigma program help here? A systematic and structured approach to problem solving is needed. Whenever someone fixes a bug that creates a new bug, then it's a waste of everyone time and effort.

    1. Re:six sigma by NoYob · · Score: 1

      Yeah, but it sure is a nice paycheck for the six sigma black belt consultant! See? It's a win situation.

      --
      It's NOT me! It's the meds! I'm on 1000mg of Fukitol.
    2. Re:six sigma by Acer500 · · Score: 1

      Whenever someone fixes a bug that creates a new bug, then it's a waste of everyone time and effort.

      Bah, you're doing it wrong. We used to say in my old work that every bug fix created TWO new bugs :) . That also ensured job stability :P .

      --
      There are three kinds of lies: lies, damned lies, and statistics.
  15. Stopped reading right here by Anonymous Coward · · Score: 0

    Software in particular must be written to evolve as changes happen, using a weakly typed high-level language and, in older programs, a good macro assembler.

    When you start claiming that the ability to add 1 to "1" and get 2 instead of a compile-time or even runtime type error makes software more maintainable (or is even useful in any way), I stop listening to your advice.

    1. Re:Stopped reading right here by ratboy666 · · Score: 1

      Wasn't the claim, Watson.

      Strong typing would make it impossible to send old format data to the API -- which would then force you to create an API extension. Couldn't just subsume the functionality.

      Yes, weak typing along with versioning will work. "Strong typing" (ala C++ implementations "add the parameter descriptors in detail to the argument") won't, simply because the same "type" isn't being passed.

      Yes, this can be misused to add 1 to "1". Which, in itself, isn't such a bad thing. After all, my Rosetta Stone for languages is to ask for the evaluation of 1000! which is an awfully big number. Indeed, it is closer to "1", than it is to 1, from the machines perspective.

      --
      Just another "Cubible(sic) Joe" 2 17 3061
    2. Re:Stopped reading right here by Anonymous Coward · · Score: 0

      Weak typing is not necessary for that behavior. All you need is dynamic typing or a decent type system (see: most heavily functional languages; C and similar languages have terrible type systems). And the problem with being able to add 1 to "1" is you can do it accidentally, opening up yet another avenue for bugs, something that does not help with maintenance at all. In fact, some weakly-typed languages will let you add 1 to arbitrary strings, which is Very Bad and widens that avenue significantly (I am fucking looking at you, PHP).

    3. Re:Stopped reading right here by Anonymous Coward · · Score: 0

      try sage, the python extension that has pretty much any modern math you want

    4. Re:Stopped reading right here by davecb · · Score: 1

      I quite agree: the untyped systems of the days were languages like B (predecessor to C) and BCPL.

      --dave

      --
      davecb@spamcop.net
  16. Re:Cooling Laptop CPU Fans for Acer HP Dell IBM by jstults · · Score: 1

    Your ideas are intriguing to me and I wish to subscribe to your newsletter.

  17. Premature Declaration of Victory by Capt.Albatross · · Score: 1
    The problem has a hard part, and another that is just tedious. The authors declare the latter is solved, but ignore the former.

    Given a working upgrade, rolling it out while keeping things running is 'just' a matter of careful preparation and attention to detail. Being able to understand the existing system so you can get to a working upgrade is often the hard part, and while modular programming might be part of the solution, doing it right is not so easy, judging by the frequency with which it is done poorly (the phrase 'modular programming' itself belongs with 'buy low, sell high' in terms of the completeness with which it specifies a solution to a problem.)

  18. Different Kinds of Companies by digsbo · · Score: 4, Interesting

    Decades ago, companies which developed technology were...technology companies. With real engineers, and highly technically skilled management. Today, companies with business-oriented management and zero technology background own and develop systems. They often do it poorly, with insufficiently empowered engineering teams, and insufficiently skilled engineers.

    So today we've got a lot of Java and .Net shops filled with junior-level programmers and no disciplined, experienced systems engineers. Is it a surprise that when MS brought programming to the masses that the masses failed to learn engineering?

    1. Re:Different Kinds of Companies by pwinkeler · · Score: 5, Interesting

      When I worked at Analogic Corporation [www.analogic.com] in the mid-eighties, the then owner/president/ceo Bernie Gordon refused to grant anyone working in software the title "Engineer". We were all "just" programmers. Until we could show him specs and tolerances and statistical failure rates of our designs we were nothing but a bunch of untrustworthy programmers. And you know what? He was right: we still are.

      --
      PaulW, IT Consultant
    2. Re:Different Kinds of Companies by Opportunist · · Score: 1

      No, but whether MS started that earlier. It would not have mattered a bit whether MS brought programming to the masses. Someone would have. Actually, Borland was way ahead of MS with C-Builder and Delphi when it comes to easily accessible RAD tools.

      The core problem is that the need for more software was there, when the amount of good programmers remained more or less stable, or at the very least didn't explode at the same rate as the demand. Think back 25 years, to the time before RAD tools, and notice how you had a lot less computerized work places and much more standardisation. IBM one-size-fits-all mainframes were still the norm, with a few PCs starting to poke their heads up, and even those were usually running a handful of different programs, tops. Often you had a machine dediated to a single task, and not really that many programs to choose from. Companies bought a system, paid insane sums and ran it 'til system and machine croaked, often for a decade or even longer. Hell, I know of a few systems that still run on DOS 3.3 and do the same job they did a quarter century ago.

      Today, everyone wants a custom job, additionally we have a LOT more demand and a LOT more companies relying on computers and computer programs, and thus the demand for programs soared. The supply of good programmers didn't keep up, so we have to throw worse programmers into the game. And these people need RADs, for them RADs don't just make the work easier, they make it possible. That this results in inferior programs, because the people using those RADs don't even remotely understand what those RADs do for them, is a given. Blaming MS for it isn't. The demand would be there, so someone would have supplied the solution.

      --
      We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
    3. Re:Different Kinds of Companies by DigiShaman · · Score: 1

      History proves that quantity over quality is preferred throughout all human endeavors. Tangible items from mass production come to mind. However, non-tangible items such as ideas (code) also follow this route as well. Don't blame Microsoft. They're merely an example of what's naturally to come.

      --
      Life is not for the lazy.
    4. Re:Different Kinds of Companies by Anonymous Coward · · Score: 0

      You probably didn't mean it, but this is the kind of egoistic baiting that drives me nuts. Software is a tool. If it is cost effective it is used. Otherwise it is not. Last I checked, this is still somewhat a free economy. If software quality was the be-all and end-all, then we'd have higher quality software. As it stands, the majority of code is pretty bad, but generally performs the intended function. Companies realized a long time ago that it 100% perfect "engineered" software is freaking expensive. Because those experienced systems engineers are freaking expensive (and in limited supply). Imagine how *little* software would be created if only the top performers were allowed to create it.

    5. Re:Different Kinds of Companies by digsbo · · Score: 2, Interesting

      Yes and no. We live on a curve in flatland. Most of the time, we can't tell the difference between a local maximum and an absolute maximum. It's a human trait. While I agree that 100% perfect engineered code is often overkill, I have had WAY too many experiences where someone with adequate expertise walks into a team and says, "WHY are you doing it this way?" and then radically improves the quality of the system with a very low time investment (less than 6 man months).

    6. Re:Different Kinds of Companies by digsbo · · Score: 1

      I'm not blaming Microsoft. They did a great job making it possible for mediocre programmers to produce something useful (if not elegant/supportable/extensible). I'm blaming the people who manage the process and substitute hours for thought.

    7. Re:Different Kinds of Companies by Acer500 · · Score: 1

      When I worked at Analogic Corporation [www.analogic.com] in the mid-eighties, the then owner/president/ceo Bernie Gordon refused to grant anyone working in software the title "Engineer".

      In Uruguay (my country), the title "Engineer" is regulated (just like Lawyer, MD, etc..). You don't get a title of "Engineer" unless you have actually studied Engineering.

      And to get a degree in Software Engineering you DO have to study engineering - including ALL the math, statistics, physics and chemistry that other branches of engineering have, which means only 0.0333% of each generation graduates, and I'm not kidding - I started that career with other 1500 students, only 50 of which graduated as Engineers - I switched to Information Systems and graduated in IS, but I don't call (or consider) myself an Engineer.

      --
      There are three kinds of lies: lies, damned lies, and statistics.
    8. Re:Different Kinds of Companies by gmack · · Score: 1

      It is the same in Canada and it's why Microsoft tells their MCSEs to not actually spell out the title since calling yourself an "Engineer" after a 6 month course is actually illegal.

    9. Re:Different Kinds of Companies by Anonymous Coward · · Score: 0

      Until we could show him specs and tolerances and statistical failure rates of our designs...

      The Airworthiness Design Requirements Manual states it better than I can, so I quote:

      "Unlike hardware components that are subject to random failures (e.g. wear in or wear out failures) which generally can be characterised by failure probability distributions, software does not fail randomly. Instead latent defects in software can cause it to fail systematically when the set of initial conditions and internal state cause the section of code containing the latent defect and related data to be executed. While there has been some effort amongst researchers to characterise such failures using probabilistic means and quantify software reliability, such approaches are not widely accepted. Therefore, the traditional use of a Hazard Risk Index Matrix characterising risk as a function of severity and probability is unsuitable for application to software because there is no easy means to define a probability for software."

    10. Re:Different Kinds of Companies by pwinkeler · · Score: 1

      Very good point and I am glad to see someone finally raising it. My take on all this is that as a result we'll never see the development of software turn into an engineering discipline. It will always be an art because of our ability to solve problems creatively and a mess because we screw it up in ways we cannot predict

      --
      PaulW, IT Consultant
    11. Re:Different Kinds of Companies by tehcyder · · Score: 1

      Is it a surprise that when MS brought programming to the masses that the masses failed to learn engineering?

      Ah, the return of slashdot sanity...I knew it had to be Microsoft's fault somehow.

      --
      To have a right to do a thing is not at all the same as to be right in doing it
  19. Theory vs practice by Anonymous Coward · · Score: 5, Insightful

    Doesn't modular programming solve this problem?

    That is one of those answers that sound great in theory but in practice suffer from all the same problems from which all the other answers suffer.

    Too much upfront cost is a contract-killer, so compromises in designing for scalability must be made.

    Furthermore, today you have ideas about how the software will be used, and tomorrow those ideas will be changed, and you will discover that the dividing lines you have set up between your modules are not optimally efficient. This will result in simple-seeming enhancements being prohibitively expensive....unless you start crossing your module boundaries directly. The pressure to do this is too intense to resist, and you wind up violating the modularity of your design in the name of getting it out the door in time.

    Sooner or later your system will get complaints that it is too slow, and you will need to open further holes through your module boundaries in order to optimize performance within acceptable delivery deadlines. You will warn that these are quick fixes which must be refactored properly after their release, but the opportunity to do this never comes.

    As such changes form layers around your ever-growing onion, the core modules will be come too precious to change. Every little tweak you make to a core module will conflict with assumptions made by other modules, and will cause surprising bugs that are hard to detect in QA testing (since test case count grows exponentially with each new feature). This will result in more demand to fix problems without adjusting the core modules, or by making minimal adjustments to them, which will wind up forcing you to further compromise the modularity of your design.

    As the complexity of your system increases, the cost of each new feature also increases, which will displease management and prompt them to say "we used to be able to do this sort of thing in a few hours...now it takes weeks!" They will continue to make unreasonable demands of their senior staff until they push said staff right out the door, leaving the ongoing maintenance of this (now very un-)modular system to the junior level programmers who never shared in the original vision of the system, and hence have no sense for where the module boundaries should be, and just fold to managerial pressure to hack in changes as quickly as possible.

    Eventually the slow turnaround times and general bugginess of the system will drive clients to start looking for alternatives. Some brand-new ones will be available (some of which written by the disgruntled senior staff, in fact). Thus begins the end of the product, and of the company if this was their flagship.

    1. Re:Theory vs practice by keatonguy · · Score: 1

      Whose leg do you have to hump to get a mod point around here?

      --
      If you aren't angry, you aren't paying attention.
    2. Re:Theory vs practice by Lotana · · Score: 1

      This is just spot on!

    3. Re:Theory vs practice by Meski · · Score: 1

      Leg? - You're doing it wrong.

  20. Refactoring not appreciated by Envy+Life · · Score: 1

    Yes I wholeheartedly agree. We had a new employee who did just that -- refactored a pile of mission-critical code, added unit tests, cut unused code, added data constraints, and made it more maintainable. At the end of the day that person was deemed to be unproductive and fired, and all the code thrown to the wind. This is what business types think of refactoring.

    1. Re:Refactoring not appreciated by Anonymous Coward · · Score: 0

      He single-handedly made mission-critical code better, added a bunch of developer features and protected against possible bugs on his FIRST DAY? And he was FIRED? My mind is boggling so hard right now you could put it in a plastic box and sell it for $19.99. Apart from anything, this is a massive failure on management's part for not setting a new guy a specific task (I know some bosses aren't fans of micromanagement, but only an idiot lets new hires do their own thing before they've been broken in). Unless you're at one of those companies that is ridiculously successful despite/because they buck every HR/business mantra rule (Google, early Microsoft, etc) - and it doesn't sound like you are - you might want to think about looking for a new job.

    2. Re:Refactoring not appreciated by arethuza · · Score: 1

      I presume Envy Life used "At the end of the day" as an idiom http://idioms.thefreedictionary.com/at+the+end+of+the+day

  21. Delete the word 'software' from TFA title by riprjak · · Score: 1

    and the sentiment is no less true.

    My observation is that we shaven monkeys that make up the human race are fundamentally incapable of maintenance in any sense. Rather than maintain something in as-new functional condition (maintenance) so it does not fail, we choose to either fix it (fixenance) or replace it (buyenance) when it does.

    A factory that makes plastic widgets is just as likely to make these same mistakes in relation to their machinery.

    Just my $0.02
    err!
    jak.

    1. Re:Delete the word 'software' from TFA title by nyctopterus · · Score: 1

      The word "software" isn't in the title...

    2. Re:Delete the word 'software' from TFA title by Dragoness+Eclectic · · Score: 1

      Never been in the military, have you? In the Navy, Preventative Maintenance (PM) is a big part of your duties as an enlisted sailor. I imagine it's the same for the Army, Air Force and Marines.

      --
      ---dragoness
  22. Not only PHB by omb · · Score: 2, Interesting

    In the early 70's I had the pleasure of working with both Prof. Tony Brooker and I.R, MacCallum, both of whom had made major contributions to the Atlas timesharing system, Brooker had designed and MacCallum implemented most of the Compiler-Compiler, a meta system that included a parser generator and an MDL with interpreter to walk the parse tree and generate code. I bring these guys up to make a simple point, both were skilled technologists in their own areas, but as many University academics, they were narrow; an could not understand the need for maintenance, incomprehensible looks, the software will ROT ... etc etc.

    They just could NOT get their minds around changing external circumstances, working in tiny groups, version control, V2... was easy as was getting their all 3 systems updated. Pre/Post/Co - requisites, SCM, package management, bug-tracking were all to come as the world started to really use this stuff and they also had no communication disconnect, because there were less than 1000 and they all knew each other,

    Yes its a HUGE problem, but unfortunately does need real understanding!

  23. No offense.. by Anonymous Coward · · Score: 0

    Hey, look, no offense, but this kind of just seems a bit like self promotion to me?

    Communications of The ACM publishes lots of awesome articles quite often, and those of us interested often subscribe. I guess I just don't see how the thoughts of two software professionals on software maintenance really needs to be a front page slashdot article.

    *watches as he is modded troll*

  24. Re:After the software is written it gets maintaine by Opportunist · · Score: 0, Offtopic

    I thought WORKSFORME is Mozillaese for DeveloperInDenial?

    --
    We used to have a Bill of Rights. Now, with the rights gone, all we have left is the bill.
  25. we're just beginning to rediscover it." by thoglette · · Score: 2, Interesting

    "we're just beginning to rediscover it."

    In this age of 20yo CEOs and single-quarter companies it's hardly suprising that most software is no better than a rigged demo.

    Just make it shiny enough for someone to buy the company and then let their support staff of MS trained monkeys deal with it

    Then we have the "artists" (in both the software and hardware field) who have survived for twenty years without "all that sh1t". Course, like the CEO, they've gone on to their next challenge long before the chickens come home to roost. And it's not their fault everyone else is incompetent, is it?

    I continue to be amazed, on a weekly basis, by the complete lack of experience shown by the actions and products of very large companies.

    Oh, I reject the claim that

    Software maintenance is not like hardware maintenance, which is the return of the item to its original state. Software maintenance involves moving an item away from its original state.

    The author has obviously never maintained hardware: it has bugs, patches, upgrades just like any other part of your system.

    --
    -- Butlerian Jihad NOW!
  26. No such thing as a free lunch by Balial · · Score: 1

    This guy seems a little *too* optimistic about his solution. It's a great solution, and if you want to see a good example of its use, check out the K42 operating system. It solves a bunch of the performance problems a naive implementation as the article describes would have.
    However, it's not a free lunch. Runtime marshalling and switching between interfaces? Does the author have any idea how hard that is? One tiny mistake and your entire database is full of junk data because you forgot that bit-X means Y, or your regex P had a typo. if you're going to adopt this "Continuous Change" model, you need to do an awful lot of validation testing on all the possible inputs from all the different API versions, and make absolutely sure you get the internal state you intended. Another way to say this, a hidden feature of the discrete approach is that you know the state of your system at all points in time. You're not running a franken-process.
    BTW, I'm not trying to dump on the idea, I reckon it's cool, just the article doesn't really represent it accurately.

    1. Re:No such thing as a free lunch by davecb · · Score: 1

      That's a fair criticism: there is a lovely set of additional problems opened up by this solution to a particular problem (;-))

      However, the "Jack" series is written a bit tongue-in-cheek, in part to poke fun at the people who "know" that maintenance is an unsolvable problem. Ditto folks who "know" that bandwidth is the only network metric (;-))

      We know (and appreciate hearing about!) the follow-on problems.

      --dave

      --
      davecb@spamcop.net
  27. Comment removed by account_deleted · · Score: 1

    Comment removed based on user account deletion

  28. Typical modern CACM article by Chalst · · Score: 1

    Long, wordy, buzz-word heavy article with a little bit of interesting content buried deep inside. I wish I hadn't bothered to read it.

    In case you haven't, but are thinking you might: you can run machines that are never down, even when software is being updated, if you use a few tricks. I knew most of the one's they mentioned already, and use them on my company website, which is far from downtime-proof, but has a 3-year uptime so far: call my software maintenence status "fairly sturdy".

    If you're interested in upgrading to software maintenance status "bulletproof", then read something about fault-tolerant computing in Erlang. You'll learn more that way.

  29. Different maintenance.. by renoX · · Score: 1

    He is talking about the need to version protocols to simplify future change, you're talking about code refactoring which usually don't change the interface..

    I've needed worked on a project where we used 'versionned protocols' though :-(

  30. Re:After the software is written it gets maintaine by elnyka · · Score: 1

    And that means the validation people run through their test book and create maybe 1000 or 2000 bug reports. These bug reports bounce around through the development teams acquiring cruft along the way. When the bug eventually stops bouncing somebody might have a go at fixing it. So they change something and if they can't see the bug anymore they go cvs commit right then and there. At the same time the other 1999 bugs are bouncing around, looking for a home.

    At the end of the (as we call it) bug fixing process the original software doesn't exist in its original form. It appears to pass most of the test sbut you would not be advised to lean against it or anything because something else might break.

    software maintenance =/= bug fixing.

  31. Not a hot field of study either by Acer500 · · Score: 1

    Like many others, most of my work is maintaining legacy code (and we're talking everything from SUN's old Forté UDS to Visual Basic 6 and everything in between).

    I wanted to do a Master's degree in CS, and during my interviews, they asked what would I be interested in researching... I told them I found software maintenance to be a line of study that hasn't been properly studied, and they dismissed it (mostly for it not being "sexy" enough). So it's not exactly a "hot" field of study...

    --
    There are three kinds of lies: lies, damned lies, and statistics.
  32. Great article by gander666 · · Score: 1

    Just wanted to say that the article was probably one of the best I had read in a while. I am a former member of the ACM (and may renew because of articles such as this).

    Great reading!

    --
    Suppose you were an idiot and suppose you were a member of Congress ... but I repeat myself. - Mark T
  33. Re:Old stuff? The Rules of Two by gander666 · · Score: 1

    This reminds me of the work I did in Macro 11 back in the day. I used to spend a lot of time documenting each block of code, to the point that my partners on the program thought I was nuts. However, when we had to go back and maintain the code later, my blocks were quick and easy to decipher, and make any fixes.

    ah, the good old days of PDP Assembly language....

    --
    Suppose you were an idiot and suppose you were a member of Congress ... but I repeat myself. - Mark T
  34. Just me? by aflag · · Score: 0

    Was it just me who thought the article was awful? What it described was nothing more than versioning for applications. I fail to see how what he described as good practice was different from his openoffice wanting to be updated. Was it the need to restart the program afterwards? All examples he provided seem to need to restart at least one program. In the case of the addition of Canada, for instance, the whole server had to be updated and, I assume, it needed to be restarted. Then he said there was two version of the software, one in canada and one in the US that used the same server. If the clients talk to the server using any reasonable protocol the server would be able to handle both versions just as easy. It could be the case that the only difference is that one client is able to send one sort of message that the other isn't. I can hardly think of a software that has the maintaince problems he exposes. When he goes on to talk about the glibc with an old version of linux kernel. That library exists exactly to export an interface that any program -- old or new -- can use. It does that by communicating with the kernel directly, and I think it's pretty reasonable for one or two functions to stop working on old versions of ther kernel.

  35. Maintenence is a bad word for it by plopez · · Score: 1

    It should be referred to as "software extension and fixes". Or something else, but not "maintenance".

    Many managers have been trained to defer maintenance in production environments as a way to cut costs. Which may be true if the equipment costs are low enough. If the labor + parts + other materials are all more expensive than replacement costs and downtime for broken equipment is cheaper than replacement costs, so what?

    This creates a dangerous attitude. Too often downtime costs are not computed. It is also dangerouse when this attitude is transferred to software, which is *not* an industrial process. Many managers do not seem to understand you can not manage software development like an industrial process.

    --
    putting the 'B' in LGBTQ+
  36. Hiring and keeping the best? by Anonymous+Brave+Guy · · Score: 1

    It's why leadership and direction are such important qualities in management, and why companies try to hire and keep the best.

    If only that were so...

    It's been my experience that most medium-sized and larger companies actively take steps to hire mediocrity and lose their best people, whether or not they realise it.

    Such companies can typically be identified by a combination of three give-away signs: they are too large for everyone to know everyone, which creates room for a layer of middle-managers who are neither hands-on team leaders nor directors, and there exist dedicated people/departments for things like HR and IT.

    As soon as you've got that kind of culture, you're likely to be hiring cookie cutter candidates. Then you have to introduce business processes that cater to the least common denominator, which by design stifle individuality and innovation. Unfortunately, those are often exactly the reasons that the best people are the best people: they bring unique technical strengths, creative ideas inspired by their personal past experiences, or insightful points of view. Having made individuality thoroughly subservient to the machine, you have discarded the extra value good people could have contributed, so those people feel a lack of motivation; you compensate them on a level similar to the cookie cutter guys, so they feel a lack of recognition; and since they are exactly the people who can most easily find new work, they are the first out of the door, leaving your overall workforce even lower on the scale. And thus the downward spiral continues.

    --
    If you disagree, post your argument. (-1, Overrated) isn't your personal censorship tool for views you don't like.
  37. lol by Anonymous Coward · · Score: 0

    way to tell the entire internet that you, Brian Gordon, don't know jack about computers.

  38. "not as glamorous as fresh, raw coding" by Black-Man · · Score: 1

    And that is the problem. Everyone thinks the glamour is the new code... which they invariably *screw* up and expect someone else to come in and fix those "details". Developers/Architects suffer from ADD.

  39. "Software Maintenance" - worst metaphor ever by jc42 · · Score: 1

    The real problem here is the use of an atrociously bad metaphor. The term "maintenance" refers to keeping something in its original state, so that it continues to perform its original function. Software never needs this, because software doesn't wear out or degrade. Except for the occasional dropped bit, which usually totally destroys the software so you have to restore it from backup, software stays the same forever, without change. I have programs that I wrote 25 years ago that still do their original task perfectly, despite constant use.

    The problems is that we're using "maintenance" to mean making changes to the software, to change its behavior so that it can do new things. Before software, such changes were never called "maintenance". They was called things like "revisions" or "alterations" or "redesigns", something with a "re-" prefix to remind you that you're changing things.

    To use the usual transport metaphor, it's like you have a very functional road that has long been maintained by fixing the usual cracks, potholes, and other degradation that happens to all roads due to traffic and weather. Then management comes along, and decides that the road needs to be usable by trains, and this is a simple enough enhancement that the Maintenance Department can do it in a day or so. The maintenance folks have no experience with railway building, but they dutifully rush out, dig up the road, and install tracks. They don't have the training or time, so they haven't properly rebuilt the roadbed to support the much heavier traffic, and nobody had told them about the need for a much larger turn radius that trains need than cars do, so trains can hardly use the result. It takes several weeks, so management criticises them for not adhering to the scheduled two-day delivery time, as well as for building a low-quality railway that constantly needs more "maintenance" work.

    Then, some time later, management decides that the road should also be "slightly augmented" to handle boat traffic. Never mind that it goes over a hill; that can be handled by building a system of locks. So the "maintenance" crew sets out to do the job, again without any training in canal building, using tools designed for maintaining auto roadways. And again, they're criticised for getting behind schedule and doing a poor job. And the water supply for the lock system is a constant resource hog.

    Of course, with roads, railroads and canals, people can see the physical results. Even the dumbest manager can see that they're not at all similar (and why you try to avoid building canals over hills). A problem with software is that it's just bits hidden inside the computer's memory, so it all looks the same from the outside. This makes it hard to understand the difference between small bug fixes and total redesign and rewrite. It's all just "maintenance", right? How hard can it be? And why are the software maintenance people always so slow and behind schedule? They can't be very good at their job, right?

    I suppose there's no chance that we can ban the use of the word "maintenance" in software. That would be the best approach. But it would require admitting that we'd made a major blunder in our terminology. So we're probably stuck with doing "maintenance" to make major revisions and retargeting of software.

    --
    Those who do study history are doomed to stand helplessly by while everyone else repeats it.
  40. Poor Assumptions by jasenj1 · · Score: 1
    FTFA:

    Traditional (or "everyone's first project"). This one is easy: don't even think about the possibility of maintenance. Hard-code constants, avoid subroutines, use all global variables, use short and non-meaningful variable names. In other words, make it difficult to change any one thing without changing everything.

    Sorry, they already lost me. They start out with the assumption that "traditionally" people write bad code. Sorry, but if you're writing code like this you need to go back to school and learn not to. Then come try to get a programming job again.

    To make an opening statement of "your code sucks" turns me right off.

    - Jasen.

  41. That is not what the OP was talking about by SuperKendall · · Score: 1

    Perfective maintenance makes the application easier to maintain in the future.

    The original poster had this to say:

    Taking code and cutting its size by half, fixing up all the screwed-up inconsistent formatting, while adding functionality and reducing bug counts, is a pleasure.

    Reducing bug counts is software maintenance as we know it (it's why you are there), not perfective.

    Cutting code size, I could possibly see as perfective although that should be done with a lot of testing around it. Changing formatting, is actually rather bad in a maintenance role as it increases the amount of code to review for no good reason (I personally find such changes neutral in regards to the ability for others to understand code).

    Adding functionality though? No way is that "making an application easier to maintain"

    I don't really see his comments as relating to Perfective kinds of maintenance. I was mostly reacting with horror to the "add new features" aspect which is development.

    --
    "There is more worth loving than we have strength to love." - Brian Jay Stanley
  42. one small edit by sohp · · Score: 1

    s/Maintenance/Development/

    Oh sure, there are a handful who know something, but to a first approximation, the above is correct.

  43. How to combat the probllems of modern systems by Orion+Blastar · · Score: 1

    The Classic Computer Science college courses in the 1980's and on back to the 1950's taught the following things:

    Software Psychology
    Software Maintenance
    Analysis and Design
    Logical Methods
    Quality Control
    Writing Secure Code
    Writing Optimized Code
    Best Coding Practices
    Debugging
    Scaling
    Migrating Legacy Software
    Managing Garbage Collection
    Managing Memory Usage

    And many more.

    The Modern Computer Science from the 1990's on up to now, has skipped many steps above and just goes on to writing the software code and not worrying about anything else. Which is a lot like teaching Natural Science classes without even bothering to follow the Scientific Method. The Above are the Computer Scientific Method of Computer Science, but somehow got over looked and thrown out of the modern Computer Science classes.

    For example many Computer Science students couldn't handle garbage collection and memory management so they had invented Java and C# and other programming languages to do it for them. It is because of lack of optmized code and memory management that we get huge programs that need a 3Ghz or faster processor and at least 3Gigs of RAM to run, when really a 200Mhz processor and 512M of RAM would be enough to do the same thing with garbage collection and memory management.

    I am not the old guy saying "Get off my lawn!" I am the exceptional old school comp sci worker saying we need to "think up nifty new ways on how to combat the problems that we currently have in the computer industry" by improving upon our computer science skills and adding in the above to them to solve those problems. I am not even close to retirement age, but I know a broken system when I see one. The current comp sci system is broken, and colleges are not teaching the right stuff we need to "think up nifty new ways on how to combat the problems that we currently have in the computer industry" and very few if any are teaching that.

    We need to bring these old school skills to the 21st century and modernize them.

    If the current computer scientists refuse to write books on the subject, and shun people like me, then I guess people like me are going to have to school the young and old with books on those subjects and make millions selling them to the clueless and the firms that have no idea how to fix their own problems. I'm Orion Blastar, and I am coming to save your arse with a different and better way of developing code and an improved computer science, not seen since the days of Ben Snyderman.

    Make way for Fringe Computer Science and Modern 21st Century Computer Science.

    --
    Remember, Slashdot does not have a -1 disagree moderation, and no, troll, flamebait, and overrated are not substitutes.
  44. Re:After the software is written it gets maintaine by Fulcrum+of+Evil · · Score: 1

    Yes. Bug trackers should have statuses like "Developer in denial" for situations like that. (Mozilla's bug tracker has a "WORKSFORME" status which is used far too much.)

    I'm sorry, that's code for 'Gimme a test case worth a damn!'

    --
    "We returned the General to El Salvador, or maybe Guatemala, it's difficult to tell from 10,000 feet"
  45. Wow! by gbutler69 · · Score: 1

    This sounds like a familiar story. You've got the right attitude now.

    --
    Over-the-top Response Guy! Giving "Over-the-Top Responses" since 1970.
    1. Re:Wow! by Orion+Blastar · · Score: 1

      That is because I am a proactive personality instead of a reactive personality. I think with the end in mind before I start programming. I put first things first, and then think win/win. I seek first to understand and then to be understood. I then synergize with others and promote creative cooperation. Then I recycle and start the cycle all over again.

      When you are reactive, you blame other people and circumstances for obstacles or problems. Being proactive means taking responsibility for every aspect of your life. Initiative and taking action will then follow. Most people having problems in the world and the workplace are reactive, like the people who troll me here on Slashdot and make fun of me, and blame others for their problems.

      Every work team I was in via college or work, we got great results and did some of the best work ever seen by professors or managers.

      --
      Remember, Slashdot does not have a -1 disagree moderation, and no, troll, flamebait, and overrated are not substitutes.
  46. It is because you are junior by brunes69 · · Score: 1

    Either it is because you are a junior, or you make consumer-level software.

    Once you get to be mid level you will start getting requests like this from management sometimes:

    "Hey we are on site at potential customer X that is evaluating us, and feature Y (some critical product defining feature recently released) is not working in their environment because they have Z (a corner case never accounted for). This is a (insert V hundred thousand or larger dollar value) deal and we need this fix in before end of day (which is in 3 hours) - can you look into it?"

    Stuff like this happens at any private software company who is in the business of selling software to other companies. Of course if you don't make the deadline it is not like anything bad happens to you (hopefully), but MAKING the deadlines and winning the deal sure makes you look good when the next annual review comes along.

    1. Re:It is because you are junior by digsbo · · Score: 1

      In the case you describe, it's absolute the Right Thing to do to get the business. It doesn't mean you can't also follow up later.

      It's a problem when a salesperson with a small (to the company's overall revenue) contract demands a feature to close a deal that costs more to implement than the overall revenue. to the salesperson it makes sense, because they get substantial benefit from the commission. The company suffers, though, if product management doesn't see that the behavior is costing them the ability to go after additional market share (due to lost engineer time).

  47. Synopsis by Anonymous Coward · · Score: 0

    "Utilize the power of version numbering your structures".
    It's a cool suggestion, but I wonder if it was worth reading the whole article... perhaps it pays of in the future...

  48. It's about upgrade distribution, not repair. by hendrikboom · · Score: 1

    A useful article, but does not address the hard part of software maintenance. It is about how to design software so that it is easy to distribute and install updates, not about how to track down the bugs and determine what those updates are.

  49. re: We Really Don't Know Jack About Maintenance by ps2os2 · · Score: 0

    This is nothing new. I have been in the IT industry for about 40 years. I cannot tell you the number of times I have run into this in various installations. I can also tell you the horror stories that would leave you wondering what were they thinking.

    For about 20-30 years IBM was pretty much in the same mode until user groups united and screamed at IBM to come up with a solution. Mind you it was not overnite that IBM (and their customers) came up with a pretty darn good solution. *IF* you followed the rules you could pretty much bring a new system in and reapply all the local modifications within (most of the time) with either a small amount of work or a reasonable amount of work to get the local modifications onto the new system in usually less than a weeks effort by one person. There are some exceptions I know but if you kept a orderly system and followed the rules you were pretty much a minor clerical work on local modifications to install a new release of the OS or a major OS upgrade. BUT everyone had to follow the rules (yes even IBM) the rules are quite easy and straightforward. No need to list them here as only a person with IBM OS background would understand them, but they are reasonably simple. Depending on how you chose the system type to be installed it was for the most part straight forward. It also took thumping of management heads to get into the mode of either complete replacement of the the OS or upgrading the OS with another release. Also, the fact that (currently) if I recall correctly IBM drops support every two years on their flag ship OS so you are on a treadmill (so to speak) of keeping everything reasonably current.