How To Write Unmaintainable Code
An anonymous reader writes "Make sure you're irreplaceable -' In the interests of creating employment opportunities in the Java programming field, I am passing on these tips from the masters on how to write code that is so difficult to maintain, that the people who come after you will take years to make even the simplest changes. Further, if you follow all these rules religiously, you will even guarantee yourself a lifetime of employment, since no one but you has a hope in hell of maintaining the code. Then again, if you followed all these rules religiously, even you wouldn't be able to maintain the code! You don't want to overdo this. Your code should not look hopelessly unmaintainable, just be that way. Otherwise it stands the risk of being rewritten or refactored. '"
Our company's main system is written in FoxPro for DOS 2.6. The FP programmers here seem to have guaranteed lifetime employment :-)
For writing unmaintainable code, violating company development practices, or they catch on to you.
Ummmm, where's the foot icon? It's good to know that the author considers this a joke, but I'm afraid that Hemos might not be in on it...
Be a real patriot: Question authority. Think for yourself. Formulate your own conclusions.
but why would you want to burden yourself by being bound to a program for the rest of its useful life?
If you have any code review mechanism in effect. That could get you fired right off the bat.
HexaByte - he's a square and a half!
#!/usr/bin/perl
:(
&!@&/*!QW(*()@!@(I!@()!@)(!@*/\()!@&*(@!/*(&
Ok, I admit it. I just banged on the keyboard
I guess not every joke has to wait until April 1.
Excuse my speling.
Making The Bar Project
I would fire this person, and hire someone to rewrite the code from scratch.
Assuming this is tongue-in-cheek. My experience has been no matter how poorly written or unmaintainable something is, it offers little insurance to the author for keeping a job. I've been handed the reins to maintain countless "gone" employees' code. And, if the code isn't maintainable and the program is important or desirable enough, companies just limp along with the deficiencies. I can't think of a single occasion where someone was kept because of fears of maintaining their code, nor where someone was brought back to maintain their 'unmaintainable' code.
(+/- 2 sigma complainers -- reply here)
Yes of course this is a joke. Turn your humor sensors on NOW!
Wow, I couldn't disagree with you more. This is an excellent....joke! Lighten up!
Sheesh! Irony, it's lost on Americans!!
:-)
I think we're supposed to take this with a certain amount of salt.
OOps, I see you're Canadian. Well, nobody's perfect
return 0; }
C'mon, people, lighten up.
"Here's some thing people do to make code unmaintainable. Don't do them."
"Your code should not look hopelessly unmaintainable, just be that way. Otherwise it stands the risk of being rewritten or refactored."
So that's what's taking Vista so long...
How to really write unmaintainable code:
Apply equal parts of Perl and Guinness
What are you eating? isItVeg?.
Whoa, talk about knee-jerk reaction. The article is obviously meant to address people who think this way, not an actual advocacy of this behavior. Also, on a slightly sadder note, being a great programmer/problem solver does not automatically guarantee you will be irreplacable; it'll just mean that a lot of the time, you'll be known as 'that guy'. Sometimes, it's the social skills that win the day, not just your abilities, no matter how obvious they might seem.
I have a code in Fortran 77, with a first comment:
this code has no comments. It was hard to write, it must be hard to understand
followed by ten thousands lines of a single, not indented main, full of goto's and undecryptable variable names.
thanks god I never had to put my hands on it.
-- "If A equals success, then the formula is A=X+Y+Z. X is work. Y is play. Z is keep your mouth shut." - Einstein
The page begins by attributing a quote to Napoleon which he probably never said.
"Never ascribe to malice, that which can be explained by incompetence."
The most reliable available evidence out there is that "never attribute to malice what can adequately be explained by stupidity" was originally said by Robert J. Hanlon, a relatively unknown humorist who wrote it for a contest to extend Murphy's Law. It's sometimes called "Hanlon's Razor."
If you think I'm wrong, please cite the publication in which Napoleon is recorded as having said it.
Information wants to be anthropomorphized.
I've heard fellow programmers suggest this before, but the way I see it, you are hurting yourself and here's why: when you become an absolute specialist in one area (in this case your particular implementation), you will be pigeon-holed into this role with no chance for growth.
;)
A much better approach to job security is to adapt to the needs inside the company and make sure your skills are needed. This will also lead to more opportunities for pay increases and general healthiness of your psyche.
In the end, what makes you interesting as a developer should be your ability for problem solving and not your ability to obfuscate your work, unless, of course, your intention is not to work
In skimming the article, I realized that an obfuscator does exactly what hes describing. I know its a joke article, but if you really wanted to have unmaintainable code in .net for example... just compile, obfuscate, disassemble, check in viola!.
Top 10 Reasons To Procrastinate
10.
A co-worker sent me these unmaintainable code essays back in August 2005. Taken from AQFL.
Ant(Dude) @ Quality Foraged Links (AQFL.net) & The Ant Farm (antfarm.ma.cx / antfarm.home.dhs.org).
...it generates a root exploit.
I used to employ similar tactics on large non-residnetial contracts, not for myself but for our company, I leared this from my Grandfather and Uncle who did the same, 40 years after the construction a hospital my Uncle was called out of retirment (as a consultant to the firm that got the expansion) To show them "the lay" his price tag $250,000 for 1 year at 35 hrs/wk. He is in the process of building a new home with the proceeds.
On the code side, things I wrote 10 years ago I look at and think who the F*** wrote this, but back to my plumbing, that was the first lesson I was "Taught" NEVER EVER Say something like who the hell did this this way and why, more often than not after being in the business IT WAS YOU !, sure enough about 6 major jobs I went on to think to MYSELF , who did this holy shit is this complex, well after a day on the job I realized it was ME!!!
Never say "Who the Hell wrote this" out loud...a sure way to hang yourself when you practice this method of job security.
In the Java-script world and other arenas in which the source cannot be hidden there are already many programs that will automatically obfuscate your code using many of these techniques (such as single-letter vars).
I have had way too many times in my contract work that I was assigned to upgrade unmaintainable code.
In fact, I earned a reputation as a saving grace and the original coder was never called back and he earned a black eye as a poor coder.
Now who do you think stayed on the job longer?
Eternity: will that be smoking, or non-smoking? I Corinthians 6:9-10
this has been around for years in one form or another, how is it news?
I just can not stop using i as an index. My programing teacher learned FORTRAN first and when the taught me Pascal he used i in for loops so I do this day.
See my blog http://ilovecookes.blogspot.com/ for light hearted technical information.
If you need a daily reminder of "what not to do", I highly suggest bookmarking TheDailyWTF.com.
Str8Dog
using System.Darkside; public
Roedy started this back in the 90's, you could at least have the decency to link to the latest version.
Did you miss the "Humor" tag?
Did you even read the article or are you responding to the blurb on the front page?
Its a jab at the IT industry (and an old one at that - been around for quite some time - this is the second time this thing has appeared on Slashdot that I can remember); think of it as an article on Worst Practices. No one is supposed to be doing these things; they are illustrations of things that *still* happen that should never be done - a humourous jab in the eye to get our attention and encourage *good* programming styles and techniques by highlighting the ridiculous stuff that does happen.
All java programming, when done according to the principle of model view controller, sprinkled with a hot sauce of the gang of four becomes immediately unreadable, because it multiplies the number of lines of code a thousand-fold easily.
Who said he or she was an American? I've seen plenty of posts on Slasdhot writen in English from people who were not American. Biased, much?
I agree that though intended to be "humour", it has to be recognized
that there are people that think that way in the programming industry.
Not to start flaming, but I've always maintained that the expansive
hard drive sizes over the years certainly hasn't aided in the idea of
creating (and maintaining) tight, clean code. Yes, the topic has been
beat around a lot; however, it's perfectly valid. I certainly I have
spoken to more than a few long-time programmers that - though not
outright - have indicated that the leaps in hard drive space gave more
than a little breathing room in software development.
-Shawn
These rules established quite strongly among employees of one Redmond Company. When developer eventually decided to leave, boss furiously demolished furniture in his office. Every time, complete code sub-tree had to be removed and major product postponed for another 2 years.
839*929
IOCCC
I have a really elegant proof for Fermat's last theorem. If this sig was only a bit longer...
Just 'view source' on this very page!
He said that he was putting this out to CREATE employment opportunities in the field. IE...follow this advice and you are actually out the door, thus increasing a good programmers chance of finding work.
Everyone knows that the best unmaintainable code is written in perl.
*_=\$#;
Priceless: Guaranteed to never get a promotion or pay raise!
'Go for the eyes, Boo, go for the eyes, aaarrrrrrrr!' -- Minsc
Say the same thing to the people that worked on QuarkXPress. If you get too good at a job, chances are you'll believe you're irreplaceable and ask for more money (or deserve it in mandatory raises). They'll just hire 3 people at a tenth of the cost to replace you.
... *even those who spend all their time reading slashdot*
Slashmail.org "The Open Source Email Company"
This is news? Was the poster not aware that Roedy's unmaintainable code doc has been growing for at least five years? http://web.archive.org/web/*/http://mindprod.com/u nmain.html
How about reading the FA before you sound off:
If you feel like you need to write unmaintainable code just to give yourself job security, that means you think you can't keep your job on your abilities alone.
Given the inflated opinions most programmers have of their abilities (the only programmers I've run into that don't have an inflated estimate of how good they can code are the real gurus...), if you don't think you're good enough to keep your employment on your abilities alone, why the hell should I think you're good enough to keep employed?
I would fire this person, and hire someone to rewrite the code from scratch.
You yourself would get fired for not having properly supervised the rogue programmer in the first place and prevented them from having sabotage-written the code and wasting the money spent on their salary that resulted in the development of a "defective" product. Then the money that would have been used to pay YOUR salary will next be used to hire someone who will rewrite the code... under close scrutiny this time.
i really thought this was a dupe, but it might be the drugs for my broken arm and nasty head bump making me think double.
aww the constitution
Seems a lot of people missed the sarcasm. This is a guide on bad coding practices. Even the quotes are quite indicative of that. Good thing to read and think about when your programming to find practices that you might be doing without even thinking about (I freaking hate the _ character in code I work on)
Why go through that article when I already learned all the coding skills I need from from the IOCCC and OPC contests? (acronym redundancy intentional)
Java? Pah! Don't make me laugh. Nobody's going to take that language seriously for securing permanent indenture until it has its own IOJC, especially with all those self-documenting and de-obfuscation tools floating about. Sheesh, Postscript has an OPC. Get with the 21st century! Automated code obfuscation tools, such as exist for java, are poor substitutes. There's nothing that can obfuscate as effectively as hand-tuned code.
-- This message brought to you by The Department of Redundancy Department.
If this is a joke, then discussing it in a serious manner is kind of pointless right? So, not to be overly critical or anything, but, what's the point?
I mean, I had my little guffaw, and slapped my knee, but what are we discussing here?
... what did you expect, something profound?
Maybe this is the right time to mention your winning IOCCC submission on your CV/resume?!
-- Soruk
Writing good maintainable code will help secure your future in any organization. Plus writing code that is not maintainable is a good way to get your self removed from a project. Heck, I got a talking-to for not running javadoc on my code before sending out the update once.
Maybe this is a good idea if you want to leave the company, but due to internal politics you can't actually quit.
In Soviet Russia, code maintains YOU!
I can't think of a single occasion where someone was kept because of fears of maintaining their code, nor where someone was brought back to maintain their 'unmaintainable' code.
I can.
My very first programming job - which went on for years and where I did a bunch of stuff - but was quite underpaid. There were two of us programming when the institution in question had a financial crisis and could only keep one. My code was maintainable, the other guy's wasn't. So I got the boot.
And had a new job at higher pay in a better situation 25 minutes after letting it be known that I was available.
Before it was a matter of writing code that *I* could maintain. After it was a matter, not just of principle, but of practicality. By making myself NOT indispensible I made myself valuable.
I went on to a long carreer of mixed consulting and salaried positions, doing software for 35 years, and now hardware and system architecture. (And I once got the layoff because my code was the only stuff that worked, if you can imagine that. From another doomed company.)
The potential value-added in software and computer hardware has been so extreme that management can be AMAZINGLY pathological and still keep a company afloat for a couple years - and then find another job after it crashes. (Investors prefer someone with management experience crashing companies to someone with talent but no management experience. B-( Meanwhile the ones with management experience NOT crashing companies are too expensive or too busy.)
I'm now at six figures, stock options, one house paid for and another in progress, three cars, yacht, putting non-working (at the moment) wife with four degrees so far through more school (so she can do something she LIKES professionally), and held on to the current position through the slump, chapter 14, and out into the recovery. A big part of that was achieved by religiously making myself dispensible.
Bantam Dominique roosters crow a four-note song. Once you've heard it as "Happy BIRTHday" you can't NOT hear it that way
Use pictograms and arrows to ensure that everyone will understand what you are writing.
My favourites:
"Always look for the most obscure way to do common tasks."
"People who come after you have no business modifying your code without thoroughly understanding every line of it."
"Wherever the rules of the language permit, give classes, constructors, methods, member variables, parameters and local variables the same names."
"Never perform code coverage or path coverage testing. Automated testing is for wimps."
"Join a computer book of the month club. Select authors who appear to be too busy writing books to have had any time to actually write any code themselves."
Thanks for brightening my day.
He who knows best knows how little he knows. - Thomas Jefferson
I was laughing too much and getting strange looks in the office. Personally I use perl to guarantee employment, but there's a look to work on here.
All you British people get an advantage 'cause you'll recognize the Monty Python foot icon. Cheaters! : P
[I mean that collectively, by the way -- I'm not saying that TangoCharlie is British]
"[Regarding the 'cloud,'] ownership was what made America different than Russia." -- Woz
Oh my $[DIETY] if I read this comment again I think I'm going to cry.
Message from the Please Please Please get a life foundation: SLASHDOT IS NOT DIGG! Do not complain about articles getting cross posted. and GET A LIFE.
-1 Flamebait here I come
-1 Troll maybe
"A sarcasm detector, that's a real useful invention."
Simple, easy, effective, it's standard in the industry by default, works a good percentage of the time as long as management is in one of those rock and hard place situations. If they are at ease and stupid, they will simply cut you and let someone else struggle to fix it later. Oops. Also standard in the industry by default.
If my grammar and spelling are off, I am [distracted/tired/careless] (take your pick)
Its not very well written either. It is okay use single letter variable names, as long as they are used right where they are intialized. I do naming this way, the wider the variable is scoped, the more descriptive it's named. Pretty easy to figure out the difference between a class property and i.
Please sign petition to restore sanity to our banking system!!!
http://financialpetition.org/
Write it in assembler
"I'm doing this for speed, man"
Purists would do it in machine code. Assemblers are for wimps anyway.
Open Source Drum Kit, LPLC deve board - mjhdesigns.com
The kind of coder who deliberately writes bad code just to maintain their employment is always the first coder shown the door. Always. It is a complete urban myth that not commenting spaghetti code will keep you in a job. There is always someone else willing to do your job, no matter how specialized you think you may be.
I am amazed that so many people don't realize that this was a joke. It's a joke people. Are all of these people replying seriously 16? I have to suspect so, because this was immediately identifiable as the same sort of joke that has been repeating for years and years - if you've been in the industry more than a year, if anything it sounded cliched.
Having said that - there is some truth to the claims. The reality is that most programmers out there are terribly, terribly lazy, and they'll immediately declare as undecipherable any code that isn't written for a mentally handicapped pigeon. If you've ever developed code to solve a problem of any complexity at all (e.g. more than some sub-100 IQ CRUD type data forms), you've had it declared "spaghetti code" by someone else, and they've probably thrown up their hands and declared that the only solution is to rewrite it (I'm proud to say that I've had this said about some of my historical code. Not because it was written poorly, but rather because it wasn't just a lightweight, superficial wrapper around calls to library functions. Per the prior point, every lazy programmer would rather just write something new themselves than expend the effort understanding existing code). I've seen this in shops where the lazy, lazy, lazy developers always defer all decisions and judgements to the original programmer (and that original programmer is probably wishing they never had anything to do with it, wishing they stuck to implementing high-level scripts).
"My code was hard to write, it should be hard to read".
The joke's on you! Slashdot beat digg by 6 YEARS: How To Write Unmaintainable Code Posted by Hemos on Thu Nov 18, '99 10:32 PM
Yeah... still a dupe.
Get your daily dose of unmaintainable code straight from the guys who were just tasked to maintain it! Alex Papadimoulis provides it at http://www.thedailywtf.com/. There hasn't been a week yet where I've not said "WTF?" looking at the incredible production code snippets (or screenshots) that despaired programmers around the world send to him.
The best one, so far:
enum Bool
{
True,
False,
FileNotFound
};
Obviously a satirical article. Much akin to the satire contained in A Modern Proposal by Jonathan Swift (1729).
"BSD is about people pissing each other.." (Moid Vallat)
Good (from TFA):
openParen = (slash + asterix) / equals;
Better:
equals = minus + times - open_paren(max * divided_by + min) * modulus % close_paren(square) / log_base_e
The big foot to the right of the story is a dead giveaway...
I don't need no instructions to know how to rock.
crazy dynamite monkey
How ironic...
Modern copyright is theft of culture from everyone and it retards the progress of the useful arts and sciences.
Build it, and they will come^Hplain.
Kicking the staff out that do this always happens first. Unfortunately some poor bugger (ie me) has to sort it out.
Here's a good example of a product I'm working on. I was taken on to clean it up and make it work properly... (C#)
Not only is it not documented, but it has incorrect parameter types (yes those are both ints in the database), it RANDOMLY generates the shipping date, does a really dangerous conversion and it says its never used (which it is in 4 other locations). There is 2Mbytes of this shit!
Just remember that the determined employee can get the home address of the culprit and beat his head in...
If I was a Computer Science professor, I would make that article required reading for my class. All programmers who never had to read other people's code have a lot to learn from reading it. Since I am not, I'll just require ever new employee to read this as part of their training.
Please tell me which nation you hail from, so that I might hurl generalizations and stereotypes at you.
Thank you.
Just once I'd like someone to call me 'Sir' without adding 'You're making a scene.'
NJ if I know where the meaningful discussion is supposed to come into play. Your guess is as good as mine!
We generally offer a nice carboard box and the proverbial pink slip in reward for this kind of work. Code reviews are good for preventing this type of thing.
Or, how to become the target of a geekhunt by angry nerds armed with Coke cans and wired mice.
Right now I have to maintain an unmaintainable web app. Let's put it this way...
- This app was originally written in PHP/FI 2.0 in 1997. There were also some C cgi apps and a few Perl scripts.
- Due to performance problems the entire dynamic site was changed to a statically rendered site, so after changes were made to a page that page was rendered as an HTML file.
- In 2000 it was updated to PHP 4 and the app had a core feature bolted on, essentially confusing the difference between a city and a county. This resulted in a worst DB design I've ever seen. I'm talking about splitting up core pieces of data that need to be together, using ambiguous field names (rid means different things in different tables. Some tables relate to each other on field names that seemingly have nothing in common. Some field names have typos, etc).
- The code was written first by a team of six programmers, then by a smaller team of three other programmers and finally by some weird guy who I was supposed to work with when I got hired, but a few days before I started he decided he didn't like computers anymore and he went into the grow-op business instead. My boss claims that maintaining the horrible code base made him go crazy and I'm inclined to believe that.
- Two records in the same table of the database may look the same in all ways, but they are actually entirely different things. The only way the app knows which one to use where is because that data's unique id is hard-coded into the app.
- I am rewriting our site search engine from scratch because touching the old one is dangerous. Altering small harmless-looking bits of code can actually break unrelated pages, but that breakage isn't noticed until that other page is re-rendered into a new HTML page, so I was finding out about problems weeks after I caused them. Arrrg!
- I have been unable to get the app working on any server I have setup. If the live server goes down we're toast because there is no dev box. The app relies on a horrific web of interconnected scripts, cron jobs, strange directories, and it even uses an older version of itself to perform some mysterious actions. I've got an image of the server's hard drive I can use to recover it from.
I have finally convinced my boss that this thing needs to be rewritten *now*. It's a house of cards with our business resting on top.
The global economy is a great thing until you feel it locally.
Thankfully, the OP provides a link to the original author, Roedy Green.
Here's another good article he wrote in the same vein called How to Code like a Newbie.
I was in stitches the first time I read it several years ago.
I say we take off and nuke the entire site from orbit. It's the only way to be sure.
K-E
Luser.
I think I've seen most of the obfuscation techniques described so far in my career as a developer. The worst I've seen was code which did multiplication using a switch statement (switch (i){ case 1: n = 2; case 2: n = 4;...}) and used magic numbers *in hex* everywhere for no reason.
... you can use it to help you filter any future posts from people who did not get the joke. Sheesh, we don't have a very bright lot online today, do we.
From working with code that's not maintainable... on projects that cannot possibly effectively be upgraded... its not a career path. I know this is satire, but there is no job security in obscurity. We are in a disposable work force. Some poor fool will come along and get crappy projects unloaded on them. They are the ones that will reap the benefit of figuring it out, and or re-writing it. So its really all about frustrating our colleagues.
And the worst possible thing you can do is use the wrong technology or architecture for the solution to a problem. For example, make a 2-tier app into a 3-tier one, or using MOM to provide what you could do with simple database replication. Most of those problems are caused by inexperienced developers or overexperienced architects....
But I must say, Roedy sure does write some ass pounding funny stuff.
/\/\icro/\/\uncher
So true. In the consulting world, the faster/better you code, the sooner you are out of a job. If you don't have the social networking skills to keep contacts and jobs lined up, you may have to resort to the methods described in TFA. (shudder)
-Rick
"Most people in the U.S. wouldn't know they live in a tyrannical state if it walked up and grabbed their junk." - MyFirs
This web page has been around for ages. The original version is at http://mindprod.com/jgloss/unmain.html and has been updated loads since. I remember reading this when I first started work after university, back in 1999. Still funny though.
Roedy Green's fine How To Write Unmaintainable Code has been widely cited all over the web since its original publication in 1997. Surely at least a mention of the author and date of the article could have made the front page, so that those of us who've already seen it multiple times could know to skip it?
I'm still waiting for the first day of a new job not to consist of utter terror as you begin to pick through the previous employee's code. I've yet to find anything that's half readable.
I'd like to think that all my old code was a welcome sight to my replacement but they're probably thinking exactly the same thing of me.
Coding conventions and naming schemes are excellent to minimise variations but everyone still has they're own style that makes code other than your own much less easy to read.
[l:l;s<s=0l>x]s"[1+l<dd*l=d*-l;+ds<rl=2**l:+ds=d
*rd*+4<-d15>>]s>[q]s-[d77/3*2-s;47l"x-P1+d78>`]9
ks`0[d23/.5-3*s:0l`xr10P1+d24>$]ds$x
I am English, old chap. Please feel free to generalise all you like!
return 0; }
My God! The last time this many people didn't get a joke I think a war ensued.
ITS A JOKE PEOPLE, LAUGH!
(Comedian begins:)
Two men walked into a bar...
(and the slashdot response:)
Did they walk in single-file or side-by-side?
How did they walk into a cylindrical object? That doesn't make sense
Microsoft sucks!
They wouldn't have had to if they'd used Open Source.
Back in 1969 I called it "ironing".
The particular refactoring I was doing was regenerating the source of an OS from a distant predecessor's listing plus the object, in order to resurrect a broken piece of its functionality (the batch processor).
During that I "ironed" the later patches into consistency with the overall structure, then augmented the API in roughly the same style (creating a larger overall consistency) to support replacements for subroutines written during the no-source period that had modified OS code in fixed locations. Once that was done I had a source I could modify without breaking things, and could fix or add functionality at will.
Back in those days an OS was small enough that one research assistant COULD do something like that in just a couple months.
Bantam Dominique roosters crow a four-note song. Once you've heard it as "Happy BIRTHday" you can't NOT hear it that way
Roedy's a Java programmer, he missed a really obvious one (or else I missed it in the FA) - use Unicode to give your variables names using glyphs that the other programmers don't understand: Of course if they know Chinese, pick something else like Devanagari, unless they know that... try right-to-left glyphs, etc.
... for enforcing the Corporate Coding Standards.
In a rational world, Corporate Coding Standards, enforced by code reviews, would have something to do with maintanability. In some organizations, they are ... probably those that live or die by the quality & maintainability of their code.
But quite the opposite was true in the large insurance company (nearly 1000 programmers alone) where I held my last salaried programming gig. Their Coding Standards were all about Not Rocking The Boat. They included several elements of "How To Write Unmaintainable Code" as Enforcable Standards. Remember when "Structured Programming" was a new idea? I got me bottom kicked for arguing that coding units should not end with a wholly unnecessary "Go To End" ... because the STANDARD was that ALL modules exits were via "Go To End".
Fortunately, their coding quality algorithm had to do with number of lines of code changed ... again, nothing to do with actual quality. Deleting redundant code merely enabled me and the software to work faster & better, which did not count as quality. When I learned to comment out redundant line, so they counted as "lines changed", my coding quality scores vastly improved!
Perhaps the insurance industry is so darn profitable that optimizing its software is not nearly as important as maintaining internal discipline. The ideal employee was the scion of two current employees who had met in the cafeteria, and was engaged to another employee who they'd met the same way (I Kid You Not!) If these programming methods imposed excessive costs, they just upped their premiums.
It was a soul-destroying experience.
--- Attorneys Assisting Citizen-Soldiers & Families -
This page: http://mindprod.com/jgloss/unmain.html
Says: ©1996-2005 Canadian Mind Products
Not to mention being much more comprehensive.
Health is simply dying at the slowest rate possible.
Yea, it's a joke.
And I must say, I got quite a few good laughs out of it. My favorite is the Obscure Film References. If I said I wasn't gonna try that in my CS homework, I'd be lieing. (Hey, if the teacher writes poor code, I can write poor code. They don't read it, only make sure it compiles).
Want to find other gamers to play board and role playing game
marypoppins = (superman + starship) / god;
That would explain the flying bed and communicating with sea animals.
This article is exactly like "How to Talk to a Liberal", but in code!
"Love is like pi - natural, irrational, and very important." (Lisa Hoffman)
This is my new bible.
Say hello to code that only I can understand, lets see how much my boss wants to offshore me now!
While I thought at one time that this was a good idea, actually if you choose to leave your coding job it can be a pain. My successor called me on the phone for almost 6 months asking "What does this do - what does this mean..." etc. until I finally had tell him "Man, I just don't remember anymore. Sorry!"
sig has been sent away for a few small repairs...
I know this article is somewhat tongue-in-cheek but it's actually a prevelant mentality. As someone who have watched people write unmaintainable code to ensure their own job security...
If the code is unmaintainable, the end product is probably bad. If the end product is bad, you're not protecting your job but making a case for your worthlessness. Even if the end product is good, most companies would favor a fresh, new person who can differentiate themselves from you by writing a more friendly, maintainable version of the same. When I have come in (back in my indie days) to update or maintain a system that is unmaintainable, I have always made a good case for a more ambitious bid (and more money) to recreate the system from scratch (or recreate as much of it as is necessary) in a more standard, maintainable format.
Besides, as all you open source geeks know, this is (job) security by obscurity, and while it may cause a major inconvienence for your employer, it's not going to force them to keep someone they want to can. IT kids are in for a rude awakening (or have already gotten one) if they think we're still in the era where you're irreplacable, where some other code monkey couldn't come in and do the same or better of a job of what you're doing for less money in a heartbeat.
Here's a hint, find a place that you actually ENJOY working for, that treats their employees well and isn't looking to pull the plug on them at the most convienent time.. And then give them the best work you can offer. Be willing to take the lumps as a line employee for a while and actually earn a career in that company.
There are far too many crappy coders doing this. In open source, the project simply dies off. Natural selection weeds out the crap code in open source.
You must've been the plumber for the house I just bought.
Bastard.
Hungarian is a great idea, but it doesn't go far enough. Function names should encode the return type and the type of each parameter. For example, a simple:
Becomes the much more readable and instantly understandable:
Of course, this is C, and arguments are typically pushed on the stack in reverse order. If you use a low-level symbolic debugger (not one of these new-fangled IDEs), you can save yourself a few debugging headaches by reversing the order of argument types. In other words:
Now, when you see imainapszc in a stack trace, it will be trivial to decode the functions parameters.
</sarcasm>
The next day we had a meeting to examine a legacy application that we were going to be re-writing. Another dev was discussing the DataLoad method. Which loaded a flat CSV file.
And validated the data
And stored the result in a database.
It is very hard to look professional in a meeting when your face is beet red and your eyes are screwed up tight to keep from breaking out it gales of laughter.
Make sure you're irreplaceable
First rule of business: Don't be irreplaceable. If you can't be replaced, you can't be promoted!
The fact that there are probably actually a few people following this guide, or the fact that someone typed up something that long and "pointless"........
In undeveloped countries, the consumer controls the market. In capitalist America, the market controls you.
In my 20+ years as a programmer, I've seen this over and over. And yes, those who program like this are more likely to retain their jobs when layoffs come. I've seen code that I was able to re-write in 200 lines stretched to 5000 (no joke). I've seen sleep statements stuck in tight loops so during a crucial moment the programmer can show significant speed-ups. I can't tell you how many times I've seen 50,000 line programs without a single comment. I had a boss once who ordered us to not use comments to protect the group I was working in (no joke). But here's the rub: IN EVERY SUCH CASE NO ONE IN SENIOR MANAGEMENT WAS THEMSELVES A PROGRAMMER.
I worked at exactly the same place, but it wasn't an insurance company.
Confucius say, "Find worm in apple - bad. Find half a worm - worse."
No need to even try, just code in Java any way you want. It's impossible to maintain this load of crap.
This post sickens me.
My niece's boyfriend seemed to think he could get security like this by being the only network guy to know the passwords to the company's routers.
I had to point out that if he had a boss who would not know why such a situation shouldn't exist would probably also not know why the network guy shouldn't be laid off.
We fire people for writing code that way.
You see code like that, and the programmer responsible is either a) incompetent or b) too smart for their own good. Either way, they need to be replaced ASAP.
I'd rather have 3 run of the mill programmers that write clean well documented simple code that does the job than have one single uber programmer that always gets the job done, but nobody can figure out how, or what to do with it in the future. There is no question here.
If you were EVER taught that code obscurity == job security, you need to go have a very serious chat with whomever taught that to you.
No Comment.
And how can you not love a language that has a data type for Pounds Sterling?
Don't underestimate the power of The Source
I worked for an S&L data bank and we bought some ATM software from a company from India. The mainframe part was all in COBOL. We insisted and paid extra for the source code. We got the source and found all the variable names were esoteric (WA1, WA2, XB4, etc). When we complained, they offered to sell us the book that contained all the definitions of the variable names.
They gave us a free Star Trek game with the book so it wasn't a total loss.
If you aren't part of the solution, there is good money to be made prolonging the problem
True story, ca. 1977. A manager takes over the development group for Administrative Services at a major university. Inheriting essentially a COBOL shop, there is one clever fellow maintaining an essential enterprise application written in something called autocoder (described to me as a technological precursor to assembly language that didn't really resemble a functionally oriented programming language or much else anyone but an historian or fellow dinosaur might be familiar). Having a safe niche in an obscure language, he coded all of the variable names as a sequence of zeroes and O's and kept a data dictionary in a notepad that he kept on his person.
The new manager came in and Mr. Zero was summarily given a quick bum's rush. Mom never wasted much time on such things.
Free Adam Smith! (Or best offer.)
Actually, the article is obviously a joke.
In fact it's a joke stolen from Roedy Green; the original starts with the words, "This is my most popular essay. It is amazing how many people don't realize it is tongue in cheek."
(And, as others have pointed out, it's a dupe.)
Using HTML in email is like putting sound effects on your phone calls. Just say <strong>no</strong>.
Our company's main system is written in FoxPro for DOS 2.6. The FP programmers here seem to have guaranteed lifetime employment :-)
I worked for a rather large ISP who in the process up and switched from a rather large home grown custom database program it had used for years to the corporate Vantive which cost them millions at the time.
I asked my manager why would they bother doing such a thing when the old program worked just fine. He said "The guy who made the program died and know one knows how to code for it."
I laughed for a moment and then by his blank face realized he wasn't joking...
"I am the king of the Romans, and am superior to rules of grammar!"
-Sigismund, Holy Roman Emperor (1368-1437)
And as for the maintainer interpretting it, you're absolutely right that most people just throw up their hands. It's hard to interpret someone else's code for anything past the trivial. Doable, but hard enough that rewriting it often is a good way. Heh, besides which, it's amazing how many times I've thrown up my hands, rewritten the code, and by the experience found that I understood the original code.
This sig has absolutely no significance and serves only to take up screen space and waste the time of the reader.
Irreplacable? More like extinct.
Most likely outcome is they fire you and the boss that let you get away with this, scrap your code, and hire someone else to re-write it from scratch in a maintainable way.
This "joke" is a dinosaur, thirty years out of date. In the 70's there might have been some truth to it, but "maintainability" is now a mainstream concept not just among developers, but in management circles as well.
This was a humorous joke once, but now it's at least a decade past it's expiration date.
So the next guy can understand it.
Since work (a la free market society) is a competitive environment, is that counter-productive for one's gain? It's like you write great code for Microsoft Office 12, get laid off, then the next guy finishes it up and gets the credit for the smashing success of the product...
"My successor called me on the phone for almost 6 months asking"...
They stop calling you when you start charging them for every phone call! Make sure it's worth the hassle!
Once worked with a high functioning austistic named Chester (Cheddy) Abramowitz who typically coded COBOL as a monothlithic bloc from col 6-80 with no spaces, breaks, indents or lines. Moreover his dataset names were things like MASTER.BATE
It kept him employed.
That's why someone wrote FreeBSD boot loader in Forth...?
; ; ; ; .( P5) cr .( 400 400) cr .( 255) cr top->bottom bye
forth code for a PPM image of the Mandelbrot Set
fvariable ci fvariable c fvariable zi fvariable z
: >2? z f@ fdup f* zi f@ fdup f* f+ 4.0e f>
: nextr z f@ fdup f* zi f@ fdup f* f- c f@ f+
: nexti z f@ zi f@ f* 2.0e f* ci f@ f+
: pixel c f! ci f! 0e z f! 0e zi f! 150 50 do nextr nexti zi f! z f! >2? if i
unloop exit then loop 0
: left->right -1.5e 400 0 do fover fover pixel emit 0.005e f+ loop fdrop ; : top->bottom -1e 400 0 do left->right 0.005e f+ loop fdrop ;
You speak as if this laziness is a bad thing.
No examples of this?
How about all the old programmers brought back to deal with Y2k? I know the Y2k disaster was a bust, but it put a lot of old programmers back to work.
Assuming this is tongue-in-cheek
Ya think? What gave it away, the winking smilie in the subtitle?
Sheesh, it seems that nobody in this whole article has made a reference to Microsoft yet. What the hell, Slashdot? Don't let me lose faith in you!
Not 100% on-topic, but this article brings to mind this little jewel I found online some years ago:
12 Things A Klingon Programmer Would Say:
12. Specifications are for the weak and timid!
11. This machine is a piece of GAGH! I need dual Pentium processors if I am to do battle with this code!
10. You cannot really appreciate Dilbert unless you've read it in the original Klingon.
9. Indentation?! -- I will show you how to indent when I indent your skull!
8. What is this talk of 'release'? Klingons do not make software' releases'. Our software 'escapes' leaving a bloody trail of designers and quality assurance people in its wake.
7. Klingon function calls do not have 'parameters' -- they have 'arguments' -- and they ALWAYS WIN THEM.
6. Debugging? Klingons do not debug. Our software does not coddle the weak.
5. I have challenged the entire quality assurance team to a bat'leth contest. They will not concern us again.
4. A TRUE Klingon Warrior does not comment his code!
3. By filing this SPR you have challenged the honor of my family. Prepare to die!
2. You question the worthiness of my code? I should kill you where you stand!
1. Our users will know fear and cower before our software. Ship it! Ship it, and let them flee like the dogs they are!
Please stand clear of the doors, por favor mantenganse alejado de las puertas
of all the excuses for the bugs in that software, this explains the most.
I always try to write code with a bus in mind. No, not a data bus, but a big steel diesel passanger carrying bus. The question is what happens if I get hit by a bus tomorrow. The company that I am currently contracting to, started at needing ~12 a month of work. After a few applications that even their least talented coders could make modification to, I am now at a steady 40 to 50 hours of work a week.
Another benefit of coding to for a bus is that after a couple of successes, the people you work for will soon start to just take your word for it when you tell them that you should spend more time on a piece of code because it needs to be done right.
I was the 4th or 5th contractor they had for this job, and each of the others lasted long enough for one to two applications before things started to fall apart. I am 6 years into this contract, and on application 17 or 18.
Integrity has been very profitable for me.
I swear, this article must have been the source of inspiration,
the bible, the standard-operating-principles manual, of the
former chief programmer here where I work. He thought he was
making himself irreplaceable by coding according to those
standards. He thought wrong! His code was so un-maintainable
that even HE couldn't maintain it, so the bugs piled up, and
he eventually got fired.
Which means, unfortunately, that I get to disentangle his code,
which is proving to be quite challenging.
I wonder how many programmers out there actually do program
that way on purpose? I suspect a lot. The idea of (supposedly)
insuring one's job security by making one's code impossible to
understand is alluring. But ultimately disastrous.
Cheers, Robbie Hatley
I think everyone at Microsoft has been given the ability to write unmanageable code. Everyone can learn from them. :)
[%] Cingular Ringtones
Works for a while then they hire 100 Chinese (or 25 Indian) programmers to rewrite your whole application. They also put in features you never thought of. As a bonus they might even through in flight simulator with a hotkey.
I think we're supposed to take this with a certain amount of salt. I don't see any reason why I should have to consume salt while reading your post. Salt has been linked to a number of serious health problems, including hypertension, osteoporosis, and stomach cancer. In fact, I find it disgusting that you're encouraging me to damage my health simply because I didn't get the (completely immature and childish in my opinion) irony of the story. Sickening.
When writing a method that will do_something. Ask yourself, is this really the place to do that? Maybe you're being a little too forceful to do it right there?
Perhaps you should create an interface (make it an inner interface to a public static inner class, yes its possible).
Make sure you use a common naming convention so you can look up the class using Reflection.
Then once you get your class, make sure you use another factory to get the class you feel comfortable to finally do something.
Finally, put your "do_something" code in the constructor of the class.
When your code base becomes 1,000,000 lines of this, you'll achieve the final Zen obfustication moment, when a new director of engineering asks you to document this and you can say, with a straight face, and in total honesty, "Its too complex to document"
Write it on a mac!
Advising that you do it on purpose is the joke but the examples seem like things I've seen programmers do by accident. It's usually a sign of incompetance rather than an attempt at job security.
I'm proud to say that people don't complain about my code being unmaintainable even though my current project is a series of daemons written in C that direct network traffic for our backend comms system.(yes I'm being cryptic.. stupid NDA) Thanks to the fact that I nicely sort the hard parts into functions that everyone else users the less experianced programmers have no trouble adding on to my system.
For five years I worked for a boss who was in the habit of taking jobs that nobody else wanted. The good thing was that he would get paid a lot. The bad thing was that I had to dabble in unmaintainable code. At one time I even had to make changes in a program for which no source code existed anymore. That was not the worst job, though. The worst was a change I had to make to a program that had the simple task of printing a list of articles in stock, with their locations. It printed the articles in two columns: the left column contained articles of types 1 and 2, and the right column contained articles of types 3 to 9. I had to change the program so that it would print three columns: left column the same, but the right column split into types 3 and 4, and 5 to 9. Does not sound too difficult, right? I mean, even without looking at the code, purely knowing the function of this program makes you think "that should been done in no more than 2 hours."
It took me two weeks. The program was peppered with functions that were copies of other functions with a very small change. The original programmer used ridiculous methods to fill print lines. The general way of printing a line is collecting information through a central function, and when that function has all the information it needs, print the line. In this case at dozens of points in the program the programmer tried to predict whether or not he would have enough information to print a line, and then do it. If I would have a design document, I would have rewritten the program from scratch, but of course no such document existed.
Every little change I made to the program had unforeseen effects. When I started, I had (of course) made a test-print, which I could use to compare outputs. I made a small change, and suddenly the list contained less articles than the original list. Another small change, and suddenly the list contained more articles than the original list. I tried to assess what reasoning the program would use to include or exclude articles, but there was no way to determine that from the code.
After two weeks of work the program printed three nice columns, with all the original articles there, and a few, very few, that were not on the original list. I could not understand why these extra articles were there, but if they should not be there, I thought it would be best if I would just implement a condition to exclude them, if I would know what that condition should be. So I called the company who used the programs and asked them about these extra articles. Their answer was, "My God, we have been missing those for YEARS. Now we'll finally be able to find them again."
From TFA: "If you are feeling particularly malicious, make up your own unit of measure; name it after yourself or some obscure person and never define it. If somebody challenges you, tell them you did so that you could use integer rather than floating point arithmetic."
:-(.
I've seen this! I actually worked on code (I won't say what or where to protect the guilty) where the author defined all sorts of angular measurements and corresponding functions in units named after himself. The unit turned out to be something like 1/4096 of a radian, just so that it could use integer rather than floating point arithmetic.
The sad part: after working on that code long enough, I could actually think in those units
Don't underestimate the power of The Source
Advising that you do it on purpose is the joke but the examples seem like things I've seen programmers do by accident. It's usually a sign of incompetance rather than an attempt at job security.
Yes - that's the whole foundation of the joke.
I'm proud to say that people don't complain about my code being unmaintainable... Thanks to the fact that I nicely sort the hard parts into functions that everyone else uses
Then they aren't maintaining your code - they're using the API. Good for you, and that's pretty much the norm. However someone in the future is going to come along and have to maintain your code and they will, almost without fail, say "What was this dumbshit thinking? This is an unmaintainable mess! I would have X and Y and Z, and I would have made yet of a [not existing at the time] library and I would have used the new [meme] pattern!". It is pretty much a given.
And don't think I'm saying this defensively about my own code - I've gently corrected coworkers quite a few times for berating some other parties code (even when they've left the company) because I think it's a self-serving, lazy way out most of the time.
Sure, he talks about obfuscating your code with Macros, but doesn't say a word about the STL. There's no provision in the STL classes to support a runtime debugger. If you want to know what's in that container, you have to instrument your code, rebuild and watch what gets sent to you debug dump. So much for actually debugging the problem on the production code.
When you find someone in your organization is indispensable, fire him. It's counterintuitive but makes sense in the long run, based on much of what we're seeing in these threads. Of course, bad management won't know to do that, so if the management is as poor as the development practices, you've got a match made in heaven.
I asked my manager why would they bother doing such a thing when the old program worked just fine. He said "The guy who made the program died and know one knows how to code for it."
The HUD office where my father works uses a custom made database for keeping track of the welfare recipients. The sole programer just died the other month. He was the only one who knew the code. They are currently trying to figure out what to do.
Fly me to the moon Let me sing among those stars Let me see what spring is like On jupiter and mars
And I use usually 3 languages mixed: Catalan, Spanish and English.
So i have functions like getNombre or setAnno
Programming is like sex: One mistake and you have to maintain it for the rest of your life.
Fly me to the moon Let me sing among those stars Let me see what spring is like On jupiter and mars
About 25 years ago, I knew someone who for exactly that reason made all his names "diamonds" on the keyboard, like ESXD or BGYH. He knew, and never documented, what each variable's use and purpose were, based on which diamond it was, whether it started at the topb, bottom, left or right point, and whether it went clockwise or counterclockwise around the diamond.
Didn't help him much when the whole project got canned.
I find it really disturbing that programmers are so insecure they need to deliberately make their code difficult to understand. That's just stupid. If you're a good programmer, you will have job security. If you're a crappy programmer, all the obfusification in the world won't give you job security.
My company just last month stopped entering data into a dBase application that was initially programmed in 1985.
Forget about lifetime employment, you're outta there if your peers can't double check your code. The company, if it's rich enough, will just ask you or another to code the whole thing over again. (And even if the company isn't rich, do you really want a lifetime employment there?)
Rule of coding #19: Anything that is coded well gets decorated with as many levels of tweaks, configuration options and features till it is undecipherable, "Turing-complete" code.
I'm still trying to figure out what people mean by 'social skills' here.
Many do understand that the original post was a joke. Unfortunaly, many of us have met many developers that are completely serios about writing unmaintainable code on purpose. While many of the posts here are obviously jokes, some are not. It is an unfortunate reality that our industry is loaded with almost as many unethical people as car dealerships. For example, I cannot count the number of times I have been in a meeting where it is openly stated that we should "never leave money on the table".
It's a joke. It's also a bit late. Why is it that alot of the articles on http://www.digg.com/ get reposted here? Are the submitter's not fast enough to get a story before them?
This essay is so damn good. Life for anyone taking over anyone else's job can be hell.
I reminds of a buddy of mine who will remain nameless for good reason. Straight out of UNI he was hired in the accounts receivable department of a major oil company. His desk was piled 2 feet thick with paperwork. He had no idea what was going on.
So he spent the first week opening every letter and if it contained cash or a cheque he recorded it and put it in his BANK pile. Everything else was chucked into the trash.
Since he was depositing over $500,000 per day there were a substancial number of cheques and cash.
By the end of the week the mess was cleared up. There were some questions raised about some accounts and he simply stated he never saw anything. After all he did take over the other guy's position and he did have everything ship shape in a week. Who was to be the wiser?
When he told me this I was just agast. What a bold move!
Well he was a VP of marketing in a major oil company before he was 30. It seems success comes to those who are ruthless about getting what they want.
Corollary to rule #19: In order to write undecipherable, unmaintainable code, just do what the PHB (aka the boss) says within the asked for timeframe. This practice is also named "pointed-haired programming" and has lent its name to a popular web programming language.
I'm still trying to figure out what people mean by 'social skills' here.
Your job security and promotion opportunities will be greatest (but never 100%) if management recognizes that you deliver your commitments on time. You will also be guaranteed to keep getting interesting work that expands your expertise and makes you more employable in general. Hunkering down to maintain some piece of code indefinitely is weak and deserves to be replaced! No guts, no glory kid!
I can't think of a single occasion where someone was kept because of fears of maintaining their code, nor where someone was brought back to maintain their 'unmaintainable' code.
I can. In fact, I can think of two people at two different companies.
One kept the only copy of his source code on a laptop that he carried with him. The code was so horribly unmaintainable that none of us would touch it, though it was hardly an issue since we rarely got more than the pre-compiled libraries from him. The boss was so scared that he would lose the source that he falsified and submitted timecards for almost three months when the guy decided he was "unappreciated" and stopped coming to work. It goes without saying, but this manager was just as incompetent. In fact, I'm convinced the only reason either one survived as long as they did was through their symbiotic, parasitic relationship.
The other guy put his code through an obfuscator, literally, that removed all the indentation, carriage returns, and comments, meanwhile renaming all of his class, method, and variable names to random strings of the characters n, e, and w. It also added random comments made up of the same random strings sprinkled with semicolons. Yeah, cute. During the unemployment interview, he stated that he had fulfilled his requirements, the code compiled and worked, there was never a formal standard for the format, and he couldn't be held responsible for the additional work of his former co-workers. I think what clinched his unemployment benefits was stating he had no hard feelings and maintaining that he was available for consulting work if the company had acted too quickly.
I can think of another reason that this is a bad idea. If you create a situation where only you know the password to mission critical systems, it won't keep you from being fired. What it will do, is get you sued after the fact if you refuse to divulge the information.
Never underestimate the power of stupid people in large groups.
HomeHome homeHome = (HomeHome)
the worst thing is that I wrote it and THEN realized how stupid it was.
well, actually thats only the second worst thing. The worst thing is that it is 100% valid and makes perfect sense in context.
Ira
Funny, sounds like you plagiarized the coding style guidline from WIPRO or EDS! M
Fortunately, their coding quality algorithm had to do with number of lines of code changed ... again, nothing to do with actual quality. Deleting redundant code merely enabled me and the software to work faster & better, which did not count as quality. When I learned to comment out redundant line, so they counted as "lines changed", my coding quality scores vastly improved!
/*
// 100 LOC
Sounds like a way to learn a bad habit on top of a bad habit:
100 LOC
*/
= 2 LOC changed
= 100 LOC changed
Live today, because you never know what tomorrow brings
While this maybe intended to be funny, I think that this is part of the reason that out sourcing software development has become popular in recent years.
There are a lot of cowboys in the software industry, the type that lack the profesionalism and think that this sort of thing is funny, or just fact.
It's no wonder that jobs are going to labourers that are not only cheaper, but also a lot more rigourous and serious in their approach.
Don't try to make the code itself unreadable. That's a dead giveaway. Use good programming procedures to hide your wickedly complex object and data models.
The way to make your code unmaintainable is through proper use of design patterns. Don't skimp. Combine many design patterns together to make your code so complex that nobody can ever figure it out, even by stepping through your code with a debugger. Use factories to produce composite visitor objects that bridge each other recursively. God, that just gave me a tent thinking about it.
If anyone complains that they can't figure out your code, tell their manager that you're worried about poorly trained programmers that don't keep up with good programming practices. So-and-so doesn't know even the most basic design patterns. Express your concern that such low-level programmers might screw up the code and require you to have to return to the site for maintenance, with your very high fee.
I love perl, but I could not resist. this was low-hanging fruit
Obfuscated code is more often the mark of ineptitude rather than expertise, and I think that most people- managers as well as other coders, realize this. I'm not saying that people who win the IOCCC for example do not understand the language they program in, but more often than not really obfuscated code (especially of the type described in the article) is a result of a programmer who either doesn't understand what they were trying to write, or is trying to make up for a lack of confidence by making the code unreadable.
That said, I think deadlines come into play a lot on how maintainable the code is. I know that I've worked on projects where the deadline was extremely short and my priority was getting the code done as quickly as possible while making sure that it ran as fast as possible. I know that some of the other programmers at the shop would have had a hard time understanding the code that I wrote, but when you've been working for 18 hours a day for a week and the program is finished literally 15 minutes before the deadline there isn't always time to go through and document the code, make sure it's maintainable, etc.
Famous Last Words: "hmm...wikipedia says it's edible"
I worked security at this place while I was going to school. Think mid '80s
They had won a contract from a major hotel firm to design and run their reservation system. The whole system was written by one guy, who by all accounts did an absolutely superhuman job. Of course, the company had to choose whether they wanted the job documented well, or completed by deadline. You can guess what they chose.
Our hero stays busy for a few years, maintaining code and writing new modules, but there are still a long row of empty loose-leaf binders where the documentation should be.
Company gets bought out. After a couple of months, the new owners announce that they're going to rewrite the whole reservation system from scratch, and retire the old system. Our hero comes in next day and demands a large raise. Management declines, hero gives his two weeks, and management cuts him his check and escorts him out the door.
Management then brings in a team of consultants to keep the old system up and running until the new system is ready. Problem is, the team can't get anywhere. Nothings documented, calling the code "spaghetti" would be a compliment, etc etc etc. Meanwhile, they're getting requests from the customer for changes and updates which they can't process. In addition, system crashes now take hours to solve instead of minutes, which is bad because part of the companies revenue is based on system uptime.
After a few weeks, management finally throws in the towel, and realizes they'll have to bring the guy back and pay him what he wants. Except... they can't find him. He's moved, and left no forwarding address. Nobody knows where he is.
Management had to hire a private detective to track the guy down, and they finally found him up in the mountains in Colorado, doing whatever. They convinced him to come back, but I wouldn't want to be managements negotiator in that meeting.
It's the land of the brave, and the home of the free
Where the less you know, the better off you'll be.
All of the rest will write a Perl program.
Why is this so difficult for employers to comprehend?
If you're paying someone to do a complex job (hint: if it costs $1 million to replace them, it's a complex job), and they die/quit/retire, find a smart person to replace them. Don't find two dipshits to replace them. Don't give Suzy the secretary a $2 raise to do their job (unless Suzy the secretary really is a smart person, in which case, why weren't you paying Suzy more to begin with?)
I've seen it happen over and over again. Smart person runs entire company single-handedly. Smart person quits/dies. Company panics. Company spends ungodly sum of money to completely redesign whatever it is the smart person was doing. New system ends up missing functionality and costing the company loss of productivity.
Every time, something tells me that if this person was smart enough to do everything they were doing, there was probably a reason for it. That's not to say they can't be replaced, just that they probably can't be replaced with any random dipshit, or any random piece of off-the-shelf software.
So, if you're a manager/owner, and you find yourself in this situation: when smart person quits, put an ad in the paper, hire a headhunter, find someone with an IQ of 130 to replace them. Pay them 20% more than you were paying the previous person. Don't worry about whether the new person has experience doing exactly what the previous person did. Don't worry about redesigning anything. If something needs to be changed, the new smart person will be perfectly capable of changing it.
"I assumed blithely that there were no elves out there in the darkness"
"They that can give up essential liberty to obtain a little temporary safety deserve neither liberty nor safety."
You want unmaintainable code? I have three letters for you - APL! Problem solved.
Best way to generate unmaintainable code: use Java
All that Public Static Void Private Uses Extends crap is confusing enough as it is.
#include <sig.h>
The most outrageous Job Security play I've ever come across was a guy who customized the GNU C compiler with a few new operators (!!) to "simplify" a small project he was on...
Second was a guy who managed to write a great big NeXTstep program that was totally driven by callbacks posted to the NSNotificationCenter (the whole thing was just a great big side-effect as it was written - impossible to trace and fix).
Ick...
Wow... the only reason they upgraded was because the guy died. That guy should feel pretty good.... wait, he died.
Yes, the article is intended to be funny, but a lot of people also seem to miss the point that it is intended to TEACH good programming by listing bad programming habits. I.e if you want to be a good programmer, don't do this stuff. It amazes me how so many 'smart' slashdot readers can completely miss the point of something like this.
They would say "we never really planned on keeping that peice of software [dead guys name here] wrote, but we never decided on a package or got funding for a package to replace and we had so many things going on ..."
members are seeing something, your seeing an ad
For a second I thought you were selling a system for buying distressed real estate
How about this masterpiece? Whoever gets stuck maintaining this application will continue to be employed for the next 20 or so years figuring it out. I guess the authors have very good documentation and auto-obfuscation!
Coderz 4 Life
I'm posting this anonymously because at the moment, this is exactly the situation I am confronted with. I am maintaining a huge app that
a)was started in asp on iis with an access db
b)was then moved to an oracle db
c)then perl scripts were added to do db maintenance
d)then it was discovered that vbs lacked some of the functionality that was needed and a whole new section was written in java
e)the bridge between iis/asp and wls/java is a fantastic hack that no one understands
f)the guy who wrote the asp code was fresh out of uni
g)he did a good number of the don't mentioned in TFA, such as:
1.mispelling class names and then using using correctly spelled instance names
2.using c++ notation in vbs
3.doing zilch zero nada comments anywhere except for single line random cryptic comments in the middle of a class
4.adding "impl" to all the interface implementations
5.leaving broken dao classes that weren't fully implemented
6.using single letter variable names, often
Fortunately, thank god, the guy was fairly consistent in his ways so it is possible to find out what his code does. It is quite a trick to make sure that changing some piece of code doesn't break the whole app though.
Funky.
I wouldn't recommend that anyone follow the "write unmaintainable code to make your job secure". If you're working for a fairly sane company and a boss who knows some of what they are doing, they'll have a pretty good idea of how maintainable your code is whenever they ask other people in your group to work on it. If your company is an outsourcing operation, your customers will more than likely be inspecting the code at random and they'll be peeved if you're doing stupid stuff.
Same time, the article is good in that it's a really good essay about what NOT to do in order to be a successful software developer.
...write a program that turns your code into something unmaintainable? Perhaps one that converts between an "unmaintainable" format and back? That or you could keep the good source and make it seem like the bad source is what you wrote.
With this you can be the wunderkind who can somehow easily maintain this monsterous code when anyone else can't. Now that's job security.
Have you ever tried to hire that One Smart Person? Hell, even if s/he existed, they'd never make it past HR.
Make sure all your code is as condensed as possible. It not only looks like you know what you're doing to the uneducated observer, it will hinder any attempt to follow flow of control while stepping with a debugger.
e )?fn2(x):fn3(x);
e.g.
something=fn(getptr(x),*gg,goddamnhugevariablenam
this works even better with case!
switch(x) {
case stupidconstantnamedefinedinfaroffincludefile1: return;
case stupidconstantnamedefinedinfaroffincludefile2: continue;
case stupidconstantnamedefinedinfaroffincludefile3: break;
case stupidconstantnamedefinedinfaroffincludefile4: etc. etc.
And don't leave it at that. You know the people trying to follow your code will be hating your guts - rub it in. Leave cute little comments all over the place, designed to really get under their skin. "What the hell does this do?" and "This is such a cool implementation!" and "I learned to do this in 2nd year C class" are some of the classics I have found... Even better, get cute with your variable names. Name them after Ewoks. Or Smurfs. The mental image you want to create is of you, behind the maintenance programmers shoulder, giggling.
Lastly, NEVER use parentheses unless you have to. You spent months of your life memorizing binding order, you should force everyone else to do the same. You don't want the casual observer to be able to interpret
if(*p++ && x || *qq->a * 3 && y)
without stopping to take a good long look, do you?
who's copying who now?, is /. dotting dig, or is digg slashing dot?
"If it's true that our species is alone in the universe, then I'd have to say that the universe aimed rather low
I realize that this is supposed to be a joke, but to me it is not very funny. I am currently on a team that has to maintain spaghetti code (Perl, no less) left by a previous developer. His old code does some amazing things, but the complete lack of comments or documentation has left such a sour taste in the rest of the team's mouth that they start muttering expletives whenever his name is mentioned. This is a real shame because he was a nice guy as well as being very smart, but because of his code he has left a legacy that has insured that no one would ever recommend him for anything.
I once worked for a large corporation I'll call MotorFrdCrys. I worked with a guy who had an amazingly long career as a programmer, from the early 1960's to the mid-1990's. He was the sole creator, over a period of decades, of a "program" that performed an absolutely essential function in designing a car.
As the person who documented the user portion of this "program", I became privy to his secrets.
First, the program was both absolutely essential *and* rarely used, since you only needed it at one point during the design cycle. Back when it took six years to design a new car, this program was probably needed once or twice a year.
Second, it was a classic work of spaghetti code written over decades in FORTRAN. He never threw anything away that (sort of) worked, and he never cut out anything that no longer worked.
Third, he liberally used "fudge factors" at every juncture of the program to get the answers that engineers already expected to get when they used the program.
Finally, and most impressively, it was not possible to use the program to get the final design answers *unless he personally ran the program*!
I laughed my butt off reading that. My predecessor used many of these techniques, and when the staff asked him how something worked he actually said "What, and let you know all my secrets?"
.exe, for which there was no project whatsoever. He hid a bunch of interpreted instructions there and had to seek past the .exe stuff to read and write it. I'm sure he cackled gleefully doing that one.
Include files copied into each folder so if you changed a structure you had to know to do it 5 places, constants defined as enums, non-std abbreviations, no vowels in any variables, the one-char names, on and on.
I really liked the text file hidden in an
Oh, and he named the program after himself.
The revolution will NOT be televised.
But its actually a plug for NetRexx.
Scroll to the very end of the article and read the last to paragraphs. Apparently he is trying to make a point about not restricting ourselves to text files when coding. Might have made it better if he had made the rest of his article shorter
I am working in the same company (except is about portfolio management, not insurance) and yes, it is soul destroying.
:-(
Actually I have to recompose my soul every morning just to get it destroyed every afternoon.
The sad is, they pay me a lot more than any job I have ever applyed to and there is a mortgage in my sad life
Welcome to /., where IQ of 130 is average... they should just forget the 90 IQ headhunter and advertise on here :)
you've been around here long enough, you should know that by now.
my karma will be here long after I'm gone
>I'd rather argue against a hundred idiots than have one agree with me.
I must agree with you ... sorry!
--- Attorneys Assisting Citizen-Soldiers & Families -
Of course, most of these problems is nothing that an indefinite number of Indians, given an indefinite number of dollars, and and indefinite amount of time, could solve.
Klingon Programmer Sayings.
Mike van Lammeren
It will challenge your head, your brain, and your mind.
I worked at a company that had let it slip that they were taking metrics on number of lines of code submitted to the revision control system. This was a directive from the higher-ups, so of course against all logic the next line of management down from them (and above me) went along with it blindly. I tried to argue about the uselessness of such metrics to deaf ears. So, being me, I decided to have a little fun with this.
One section of the code consisted of a number of modules that were basic copies of each other with small local customisations. Think hundreds or thousands of lines in common. No, I didn't write them, but I had to maintain them. So I took these, pulled out some code into common libraries, and wrote a code generator to produce much of the rest from input files. I was also careful to work on non-coding tasks for the remainder of that week; essential stuff but the sort that had been put off for a while. My net code contribution that week: Negative several hundred lines of code. The code also became infinitely more maintainable, and I fixed countless copy/paste bugs in the process.
No doubt someone fudged my negative figure upwards when it went back up through the management chain to avoid rocking the boat, no doubt to a nice small number of positive line chances to ensure I looked bad. But, if only to myself, I had proved my point.
Whoever used "blur" instead of "unfocus" or "defocus" in Javascript was clearly a skilled practicioner of this kind of tomfoolery.
Yes, yes, if you defocus a lens the image blurs. That doesn't mean "blur" is the opposite of "focus" EVEN IN OPTICS, let alone where it's only being used as a metaphor. Oh, if any smartarse wants to make a comment about how they didn;t invent it (if indeed they didn't), I don't care. I don't care if Schroodleheim and Wurzelburg used "blur" in this context on page 451 of their seminal work on user interface design, or if it's even common slang at some lab or campus or prestigious project, it's a stupid bloody name.
1.) Use global variables for everything. Make sure you give them funny names like 'beeblebrox' and 'Wookie' that give absolutely no hint of what thier purpose might be. This will give the poor sl.., er, maintainer a good laugh as they tweeze thier way through your code. And yes, please feel free to reassign thier values often for whatever purpose you need in any give place.
2.) Avoid specialized classes and functions like the plague. Place everything in gigantic Sub or void methods, trying to pack as much of your programs functionality as you possibly can into each block.
3.) Thoroughly document your code by scattering non-sequitor comments at random points.
This is a proven tecnique. In fact it works so well that anyone with a brain that gets a look at it will recommend that your app be shitcanned immediately rather then waste another dime maintaining it.
<!--
while(!am) r2();
1. Download perl
2. start coding
just kidding, perl is awesome, albeit cryptic at times.
I am Spartacus
The code may be way too complex, but I'm certain this designer is not intelligent...
Perl, with its 'do the same thing gazillion different ways' is a perfect language to write completely unmaintaintable code.
I've leared that the hard way, by starting my Perl education maintaining the code written by someone else. I've fought back by writing the number of apps in Perl, as well. Poor suckers kept calling me at my new job, long after I quit.
through in a few regular expressions, those things are usually a mystery to anyone else. :(
Hell a,fter 6 months my own ones seem like arabic
Several times I've been brought in by companies as a hired gun to try to understand umaintainable code so that they could fire the authors. In one place, an investment bank, the code, which was crucial to their business, was so obsfucated and bloated that after months of struggle I simply had to give up. Not only was the 1,000,000 lines of code impossible to understand, but it required constant HUMAN interaction that only the guys who wrote it knew how to do. The programmers had been demanding "special" bonuses for several years, and getting them. The year before I showed up they got $500,000 each. I KID YOU NOT. Eventually the company started an entire shadow division, built the system from scratch, then closed down the original division (with about a dozen innocent victims getting the axe).
Their punishment: they moved on to another investment bank WHERE THEY DID THE SAME THING AGAIN!
Everyone knows that in taking operator overloading out of Java, they made it impossible to write confusing code.
It's a "given" that the lazy people need pray with such words to ask God for things that have already been given and forgiven to them. This aside; I think God used too many of those sleep() subroutines, and the return from the life(void) syscall has too many race conditions caused by malicious microcode on various architectures mis-interpreting the core logic.
Please be humble before you read the following, knowing that many of us can't use that Bible as truth, but its application can be used to discern between people that hold it as truth or use it for malicious purposes. All this considered, think about that Someone that was too quick to engage a "talking snake theory", and was yet to recognize that there is a two-headed talking snake slithering around, and none knows the true head. (this in mind, crossed with what we think is reality, depending on your left-brain and right-brain psychopathic application; there are natural snakes with a blunt tail that distracts predators from attacking the true head.)
[KJVAV1611] Genesis 3:1;
"Now the serpent was more subtil than any beast of the field which the LORD God had made."
[KJVAV1611] Genesis 3:14-15;
"[14]And the LORD God said unto the serpent, Because thou hast done this, thou art cursed above all cattle, and above every beast of the field; upon thy belly shalt thou go, and dust shalt thou eat all the days of thy life:[15]And I will put enmity between thee and the woman, and between thy seed and her seed; it shall bruise thy head, and thou shalt bruise his heel."
[KJVAV1611] Genesis 4:13-24;
"[13]And Cain said unto the LORD, My punishment is greater than I can bear.[14]Behold, thou hast driven me out this day from the face of the earth; and from thy face shall I be hid; and I shall be a fugitive and a vagabond in the earth; and it shall come to pass, that every one that findeth me shall slay me.[15]And the LORD said unto him, Therefore whosoever slayeth Cain, vengeance shall be taken on him sevenfold. And the LORD set a mark upon Cain, lest any finding him should kill him.[16]And Cain went out from the presence of the LORD, and dwelt in the land of Nod, on the east of Eden.[17]And Cain knew his wife; and she conceived, and bare Enoch: and he builded a city, and called the name of the city, after the name of his son, Enoch.[18]And unto Enoch was born Irad: and Irad begat Mehujael: and Mehujael begat Methusael: and Methusael begat Lamech.[19]And Lamech took unto him two wives: the name of the one was Adah, and the name of the other Zillah.[20]And Adah bare Jabal: he was the father of such as dwell in tents, and of such as have cattle.[21]And his brother's name was Jubal: he was the father of all such as handle the harp and organ.[22]And Zillah, she also bare Tubalcain, an instructer of every artificer in brass and iron: and the sister of Tubalcain was Naamah.[23]And Lamech said unto his wives, Adah and Zillah, Hear my voice; ye wives of Lamech, hearken unto my speech: for I have slain a man to my wounding, and a young man to my hurt.[24]If Cain shall be avenged sevenfold, truly Lamech seventy and sevenfold."
This post, I assert it of a truth, and stand on my words;
Gregory-Thomas: Mundt
without prejudice
It's all about having the right keywords in the resume. And people say that meta tags aren't useful anymore... :)
Have you ever tried to hire that One Smart Person? Hell, even if s/he existed, they'd never make it past HR.
;) I will get both one day, but I am not sure how (maybe just a hopeless optimist?)
Yup, especially since HR adheres to the "check-box" policy off hiring. Do you have such a skill yes/no? This totally eliminates the people who actually can learn the stuff. I was speaking to one headhunter who said that one company wanted someone who could hit the ground running, because they had a tight deadline, and then as the project got closer to the finish date, and they still hadn't found such a person, they became fussier about thre criteria. This is akin is trying to find the ideal girl friend and upping the criteria when you don't find her.
Okay must admit since taking a sabatical trying to find another job is proving to be a little harder than expected. And the fact that I am in IT doesn't seem to help me find the "beautiful girl, who is smart and funny and I spend my time with" ( match.com didn't help either
Jumpstart the tartan drive.
I actually worked for a company that had lost the entire source code for one of its main applications. They kept the binary and ran it as needed -- and just kept on working around it's problems. I was impressed with their creativity and shocked at their stupidity.
I18N == Intergalacticization
This is exactly the kind of behavior I dispise in a "programmer": it's petty, full of selfishness, insecurity, and incompetence.
I thoroughly believe that if a "programmer" is worth his salt, he/she can do any project without fear of being canned when it's completed, not because they know their boss can't do without them, but because they know their skills are such that they are a valueable asset to any company.
And, I would HATE to work at a company, as a programmer, that did not recognize such behavior or allowed it to continue.
While this article can have lots of humor in it, it just brings up a point of contention I have had with former coworkers.
- Alan J. Perlis, "Epigrams in Programming"
Funny of you to say it's a joke and insult anyone who believes it to be true.. then in your next paragraph you say how it actually is true.
named Mark [not his real name!], who, when asked to integrate two small systems, wrote code to have one system email him when data changed, so that he could then enter that data into the other system.
The managers of the user community thought Mark was great, because he did exactly what he was asked to [even if that was totally stupid!] and he also did it almost instantly.
Of course, when he was fired for running a first-run movie server from within the corporate firewall, all those system integrations failed, because the emails were never opened.
We eventually found all the little tricks Mark had used to implement the stupid requirements his users asked for, and removed them, and made the users follow the rules.
Unmaintainable code is only a protection until a real developer finds out what's going on, and get the ear of management. I really liked Mark, but his coding ability couldn't keep up with his lack of ethics!
> I decided to have a little fun with this .... I took these, pulled out some code into common libraries, and wrote a code generator to produce much of the rest from input files
Ah, congratulations, how delightful! I *loved* code generators. Ya bring back memories ... at my first really good gig, management just stood out of the way while I wrote a mainframe BASIC program that generated COBOL reporting programs as fast as they could think of new stuff they wanted out of their data; the reports were basically the same anyway except for the sort, select, summarization and output. So the generator wasn't really as hard as it might sound.
Of course, this was in a commercially competitive environment where we were rewarded by results, not by metrics. Those were true Dilbert Moments ... ever so much more satisfying than Kodak Moments!
--- Attorneys Assisting Citizen-Soldiers & Families -
With graphic-heavy layouts becoming the norm in the 56k and higher age, I revel in the fact I can put together layouts that look simple but employ enough layers of subtle effects and elements that they are nearly impossible for someone to duplicate exactly. Of course - I retain all of the .psd files for future updates. Most updates only take an hour or less so it's no huge dip into their petty cash. By the middle of next year I should have 8 hours a day doing "updates" in addition to my normal client load. Of course, this is also the case with Flash-based projects which can be massively more complex.
.fla files for some streaming video interstatials that I did. Some entry-level plebe didn't know that I never signed any agreement on terms for material release. It was fun bitch-slapping him down when he asserted that all material was their property.
Of course some of my clients have been catching-on.
I had one company demand the
Quite fun in fact.
Ah, congratulations, how delightful! I *loved* code generators. Ya bring back memories ... at my first really good gig, management just stood out of the way while I wrote a mainframe BASIC program that generated COBOL reporting programs as fast as they could think of new stuff they wanted out of their data; the reports were basically the same anyway except for the sort, select, summarization and output. So the generator wasn't really as hard as it might sound.
:(
My current project (E.V.E. Paradox) uses a fair amount of automatic code generation. Basically as I add a new game and object to a game, it creates the code to let you edit it in the Editor GUI, base code to load and save it in various formats, the basic game code, doco, and all of the annoying little hooks required. It's a neat little Ruby program, and it produces reasonably readable C++. It's not perfect, but reduces the amount of copy/paste for common code. It reduces errors due to simple typos dramatically; I haven't looked at some of this code for quite some time, it just works.
The downside is that it is hard to maintain and can get a bit bulky. I can think of a few improvements that I could have made to use more generics and a bit less automatic codegen, but shoestring budget and all...
Of course, this was in a commercially competitive environment where we were rewarded by results, not by metrics.
Those gigs are getting harder and harder to find.
That was incredibly funny.
When I first read it.
I think it was three years ago.
Possibly linked from slashdot.
In the company I work for, it doesn't matter how bad (or good) you right your code, your position will be outsourced overseas by next year... So there's little incentive to make it work to begin with.
Visualize Whirled Peas
I'd add this one to the mix:
A strong attempt should be made to apply as many design patterns as possible onto the problem at hand. This should be done without consideration of the downside of the use of these patterns since no one gives you credit for not using a design pattern.
This is interesting... most of the other people on the "God Channel" I heard about, whose life exploded into the "Middle Class Pipedream" they got this far by submitting to the Lord and through prayer.
How do we take this to the next level, how to have a team-oriented Rational Unified Process of making unmaintainable software, or even better Extreme Unmaintainable Coding.
I can't belive this hasn't been posted yet, but discussions like these always take me back to the story of Mel.
I smile every time I read it.
-- Experience is a wonderful thing. It enables you to recognize a mistake when you make it again.
Funny of you to say it's a joke and insult anyone who believes it to be true.. then in your next paragraph you say how it actually is true.
No, that isn't funny. I said there is a kernel of truth to it, as there is with virtually all humor. There is nothing particularly funny about that.
Fire the HR person, then.
+++OK ATH
Of course listing "MS Office" on the resume doesn't qualify where the requirement was "MS Word" ... that's the mark of the true checkbox-HR officer.
If you think imaginary property and real property are the same, when does your house become public domain?
I recall my office having a tectronic lazer color printer that we could run transparencies through. Except Tectronic built the printer so that any transparencies other than their special proporietary sheets would melt in the printer.
If the firm does not require you explicitly to write maintainable code - than the tips they give in this are quiet good.
Or if they want code that others can maintain, to be well commented, you should - ceteris paribus - ask for more mo-nah!
I think the most particularly evil one is pointing out that "myArray[i]" is equivalent with "i[myArray]" in C.
Cool! Recursive exit interviews!
Save Maine's economy: write stuff down. All comments are exclusively my own, not my employer.
This is so OLD NEWS, that it couldn't get anyolder... I remember sawing that "how to write unmaintable code" allmost five of six years ago. I am not sure where I got the link, but I guess it was in http://rinkworks.com/stupid/ :)
The first time I read this essay I was simultaneously laughing and crying. The code I was working on at the time contained examples of every single technique -- all written by programmers who had (voluntarily) left the company!
"This is akin is trying to find the ideal girl friend and upping the criteria when you don't find her."
/. anyway.
As in life, all metaphors break down to the difficulty of finding a girlfriend. Well on
My first job out of school was maintaining a program called CODAN written in FORTRAN 4. It was layered on a custom shell written by a guy who'd wanted to add some capabilities to the manufacturer's shell (Cyber 170 mainframe running NOS). Somewhere along the line the source code had been lost and they only had the binary. So every year when Cyber upgraded NOS, the shell would break and this guy would come out of retirement (He'd retired early because he had this nice cash spigot to supplement his income) and for $250/hr he'd debug and fix the problem. The Cyber 170 was a 60 bit machine and his debug method was to do an OCTAL dump of the crash and pick through it (a 12 inch stack of 132 column fan-fold, impact printer output) until he found the problem(s), then use a binary editor to patch the binary.
I asked once why we didn't just re-write the program (CODAN was itself an horrendous piece of cut-and-paste architecture) and was told that we had a budget for maintenance, not new development. Since this was a defense contractor to the DOD, we couldn't move money from one to the other.
So this guy had an annual gig that brought in about 40K a year until he died. The satelite booster that this program supported is still being used with the same Z80 based flight computers, so the program COULD still be in use, IF he's alive. Go figure.
d4,...,Nf3, or maybe I should use a Ratfaced Mcdougal?
Again, from TFA: "Imagine having an accountant as a client who insisted on maintaining his general ledgers using a word processor."
My ex-wife is an accountant who does a variation of this: she insists on doing all of her word processing in Excel. She writes letters, takes notes, and even designs brochures, all in Excel. She hates Word. She loves Excel. There is no arguing with her.
Don't underestimate the power of The Source
I think if I ever met you in person.... I'd like you :-))
return 0; }
I'll use these when I enter the International Obfuscated C Contest.
Which chapter 14?
Were you age discriminated?
Or were you a whaler?
Oops. Meant chapter 11.
(Mixing up the bankruptcy chapter numbers: Yet another reason I'm not a CEO. B-) )
Bantam Dominique roosters crow a four-note song. Once you've heard it as "Happy BIRTHday" you can't NOT hear it that way
Quit from the Company then rake $$$ in consulting fees. As time goes on increase your fees as you have the upper hand.