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

211 comments

  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 Anonymous Coward · · Score: 0

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

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

    10. Re:Old news by Anonymous Coward · · Score: 0

      Must have been 100's of small chunks of code all calling each other in and out of memory every other keystroke.

      Emacs?

      written in a version of BASIC

      Oh.

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

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

    13. Re:Old news by Anonymous Coward · · Score: 0

      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.

      Agreed, if this Greg is that good, he would be building up these maintainable system one after another, instead of specializing in fixing them after other people had already built them.

      It is always easy to criticize what other people have done with the full benefit of hindsight, but would HE did any better given the same resource, schedule and other constraints? How many systems had HE delivered that was as "maintainable", within budget and still running in business?

      I had done my share of voicing complains when having to maintain these systems, until I learned more about the time, budget and other constraints those developers had when building them, then I became more humble and have more understanding of why things are in the current state.

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

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

      what language is "cgi-bin"?

      --

      If an experiment works, something has gone wrong.
    18. Re:Old news by Anonymous Coward · · Score: 0

      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.

      This showed how little you know about enterprise software. Most of those came with pretty strict licenses on where and what you can run them, and putting them in a VM could easily have violated your license and cost your employer millions of dollars in additional license fees.

      Not to mention running it in your VM would be about as accurate at simulating the production environment as trying to simulate a F1 race with your kid's electric toy car.

      That's not including the lack of all the outside connections that production system has with other systems (both internal AND external), oh, and some connections are proprietary and needing its own per-machine licenses. Have fun convincing management to pay extra thousands of dollars per year in licenses just for your toy environment.

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

    20. Re:Old news by Anonymous Coward · · Score: 0

      Good programmers often depart from guideline, and with good reason.

      True. But crap programmers invariably think they're good programmers.

    21. Re:Old news by Anonymous Coward · · Score: 0

      whoosh!

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

    23. 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
    24. Re:Old news by Anonymous Coward · · Score: 0

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

      Maybe the contract said "one dollar per year per line in main()"?

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

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

    27. Re:Old news by Anonymous Coward · · Score: 0

      HAHAAHAHAHHAHAHA,

      You would think. Did work for a fairly big web site (PHP). Their version control was the live test server.

      And I work for a large defense contractor that mostly uses version control but not always.

    28. Re:Old news by Anonymous Coward · · Score: 0

      You seem to have gotten yourself in a contrarian attitude, and searching for ways in which to pan the article.
      Let's see:

      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.

      So you agree with him, except when you really have no choice. Yeah, sucky management and general externities can influence the quality of the product, news at 11.

      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.

      See above.

      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

      This is true for a very limited set of circumstances. Even in those cases, if you do need to develop your own framework, it can still be perfectly usable if it's engineered correctly.
      But most times, new frameworks are developed simply because nobody wants to learn the existing code, or because developing the new framework is sexier. Also known as the NIH syndrome.

      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.

      I've worked in projects where there was a mix of programming languages. Basically every dev was using the language they were most familiar with, and management didn't care.
      At the end we had a mess of a project where you needed dozens of tools executed in just the correct order and with the right configurations just to compile it. Good luck running it on your system, or any system other than the main dev one.
      It made maintainability horrible since it was hard to integrate some of those languages, and made cross-pl

    29. Re:Old news by Anonymous Coward · · Score: 0

      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.

      That doesn't make any sense. He's explaining from experience how *not* to get into the type of mess he gets called in to fix.
      You're reading it as if he's saying most projects have those problems, which is not true at all.
      But my experience agrees with his: projects which end up in a mess tens to exhibit one or more of those problems (typically more).

      My guess is that you're seeing yourself in that list and would rather think the author is incompetent than shatter your self image of being a great coder.
      On that note, you might want to read up on cognitive dissonance. I've even linked it for you.

    30. Re:Old news by Anonymous Coward · · Score: 0

      Man, you'd be great at this place I used to work. I couldn't work there anymore, because of the workflow, or lack thereof. So many people sitting there telling me that there isn't anything that we can do about the problems at hand, but just deal with them one at a time. Their philosophy was that if 2 men could dig a hole twice as fast as 1 man, then 20 men would be much faster. When they didn't prove to be faster, they blamed the hardware dept for not creating shovels that could take advantage of the workload.

      When humans detect problems, they're supposed to fix them, period. Otherwise, what's the point? Oh, money.

    31. Re:Old news by Anonymous Coward · · Score: 0

      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.

      Part of the Tao of programming is using the right language. The "right" language is almost never one that's currently a fad, and even less often one that's in a state of development that constantly breaks old versions (such as Java).

      When you read English translations of Tolstoy's Anna Karenina, you'll be somewhat suprised at his frequent use of the word "naked".

      Anyway, which "love" are you talking about - eros? Khiba? Philia? Renai? Tshuca? Storge? Ahava? Agape? Koi? Hesed? Raham? Renai? Aijoi? Boseiai?

      It's hard to understand what you mean when you use English or Russian, because they don't have all the separate concepts of love that more powerfully expressive languages have, so you have to be more verbose to convey the same information, and you lose clarity in that process.

    32. Re:Old news by Anonymous Coward · · Score: 0

      > I think what the author was trying to say was not to put invalid data into a production environment on purpose

      I once worked for a company that would manage conflict of interest, research grant money and a bunch of other stuff. They tested in their production environment - well not explicitly [dev, test, stage prod all shared a database at one point in the distant past :-( ]. Nothing like giving a demonstration to a large university and having the test data of "[Company owner's name]'s house of whores and prostitutes". Something which *may* be acceptable in a test environment, is not acceptable in production. Not to mention, 40000 pieces of test data of "lorum ipsum" or "asdf" or "zxcv" looks like crap.

    33. Re:Old news by Anonymous Coward · · Score: 0

      I'm extreme with respect to code and system quality. However you are simply blinkered if you continue to think in such black and white terms. Price, capability, stability etc are simply other aspects of quality, and all of them follow from the approach, which includes design, standardization and achievability constraints.

      "A is crap because it's inflexible". However its been running daily without issue for 15 years, and the domain is such that flexibility isn't necessary.

      "B is crap because it's slow". However it currently handles 10,000 sales/day in adequate time, doesn't go beyond that until well past 50,000 sales/day and the business specifically believe we are saturated in terms of client count.

      "C is crap because it's written in..."

      How do you think you can define "crap" objectively?

    34. 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.
    35. Re:Old news by Anonymous Coward · · Score: 0

      When I was still in college I got a request from a friend of a friend of my father in law to do a job (for cheap) retrofitting an old accounting system.
      This system had multiple DOS executables, and a proprietary database (if you want to call it that) system - and no source code. The vendor who sold it to them/built it was no longer in business.

      I was concientious about my analysis and and determined that is would be extremely painful to reverse engineer (if you could) and quoted them a realistic time frame and price to do the work they wanted. Apparently, that was more than the $100 they had budgetted for the work.

      I told them it would probably be cheaper if they simply bought a new accounting system, and manually migrated the data over. They told me 'no', and I left that job location for the last time with a great sense of relief.

      People know the cost of everything, but the value of nothing. It continues to this day - the reason we have so much bad code is companies want the benefits of automation without having to pay for that capability.

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

    38. 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
    39. 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
    40. 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 Anonymous Coward · · Score: 0

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

      You must only know how to use a hammer (just kidding).

      Many of his points are fine, but a lot of them really miss the mark. A web application which is a straight checkout? Come on! That's a very bad idea. It should be something like, checkout, make, make install (or mvn package, unzip in deployment directory). There is just too much at risk to have a SCCS directly drive your deployment area, especially if that SCCS tends to cache URLs back to the repository (or contains passwords or hashes of passwords).

      Separating the build and deployment makes it _easier_ to have differentiated dev, test, and production servers, but this guy is just ignoring all of that. The best that he gets is a marginal ability to fix in place and check back in; but, those techniques are exactly how you side-step all regression testing.

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

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

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

    6. 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."
    7. 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."
    8. Re:Great little article by Anonymous Coward · · Score: 1

      I know all my assembly language programs are self documenting.

    9. Re:Great little article by Anonymous Coward · · Score: 0

      Grandparent post by Louis Savain's CAI (Christian Artificial Intelligence)

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

    12. 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. Calm down, Satan. by Anonymous Coward · · Score: 0

    Note subject.

  5. Ahem... Meritocracy by Anonymous Coward · · Score: 0

    Just ask my former boss any questions you may have on the code or build environment. He's my boss, of course his knowledge would be a superset of my knowledge. That's why he is paid more than I was when I left.

    Go "Maximizing Shareholder Value"!

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

  6. 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?
  7. 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 Anonymous Coward · · Score: 0

      I write everything in LOLCODE, although I'm thinking of mixing in a custom version Scheme where all parens are instead whitespace.

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

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

    7. Re:Use a language that no one ever heard of by Anonymous Coward · · Score: 0

      That would be awesome! But there will be wars as to whether a newline opens a new block or closes the previous block. I suggest instead that you use space characters to open and backspace characters to close...

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

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

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

  8. 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 Anonymous Coward · · Score: 0

      paid by the line count?

    3. 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.
    4. 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
  9. 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 Anonymous Coward · · Score: 0

      Well, no, he quite literally didn't. Unless, of course, the prioritizing the state of the code wasn't important enough to need to be "responsible" about, in which case the discussion is moot.

      You are probably one of those people who thinks, say, a CEO has a lot of responsibility, rather than the reality that he has virtually none. A delegatable "responsibility" is functionally a responsibility in no way in present society.

      And although this is all hypothetical, he almost certainly isn't smarter than me, as a matter of statistics.

    2. Re:Your Boss by Anonymous Coward · · Score: 0

      I'm willing to bet his social intelligence dwarfs yours. I'm willing to bet a hell of a lot.

    3. 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.
  10. Re:How To Develop Unmaintainable Software by rudy_wayne · · Score: 0

    uhm... is this about Obamacare IT?

    I thought he was talking about Firefox:
    - 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 well-understood framework, write everything from scratch instead
    - Add dependencies to specific versions of libraries and resources

  11. 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.
  12. no PHB driven IT by Joe_Dragon · · Score: 1

    no PHB driven IT where is your TPS report?

    1. Re:no PHB driven IT by Anonymous Coward · · Score: 0

      How is that different from what the GP said?

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

  14. 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 Anonymous Coward · · Score: 0

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

      If you work at shitty places, you're going to have a bad time, m'kay? For FUCK's Sake! Who Doesn't have build, test, and production? Shit, even as a one man shop that's a piece of cake to set up. It's MORE THAN pays for itself in even modest cost/time benefit analyses. If your management doesn't let you do this, FUCKING QUIT. Stop bitching and do something about it. Imagine the next meeting: "Well, the coders say they won't be able to do the job at all without a test system, issue tracker, and a central source repository." "Tell them they can't have the tools they need to do the job" "I tried that, some quit immediately, others started typing up their 2 week notices."

      Oh, wait... I see what the real problem here is. You're all a bunch of idiots! Don't tell me, let me guess: You got a job, and don't have another one lined up at all times in case some shit goes down. You're flying without a damn parachute, eh? Fucking morons. That's why you have no leverage! YOU ARE THE PROBLEM.

    2. 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
  15. As my predecessor's bumper sticker said... by Anonymous Coward · · Score: 1

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

  16. 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].)

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

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

    1. Re:Bad management by Anonymous Coward · · Score: 0

      I'm thinking of mixing in a custom version Scheme where all parens are instead whitespace

      Oh god this. I was at a company once where every ... single ... day there was a new hot feature that someone up there had read in a magazine or something and must have, top priority,cancel everything else!!1!one

      The code was littered with half-done commented out stubs and UI with buttons that didn't function and features that were going to be implemented real soon now... just as soon as everyone was done with the latest fad (drop everything, we're going mobile!!1!).

      But ADHD management isn't the complete worst out there. No, the ones who take the cake are the ones who refuse to accept input and demand things be done their way, and when the thing is built their way, immediately decide that their way was wrong all along and demand that it be reassembled from scratch by the deadline. I was on a UI team like that once.

  19. 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."
  20. Outsource to India or China by Anonymous Coward · · Score: 0

    That's how.

  21. 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
  22. Support Debian's build system, keep Greg employed! by tlambert · · Score: 1

    Support Debian's build system, keep Greg employed!

    That is all...

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

  24. 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
  25. ... says the self-taught programmer... by MasterOfGoingFaster · · Score: 3, Insightful

    Hey, glad I could keep you in business.

    --
    Place nail here >+
  26. 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.

  27. 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 Anonymous Coward · · Score: 0

      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,

      I see you've used MongoDB before.

    2. Re:be sure to mess up SQL Server code as well.... by Anonymous Coward · · Score: 0

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

    3. Re:be sure to mess up SQL Server code as well.... by Anonymous Coward · · Score: 0

      Chris, Is that you? I want to thank you for the opportunity to work for a great multi-national organization with flex-time, great benefits and the opportunity to work from home (in the U.S.) 100% of the time. Your shit job, which you were never qualified for, has benefited me immensely. Your knowledge hoarding, spaghetti-code ways may have gotten you fired, but this is a goldmine to a developer with real skills, and the ability to revamp your broken cesspool of development practices. Your name will be cursed forever in this organization except by me - I want to truly thank you!

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

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

      Lotus Notes

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

    7. 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
    8. 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.
    9. 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
    10. 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
    11. Re:be sure to mess up SQL Server code as well.... by Anonymous Coward · · Score: 0

      KVpair to SQL: GUID, Type, Value

    12. Re:be sure to mess up SQL Server code as well.... by Anonymous Coward · · Score: 0

      ...you're a MediaWiki developer, aren't you.

    13. Re:be sure to mess up SQL Server code as well.... by Anonymous Coward · · Score: 0

      It's okay, hon. Not everyone uses Peoplesoft.

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

  28. 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.
  29. To Develop Unmaintainable Software... by Anonymous Coward · · Score: 0

    "use the coolest mix of cutting-edge programming languages."

    That's why I program in BASIC and BASH.

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

  31. 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 Anonymous Coward · · Score: 0

      My first learning project for any language after "Hello World" is an emulator that supports MIPS.

      As such, not only is it easier to learn new programming languages once I had mastered a few, but I also get to bring my entire library of actual functionality with me everywhere I go.

      My code commits are simply strings of base64 encoded virtual machine images containing the compiled code. It runs beautifully, and is fully cross platform. My new ASM.js implementation is twice as fast as using Emscripten to compile C into webapps (besides, my favorite is FORTH, separate call and data stack -- HNNNnnnG!).

      Seriously, if you're not JIT comping a virtual machine before you emit a single bool, then you're really missing out. "Oh this function would be better to run on the client to save CPU -- DONE!"

    4. 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.
    5. 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"?
    6. Re:He Didn't Delve Into Specifics by Anonymous Coward · · Score: 0

      The word is "Sharepoint", not SVN. If you're going to use proprietary Microsoft formats, use their entire stack so the check in/out functions are integrated into the app itself.

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

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

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

  32. Job security by Anonymous Coward · · Score: 0

    In the current economic climate of outsourcing that's what any sane programmer should do. Good piece of advice!

  33. Re:Revision control systems are not installation s by Anonymous Coward · · Score: 0

    Or don't use SVN. Life's too short.

  34. 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
  35. Comments Should Restate the Code and Add Nothing by Anonymous Coward · · Score: 0

    As in:

    rem This is a loop!
    For i=1 to 20 Do

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

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

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

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

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

  41. Prerequisite by Anonymous Coward · · Score: 0

    Aren't all the aforementioned attributes actually listed as requirements in government work?

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

  43. Also be sure to use OS tools by Anonymous Coward · · Score: 0

    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.

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

  45. Why no "invent your own language"? by Anonymous Coward · · Score: 0

    I worked for a certain company where their entire point of sale system was written in some obscure dialect of BASIC. It ran under some antiquated version of SCO Unix, and you needed to use a terminal encoding that only one or two terminal emulators actually spoke just to interface with it.

    I think it was written at a university or something, I'm not sure. What I do know is that there was basically one guy in the entire city who still had the original source code tapes and could actually do anything with the code. The actual BASIC source code was pretty much 100% undocumented and almost completely unreadable. I've never seen anything like it, but that guy was in almost every week being paid some exorbitant amount of money as a "consultant" just to keep the system from collapsing in on itself.

    They were working on a replacement (I question how dedicated the BASIC guy was to this task), but a few years after I got the hell out of there I walked into one of their stores and noted the same old terminal emulator, interfacing to the same tired SCO Unix system running that same old BASIC crap. Absolutely nothing had changed.

    So really, if you want to insure your job for the immediate and far out future- write your own language. Use a whacky intermediary bytecode format, keep the compilers to yourself and deploy the interpreters/VM to production. This is pretty much the ultimate way to tie yourself to a system, and if you do it right you'll make boatloads of cash practically forever.

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

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

    2. Re:Documentation is overrated by Anonymous Coward · · Score: 0

      but "you are not doing watefall right" is not?

      Yes, considering that the "inventor" of waterfall created it as an illustration of how not to do software development.

    3. Re:Documentation is overrated by Anonymous Coward · · Score: 0

      Not true if you write to an API document and don't start adding fluff just because you're afraid to tell marketing to bugger off until the next version. Some people forget that marketing might actually listen to them if they back up what they (the programmer) says with a well presented case involving economics of the changes.

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

  48. The best language for unmainatinability by rssrss · · Score: 0
    --
    In the land of the blind, the one-eyed man is king.
    1. Re:The best language for unmainatinability by Anonymous Coward · · Score: 0

      Nope. Welcome to Whitespace.

    2. 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.
    3. Re:The best language for unmainatinability by behrooz0az · · Score: 0

      They speak greek, not strange.

      --
      Moderating "-1, Disagree" is simple censorship. Have the guts to post your opinion. -- Spazmania (174582)
  49. 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")

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

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

  51. Far better than no documentation by Anonymous Coward · · Score: 0

    ... is documentation that is

    * Out of date

    * Documents what you were going to do, rather than what you actually did

    * Duplicates what you can easily tell from the src (eg i++; // increment i)

    * Is positively misleading eg it fails to point out the things you had to do to get the damn thing working, but that are politically incorrect in your organization (eg coding standards)

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

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

  56. Gah!! by Anonymous Coward · · Score: 0

    The point of it being well-known is that you can easily hire people who know how to use it,

    Once upon a time COBOL was well known ... when Y2K came it was so not-easy to hire people who knew how to use it that COBOL programmers were paid premiums. Once upon a time RPG II http://en.wikipedia.org/wiki/IBM_RPG_II was well known (heck, my high school taught it), but now you'd have a hard time finding someone to hire who didn't assume it was something out of Call of Duty.

    The guy who wrote this article isn't talking about finding someone to continue maintenance twelve or even twenty-four months after development started, he's talking about maintenance on systems that were developed ten or more years ago. And if you're developing a system that needs to be maintainable for 20 to 30 years then even his rules don't apply or get inverted: that's a case where it is actually better to develop your own frameworks because nobody but you will still be interested in fixing their bugs and you benefit from frameworks where you have 100% control over the dependencies and every line of code is there only because YOU are using it.

  57. More enjoyable by Anonymous Coward · · Score: 0

    A more enjoyable set of tips on how to sabotage a project, or recognize that your project has been sabotaged, is http://www.amazon.com/AntiPatterns-Refactoring-Software-Architectures-Projects/dp/0471197130

    "Their deadliest hit list begins with the Blob, where one object does most of the work in a project, and Continuous Obsolescence, where technology changes so quickly that developers can't keep up. Some of the more entertaining antipatterns include the Poltergeist (where do-nothing classes add unnecessary overhead), the Boat Anchor (a white elephant piece of hardware or software bought at great cost) and the Golden Hammer (a single technology that is used for every conceivable programming problem)."

    On the downside, or upside if you're the stickee instead of the sticker, is that they offer some tips for how to approach unraveling such sabotage.

  58. 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.
  59. to be fair by Anonymous Coward · · Score: 0

    "replacing PHP library function because parameter order sucks.”
    Is completely valid. The group in charge of PHP's signatures should commit sepuku with the broken shards of VB6 install disks.

  60. 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.
  61. Perl by Anonymous Coward · · Score: 0

    Just write it in Perl. Problem solved.

  62. 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
  63. 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.
  64. Welcome to web programming by Anonymous Coward · · Score: 0

    it will only get worse :P

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

  66. It's already reality! by Anonymous Coward · · Score: 0

    Just develop software with the current mindset generalized, such as "what can do more can do less" and such crapworth idiocy.

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

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

  71. "How To Write Unmaintainable Code" by Anonymous Coward · · Score: 0

    You can find this old favourite of mine here.

  72. Not from scratch - Only if you can pick winners! by Anonymous Coward · · Score: 0

    Using OPC (other people's code) is great if you can pick winners. You're statistically more likely to end up with LESS maintainable code over the long run by using OPC, because the odds are you're going to be stuck with some abandonware frameworks or products, trying desperately to find someone who knows them (along with all the other losers doing the same thing). Stuff changes so fast now that's it's almost a new framework every year or two. So, writing your own code may be better in the long run.

  73. Step 1 by brunnegd · · Score: 1

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

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

    gcc software.c; rm -rf software.c

  75. Re:change is overrated by Anonymous Coward · · Score: 0

    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.

    I have been working with OpenSceneGraph a lot. It is a large open source scene graph library and avoids documentation for this reason. Dealing with it is a pain, there is absolutely no information what a class or method is meant to do or how it acts. The only way to even find out how it works in some cases involves hunting down outdated examples that are at least somewhat right or spending hours in a debugger.

    Of course the developers active in that project sell both support and books, the later is in stark contrast to the "documentation gets outdated so don't bother" rule for their non existent API docs and I know of other "don't bother with documentation" projects that work along the same line, so I don't really trust you guys.

    Now that I flamed about public API lets get to the internal API: the documentation for a method is within a scroll up of your mouse and either you have the time to update it or you have that half second it takes to delete the outdated part - telling me that you don't have time to select that block and press del to avoid outdated info is bullshit.

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

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