Slashdot Mirror


How To Develop Unmaintainable Software

jones_supa writes "Greg Jorgensen specializes in debugging, fixing, maintaining, and extending legacy software systems. His typical client has a web site or internal application that works, more or less, but the original developer isn't available. Greg lists some things you can do in your own software projects to keep him in business. In summary, the list goes as follows: Customize your development environment a lot, don't make it easy for the next programmer to start working on the code. Create an elaborate build and deployment environment and remember to leave out the documentation. Don't bother with a testing/staging server but instead have secret logins and backdoor URLs to test new features, and mix test data with real data in your database. Don't bother with a well-understood framework, write everything from scratch instead. Add dependencies to specific versions of libraries and resources, but don't protect or document those dependencies. For the icing of the cake, use the coolest mix of cutting-edge programming languages."

149 of 211 comments (clear)

  1. Tied this by Urban+Nightmare · · Score: 2

    and I was still replaced.

    1. Re:Tied this by Anonymous Coward · · Score: 1

      If your name was on it, I bet you'll have a much stronger network to job hunt from. The best programmers code themselves "out of a job". They're called consultants.

    2. Re:Tied this by Samantha+Wright · · Score: 5, Informative

      Well, maybe you should try this much more venerable, thorough, and entertaining encyclopedia of unmaintainable code tips. Should make you as immovable as the CEO's firstborn.

      --
      Bio questions? Ask me to start a Q&A journal. Computer analogies available for most topics!
    3. Re:Tied this by QRDeNameland · · Score: 1

      Ouch, my eyes!! You'd think someone with something insightful to say about development would re-think that GeoCities-esque web design.

      --
      Momentarily, the need for the construction of new light will no longer exist.
    4. Re:Tied this by crunchygranola · · Score: 5, Funny

      Well, maybe you should try this much more venerable, thorough, and entertaining encyclopedia of unmaintainable code tips. Should make you as immovable as the CEO's firstborn.

      He has an unfair advantage in the area of unmaintainable code since he is writing about C/C++.

      --
      Second class citizen of the New Gilded Age
    5. Re:Tied this by Samantha+Wright · · Score: 1

      If it's about any specific language, it'd be Java (though lots of languages are mentioned); note the title.

      --
      Bio questions? Ask me to start a Q&A journal. Computer analogies available for most topics!
    6. Re:Tied this by Samantha+Wright · · Score: 1

      Despite the auto-updating copyright date, I think most of that place is vintage 2003. (Which makes this story even more after the fact.)

      --
      Bio questions? Ask me to start a Q&A journal. Computer analogies available for most topics!
    7. Re:Tied this by BrokenHalo · · Score: 1

      He has an unfair advantage in the area of unmaintainable code since he is writing about C/C++.

      No, that's just not trying. To make your programs truly unmaintainable, you should write self-modifying assembly code, so it'll take a Real Programmer to understand it. And he will be much too busy destroying the planet to bother. Mwahahahaha...

    8. Re: Tied this by countach · · Score: 1

      Maybe that's why you were replaced, lol

    9. Re:Tied this by fatphil · · Score: 1

      He doesn't have much insigntful to say.

      http://mindprod.com/jgloss/unmaincamouflage.html
      """
      4 Hide Macro Definitions
      : Hide macro definitions in amongst rubbish comments. The programmer will get bored and not finish reading the comments thus never discover the macro. Ensure that the macro replaces what looks like a perfectly legitimate assignment with some bizarre operation, a simple example:

      #define a=b a=0-b
      """

      Just plain wrong. That won't even compile in any context where he's expecting it to be used. It #defines token "a" to be "=b a=0-b".

      But I agree about the shitty design. Even worse than my own, which is merely ugly through absense of style, rather than presence of bad style.

      --
      Also FatPhil on SoylentNews, id 863
    10. Re:Tied this by fatphil · · Score: 1

      I was hoping that your link would be the Story of Mel. I was pleasantly surprised to see that right at the top, it links right too the very same:
      http://www.pbm.com/~lindahl/mel.html

      --
      Also FatPhil on SoylentNews, id 863
    11. Re:Tied this by BrokenHalo · · Score: 1

      I just picked the first link off the search results, and of course the two go together. I actually worked with Tektronix back in the late '70s, but I never heard of Mel then... :-)

    12. Re:Tied this by kmoser · · Score: 1

      Ouch, my eyes!! You'd think someone with something insightful to say about development would re-think that GeoCities-esque web design.

      Don't you get it? That's the author's example of yet one more thing *not* to do.

    13. Re:Tied this by kermidge · · Score: 1

      Oh, wow, kiddo, that is some beautiful, evil stuff. I was laughing hard enough by the second page I had to stop. That's a demolition derby of coding practice. (Sorry 'bout the car ref.)

  2. Old news by Pharmboy · · Score: 3, Insightful

    This is old news. These methods have been around at least as long as C has. It only works in isolated situations and doesn't make you a good programmer. Or person.

    --
    Tequila: It's not just for breakfast anymore!
    1. Re:Old news by Anonymous Coward · · Score: 1

      This wasn't another "how to job security by being a shitty dev/person" article. It was a tongue-in-cheek list of mistakes made on projects that make future maintenance a nightmare. Least that's how I interpreted it.

      Summary kinda implies a different tone. I suspect plenty of kneejerk in this thread!

    2. Re:Old news by lgw · · Score: 3, Insightful

      Not every programmer was around when C was new. Everyone needs to learn these lessons, and preferably not the hard way.

      I'm mean, you'd think anyone starting a major project today would use version control, that shouldn't even be a question, right? Right?! Sigh.

      Some of his other stuff on his page is quite entertaining as well, like this one on Abject-Oriented programming.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    3. Re:Old news by Anonymous Coward · · Score: 1

      Not every programmer was around when C was new. Everyone needs to learn these lessons, and preferably not the hard way.

      I'm mean, you'd think anyone starting a major project today would use version control, that shouldn't even be a question, right? Right?! Sigh.

      I can take that a step further. Recently I came across a source code, which used it's own method of ensuring that everybody were up to date. It placed the entire source tree, project files and temp files in dropbox. I mentioned using svn/git and it was answered with "why? This approach works. There is no need to make it more complicated without any benefits"... I quietly and successfully backed out of touching that code. The coding skills used in the code were equal or worse than the source handling would indicate. Amazingly the compiled app actually worked with no major bugs or performance issues, which actually concerns me a bit. How many closed source apps do I have on my computer of that quality without knowing it?

    4. Re:Old news by dgatwood · · Score: 2

      How many closed source apps do I have on my computer of that quality without knowing it?

      "Most of them" would be my guess.

      --

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

    5. Re:Old news by hurfy · · Score: 4, Interesting

      lol, 25 years ago we had ONE programmer able to maintain our software as he had done much of the customization of an out of the box accounting system. Bloody thing was so complex to start with noone wanted to touch it before we fixed it up, much less afterwards. Upto 10 Megabytes worth of code but no more than 32K loadable in memory. Must have been 100's of small chunks of code all calling each other in and out of memory every other keystroke.

      I managed to customize some reports but that was only part i ever dared to touch.

      The real kicker...written in a version of BASIC.

      Actually a pretty impressive system and worked well for 15 years. Always wondered how they managed to write such a monstrosity. Kept picturing a blimp hanger with a flowchart wrapped around the walls.

    6. Re:Old news by girlintraining · · Score: 2, Insightful

      This is old news. These methods have been around at least as long as C has. It only works in isolated situations and doesn't make you a good programmer. Or person.

      A lot of that list is pretty damn arrogant, or at least naive. Let's start with just the ones the submitter quoted;

      Don't bother with a testing/staging server but instead have secret logins and backdoor URLs to test new features

      If you're so well known you can dictate terms to your employer, then maybe you can get away with this... for awhile anyway. But most of us, who code for a living, have to do the best with the tools we're given. We can ask for a testing server, but whether we get one is another matter entirely.

      As for 'secret logins' and 'backdoor URLs'... every login is supposed to be secret. If you can get a list of userIDs via any external method, that's a security risk. And as for 'backdoor URLs'... Not everything should be accessible to the google crawler.

      and mix test data with real data in your database.

      There's any number of failure modes in complex code in which shoving random inputs into it will cause it to break in unexpected ways that don't become apparent until properly-formatted data is submitted after. I think what the author was trying to say was not to put invalid data into a production environment on purpose; It might make the app shit a brick. Unless of course that's the only environment you have to test. See also: That 'routine backup' of the EBT system that caused 13 states' food stamp programs to die in place.

      Don't bother with a well-understood framework, write everything from scratch instead.

      Again, pure arrogance on the part of the author; Well understood frameworks tend not to be highly optimized. If you are dealing with something where performance is absolutely critical, writing it 'from scratch' will probably get you better performance than taking one of those 'well-understood frameworks' out for a drive. Because as most experienced programmers know -- well-understood frameworks also have a lot of extra features and bloat they don't need. See also: .NET

      Add dependencies to specific versions of libraries and resources, but don't protect or document those dependencies.

      Okay, that's just plain sloppy. Well, 1 out of 5.

      For the icing of the cake, use the coolest mix of cutting-edge programming languages.

      The choice of programming languages matters very little, except to those who lack the Tao of programming. For those who are not One with the code, who do not grok the larger patterns that permeate the spaces between that which only the machine understands, and that which only the human understands, the language choice is the difference between life and death. For those who have transcended languages... it is the patterns they seek to understand. The language will take care of itself. It's like saying "Love" in French, German, Russian, or English. It's the same damn thing, and it's possible to understand someone who loves you, even if you don't understand a bloody word they say.

      Bottom line here is that this 'list' is just the logical conclusion of a career of mediocrity spent shifting blame around instead of working the problem. Real programmers can use anything; And frankly... they usually do. -_- I've seen some completely hair-brained solutions that are coded in Perl, cgi-bin, bash, PHP, and little chunks of C here and there that work flawlessly and at great speed because the programmer took the best of each of those languages and leveraged them in the solution. Of course, for every good programmer who does this, there's ten more who tried the same thing and wound up with a pile of half-working shit, sooo.... YMMV.

      --
      #fuckbeta #iamslashdot #dicemustdie
    7. Re:Old news by lgw · · Score: 4, Insightful

      Well understood frameworks tend not to be highly optimized. If you are dealing with something where performance is absolutely critical, writing it 'from scratch' will probably get you better performance than taking one of those 'well-understood frameworks' out for a drive.

      Sure, of course, why not. It's not like your time is valuable or anything. And naturally, you will make this decision before coding starts, and thus before any measurements that the framework was actually slow, or for that matter that it was part of the perf bottleneck of the system. Nothing says "job security code" like elaborate cryptic algorithms to improve asymptotic performance of some in-memory task on a system where CPU never got above 5% in the first place.

      Let's not forget how bug free a framework used widely by thousands will be - there's no job security there at all if there's no bugfixing! But if we write our own, then there will surely be some horrific bug in the field that we can work until 4AM to fix, and management will call us heroes!

      The main thing, of course, when writing your own replacement for some common library that some new hire would already know is to avoid any documentation, and ideally abandon the effort halfway through, because the project ran out of time, only ever use 10% of what you wrote, and never document which 10% - heavens no!

      To make doubly sure that no new hire could ever support this code, remember to follow this key element of Abject-Oriented Programming:

      Documentation
        It's said that code should be written for people to read, so it follows that documentation is written for no one to read. Documentation should be written for every new module and then maintained as changes are put into production, or at least the next time thereâ(TM)s a lull in the workload.

      A good time to write documentation is when someone in the department gives two-weeks notice: use that time to make sure the departing team member documents all of their code.

      Cluttering up the source code with lots of comments explaining what the code is trying to do is distracting and slows down the compiler. That's why abject shops that follow "best practices" keep documentation in a document management system where programmers can't accidentally delete it.

      Sage advice, I'd say.

      Bottom line here is that this 'list' is just the logical conclusion of a career of mediocrity spent shifting blame around instead of working the problem. Real programmers can use anything

      Perhaps you missed the part that the author of TFA makes his living answering panicked calls to bugfix production legacy code, presumably because some "real programmer" did in fact "use anything", and this advice is based on long experience of what makes code unmaintainable. My own experience/advice lines up with his rather well in this area, I'd say.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    8. Re: Old news by techprophet · · Score: 1

      How often are the things done by frameworks performance critical? Last I developed a site in django, the most time consuming operations were database queries (which are easily done outside of the Model system if one so desires), but writing the sql manually would take much more time for very little benefit. Likewise, rolling your own templating system is virtually worthless when dealing with your average site: the db queries simply dwarf the render time and a half decent caching system will further reduce the impact of writing your own. In my experience most programmers cannot easily write code that is both maintainable and faster than a library version. They (and I) can do one easily, but not both. Writing the absolute fastest code is worthless for 99% of software, as most software is not limited by the hardware. That time is better spent on robust testing and feature development.

    9. Re:Old news by Anonymous Coward · · Score: 1

      "the compiled app actually worked with no major bugs or performance issues"

      So what the hell are you bitching about? Why are you "concerned" that it did what you expected it to?

      Working as expected mean it's ok right now, but what if next version should contain some additional features? It's near impossible to code on something where the concept of local copy is gone. Guy A change one file and guy B change another. Who made the resulting crash? It could even be guy C as he also changed something and now that hell broke loose he didn't tell and without a log A and B wouldn't know C did something.

      The "it's impossible to code on, but it works, which mean everything is ok" can only be used if no further development is planned for the said code. Bugfixes is also development in this context.

    10. Re:Old news by Draknor · · Score: 2

      I think you are missing the author's points in your rebuttal.

      Testing server -- maybe it's not ALWAYS possible with expensive enterprise-y server software, but just about anyone can spin up a VM on their dev machine to simulate (with varying degrees of accuracy) a production environment.

      Secret logins & back doors -- you mean you've never created a "god" or "super admin" account (or "secret URL") that could access all kinds of technical / debugging info that regular admins/users shouldn't see? Having such an account means your application has additional logic & code paths to support -- code that's probably not being adequately (if at all) tested and probably has bugs, some of which may be security-related.

      Test data in production - yeah, I've worked on systems (such as health care IT systems), where project team puts test data in the system. It sucks for operational users. "What, you mean Dr. Smith doesn't have a 2pm appt w/ TEST, DUMMY today?" "The compliance dept just got a call about a six-figure insurance claim to Medicare for a pregnancy-related hospitalization for a DUMBASS, JOE -- anyone know about that?" Test data belongs in a test database.

      Frameworks -- in my humble opinion (and I'm not exactly alone) there are very few situations where run-time performance is actually "absolutely critical". More often (in my experience) time-to-develop "performance" is a bigger factor, and rolling-your-own (to get alleged better run-time performance) will cost you development time, bug-fix time, QA & testing-time -- which, for the vast majority of applications, will cost more than simply buying faster hardware (the happy medium way is to optimize just the critical slow parts in your application that the framework handles sub-optimally).

      Choice of languages -- again, I think you missed the point. Any language is fine. His point is to keep your project consistent. If you've developed a hair-brained solution that involves Perl, cgi-bin, bash, PHP, and chunks of C -- it probably works great and flawlessly, like you said. Until that programmer (1) retires or (2) gets hit by a bus. Then the junior programming intern they hire to take his place is screwed. And that's the author's point -- write maintainable code. A mismash of languages & bindings "because they are cool" may function, but it's not maintainable. If your star programmer has this Perl/bash/PHP/C contraption and it's well-documented and logical, then maybe that junior intern will take it over and, with a bit of a learning curve, master it. But if your programmer used 4 different languages because "it's cool to make it complicated" -- well, good luck.

    11. Re:Old news by girlintraining · · Score: 3, Insightful

      Sure, of course, why not. It's not like your time is valuable or anything. And naturally, you will make this decision before coding starts, and thus before any measurements that the framework was actually slow, or for that matter that it was part of the perf bottleneck of the system. Nothing says "job security code" like elaborate cryptic algorithms to improve asymptotic performance of some in-memory task on a system where CPU never got above 5% in the first place.

      You devoted considerable effort to coming up with a response. Yet you failed in every way to realize that the point being made was that good programmers often depart from guideline, and with good reason. If this was less a list and more an advice column, then I wouldn't have picked it apart. But it comes off as a "dos and don'ts" list, and frankly... such a list has neither educational nor informational value.

      But whatever, if you want to continue down this path, okay then; Look smartass, you can't test a framework against your own hand-crafted code because you don't know how your hand-crafted code is going to perform until you build a prototype. So fucking duh, yes, the test happens after. And if you'd sat down on a whiteboard and stenciled out a block diagram of what your app, or at least the part of it you're working on, does... you'd already know which branches are going to be most used, and where special attention needs to be paid towards optimization. I already provided the caveat that where performance is critical. I'm not talking about business apps or databases when I say these things. I'm talking low level shit like how they're building switches that begin writing out a new packet while the previous packet is still incoming to gain precious milliseconds in high frequency trading. You aren't writing that with .NET or whatever framework you're upset I dismissed from consideration. PERIOD.

      Also "But if we write our own, then there will surely be some horrific bug in the field that we can work until 4AM to fix, and management will call us heroes!" is about the most moronic thing you can say. Management doesn't consider your project resulting in piles of overtime "heroic". It considers you a poor performer and will be looking to replace you.

      Perhaps you missed the part that the author of TFA makes his living answering panicked calls to

      Yes, I got that. Wanna know something? Ask a police officer how honest the average person is. They'll tell you the average person is a slimy son of a bitch who's probably packing heat and looking to kill you and everyone you ever loved or knew. Wanna know why? Because that's their day in and day out experience. Ask a surgeon how to fix a problem, and every answer will involve a knife. It's the same everywhere.

      You got suckered in by assuming one man's personal experience counted as fact. It doesn't. I recognize that in his particular line of work, he runs into these problems all the time, but that doesn't mean they were bad choices at the time they were made... it means that by the time it got to him, it had become a problem. And that's all.

      Look, bottom line here is that when you code professionally, you are engaged in a massive balancing act between deadlines, error checking, other people's contributions, etc., etc. Coding professionally is an organic process, and while everyone knows what the best practices are (documentation, QA, modularity, readability, etc.) these are ideals to strive for, not things we can actually achieve on every single project. That would take a level of super-human ability that nobody yet born possesses. It's like the old adage in IT: "Cheap, Fast, Right. Pick any two."

      My own experience/advice lines up with his rather well in this area, I'd say.

      My own experience is that a mind intent on something refuses to admit to better things. In programming professionally, I've come to refer to this as target fixation -- they get tunnel

      --
      #fuckbeta #iamslashdot #dicemustdie
    12. Re:Old news by lgw · · Score: 1

      You got suckered in by assuming one man's personal experience counted as fact. It doesn't. I recognize that in his particular line of work, he runs into these problems all the time, but that doesn't mean they were bad choices at the time they were made... it means that by the time it got to him, it had become a problem. And that's all.

      Crap code is crap code.

      these are ideals to strive for, not things we can actually achieve on every single project.

      Right - sometimes when the crunch is on we write crap code. Hopefully there's time to clean it up. But the crunch doesn't make the crap code good, it merely makes it necessary.

      My own experience is that a mind intent on something refuses to admit to better things. ... I've come to refer to this as target fixation

      You are still talking about code, right?

      --
      Socialism: a lie told by totalitarians and believed by fools.
    13. Re:Old news by EvilIdler · · Score: 1

      Apart from the small size, that looked a lot like something I was stuck with for a while. The source for that project varied from 100MB to 250MB, because of slightly different customised versions for clients. It was written in an ancient dialect of BASIC that runs on no current system, so it had to be emulated. It could have been replaced in 6 months by two dedicated programmers for far less than it cost to buy the rights to the whole thing in the first place, but only one of us was that dedicated. There was a third guy, but he was of course an external consultant dedicated to knowing this system, and charging in limbs for maintenance. It's possibly that the system I worked on was the code-bloated version of the accounting system above. It did both accounting and PoS tasks, and then some.

    14. Re:Old news by Ubi_NL · · Score: 1

      what language is "cgi-bin"?

      --

      If an experiment works, something has gone wrong.
    15. Re:Old news by GWBasic · · Score: 1

      Let's not forget how bug free a framework used widely by thousands will be - there's no job security there at all if there's no bugfixing! But if we write our own, then there will surely be some horrific bug in the field that we can work until 4AM to fix, and management will call us heroes!

      Counter that with the amount of time I've spent wresting design flaws due to well-known but poorly-chosen frameworks.

      Don't pick a framework because you assume that you're supposed to:

      • Choose correct design patterns
      • Prefer well-encapsulated libraries with clear purposes
      • Only use frameworks that directly add value to your chosen design patterns

      The issue with frameworks is that they often touch all layers of a program, or product. If the wrong framework is chosen, (or built,) then the entire project must be refactored to recover from the mistake. That is why it's critical to understand the correct design pattern before choosing a framework or building your own.

    16. Re:Old news by stridebird · · Score: 1

      I would assume so too. I once got involved in a C++ product that was licensed to oil companies for c. $10,000 a year. It had a 10,000 line main(). The owner wrote it at university while learning C++ on his course. Incredibly shoddy, unstructured code, but it works, and he's rich.

    17. Re:Old news by TheRaven64 · · Score: 1

      I'd have thought there was a pretty narrow gap between really bad code that works and non-functional code, but I'm constantly amazed by how many people manage to hit it.

      --
      I am TheRaven on Soylent News
    18. Re:Old news by pjt33 · · Score: 1

      I'm mean, you'd think anyone starting a major project today would use version control, that shouldn't even be a question, right? Right?!

      And then you come across "modern" frameworks which can't be version controlled without database dump scripts.

    19. Re:Old news by mrchaotica · · Score: 1

      In my experience, the cost of a piece of software tends to be negatively-correlated with its quality. Why? Because expensive software tends to be written for some niche market, which means that (a) there are less total funds available for paying programmers ($10,000 * 10 copies is less than $100 * 10,000 copies) and (b) the people doing the coding tend to be subject-matter experts, not people with formal comp sci or "software engineering" training. (As someone with degrees in civil engineering and comp sci, I can tell you that you do not want the average engineer to write your structural analysis program without hiring a comp sci guy to supervise him!)

      --

      "[Regarding the 'cloud,'] ownership was what made America different than Russia." -- Woz

    20. Re:Old news by lgw · · Score: 1

      It's exasperating. You can always choose instead to use a framework where all the DB stuff is generated from text files, and use proper source control and build processes - but you'd have to find those things important in the first place.

      --
      Socialism: a lie told by totalitarians and believed by fools.
    21. Re:Old news by lgw · · Score: 1

      Sure, but there's usually a good choice available. Rolling your own approach to dealing with the DB because ORM just won't work for a project is one thing (and that's often true because most ORM is too inflexible), but that's not "rolling your own framework". If what you're about to write will end up looking like an ORM framework, then just don't - do the research and pick one the meets your needs. If what you're about to write will look nothing like an ORM framework than maybe. (Or similar logic for other sorts of frameworks - you have to be far off the beaten path before giving in to NIH makes sense.)

      BTW, I do find it hard to take seriously anyone who uses the phrase "design pattern" - while your use here is unobjectionable, mostly people mean "I read about this really cool pattern and I'm looking for any excuse to use it!" That never ends well. I think you mean "It's critical to understand the correct design before" and not "I've memorized this set of patterns, and this one matches best!".

      --
      Socialism: a lie told by totalitarians and believed by fools.
    22. Re:Old news by dgatwood · · Score: 1

      And (c) there's less competition, so there is little to no incentive to improve things more than absolutely necessary.

      Yes, I've noticed that pattern, too.

      --

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

    23. Re:Old news by david_thornley · · Score: 1

      On a contracting gig (with a bank you'd recognize the name of, at least in the US), and I was told we had a VCS. Well, actually, we had Rational Rose (is that it?) but we weren't permitted to directly touch it. We had Perl scripts to check in and out. We might as well have been using SCCS.

      I was told to promote a certain program, so I followed what I thought was the process of copying the QA version to production, and the development version to QA. The step I missed was to check the production server code and see if it had any relation to what was in the repository, because apparently large financial applications are best managed by making changes directly on the production server without thinking about backing them up. That particular faux pas apparently got me into the doghouse.

      FWIW, the only guy on the team besides the manager who'd been there more than four months took me aside once and told me he didn't necessarily agree with how things were run there.

      I've never been so happy to have a contract run out even with nothing lined up for the future. The next one turned out to be a mortgage company working on a repayment model, and where I got a very good view of the start of the housing crash, but that's another story.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
    24. Re:Old news by david_thornley · · Score: 1

      There's another aspect to using frameworks: you benefit when the framework improves. I had a job (it's frightening how much of my experience seems applicable here) where we used a hand-written COBOL interpreter. This actually worked well when it was written, I'm told. Then the COBOL on Unix world started advancing, and we were looking at all these neat things we couldn't use that would have helped us.

      The same applies to frameworks. If .NET is a reasonably good fit, it's probably faster than doing the job in Visual C++, and there's more improvement in .NET than there has been in VC++, particularly in tools. There are applications that require raw speed (I've worked on some), but most don't.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
    25. Re:Old news by CptNerd · · Score: 1

      There's nothing more frightening than seeing financial software source code, unless it's being told you have to maintain it...

      --
      By the taping of my glasses, something geeky this way passes
  3. Great little article by Anrego · · Score: 5, Insightful

    Every one of these points hits the nail square on the head.

    The key to take out of this is: document document document! At minimum you should have a set of instructions to re-build your dev and build environment. "Insert the <your company> dev workstation image v4" is not allowed to be a step! Your elaborate continuous integration multi-tree setup and mountain of environment setup scripts and template directories are great until the guy who set it up takes off and you have to upgrade something. Ideally a set of instructions talking to the motivation of certain decisions, roadblocks encountered, etc.

    One thing the article doesn't have is have lots of 3rd party tools and keep the license servers/license files on whatever box is most convenient for the dev working on it at the time.

    1. Re:Great little article by phantomfive · · Score: 2

      "my code is self-documenting."

      A statement that is always true as long as no one else has to read it.

      --
      "First they came for the slanderers and i said nothing."
    2. Re:Great little article by Anrego · · Score: 1

      SCCS

      That sounds famil.. oh god! The memories... sccs, mergegj, teamware! Make it stop, I don't wanna play anymore!!!

      Kidding aside, SCCS and it's best friend teamware may actually be satan.

    3. Re:Great little article by Nerdfest · · Score: 1

      Well written code is self documenting, or extremely close to it. A well done build and deploy process is as well, using Maven/Jenkins, etc. Documentation can consist of "get this out of Git and build it with Maven". Things aren't as opaque as they used to be.

    4. Re:Great little article by Anonymous Coward · · Score: 1

      You humans are so silly. My code is self documenting, especially designed for others to read it, even when ported automatically between languages. I don't use bullshit languages and editors that can't do proper in-line documentation.

      This is what it looks like in the source-view.

      This is what it looks like in the doc-view.

      The trick is, if your language ACTUALLY supported full Unicode / UTF-8, then you could embed a myriad of control characters and give semantic meaning to invisible whitespace FOR DOCUMENTATION and formatting purposes only... So as not to interfere with the complier. I highlight a section of code and tag it as an image, the editor injects whitespace controls for image start / end. Line drawing inserts slashes and dashes and pipes, etc. with the "line" whitespace: ZWSP at endpoints; The doc generator creates documentation via SVG or simple software rasterizer.

      The meta language translator takes one common language and outputs in C, Java, Perl, Haskel, and JavaScript; Yes, including generating the build environment. The source code for these compilers is open! It's not hard to extract the lexers then write a transform -- Except that each language has features that don't directly transform from one source to another... So all you need then is a meta language + "runtime" to act as your universal translator. It's like Gene Roddenberry taught you nothing.

      You've been coding in the training area your whole lives. Why fight target languages like dumb code monkeys? Time to level up. Don't you want computers to be able to do whatever you say someday? You're going to need a common programming interface then -- or sentient machines...

      I realized decades ago that software development was going the wrong way, I added another layer of indirection -- Because no one else would. I do contract work, so for now meta coding is how I get a leg up on teams of Indians bidding on the same jobs. You don't have to wait for me to retire and open source it to do it yourself -- If you're a programmer then writing a compiler should be no big deal. All it takes for anyone to duplicate anything is for them to know it's possible.

    5. Re:Great little article by phantomfive · · Score: 2

      Let me guess, you are the one who writes self-documenting code?

      --
      "First they came for the slanderers and i said nothing."
    6. Re:Great little article by phantomfive · · Score: 1

      What code is that? It looks really cool.

      --
      "First they came for the slanderers and i said nothing."
    7. Re:Great little article by Anonymous Coward · · Score: 1

      I know all my assembly language programs are self documenting.

    8. Re:Great little article by Savage-Rabbit · · Score: 1

      Every one of these points hits the nail square on the head.

      The key to take out of this is: document document document! At minimum you should have a set of instructions to re-build your dev and build environment. "Insert the <your company> dev workstation image v4" is not allowed to be a step! Your elaborate continuous integration multi-tree setup and mountain of environment setup scripts and template directories are great until the guy who set it up takes off and you have to upgrade something. Ideally a set of instructions talking to the motivation of certain decisions, roadblocks encountered, etc.

      One thing the article doesn't have is have lots of 3rd party tools and keep the license servers/license files on whatever box is most convenient for the dev working on it at the time.

      He left out the best method: Hand write everything in assembly language...

      --
      Only to idiots, are orders laws.
      -- Henning von Tresckow
    9. Re:Great little article by Lotana · · Score: 1

      The examples you provided are amazing. But in my experience as a developer, there is simply no time for creation of something so elaborate.

      How long did it take you to create that documentation?

    10. Re:Great little article by phantomfive · · Score: 1

      My guess is, it's not real. When the post ends with a sentence like, "all it takes for anyone to duplicate anything is for them to know it's possible," that's an indication that he's trying to convince someone to build it.

      Unfortunately, in my case, it takes more than knowing it's possible, it also takes a belief that it's worth the effort.

      --
      "First they came for the slanderers and i said nothing."
  4. Revision control systems are not installation syst by rminsk · · Score: 1

    svn up git pull hg pull

    Quoting user tdammers on reddit:

    • Excess files in document root - version control cruft, project documentation, etc. Happens all the time, and is an actual real security problem.
    • Development race conditions. Ever done svn up on the production server, just to find that someone had committed broken code between your test run and the deployment? Ever "solved" this problem by stopping all development activity during deployment? Ever noticed how this essentially means that this makes frequent deployments practically impossible?
    • File permissions and ownership. Need I go into detail here? I think not.
    • What if you want to do things like precompile templates, preprocess CSS, minify and concatenate your JavaScript offline, move stuff around, or just make sure that your deployment will only go through if it passes a minimum set of tests?
    • What about database changes?
  5. Use a language that no one ever heard of by jfdavis668 · · Score: 2

    We inherited a system written in a language we never heard of. It wasn't just uncommon, it was way out there. Unfortunately, It was a while ago and I don't remember what it was called. We ran the system, but had to rewrite it immediately. Luckily, the reason we inherited it was because the old system was crap, and the customer was willing to pay us to redesign it. If the previous vender had put a little more effort into it, we wouldn't have been able to take the business.

    1. Re:Use a language that no one ever heard of by techno-vampire · · Score: 1

      Back in the early '80s, I did some work at JPL. Much of our work was done in a language that we were the only two people who'd ever heard of it: MPL. Why? Because it was a custom pre-processor that my partner had written for PL/1 to add all of the syntactic sugar automatically. No, I never knew why he didn't just include a set of macros and use the regular pre-processor. For all I know, it wouldn't do quite what he wanted it to do.

      --
      Good, inexpensive web hosting
    2. Re:Use a language that no one ever heard of by jfdavis668 · · Score: 1

      PL/I was the first language I actually learned. Did some work in Fortran before that, but all I could do was modify a program someone else already wrote. That was the strange thing about this obscure language. I had run across so many, PL/I etc, APL, COBOL, SNOBOL, Scheme, Lisp, Prolog, Pascal, Ada, Smalltalk, C. You think I would have at least heard of it. It bugs me I can't remember what it was called. It wasn't a variation of some other language.

    3. Re:Use a language that no one ever heard of by avandesande · · Score: 1

      APL works perfectly with Twitter Bootstrap. Send me some money and I will tell you how...

      --
      love is just extroverted narcissism
    4. Re:Use a language that no one ever heard of by Arker · · Score: 1

      Just a shot in the dark but was it OCAML?

      --
      =-=-=-=-=-=-=-=-=-=-=-=-=-=-
      Friends don't let friends enable ecmascript.
    5. Re:Use a language that no one ever heard of by djbckr · · Score: 1

      I had a similar situation. I inherited a company program that was written in a language called Magic. It was some sort of table-driven record-based language that, to code, literally went up one side of the screen and down the other. It was as bad as it sounds.
      I rewrote the software in Delphi (this was back in the 90's) and it was orders of magnitude faster.

    6. Re:Use a language that no one ever heard of by altgeek · · Score: 1

      Try the listing / chart at http://www.levenez.com/lang/ . Good luck...

    7. Re:Use a language that no one ever heard of by jfdavis668 · · Score: 1

      No. The language was so obscure, that when you Googled it, Google only tried to correct your spelling.

    8. Re:Use a language that no one ever heard of by kermidge · · Score: 1

      Never underestimate the willingness and ability of programmers to spend time making up nifty new stuff just for grins (or shits and giggles), or LOLs/lulz, as you young'uns say.

      LOLCODE. Interpreters and compilers, too. Wow, man, just wow. I tip my hat in amazement and respect.

  6. My favorite by Anonymous Coward · · Score: 1

    I had the pleasure to review some code that attempted to be unmaintainable. My favorite was the unused variables and dummy logic in mysterious functions similar to this:

    private boolean myfunction(int param) {
          int a=45;
          int counter = -1;
          int d=0; ...
          for (int i=0; i<32; i++) {
                d = i + counter;
          } .....
          [do some real processing based on the param] .....
          return true;
    }

    1. Re:My favorite by Mordok-DestroyerOfWo · · Score: 1

      So that's where I left that code! Sorry, brah.

      --
      "Never let your sense of morals prevent you from doing what is right" - Salvor Hardin
    2. Re:My favorite by Jeremi · · Score: 4, Funny

      You fool! That code is critical, it's the speedup loop. For the v2.0 release you delete some of those loops, and presto, your app is significantly faster -- everybody will think you're an optimizing genius.

      Be careful to include some calls to rand() or similar in your loops, though, otherwise the optimizer in your compiler might screw you over by removing the loops in v1.0, denying you your speedup in the new version.

      --


      I don't care if it's 90,000 hectares. That lake was not my doing.
    3. Re:My favorite by TheRaven64 · · Score: 1

      I would not expect that loop to have any impact on performance. Once the code is in SSA form, it's obvious that it's a fixed-length loop and that it's side-effect free, so constant propagation will eliminate it. If you want to write a slowdown loop, your best bet would be to make counter volatile, so that the compiler is not allowed to elide the reads. In Java, you can make it a static public volatile field and that will have the added bonus of making everyone who reads it wonder where it's modified and what the effects are...

      --
      I am TheRaven on Soylent News
  7. Your Boss by Anonymous Coward · · Score: 1

    He was paid more because he assumed more responsibility than you, not because he has more esoteric knowledge than you.

    But he is probably smarter than you, because he understood the above.

    1. Re:Your Boss by gl4ss · · Score: 1

      with responsibility should have come understanding the product. or is the concept of responsible too hard to grasp for people nowadays? or was he responsible for it the same way a gambler is responsible for the cards he's going to get in the next hand he is dealt?

      often cto's(or technical leads or whatever) are assumed to be making strategic decisions about the direction of the product(s) and technologies and are assumed to understand the product.

      usually they're just personnel heads though. effectively HR. if you see your cto using an os and machine he can't possibly use for developing the product he is "responsible" for.. it might be a good idea to start looking for a new gig.

      --
      world was created 5 seconds before this post as it is.
  8. Frameworks by Tablizer · · Score: 3, Interesting

    Don't bother with a well-understood framework, write everything from scratch instead.

    Is this saying only use widely-available frameworks (to do it "right"), or don't write your own frameworks from scratch? I have time-tested C.R.U.D. frameworks I often use for web projects that I've improved and tuned over the years. They are reasonably well-commented.

    1. Re:Frameworks by phantomfive · · Score: 1

      Custom work is ok, as long as two requirements are met:

      A) it works
      B) it is easy for a new guy to pick up.

      Those are the main benefits you are getting from a well known framework, so as long as you hit those requirements, you are fine. A lot of people who write their own custom frameworks fail at both, they are constantly trying to fix their framework, debug it, get it working, which is a mess.

      --
      "First they came for the slanderers and i said nothing."
    2. Re:Frameworks by Fnord666 · · Score: 1

      A) it works
      B) it is easy for a new guy to pick up.

      Those are the main benefits you are getting from a well known framework,

      Just because a framework is well known does not imply either of these two things are true.

      --
      'The tyrant will always find pretext for his tyranny.' - Aesop's Fables
    3. Re:Frameworks by phantomfive · · Score: 1

      The point of it being well-known is that you can easily hire people who know how to use it, so that is why B is important for custom frameworks......if you can't hire someone who already knows it, then it better be easy for newcomers to learn.

      For A, of course not all well-known frameworks work, but you can know which ones to avoid, or at least what kinds of troubles you'll run into. I suggest avoiding PHP, but if you use it without being aware of the drawbacks, it's your own stupid fault.

      --
      "First they came for the slanderers and i said nothing."
    4. Re:Frameworks by lgw · · Score: 1

      Is that "whooshing" sound you hear familiar to you? I suspect you've heard it before.

      --
      Socialism: a lie told by totalitarians and believed by fools.
  9. no PHB driven IT by Joe_Dragon · · Score: 1

    no PHB driven IT where is your TPS report?

  10. Write your own language! by bunyip · · Score: 1

    Just get a hold of lex & yaxx, antlr or your favoriate tools and write your own language. You could probabyl abuse Lisp macros anough to do this too. I once worked with a company where the lead programmer had invented Hugh-BOL, and that's what they coded in.

    Now, I do admit that a DSL it the best approach from time to time, but there is an limit...

    1. Re:Write your own language! by dinfinity · · Score: 2

      Just get a hold of lex & yaxx, antlr or your favoriate tools and write your own language. You could probabyl abuse Lisp macros anough to do this too.

      It seems you are already well underway!

  11. Programmer not the whole story by jasnw · · Score: 3, Insightful

    Yeah, yeah - code clean, test-test-test, document-document-document, have separate test/run machines that are configured the same, yada yada. This is all well and good, and any halfway-decent developer knows all this. However, software development is not done in a vacuum and each and damn near everything mentioned is involved in cost/time benefit analyses when crunch-time comes (which it always does). With some exceptions, when I see a company that's saddled with horrible old legacy codes that nobody can understand, often a large measure of this is paybacks (for not adequate funding and poor schedule planning) being the bitch that they are. How to do things the best way are well known, it's just that the best way is more expensive (in the short term, which is the only term business understands these days) and takes more time than the average business will wait. If the bottom line is get something done that sorta-kinda works as fast/cheap as possible, you get spaghetti code that even the guy/gal who developed it can't follow.

    1. Re:Programmer not the whole story by david_thornley · · Score: 1

      Which is apparently what Jorgenson's income is based on.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
  12. As my predecessor's bumper sticker said... by Anonymous Coward · · Score: 1

    "Comment? Why do you think they call it 'code' ?"

  13. The real icing on the cake by TheloniousToady · · Score: 1

    Why use "the coolest mix of cutting-edge programming languages" when I can use just COBOL?

    1. Re:The real icing on the cake by mendax · · Score: 1

      There is a simple answer to that question: Have you actually written something in COBOL? I hope you're a fast typist.

      --
      It's really quite a simple choice: Life, Death, or Los Angeles.
    2. Re:The real icing on the cake by TheloniousToady · · Score: 1

      You got me - I haven't ever actually written anything in COBOL. But if the goal is to "develop unmaintainable software" (see article), I think it's worth it. Heck, all that extra typing of COBOL code might even discourage me from commenting my code [wink].

      (BTW, it fascinates me how a joke can get down-modded here, while a comment that clearly misses the joke gets up-modded. OK, it wasn't all that great of a joke, but somebody had to throw in something about COBOL when the subject is "unmaintainable software". One can only assume that the moderators are missing the jokes just like the commenters. So, to help the humor impaired, I've put in an explicit "wink" above. Moderators: please don't take this comment seriously and down-mod it - it's just another not-so-great joke - get it? [wink].)

  14. There's more than one way to do it by moonwatcher2001 · · Score: 2

    The nastiest project I ever took over was written in Perl by ten diferent programmers eah using diferent features of Perl

  15. Bad management by EmperorOfCanada · · Score: 5, Insightful

    Often it is how a project is initially managed that results in an unmaintainable system. A few simple mistakes can send a project straight to hell from the very beginning. A simple one would be to allow the senior management to firehose new features at the project far faster than the developers can build them. Another would be to allow the wrong people to pick the core components. That is how bad databases/languages/operating systems can be chosen. Then you get the next layer of wrong when people simply code and architect badly.

    An example from my past was a company that I interviewed with (and was offered a job at) that was using Lotus notes to build a huge educational system. They had a PhD as the head of development and they were keeping the details secret until they made their offer. When they told me Lotus Notes I just laughed; I thought they were joking. I told them that building their system out of Lotus Notes was like building a car out of sand and white glue. At first you will quickly have the broad outline of a car but that as you start to work on the hard bits that you will never finish; Ever! A couple of years later the company imploded with no real product just a bunch of sales demos.

  16. All Code is Terrible by TempleOS · · Score: 3, Funny

    You will never find good code in a project. All code is awful. Every programmer who looks at a project says it's shit.

    1. Re:All Code is Terrible by Kaenneth · · Score: 1

      At first glace, Code is like an unassembled jigsaw puzzle.

      Without the reference picture (specs) it's much harder to figure out how it goes together.

    2. Re:All Code is Terrible by phantomfive · · Score: 2

      For code, "Structure is the key to understanding." That is the missing thing from many pieces of documentation, an overview that gives the structure of the code. Specs are a good way to get that overview.

      --
      "First they came for the slanderers and i said nothing."
  17. No such thing as 'unmaintainable' software by johnlcallaway · · Score: 2

    Only lazy developers. I've worked on plenty of legacy software over the years that other people wouldn't touch, and the common thread was they were either too lazy or just not smart enough. It takes determination, patience, and a lot of detail to work on it. But it was all far from unmaintainable. And the end result was I was the one kept around during layoffs instead of the guys that said "I can't do it" (translation ... it's too hard for me.)

    OK .. no source code at all pretty much makes it difficult to maintain. Or not being sure if what is in use is the current code.

    As for the 'use a framework' .. what BS. Frameworks come and go. What is well used today can be a long forgotten, unsupported mess 5 years from now. Like NetBeans and Swing?? All those GUIs I wrote 5 years ago probably now fall into the 'unmaintainable' software category, even though all the code is actually there, and anyone that understands GUI programming at a basic level can still make modifications. It's not easy (i.e. not for the lazy), but it's possible. And how many times has a framework version made upgrading difficult because of extensive changes???

    It's OK to use Hibernate, ICE, and all that stuff that makes the job easier today, but learn how stuff actually works and only use it when necessary. It will make you more valuable in the long run, and the code more maintainable in the future. If I hear one more ignorant programmer tells me 'But Hibernate can write SQL that way even if it is more efficient' I'm going to shove a SQL manual up their ass and tell them to actually learn something.

    --
    I rarely read replies, it's my opinion and if you thought about your opinion a little more, I'm OK with that.
    1. Re:No such thing as 'unmaintainable' software by ranton · · Score: 1

      Only lazy developers. I've worked on plenty of legacy software over the years that other people wouldn't touch, and the common thread was they were either too lazy or just not smart enough. It takes determination, patience, and a lot of detail to work on it. But it was all far from unmaintainable.

      When someone says that code is unmaintainable, they obviously don't mean that it is impossible to maintain. You can even disassemble binaries if absolutely necessary. If the effort to maintain the code exceeds the benefit of maintaining the code, it has effectively become unmaintainable in any practical sense.

      I do agree that maintaining code is more difficult than creating new code, and on top of that it is a less desirable task for most developers. I had to leave one company because they kept putting me projects with legacy software because I performed better on those projects than my peers. They even bumped my pay because they knew it was important. The problem was I didn't want to do it, and finding a new job is easy for anyone with real skills. I wasn't lazy, I just had better options.

      If you are someone who likes working with legacy software and are good at it, then you are valuable indeed. Most companies don't have someone like this, so they have to not only worry about the effort to maintain software but also the morale of the developers forced to work on projects with excessive technical debt.

      --
      -- All that is necessary for the triumph of evil is that good men do nothing. -- Edmund Burke
    2. Re:No such thing as 'unmaintainable' software by plover · · Score: 1

      I had to leave one company because they kept putting me projects with legacy software because I performed better on those projects than my peers. They even bumped my pay because they knew it was important. The problem was I didn't want to do it, and finding a new job is easy for anyone with real skills. I wasn't lazy, I just had better options.

      I laughed when I read this followed by your sig:

      -- All that is necessary for the triumph of evil is that good men do nothing. -- Edmund Burke.

      --
      John
  18. Support Debian's build system, keep Greg employed! by tlambert · · Score: 1

    Support Debian's build system, keep Greg employed!

    That is all...

  19. Re:Revision control systems are not installation s by Jorgensen · · Score: 1

    Development race conditions. Ever done svn up on the production server, just to find that someone had committed broken code between your test run and the deployment

    If this happens, then you are doing things wrong.

    You should know that YourApp version X is what QA tested. Because the developers tagged it before giving it to the QA guys.

    You should know that upgrading your live environment to YouApp version X is not the same as "Upgrade live to latest commit". This race condition is easily solved by proper understanding of how people use your version control system.

    In other words: Use the tags, Luke!

    Arguably, using "svn update" (or whatver equivalent in your chosen VCS is) is only useful for projects that require no compilation or installation other than "just copy files about". Most are more complex than that.

  20. I'm guilty of all of these by Anonymous Coward · · Score: 1

    But I will add another point:

    * Manage a software project when you have no experience with software design

    The company owner mismanaged the entire thing into the ground and we would often find out that in a few days time, once again, we were expected to have the system working live with the latest feature that we had expressly said was not ready and should not be expected to be ready for months, because he'd already sold it to the people he was smooth-talking to on the basis of that feature.

    It was always in a state of permanent putting-out-fires, because as soon as we attempted to contain the ones we had, more would be started for us, because the investors were demanding that some sales were actually achieved for once, which wasn't possible because a year had already been fruitlessly wasted with another cowboy coder that had faked his university degree.

    Ugh, what an unfixable mess. I gave it more blood than it was worth - I was contracted into that whole mess late and stuck with it for months - but once my invoice payments started coming in late, I was out, having improved precious little despite my protests.

    Worst job of my career. What's worse is that, despite literally everything we told him to do (including cutting his losses) he is still running with the exact same codebase. You literally cannot help someone that refuses to be told that it's over.

    1. Re:I'm guilty of all of these by david_thornley · · Score: 1

      I worked at a company that, for some reason, created a new office a thousand miles or so away and transferred sales to it.

      You want sales guys who will be driven to close the sale, but you also need some checks on them to make sure they're not selling what the techies can't supply in time. When sales and development were in the same couple of buildings, sales people could talk to the development managers and see what they could promise. With sales and development over a thousand miles away, these informal exchanges didn't happen, and sales started making promises. I don't think any of the promises were individually possible. We could have managed if we'd only had to bend our development efforts to serve a single customer, but we were getting multiple customers.

      --
      "When you have eliminated the unacceptable, whatever is left, however improbable, must be the truthiness" - Holmes
  21. ... says the self-taught programmer... by MasterOfGoingFaster · · Score: 3, Insightful

    Hey, glad I could keep you in business.

    --
    Place nail here >+
  22. He left out "Outsource your project to India" by JoeyRox · · Score: 1

    Not only will the code be a bug-ridden hodgepodge but the comments will be written in unintelligible English as well.

  23. be sure to mess up SQL Server code as well.... by ClassicASP · · Score: 3, Funny

    Use long looong looooooooong stored procedures (20,000+ lines long) with lots of spaghetti SQL code and very little documentation. And never use identities and primary keys; instead just get the max ID number on the fly and use source code to get the next integer-up for the next record insertion to a given table. Make sure the table and field names have almost no relevance to the data they hold. use views liberally, and query one view on top of another view on top of another view on top of another view. If possible try and work something out to where there simply isn't any relational design to the database at all, and instead just use redundancy everywhere. Or, if you really want to be nasty, you could go the opposite route and figure out some kind of a mindbending rubix-cube-like puzzle where there is only one table with only 3 fields in the entire database, and nearly all table data of any sort is stored in one field in that table, and just rely on a myriad of SQL joins to emulate the behavior of relational database design.

    1. Re:be sure to mess up SQL Server code as well.... by WaffleMonster · · Score: 1

      SQL tables? I just store all my data in Excel files.

      Or SharePoint...

    2. Re:be sure to mess up SQL Server code as well.... by ZombieBraintrust · · Score: 1

      Lotus Notes

    3. Re:be sure to mess up SQL Server code as well.... by fatwilbur · · Score: 1

      I'm gonna go ahead and get flamed and *defend* SharePoint here...

      Having worked in an MS-based company for a few years now, data in SharePoint is much, much better than data in Excel, most of the time. With SharePoint, at least there's a known web service interface to query the data and it's container. It can be extracted to excel in a heartbeat, or queried by reporting services. In short, it's far more accessible to my team of developers, regardless of it's other failures. Isn't that one of the most important aspects of data anyway, being able to get at it?

      Moving to a full powered relational database solution (SQL) is EXPENSIVE! To do it well you need to design interfaces to the data, testing cycles, yadda yadda - it's a full software development cycle anyway. SharePoint is a reasonable first step up from Excel for those not dealing with huge amounts of data, mission criticality, or who don't have a lot of money to build an application to replace their spreadsheet. Using it where it does not make sense is like any other case of using the wrong tool for the job in IT, it will leave you frustrated to no end.

    4. Re:be sure to mess up SQL Server code as well.... by RuffMasterD · · Score: 1

      Or FileMaker Pro... as a dynamic website. Gotta go, the webserver needs a reboot.

      --
      Human Rights, Article 12: Freedom from Interference with Privacy, Family, Home and Correspondence
    5. Re:be sure to mess up SQL Server code as well.... by Inda · · Score: 1

      No, no and thrice no.

      It might work for you team of developers but it would not work for my team of engineers. Unless it can be copied to a USB stick, it is useless.

      Asking them to set up a query in Excel to pull data off Sharepoint..? Some of them can't even copy the URL to a Sharepoint webpage. These engineers are on GBP six-figure salaries.

      --
      This post contains benzene, nitrosamines, formaldehyde and hydrogen cyanide.
    6. Re:be sure to mess up SQL Server code as well.... by K.+S.+Kyosuke · · Score: 1

      Moving to a full powered relational database solution (SQL) is EXPENSIVE! To do it well you need to design interfaces to the data

      What interfaces? SQL is the interface to relational data these days (perhaps with a few exceptions like GDML/BLR in Firebird). And the nice thing is that it works for all schemas. You don't design interfaces for relational data because there aren't any in the first place - you design data models. That was the whole point why relational databases were developed - all the previous DBMS architectures required interfaces, relational DBs figure out on the fly how you want them to do something based on you telling the engine what you *want* to do. And the interface for telling what you want the RDBMS to do is a language with a well-defined grammar that satisfies (virtually) all conceivable queries (virtually, because some many parts of SQL are absurdly idiotic, but workarounds have been developed for most real-world implementations).

      Now, whether designing a data model for an RDBMS can be considered simple or whether it's suitable for all applications is another thing. But that has little to do with "interfaces".

      --
      Ezekiel 23:20
    7. Re:be sure to mess up SQL Server code as well.... by K.+S.+Kyosuke · · Score: 1

      It sounds more like an RDF triple database. ;-)

      --
      Ezekiel 23:20
    8. Re:be sure to mess up SQL Server code as well.... by DarthVain · · Score: 1

      I have a couple that seem to revel in the exclusive use of composite keys coupled with massive redundancy, random normalization and zero documentation.

      Why do I have so many duplicates? Ohhhh, it was designed that way. Awesome. Which of these things is not like the other...

      Granted, the legacy system is decades old, and has gone through development after development sans documentation. I am left thinking half the DB design was simply to conform easier to whatever half brained fix they managed to come up with on the application side.

  24. Re:How To Develop Unmaintainable Software by Beardo+the+Bearded · · Score: 4, Funny

    In all fairness, outsourcing it to Canada made sense. We're cheaper, we have health care already, and speak English with an approximate degree of usefulness.*

    So, on behalf of our country, I apologize for any inconveniences you have suffered from the sheer shittiness of the ACA software. As a measure of our sincerity, you may pick up one(1) bottle of maple syrup from our strategic reserve.

    *offre non valable au Québec

    --

    ---
    ECHELON is a government program to find words like bomb, jihad, plutonium, assassinate, and anarchy.
  25. Re:There's more than one way to do it: FIXED! by bigredradio · · Score: 1

    The nastiest project I ever took over was written in Perl

  26. He Didn't Delve Into Specifics by Greyfox · · Score: 4, Interesting
    How about "Set up a global int l and set it to 0, and a global int O and set it to 1. Or sometimes l, depending on what file you're in." This works better or worse, depending on your font. Or in C++, have every class inherit from every other class. I've seen this done.

    A couple times I've run across some jackhole who is in love with dynamic shit and who wants to check java object code into an SQL database and dynamically load it into a program. Nothing quite spells fun like wondering where the hell the code is branching to, and spending two days figuring out it's to an object in a database the code to which has been lost 4 years earlier.

    For a long time there in the '90's and a bit later, version control wasn't a normal thing. If you had to get management approval to set one up, that usually would start up the sinking feeling about that job sooner rather than later. Nothing quite like having to justify the addition of something they should have never written a line of code without in the first place. Nevermind trying to get overhead for writing unit tests. Assuming unit tests are even possible. For most of the projects I've run across, the coupling is so tight there's no way to get in and test discrete functionality of anything.

    For the guys not using version control, "Lose the source code" is a good one. You don't even have to be malicious about it (Though malice helps.) Just build the thing on your personal dev box, deploy the executables to production and never mention it when you leave. Bonus points if they walk you out during a layoff.

    "Don't set up a build system" is another good one. Gotta love those projects where you have to run a top-level build three times before it produces an executable!

    --

    I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

    1. Re:He Didn't Delve Into Specifics by DoubleJ1024 · · Score: 1

      This almost sounds like my previous employer. The software group had version control, but the electrical and mechanical group did not get anything until right before I was laid-off. It was fun being the department librarian and having to keep track of random files that the only real difference was the date stamp. I finally got the electrical group under control, the mechanical group had a completely different system that would ONLY interface with Solidworks, the software group used one of the microsoft version control systems, and we in the electrical group used SVN. What a fun challenge to maintain and organize. Thankfully I don't have to deal with that anymore, our files at my current employer are nothing more than word documents that ANYONE can modify. I have tried to get them to learn about version control but telling a large defense contractor about something simple like SVN is a lost cause.

    2. Re:He Didn't Delve Into Specifics by Greyfox · · Score: 2

      Really? Try pointing out that document revision control is mandatory under the ISO 9000 process. That should get the ball rolling pretty quickly. Or A ball, anyway.

      --

      I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

    3. Re:He Didn't Delve Into Specifics by sconeu · · Score: 1

      A buddy of mine inherited some code that was written ENTIRELY in #defines. Needless to say, it used a crapload of global variables.

      Another one that I inherited was a 5000 line source file... OK maybe that's a minor nuisance... BUT... the guy had written it both left AND right justified. He didn't believe in indenting, and all comments (and every line had one, including of the "add 1 to i" sort) were right justified.

      This was on an old Unix System III machine, so I wound up running it through csplit(1) to break it into about 10 source files, and then ran them through cb(1) to format them. It would have taken far, far, far, too long to organize the source by files, unfortunately. Thank the FSM for ctags and cscope.

      --
      General Relativity: Space-time tells matter where to go; Matter tells space-time what shape to be.
    4. Re:He Didn't Delve Into Specifics by istartedi · · Score: 1

      How about "Set up a global int l and set it to 0, and a global int O and set it to 1

      This reminds me of, "have a config file... and read in environment variables... in a library, not your main() function.". I've seen that first hand. Damn I hated that, since I tend to prefer config files over environment when practical. I just sort of forgot about the environment, not having used it for a long time. So I'm like, "Why doesn't this work on the other machine????" and somebody who knew about it is like, "the library configures itself with getenv() when you first call in to a certain function". Fuuuuuu...

      Along a similar line, abort() without logging in a library, due to errors that are just frequent enough. Why does the production server just stop sometimes? This one is easily checked by grepping the code; but still.

      Then of course there's the "fall in love with things that are difficult to debug", such as fork(), setjmp/longjmp, threads, or other unusual flow control features used in unusual ways. See, "call/cc considered harmful". Good thing that at least C doesn't have that.

      Perhaps maybe somebody has made a list of things like this to check.

      You can track down function calls that are likely to cause problems with grep. So. To really make maintenance a chore, variable names that mean something to you (but not anybody else) is an excellent choice.

      Part of the lore at one place was the guy whose variable names were all variations on butt: assvar, butt, bum, butt, arse, anus, etc; perhaps with some context on the end of the name, a phrase or just "variable" e.g. int assmunchingvariable;

      I don't know if they ever got around to re-writing that. I'm pretty sure they didn't maintain it.

      --
      For all intensive purposes, "whom" is no longer a word. That begs the question, "who cares"?
    5. Re:He Didn't Delve Into Specifics by Mr.+Sanity · · Score: 1

      Damn, I'm having a programmer PTSD moment here. I had to refactor an extensive set of code where the only named variables were "q" and "x". They didn't even have a consistent meaning across network boundaries. I had to methodically *break* every method and determine what the variables were *supposed to be* by the nature of the errors that it generated.

      If variables had been sanely named, it would have been a 2-3 day project. It took me 2 months to break each piece and refactor it into something sane and readable.

      This turd of code was brought to me by picking up after the old programmer left. He was also someone that lectured people to use revision control, but never did so himself. In fact, he decided it was sane to do all his coding in /var/tmp/ and simply never rebooting his machine. I hope he gets ass cancer.

    6. Re:He Didn't Delve Into Specifics by Greyfox · · Score: 1
      I don't think I've ever seen a setjmp/longjmp in any C code I've ever maintained. I'm not sure a lot of C programmers even know it exists. Or setting signal handlers. I've written the only signal handlers I've ever seen in production C code. I had an AIX segv handler that tried to recover enough to print a stack dump before dying. It even worked a few times. You can pretty much bet if it forks, no one else will be able to follow any explanation you can give about how it works. Same thing goes for clone. Most people seem to have trouble with "These two things happen at the same time." Say something like "This spawns a socket server on a thread in the background to provide a command console UI" and their faces just go blank.

      I reduced our weekend calls on my last big C project to almost nothing by replacing all the strcpys with bounded strncpys and and cleaning up how the guy set up his strings. Mostly by #defining constants so you could declare a temp buffer of INVENTORY_ID_LEN and be pretty sure a change to its size in the future wouldn't result in you blowing out your stack. Oh yeah, and I'm a bit OCD about memsetting all character arrays to all NULLs before using them. Oh hey, look, our application doesn't segfault twelve times a week anymore. A bit more work with libefence and the only call we got for the next year was apparently an indexing fault in the database we were using. Fixed several double frees, added null checks before strncmps EVERYWHERE and got the thing running like clockwork. Last I heard they'd outsourced the gig to Brazil and were trying to port it all to Java. Wonder how that's going for them...

      --

      I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

    7. Re:He Didn't Delve Into Specifics by Greyfox · · Score: 1

      Ah ctags and cscope are underrated. I used them a lot on a job where I had to read the C standard library and write tests for it. There's so much UNIX crap out there no one knows about. The only other place I've ever seen Lex and Yacc used were by the guy who wrote Awk for that UNIX system. I wrote a trivial Adobe PPD parser with them once, because why not? It didn't implement the full spec, just the bits of it I needed, and it'd pull the data out and build XML tables with it. Oh yeah and some jackhole asked me to write a C comment counter as I had time over the course of a couple of days as part of an interview one time. I busted it out for that. He told me that of all the candidates, mine was the only one that passed all his test cases for it, but he thought I was overqualified for the job. Yuh huh. I guess that goes under the category of "never ask a question you don't want to know the answer to."

      --

      I'm trying to teach myself to set people on fire with my mind... Is it hot in here?

  27. Re:Ahem... Meritocracy by Punto · · Score: 1

    Unless your boss hired you to delegate a task he can't or won't do.

    --

    --
    Stay tuned for some shock and awe coming right up after this messages!

  28. Terrible is a matter of perspective by xtal · · Score: 1

    Terrible for the client, maybe.

    Terrible for the job security? Maybe not, under the right circumstances. Not everyone has lawyers to negotiate fat maintenance contracts.

    Doesn't make it right, but just saying.

    --
    ..don't panic
  29. Then Quit in a Huff When it's Only 2/3 Finished. by rueger · · Score: 2

    At one organization I inherited a fund-raising database developed with much arrogance in Filemaker Pro. Except that the FMP "Guru" quit in a huff when it was only about 2/3 functional.

    Despite this the thing was used - with many, many crashes - for two years because it was the best thing that they had. And because Mr. Guru was a pal of half the staff.

    Did I mention that Mr. Guru also refused to hand over any of the logins that would allow someone to fix or administer this thing?

    We eventually wound up moving over to MS Access (GOD YUCK EVIL!), and massaging, fixing, cleaning, importing ten years of data, each year on a different format, file type, or with different fields. We actually managed to turn it into a reasonably useful fund raising tool. I mean, aside from the downside of using MS Access.

    Documentation? HA HA HA HA!
    Instead we had lots of on-screen buttons though that didn't do anything because he never quite got around to it.

  30. Re:There's more than one way to do it: FIXED! by boristhespider · · Score: 1

    I love Perl. The only language where I have no idea what I've just written but I do know that somehow it worked and I don't want to mess with it. I know I'm just shit at Perl but even so.

  31. Using new technologies by CanadianMacFan · · Score: 1

    I once was working on a project that included a bunch of dependencies because the original developers wanted to learn the technologies like an expert system. The program didn't need one but they threw one in anyways because it would look good on the resume.

    1. Re:Using new technologies by ZombieBraintrust · · Score: 1
      I was on a project where architect had read a book on Spring. This was 7 years into the project. We had a screen that needed some new edits. So he had us refactor the old procedural code into tiny classes that were contructed using xml config files. We also used Spring annotations, because he finished the book half way through the update. 6 months later the architect is promoted. 9 months later I training a new developer.

      I have looked for a few days and can't find the code that validates date of birth is before current date?

      Ohh sorry, you see there this xml file that controls how these generic classes are instanciated. These beans are collected as a list and depending on blah blah blah...

  32. Re:Revision control systems are not installation s by Cramer · · Score: 1

    It's even simpler than that... what one tested is svn status. That revision is what you deploy. There's no need for branching, tagging, or an of that crap. SVN has repo revision numbers. Use. Them.

    (this is the reason our products have the svn rev in their product version - so we know exactly what was used to make it.)

  33. Not Useful by SerenelyHotPest · · Score: 1

    I already know how to write unmaintainable software. This hardly needs to be written about. If there were a good list of practices for writing maintainable software, that might be more constructive.

  34. Agreed. Never seen "too much" documentation by Anonymous Coward · · Score: 1

    It's always been insufficient for a new team member to do everything they need to do. And no, "just ask Dave, he knows everything" is the claassic mistake that so many people make in excusing this, as it assumes that he will always be around to answer questions (in practice, he will be so snowed under keeping the damn system afloat that he never has time to help as there's always something "more urgent").

    When will the majority of developers ever learn that documentation (instructions for humans to make the system run) is as vital as code (instructions for computers to make the system run) ?

    And how many businesses have sunk into the swamp of failure because of arrogant jerks who like to say stuff like "my code is self documenting" and clueless managers who have no development background and let them get away with it.

    There are more abstract, higher levels of "information" that need to be valued in the "Information Technology" business than code and data.

  35. Also be sure to use OS tools by katsh · · Score: 1

    Use random untested programs. preferrably obscure ones from github with no forks or bug issues. For instance, don't the language's search methods, instead make a call to use the system's grep. But not the actual grep command, but a modified one - like grep-contrib. Which in turn needs to be compiled with a custom compiler, gcc-contrib. and obviously, dont document any if this. make the next poor soul look at the code and find out.

  36. Documentation is overrated by 140Mandak262Jamuna · · Score: 2
    Documentation goes out of synch with the code very quickly. The only thing worse than working on someone else's code without documentation is working on someone else's code with incorrect documentation. The problem is so old Dijkstra allegedly said, "Always debug code, not the comments".

    Oh, yeah someone will tell me I am doing documentation wrong. How come "you are not doing agile right" is a valid response but "you are not doing watefall right" is not?

    --
    sed -e 's/Chuck Norris/Rajnikant/g' joke > fact
    1. Re:Documentation is overrated by edelbrp · · Score: 1

      I think you can also document in a way that is also up to date. For example, do you document the who/what/when/why for version commits? Sure. Do you put in-line comments in the code, e.g. "We need to revise the code below at some point to account for ABC"? I hope so. Do you have a stash of reference scripts/how-tos so you don't have to reinvent how to do semi-routine complex actions, like deployment? What about an active system to keep track of to-dos, priorities and who they are assigned to, what happened, how they were accomplished? Even email history can be effective documentation.

      Otherwise, I would agree that documentation in the form of a bulk document which is probably already flawed at 1.0 and easily outdated is mostly a waste of time. (Past the mental exercise of the person writing it, perhaps.)

  37. I know the guys to ask by ddd0004 · · Score: 1

    The guys who wrote the software at my previous job were masters of it. I don't know all their secrets, but some of their finest work included: single character named global variables that were reused indiscriminately, code in stored in a database that was then evaluated inline that did things like changing variable values and declaring functions and other fun stuff, 500+ line functions that tried to do a little of everything, and liberal use of copy and paste.

  38. Nothing wrong with writing from scratch by FuzzNugget · · Score: 2

    As long as you document, label and organize your code coherently and logically in a solid language, coding from scratch (or near scratch using libraries of your own) can be a good thing. It avoids pitfalls like vulnerabilities that affect common code bases, massive libraries that take friggin' *ages* to load on an i7 with a fast internet connection or relying on the developer(s) of library X to add feature Y ("sorry, we can't add that feature yet Mr. Client, it's uh ... because of complicated programming reasons, basically, we're relying on a third party and we don't know how to do it ourselves")

  39. In other words by Charliemopps · · Score: 1

    In other words, put the business unit in charge of your programming department.

  40. Web and Embedded by Murdoch5 · · Score: 1, Informative

    I work on a lot of web / embedded development and without a shadow of a doubt the worst aspects of most developers are:

    1) Comments - 98% of programmers can't write a decent comment.
    2) Object Oriented - This term usually means the code is structured like a child got let loose on the code and it can't be managed. Not always but usually if you hear object oriented design the code will be crap.
    3. Formatting - Don't use spaces, use tabs! I should be able to open your code on Linux, Mac or Windows in any editor without issue.
    4. Ansi / Posix - Don't lock your code to any one platform, it should be portable so just forget crap like .NET
    5. In code documentation - if I have to decode your logic it sucks.
    6. Bad structures - Don't use massive loops and flow when a simple goto might be a better solution, being a smart-ass makes you look like an idiot.

    I could keep going but I think it's a good inital list, make sure I can work on your bloody code easily.

  41. Sounds familiar by bbroerman · · Score: 1

    Sounds like most of the projects at my last job. As well as some at my current.

    --
    Logic is the beginning of reason, not the end of it.
  42. My favorite by Sulik · · Score: 1

    My personal favorite: Random "Sleep(10);" inserted in the code to "fix" race conditions... In my experience, there is about 10% of SW engineers that are actually good at what they do, 80% that basically suck, and at the opposite end of the spectrum, the remaining 10% are basically borderline retarded.

    --
    Help! I am a self-aware entity trapped in an abstract function!
  43. Generated code by Kazoo+the+Clown · · Score: 1

    Come up with an excuse to write utility code that generates the production code and/or SQL. Then lose the utility code after the production code is up and running. Machine generated code is mostly incomprehensible, so even you won't be able to modify it without all sorts of subtle and not so subtle side-effects.

  44. Re:The best language for unmainatinability by rssrss · · Score: 1

    I don't know why I forgot about APL. All of those strange symbols, it's almost perfect.

    --
    In the land of the blind, the one-eyed man is king.
  45. Sounds like every proprietary Perl/PHP project... by v3xt0r · · Score: 1

    ...that I've ever seen.

    --
    the only permanence in existence, is the impermanence of existence.
  46. Frameworks by fyngyrz · · Score: 1

    Well understood frameworks also have widely disseminated and well understood (by the very people you would prefer didn't) vulnerabilities, not to mention unfixed bugs that persist because they're in the framework, not in your code.

    There are a lot of very good reasons to write your own code. The presumption that your own code is poor code, or that it isn't worth the time, makes assumptions not in evidence about every programmer who has done so.

    Sometimes frameworks/libraries/etc are the way to fly, especially if they're not exposed to the end user. But sometimes, rolling your own is precisely the right solution.

    Observe the basics: sanitize all input; build a library *of your own* that does this for all manner of data types, then send ALL input through it. This prevents a very large number of vulnerabilities, and, you can fix it if you miss something. After a while, you'll have a very solid thing you can count on and extend as required. Watch out for bloatware. Any library or similar that weighs in at many megabytes when compiled, or tens of them, is almost certainly written like shit. Working AI code might be the one possible exception. Not that I've seen any such thing.

    Lots more, of course, experienced programmers generally know these things anyway.

    --
    I've fallen off your lawn, and I can't get up.
  47. Re:There's more than one way to do it: FIXED! by gmhowell · · Score: 2

    The nastiest project I ever took over was written in Perl

    Came for the anti-perl quip, left satisfied.

    --
    Jesus was all right but his disciples were thick and ordinary. -John Lennon
  48. This would be funny by NotSoHeavyD3 · · Score: 1

    except like a lot of us developers I've seen most of this.(Just not the cutting edge language. The other stuff, I've seen that at my current job.) If he wanted to sum it up in one sentence it'd pretty much be "STOP FIGHTING YOUR TOOLS. THEY'RE SUPPOSED TO HELP YOU!"

    --
    Did you know 80 to 90% of the moderators on slashdot wouldn't recognize a troll even if one dragged them under a bridge.
  49. sure thing by Torvac · · Score: 1

    pair programming & code reviews. fire, sue for sabotage. its not that far from admins who hide stuff and try to blackmail.

  50. It's not necessarily the programmer's fault by larpon · · Score: 1

    I work with both revamping/fixing of legacy systems and developing new customized system for medium sized businesses.
    I've seen all the bad points in Greg's list many times over the years. The thing is I've even seen it in the code I write myself - please give me a chance to explain.

    Most of the systems I've delivered with poor maintainability has been on a tight schedule (should've been done yesterday) and on a limited budget.
    It's the same story everytime: You get what you pay for - and you get it in a condition your schedule allows.

    If a library or system has stupid dependencies it's because that is what was available at the time - no time to wait for version 2.smartshit. If I deliver something written from scratch it's because I couldn't find a framework or foundation that met the requirements at the time.
    Documentation is luxury - even in the clients own eyes - all my clients usually opt-out on it because of schedule and price.

    I do use version control and staging environments but not always in favour of any programmers taking over - why? Because of the nature of the production environment (which is usually build on top of other hard to maintain legacy software running on a server OS that can't be upgraded in fright of it will stop working etc.).
    Trust me you actually spend quite a lot of time and effort to investigate and make the best out of your time and money given - and usually you leave with happy clients - and yes the programmer taking over your shit will be fustrated and have some good laughs (I know because I fix other peoples legacy code as well - I've seen a lot of funky stuff in my time) - but hey you make a living out of it so that's part of your job :)

  51. Don’t forget the documentation! by David+Gerard · · Score: 1

    Don’t forget the documentation to match!

    HOWTO: write bad documentation that looks good

    --
    http://rocknerd.co.uk
  52. There's another reason for doing this. by BVis · · Score: 1

    A reason in two parts, actually. One is job security; if you have so much institutional knowledge and your employer is too cheap to have redundancy for that knowledge (by hiring more people or spending man-hours sharing the knowledge with another employee), and that knowledge is mission-critical, you can get away with being all kinds of lazy/incompetent and you won't get fired. The CTO at our company has had his job for the last 15 years or so purely because he's the only one who knows how some of our stuff works; he's an incompetent micromanaging asshole who drives good employees to quit, and would be fired in a cold minute at most companies. The other part is that that job security gives you leverage with the clueless management that asks you to do something completely stupid; you can stand up to them and say "No, I'm not doing that, it's retarded" and you stand a lesser chance of being fired. If that sounds arrogant, think of how arrogant it is for the business to make technical decisions without engineering input. If worse comes to worst, you can say "Fire me if you have to, but either way, that's not getting done."

    In my opinion, anything that gives the people who do actual work leverage over people who are exploiting them for personal gain is a good thing. Downside is that when you're job hunting, frequently the positions you're looking at are tasked with cleaning up someone else's mess because either they (stupidly) fired the employee with the knowledge that was critical to the business processes, or the employee got sick of putting up with management's bullshit and quit. If either of those happen, it's a failure of leadership (who either decided that redundancy of knowledge isn't important enough to put in the time, or that the employee wasn't bending over far enough for them). I find that that failure takes the form of hiring someone for their knowledge and/or skills, then dismissing their input as inconvenient or deciding they know better how to do that job than the guy with the actual skills.

    --
    Never underestimate the power of stupid people in large groups.
  53. Microsoft undocumentation! by codeusirae · · Score: 1

    @David Gerard: "Don’t forget the documentation to match!"

    Reminds me of online Microsoft documentation, click here and here and here to finally get a link to the service-pack-bug-fix. Doesn't in any way contribute to your understanding of the problem.

  54. Re:Why no "invent your own language"? by mrchaotica · · Score: 1

    I once worked on a piece of software, which was commercially sold, but developed by faculty/staff at a university, that was developed on top of another system written at a different university back in the '70s. It basically consisted of a command interpreter for a domain-specific language that was itself written in two other domain-specific languages. One of these languages existed basically to retrofit dynamic memory management into Fortran 77, and so the system contained it's own custom memory management system written in a combination of C and Fortran. At one point it had supported several different kinds of Unix (and some other old stuff like System/370), but by the time I got there it only ran on Windows.

    There was no version control, it could only be built with the (out-of-business) Watcom C & Fortran compilers, and for probably the last 20 years the only people who had been programming it were engineers (not computer scientists).

    --

    "[Regarding the 'cloud,'] ownership was what made America different than Russia." -- Woz

  55. Step 1 by brunnegd · · Score: 1

    How to develop unmaintainable code: Step One; Turn it over to Microsoft. Step Two: See Step One.

  56. automatically make code unmaintainable by jdriselvato · · Score: 1

    gcc software.c; rm -rf software.c

  57. Fast/Cheap/Quality by DarthVain · · Score: 1

    "bottom line is get something done that sorta-kinda works as fast/cheap as possible"

    This. one of the "applications" I "maintain" (yes I am using "air quotes" as sarcasm) was designed using this adage. I told them it was a bad idea, that what they were doing was wrong. Did it anyway. Launched, managers all patted each other on the back, moved on (as did the developer).

    Now users are stuck with software which has been down as much as up and pretty much breaks in inexplicable ways if you look at it the wrong way.

    As the basics go, Fast/Cheap/Quality: Pick two. If you're a manager with a half-life of a year, you get the kudos, someone else gets the problems. Cheap and Fast it is...

  58. Re:How To Develop Unmaintainable Software by lsatenstein · · Score: 1

    In all fairness, outsourcing it to Canada made sense. We're cheaper, we have health care already, and speak English with an approximate degree of usefulness.*

    So, on behalf of our country, I apologize for any inconveniences you have suffered from the sheer shittiness of the ACA software. As a measure of our sincerity, you may pick up one(1) bottle of maple syrup from our strategic reserve.

    *offre non valable au Québec

    ===
    I learned to write all my comments in French Canadian Joual. (Street French, taberwaht)

    --
    Leslie Satenstein Montreal Quebec Canada
  59. hire me by Bigos · · Score: 1

    I still get a shock when I look at controllers in my first commercially written Rails app. Godd job they have never deployed it.