Alfonso the Code Warrior

A collection of coder and general computer jokes to rival the finest.

Tuesday, December 19, 2006

Q: How many MIS guys does it take to change a light bulb?

A: MIS has received your request concerning your hardware problem and has assigned you request service number 39,712. Please use this number for any future references to this light-bulb issue.

Monday, December 18, 2006

Pessimist: The glass is half-empty.

Optimist: The glass is half-full.

Engineer: The glass is twice as big as it needs to be.

Saturday, December 16, 2006

Coming soon: "WhoCarez", the world's first
Taoist programming language! See for yourself:
DO WHILE YOU FEEL IT'S WORTHWHILE
ADD X TO Y
OR
SUBTRACT X FROM Y
OR
WHATEVER
CALL DisregardResults
CALL ItIsn'tImportantAnyway
CALL PonderUniversalTruths
ASSIGN CosmicBalance = YES
OR
PERHAPS NOT
END DO (UNLESS YOU DON'T WANT TO)


(originally from here)

Thursday, December 14, 2006

If you had a Klingon coder working on your team (but wait, there's more...):
  1. "This code is a piece of crap! You have no honor!"
  2. "A TRUE Klingon warrior does not comment his code!"
  3. "By filing this bug you have questioned my family honor. Prepare to die!"
  4. "You question the worthiness of my Code?! I should kill you where you stand!"
  5. "Our competitors are without honor!"
  6. "Specs are for the weak and timid!"
  7. "This machine is a piece of GAGH! I need dual Pentium processors if I am to do battle with this code!"
  8. "Perhaps it IS a good day to Die! I say we ship it!"
  9. "My program has just dumped Stova Core!"
  10. "Behold, the keyboard of Kalis! The greatest Klingon code warrior that ever lived!"
But I disagree. Klingons prefer hand-to-hand combat to Phasers. You just know that they'd want to use a Z80 for real-time image processing.

So here is my list of things you might hear from the Klingon in the cube next to yours. (see original page).

  1. "I have challenged the entire ISO-9000 review team to a round of Bat-Leth practice on the holodeck. They will not concern us again."
  2. "C++? That is for children. A Klingon Warrior uses only machine code, keyed in on the front panel switches in raw binary."
  3. "Debugging? Klingons do not debug. Bugs are good for building character in the user."
  4. "Defensive programming? Never! Klingon programs are always on the offense. Yes, Offensive programming is what we do best."
  5. "Klingon programs don't do accountancy. For that, you need a Farengi programmer."
  6. "Klingon multitasking systems do not support "time-sharing". When a Klingon program wants to run, it challenges the scheduler in hand-to-hand combat and owns the machine."
  7. "Klingon function calls do not have 'parameters' - they have 'arguments' - and they ALWAYS WIN THEM."
  8. "You humans call this thing a 'cursor' and you move it with 'mouse'! Bah! A Klingon would not use such a device. We have a Karaghht-Gnot - which is best translated as "An Aiming Daggar of 16x16 pixels" and we move it using a Gshnarrrf which is a creature from the Klingon homeworld which posesses just one, (disproportionately large) testicle...which it rubs along the ground.....uh do we really need to talk about this?"
  9. "I am without honor...my children are without honor... My father coded at the Battle of Kittimer...and...and...he...
    HE ALLOWED HIMSELF TO BE MICROMANAGED."
  10. "Klingons do not make software 'releases'. Our software 'escapes'. Typically leaving a trail of wounded programmers in it's wake."
  11. "Microsoft is actually a secret Farengi-Klingon alliance designed to cripple the Federation. The Farengi are doing the marketing and the Klingons are writing the code."
  12. "Klingons do not believe in indentation - except perhaps in the skulls of their program managers."
  13. "You can't truly appreciate Dilbert unless you read it in the original Klingon."

Wednesday, December 13, 2006

All programmers are playwrights and all computers are lousy actors.

Unix is user friendly. It's just very particular about who it's friends are.

The boy is smoking and leaving smoke rings into the air.
The girl gets irritated with the smoke and says to her lover: "Can't you see the warning written on the cigarettes packet, smoking is injurious to health!"

The boy replies back: "Darling, I am a programmer. We don't worry about warnings, we only worry about errors."

Monday, December 11, 2006

How To Identify Where A Driver Is From

One hand on wheel, one hand on horn: Chicago

One hand on wheel, one finger out window: New York

One hand on wheel, one hand on newspaper, foot solidly on accelerator: Boston

One hand on wheel, cradling cell phone, brick on accelerator: California. With gun in lap: L.A.

With joint in mouth/brushing dreadlocks out of eyes: San Francisco/Humbolt.

Both hands on wheel, eyes shut, both feet on brake, quivering in terror: Ohio, but driving in New York.

Both hands in air, gesturing, both feet on accelerator, head turned to talk to someone in back seat: Italy

One hand on latte, one knee on wheel, cradling cell phone, foot on brake, mind on game: Seattle

One hand on wheel, one hand on hunting rifle, alternating between both feet being on the accelerator and both on the brake, throwing a McDonalds bag out the window: Texas city male

One hand on wheel, one hand hanging out the window, keeping speed steadily at 70mph, driving down the center of the road unless coming around a blind curve, in which case they are on the left side of the road: Texas country male

One hand constantly refocusing the rear-view mirror to show different angles of the BIG hair, one hand going between mousse, brush, and rat-tail to keep the helmet hair going, both feet on the accelerator, poodle steering the car, chrome .38 revolver with mother of pearl inlaid handle in the glove compartment: Texas female

Four wheel drive pickup truck, shotgun mounted in rear window, beer cans on floor, squirrel tails attached to antenna: West Virginia

Two hands gripping wheel, blue hair barely visible above window level, driving 35 on the interstate in the left lane with the left blinker on: Florida

Sunday, December 10, 2006

Why did the multi-threaded chicken cross the road?

Why did the multi-threaded chicken cross the road?

to To other side. get the

Tuesday, December 05, 2006

Rule for software developers. Never stand over the shoulder of a beta tester. Once, I was watching Jane test the latest version of our software. When a message appeared on the screen, "Press any key to continue", Jane pressed the letter 'j'.
I thought I was going to have heart failure.

"JANE!" I screamed, "Why did you press J?!!?"

"It said any key."

"Yeah, but....when programmers say any key, they mean the space bar!"

At which point my fellow programmer looked at me and said, "We do? I thought we meant enter."

Originally From: BEN BUTLER

Wednesday, November 29, 2006

Proper Diskette Care and Usage

(1) Never leave diskettes in the drive, as the data can leak out of the disk and corrode the inner mechanics of the drive. Diskettes should be rolled up and stored in pencil holders.

(2) Diskettes should be cleaned and waxed once a week. Microscopic metal particles may be removed by waving a powerful magnet over the surface of the disk. Any stubborn metal shavings can be removed with scouring powder and steel wool. When waxing a diskette, make sure the surface is even. This will allow the diskette to spin faster, resulting in better access time.

(3) Do not fold diskettes unless they do not fit into the drive. "Big" Diskettes may be folded and used in "Little" drives.

(4) Never insert a diskette into the drive upside down. The data can fall off the surface of the disk and jam the intricate mechanics of the drive.

(5) Diskettes cannot be backed up by running them through a photo copy machine. If your data is going to need to be backed up, simply insert TWO diskettes into your drive. Whenever you update a document, the data will be written onto both disks. A handy tip for more legible backup copies: Keep a container of iron filings at your desk. When you need to make two copies, sprinkle iron filings liberally between the diskettes before inserting them into the drive.

(6) Diskettes should not be removed or inserted from the drive while the red light is on or flashing. Doing so could result in smeared or possibly unreadable text. Occasionally, the red light remains flashing in what is known as a "hung" or "hooked" state. If your system is hooking, you will probably need to insert a few coins before being allowed to access the slot.

(7) If your diskette is full and needs more storage space, remove the disk from the drive and shake vigourously for two minutes. This will pack the data enough (data compression) to allow for more storage. Be sure to cover all openings with scotch tape to prevent loss of data.

(8) Data access time may be greatly improved by cutting more holes in the diskette jacket. This will provide more simultaneous access points to the disk.

(9) Periodically spray diskettes with insecticide to prevent system bugs from spreading.....

(10) You can keep your data fresh by storing disks in the vegetable compartment of your refrigerator. Disks may be frozen, but remember to un thaw by microwaving or briefly immersing in boiling water.

(11) "Little" diskettes must be removed from their box prior to use. These containers are childproof to prevent tampering by unknowledgeable youngsters.

(12) You can recover data from a damaged disk by using the DOS command: FORMAT /U or alternatively by scratching new sector marks on the disk with a nail file.

(13) Diskettes become "hard" with age. It's important to back up your "hard" disks before they become too brittle to use.

(14) Make sure you label your data. Staples are a good way to permanently affix labels to your disks.

Tuesday, November 28, 2006

Theory and Practice

Theory is when you think you know something but it doesn't work.
Practice is when something works but you don't know why.
Usually we combine theory and practice: nothing works and we don't know why.

-----

In theory, theory and practice are the same.
But that's in theory, not in practice.

Tuesday, November 14, 2006

The graduate with a Science degree asks, "Why does it work?"
The graduate with an Engineering degree asks, "How does it work?"
The graduate with an Accounting degree asks, "How much will it cost?"
The graduate with an Computer Science degree asks, "How is it that it works at all?"
The graduate with a Liberal Arts degree asks, "Do you want fries with that?"

Sunday, November 12, 2006

Writing Unmaintainable Code

Introduction

Never ascribe to malice, that which can be explained by incompetence.
- Napoleon

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.

General Principles

Quidquid latine dictum sit, altum sonatur.
- Whatever is said in Latin sounds profound.

To foil the maintenance programmer, you have to understand how he thinks. He has your giant program. He has no time to read it all, much less understand it. He wants to rapidly find the place to make his change, make it and get out and have no unexpected side effects from the change.

He views your code through a toilet paper tube. He can only see a tiny piece of your program at a time. You want to make sure he can never get at the big picture from doing that. You want to make it as hard as possible for him to find the code he is looking for. But even more important, you want to make it as awkward as possible for him to safely ignore anything.

Programmers are lulled into complacency by conventions. By every once in a while, by subtly violating convention, you force him to read every line of your code with a magnifying glass.

You might get the idea that every language feature makes code unmaintainable -- not so, only if properly misused.

Naming

"When I use a word," Humpty Dumpty said, in a rather scornful tone, "it means just what I choose it to mean - neither more nor less."
- Lewis Carroll -- Through the Looking Glass, Chapter 6

Much of the skill in writing unmaintainable code is the art of naming variables and methods. They don't matter at all to the compiler. That gives you huge latitude to use them to befuddle the maintenance programmer.

    New Uses For Names For Baby

    Buy a copy of a baby naming book and you'll never be at a loss for variable names. Fred is a wonderful name, and easy to type. If you're looking for easy-to-type variable names, try adsf or aoeu if you type with a DSK keyboard.

    Single Letter Variable Names

    If you call your variables a, b, c, then it will be impossible to search for instances of them using a simple text editor. Further, nobody will be able to guess what they are for. If anyone even hints at breaking the tradition honoured since FØRTRAN of using i, j, and k for indexing variables, namely replacing them with ii, jj and kk, warn them about what the Spanish Inquisition did to heretics.

    Creative Miss-spelling

    If you must use descriptive variable and function names, misspell them. By misspelling in some function and variable names, and spelling it correctly in others (such as SetPintleOpening SetPintalClosing) we effectively negate the use of grep or IDE search techniques. It works amazingly well. Add an international flavor by spelling tory or tori in different theatres/theaters.

    Be Abstract

    In naming functions and variables, make heavy use of abstract words like it, everything, data, handle, stuff, do, routine, perform and the digits e.g. routineX48, PerformDataFunction, DoIt, HandleStuff and do_args_method.

    A.C.R.O.N.Y.M.S.

    Use acronyms to keep the code terse. Real men never define acronyms; they understand them genetically.

    Thesaurus Surrogatisation

    To break the boredom, use a thesaurus to look up as much alternate vocabulary as possible to refer to the same action, e.g. display, show, present. Vaguely hint there is some subtle difference, where none exists. However, if there are two similar functions that have a crucial difference, always use the same word in describing both functions (e.g. print to mean "write to a file", "put ink on paper" and "display on the screen"). Under no circumstances, succumb to demands to write a glossary with the special purpose project vocabulary unambiguously defined. Doing so would be an unprofessional breach of the structured design principle of information hiding.

    Use Plural Forms From Other Languages

    A VMS script kept track of the "statii" returned from various "Vaxen". Esperanto , Klingon and Hobbitese qualify as languages for these purposes. For pseudo-Esperanto pluraloj, add oj. You will be doing your part toward world peace.

    CapiTaliSaTion

    Randomly capitalize the first letter of a syllable in the middle of a word. For example ComputeRasterHistoGram().

    Reuse Names

    Wherever the rules of the language permit, give classes, constructors, methods, member variables, parameters and local variables the same names. For extra points, reuse local variable names inside {} blocks. The goal is to force the maintenance programmer to carefully examine the scope of every instance. In particular, in Java, make ordinary methods masquerade as constructors.

    Åccented Letters

    Use accented characters on variable names. E.g.
      typedef struct { int i; } ínt;
    where the second ínt's í is actually i-acute. With only a simple text editor, it's nearly impossible to distinguish the slant of the accent mark.

    Exploit Compiler Name Length Limits

    If the compiler will only distinguish the first, say, 8 characters of names, then vary the endings e.g. var_unit_update() in one case and var_unit_setup() in another. The compiler will treat both as var_unit.

    Underscore, a Friend Indeed

    Use _ and __ as identifiers.

    Mix Languages

    Randomly intersperse two languages (human or computer). If your boss insists you use his language, tell him you can organise your thoughts better in your own language, or, if that does not work, allege linguistic discrimination and threaten to sue your employers for a vast sum.

    Extended ASCII

    Extended ASCII characters are perfectly valid as variable names, including ß, Ð, and ñ characters. They are almost impossible to type without copying/pasting in a simple text editor.

    Names From Other Languages

    Use foreign language dictionaries as a source for variable names. For example, use the German punkt for point. Maintenance coders, without your firm grasp of German, will enjoy the multicultural experience of deciphering the meaning.

    Names From Mathematics

    Choose variable names that masquerade as mathematical operators, e.g.:
      openParen = (slash + asterix) / equals;

    Bedazzling Names

    Choose variable names with irrelevant emotional connotation. e.g.:
      marypoppins = (superman + starship) / god;
    This confuses the reader because they have difficulty disassociating the emotional connotations of the words from the logic they're trying to think about.

    Rename and Reuse

    This trick works especially well in Ada, a language immune to many of the standard obfuscation techniques. The people who originally named all the objects and packages you use were morons. Rather than try to convince them to change, just use renames and subtypes to rename everything to names of your own devising. Make sure to leave a few references to the old names in, as a trap for the unwary.

    When To Use i

    Never use i for the innermost loop variable. Use anything but. Use i liberally for any other purpose especially for non-int variables. Similarly use n as a loop index.

    Conventions Schmentions

    Ignore the Sun Java Coding Conventions, after all, Sun does. Fortunately, the compiler won't tattle when you violate them. The goal is to come up with names that differ subtlely only in case. If you are forced to use the capitalisation conventions, you can still subvert wherever the choice is ambigous, e.g. use bothinputFilename and inputfileName. Invent your own hopelessly complex naming conventions, then berate everyone else for not following them.

    Lower Case l Looks a Lot Like the Digit 1

    Use lower case l to indicate long constants. e.g. 10l is more likely to be mistaken for 101 that 10L is. Ban any fonts that clearly disambiguate uvw wW gq9 2z 5s il17|!j oO08 `'" ;,. m nn rn {[()]}. Be creative.

    Reuse of Global Names as Private

    Declare a global array in module A, and a private one of the same name in the header file for module B, so that it appears that it's the global array you are using in module B, but it isn't. Make no reference in the comments to this duplication.

    Recycling Revisited

    Use scoping as confusingly as possible by recycling variable names in contradictory ways. For example, suppose you have global variables A and B, and functions foo and bar. If you know that variable A will be regularly passed to foo and B to bar, make sure to define the functions as function foo(B) and function bar(A) so that inside the functions A will always be referred to as B and vice versa. With more functions and globals, you can create vast confusing webs of mutually contradictory uses of the same names.

    Recycle Your Variables

    Wherever scope rules permit, reuse existing unrelated variable names. Similarly, use the same temporary variable for two unrelated purposes (purporting to save stack slots). For a fiendish variant, morph the variable, for example, assign a value to a variable at the top of a very long method, and then somewhere in the middle, change the meaning of the variable in a subtle way, such as converting it from a 0-based coordinate to a 1-based coordinate. Be certain not to document this change in meaning.

    Cd wrttn wtht vwls s mch trsr

    When using abbreviations inside variable or method names, break the boredom with several variants for the same word, and even spell it out longhand once in while. This helps defeat those lazy bums who use text search to understand only some aspect of your program. Consider variant spellings as a variant on the ploy, e.g. mixing International colour, with American color and dude-speak kulerz. If you spell out names in full, there is only one possible way to spell each name. These are too easy for the maintenance programmer to remember. Because there are so many different ways to abbreviate a word, with abbreviations, you can have several different variables that all have the same apparent purpose. As an added bonus, the maintenance programmer might not even notice they are separate variables.

    Misleading names

    Make sure that every method does a little bit more (or less) than its name suggests. As a simple example, a method named isValid(x) should as a side effect convert x to binary and store the result in a database.

    m_

    a naming convention from the world of C++ is the use of "m_" in front of members. This is supposed to help you tell them apart from methods, so long as you forget that "method" also starts with the letter "m".

    o_apple obj_apple

    Use an "o" or "obj" prefix for each instance of the class to show that you're thinking of the big, polymorphic picture.

    Hungarian Notation

    Hungarian Notation is the tactical nuclear weapon of source code obfuscation techniques; use it! Due to the sheer volume of source code contaminated by this idiom nothing can kill a maintenance engineer faster than a well planned Hungarian Notation attack. The following tips will help you corrupt the original intent of Hungarian Notation:

      Insist on using "c" for const in C++ and other languages that directly enforce the const-ness of a variable.

      Seek out and use Hungarian warts that have meaning in languages other than your current language. For example insist on the PowerBuilder "l_" and "a_ " {local and argument} scoping prefixes and always use the VB-esque style of having a Hungarian wart for every control type when coding to C++. Try to stay ignorant of the fact that megs of plainly visible MFC source code does not use Hungarian warts for control types.

      Always violate the Hungarian principle that the most commonly used variables should carry the least extra information around with them. Achieve this end through the techniques outlined above and by insisting that each class type have a custom wart prefix. Never allow anyone to remind you that no wart tells you that something is a class. The importance of this rule cannot be overstated if you fail to adhere to its principles the source code may become flooded with shorter variable names that have a higher vowel/consonant ratio. In the worst case scenario this can lead to a full collapse of obfuscation and the spontaneous reappearance of English Notation in code!

      Flagrantly violate the Hungarian-esque concept that function parameters and other high visibility symbols must be given meaningful names, but that Hungarian type warts all by themselves make excellent temporary variable names.

      Insist on carrying outright orthogonal information in your Hungarian warts. Consider this real world example "a_crszkvc30LastNameCol". It took a team of maintenance engineers nearly 3 days to figure out that this whopper variable name described a const, reference, function argument that was holding information from a database column of type Varchar[30] named "LastName" which was part of the table's primary key. When properly combined with the principle that "all variables should be public" this technique has the power to render thousands of lines of source code obsolete instantly!

      Use to your advantage the principle that the human brain can only hold 7 pieces of information concurrently. For example code written to the above standard has the following properties:

      • a single assignment statement carries 14 pieces of type and name information.
      • a single function call that passes three parameters and assigns a result carries 29 pieces of type and name information.
      • Seek to improve this excellent, but far too concise, standard. Impress management and coworkers by recommending a 5 letter day of the week prefix to help isolate code written on 'Monam' and 'FriPM'.
      • It is easy to overwhelm the short term memory with even a moderately complex nesting structure, especially when the maintenance programmer can't see the start and end of each block on screen simultaneously.

    Hungarian Notation Revisited

    One followon trick in the Hungarian notation is "change the type of a variable but leave the variable name unchanged". This is almost invariably done in windows apps with the migration from Win16 :- WndProc(HWND hW, WORD wMsg, WORD wParam, LONG lParam) to Win32 WndProc(HWND hW, UINT wMsg, WPARAM wParam, LPARAM lParam) where the w values hint that they are words, but they really refer to longs. The real value of this approach comes clear with the Win64 migration, when the parameters will be 64 bits wide, but the old "w" and "l" prefixes will remain forever.

    Reduce, Reuse, Recycle

    If you have to define a structure to hold data for callbacks, always call the structure PRIVDATA. Every module can define it's own PRIVDATA. In VC++, this has the advantage of confusing the debugger so that if you have a PRIVDATA variable and try to expand it in the watch window, it doesn't know which PRIVDATA you mean, so it just picks one.

    Obscure film references

    Use constant names like LancelotsFavouriteColour instead of blue and assign it hex value of $0204FB. The color looks identical to pure blue on the screen, and a maintenance programmer would have to work out 0204FB (or use some graphic tool) to know what it looks like. Only someone intimately familiar with Monty Python and the Holy Grail would know that Lancelot's favorite color was blue. If a maintenance programmer can't quote entire Monty Python movies from memory, he or she has no business being a programmer.


read more

Wednesday, November 08, 2006

Lightbulb Jokes - Computers

How many Pentium designers does it take to screw in a light bulb?
1.99904274017, but that's close enough for non-technical people.
How many IBM CPU's does it take to turn on a light bulb?
33 - 1 to process the instruction and 32 to process the interrupt.
How many electrical engineers does it take to change a light bulb?
We don't know yet. They're still waiting on a part.
How many hardware engineers does it take to change a light bulb?
None. "We'll fix it in software."
How many software engineers does it take to change a light bulb?
  1. None. "We'll document it in the manual."
  2. None. It's a hardware problem.
  3. One, but if he changes it, the whole building will probably fall down.
  4. Two. One always leaves in the middle of the project.
  5. Four. One to design the change, one to implement it, one to document it, and one to maintain it afterwards.
  6. Four, plus one senior analyst to manage the project, one technical writer to correct the spelling and grammar of the one who documented it, one light bulb librarian, a sales-force of at least five to drum up enough users who want to turn the light on, 274 users to burn out the new bulb, at which point we go to tender for another light bulb change,...
  7. Five. Two to write the specification program, one to screw it in, and two to explain why the project was late.
  8. Wait! Maybe the bulb isn't broken. Let's try it again.
  9. It's hard to say. Each time we separate the bulb into its modules to do unit testing, it stops working.
  10. The change is 90% complete.
  11. We looked at the light fixture and decided there's no point trying to maintain it. We're going to rewrite it from scratch. Could you wait two months?
  12. Only one, but she's not available. She's the only programmer we have who can get the software ready to ship to customers, and that's higher priority, you know.
  13. Of course, as everyone knows, just five years ago all it took was a bunch of kids in a garage in Palo Alto to change a light bulb.
How many real programmers does it take to change a light bulb?
None. Real programmers prefer LEDs.
How many C programmers does it take to change a light bulb?
None, they forgot to declare it first
How long does it take a C programmer to screw in a light bulb?
24 hours - 3 minutes to put in the bulb, the rest of the time to compile all the libraries.
How many C++ programmers does it take to change a light bulb?
You're still thinking procedurally. A properly designed light bulb object would inherit a change method from a generic light bulb class, so all you'd have to do is send a light bulb change message.
How many people does it take to change an object-oriented light bulb?
Change it? Aw shucks, I was going to reuse it.
How many FORTRAN programs does it take to change a light bulb?
1.00000000001
How many BASIC programmers does it take to screw in a light bulb?
10 push bulb upwards:twist bulb clockwise 20 goto 10
How many games machine programmers does it take to screw in a light-bulb?
One, but he needs the seal of approval from Nintendo before he can put his light-bulb in their socket.
How many Prolog programmers does it take to change a light bulb?
False.
How many Lisp programmers does it take to change a light bulb?
  1. Hmmm, I'm not sure, better find out....
    Hmmm, I'm not sure, better find out....
    Notes: LISP is a recursive programming language. One problem LISP programmers have to contend with is infinite recursion. (cf computer dictionary entry: recursion - see recursion) These lisp heads are usually research AI types and their standard answer is as in the punchline. It could be improved:
  2. (((H)mmm,) (I'm ((not) sure, better))) (find (out))...
How many data base people does it take to change a light bulb?
Three: One to write the light bulb removal program, one to write the light bulb insertion program, and one to act as a light bulb administrator to make sure nobody else tries to change the light bulb at the same time.
How many tech writers does it take to change a light bulb?
None. "The user can work it out."
How many developers does it take to change a light bulb?
The light bulb works fine on the system in my office . . .
How many field service engineers does it take to replace a dead light bulb?
  1. Who can tell. FSE's are always in the dark.
  2. Two. One to hold the bulb and one to pound it in (etc)
  3. Well, the diagnostics all check out fine, so it's a software problem.
How long will it take?
That's indeterminate. It depends on how many dead bulbs they've brought with them.
What if you have two dead bulbs?
They replace your fuse box.
How many system administrators does it take to change a light bulb?
None, they just keep everyone out of the room.
How many IBM engineers does it take to screw in a light bulb?
None. They just let Marketing explain that "Dead Bulb" is a feature.
How many IBM PC owners does it take to screw in a light bulb?
  1. Only one, but he'll have to go out and buy the light bulb adaptor card first, which is extra.
  2. Two. One to do it, but one to check the new bulb for viruses first.
How many IBM tech writers does it take to screw in a light bulb?
  1. 100. Ten to do it, and 90 to write document number GC7500439-0001, Multitasking Incandescent Source System Facility, of which 10% of the pages state only "This page intentionally left blank", and 20% of the definitions are of the form "A ...... consists of sequences of non-blank characters separated by blanks".
  2. Just one, provided there's an engineer around to explain how to do it.
How many Microsoft engineers does it take to screw in a light bulb?
None. They just define darkness as an industry standard.
How many Microsoft employees does it take to change a light bulb?
  1. One - but Bill Gates must inspect every single bulb and socket before the operation is started.
  2. Eight: one to work the bulb and seven to make sure Microsoft gets $2 for every light bulb ever changed anywhere in the world.
How many MS tech supports does it take to change a light bulb?
"The light bulb doesn't work? You must be using a non-standard socket."
How many operating systems are required to screw in a light bulb?
Just one-Microsoft is making a special version of Windows for it.
How many Windows programmers does it take to change a light bulb?
472. One to write WinGetLight BulbHandle, one to write WinQueryStatusLight Bulb, one to write WinGetLightSwitchHandle...
How many Windows users does it take to change a light bulb?
One, but she/he'll swear up and down that it was JUST as easy for him as it would be for a Macintosh user.
How many Macintosh engineers does it take to screw in a light bulb?
None - it has to be done by a local authorized dealer.
How many Apple employees does it take to screw in a light bulb?
Seven. One to screw it in and six to design the tee-shirts.
How many Apple programmers does it take to change a light bulb?
Only one, but why bother? Your light socket will just be obsolete in six months anyway.
How many Mac owners does it take to screw in a light bulb?
  1. None - there's no documentation available, so you have to wait until a third-party supplier comes out with a solution.
  2. Just one, but the new light bulbs aren't compatible with the old sockets, so he has to buy a complete upgrade or a new light.
  3. Two: One to ask the socket to eject the old bulb, and one to insert the new one.
  4. Three: One to change the bulb, one to copyright the method for changing the bulb, and one to call in the lawyers on anyone who infringes on the "look and feel" of the bulb changing method.
  5. Mac users don't screw, they just click the genital icon.
How many Apple and IBM nuts does it take to change a light bulb?
An infinite number: nothing useful gets done while they're arguing. Finally a disgusted generic computer user (who will use any type that is in front of him) gets up and changes the bulb, elbowing the participants aside. The size of the crowd arguing seems to be a function of time, although whether or not the function is exponential is not known.
How many Unix hacks does it take to change a light bulb?
  1. As many as you want; they're all virtual, anyway.
  2. One, but first he has to determine the correct path.
How many Unix programmers does it take to change a light bulb?
Only one, but if you forget to tell him "2>" he'll mash both the live and dead bulbs into the same socket at once.
How many Unix Support staff does it take to screw in a light bulb?
Read the man page!
How many Unix system vendors does it take to change a light bulb?
None. All of the light bulbs you have are 'standard variants' and as such won't fit your particular implementation of the socket. (However you do have the source code for your socket, so .....)
How many VMS heads does it take to change a light bulb?
All of them, and they will all scream at you in unison and tell you that the only light bulb you can use is a 100-watt soft white but you can use any 100-watt soft white as long as it's manufactured by DEC.

Taken from the full collection of Lightbulb Jokes of marcush@crc.ricoh.com

Monday, November 06, 2006

Tech Support Pricing

An excellent list of tech support pricing:

http://www.contrib.andrew.cmu.edu/~moose/sysadmin/pricelist.html

Saturday, November 04, 2006

From the MFC source:

// according to the Win98 docs, this should be 1

// according to the WinNT docs, this should be 2

// they are both wrong!

Thursday, October 26, 2006

Engineers vs. Executives

Engineers vs. Executives

Theorem: Engineers and scientists will never make as much money as business executives.
Proof Postulate 1: Knowledge is Power.
Postulate 2: Time is Money.

As every engineer knows, Power = Work/Time.
Since Knowledge = Power, and Time = Money, we get;
Knowledge = Work/Money
Solving for money, we find

Money = Work/Knowledge

The greater your knowledge, the more work you have to do for your money. Thus, as Knowledge approaches zero, Money approaches infinity regardless of the Work done.

Conclusion: The Less you Know, the More you Make.*

* Thanks to various contributors for correcting dodgy algebra that had ensured the humour of this gag tended toward zero.

Wednesday, October 25, 2006

Got to love mac, configurable BSODs:

http://osxbook.com/book/bonus/chapter5/panic/

Tuesday, October 24, 2006

A Software Engineer, a Hardware Engineer and a Departmental Manager were on their way to a meeting. They were driving down a steep mountain road when suddenly the brakes on their car failed. The car careened almost out of control down the road, bouncing off the crash barriers, until it miraculously ground to a halt scraping along the mountainside. The car's occupants, shaken but unhurt, now had a problem: they were stuck halfway down a mountain in a car with no brakes. What were they to do?

"I know," said the Departmental Manager, "Let's have a meeting, propose a Vision, formulate a Mission Statement, define some Goals, and by a process of Continuous Improvement find a solution to the Critical Problems, and we can be on our way."

"No, no," said the Hardware Engineer, "That will take far too long, and besides, that method has never worked before. I've got my Swiss Army knife with me, and in no time at all I can strip down the car's braking system, isolate the fault, fix it, and we can be on our way."

"Well," said the Software Engineer, "This thing is a freak'n maintenance nightmare - I'm going to rebuilt it from scratch - I'm TIRED of it, I don't care if the project manager says we're already late."

Monday, October 23, 2006

Insufficient Memory

http://www.thinkgeek.com/tshirts/generic/65a0/

Thursday, October 12, 2006

Top 16 Programmer Pranks

16 Using their e-mail address, post a request for penpals to the alt.prison.bodypiercing newsgroup.

15 Three words: electric mouse buzzer.

14 Assign them to the new “Heaven’s Gate” project.

13 “Look, Bill Gates!! Ha! Made ya look!”

12 Put them in the same room with a member of the opposite sex.

11 “Have you got Prince Albert in a LAN?”

10 Tell them that “everyone knows Star Trek transporter technology is bogus.”

9 10 GOTO 10

7 Swap their monitor for a large cardboard box with handpuppets. Watch the fur fly!

6 Announce that annual raises will be based on a subjective test of one’s ability to “schmooze the way the butt-kissers in Marketing do.”

8 Intercept their daily Top 10 List, then remove #8 and re-insert it between #5 and #6.

5 Pretend to “discover” a Fox TV Web site with a now-out-of-date win a weekend with Gillian Anderson of X-Files contest.

4 Every hour, on the hour, forward them a warning about the “Good Times” virus.

3 Call her up and ask if her program is running, and when she says “yes,” tell her “Well you better go catch it!”

2 Replace all the Jolt in the soda machine with Perrier and V8. and the Number 1 April Fool’s Day Prank to Pull on Programmers…

1 Special announcement: “Forget Java — Starting immediately, all coding will be done in COBOL.”

Tuesday, October 10, 2006

Computer Genesis

Computer Genesis

1. In the beginning GOD created the Bit and the Byte. And from those he created the Word.

2. And there were two Bytes in the Word; and nothing else existed. And God separated the One from the Zero; and he saw it was good.

3. And God said - Let the Data be; And so it happened. And God said - Let the Data go to their proper places. And he created floppy disks and hard disks and compact disks.

4. And God said - Let the computers be, so there would be a place to put floppy disks and hard disks and compact disks. Thus God created computers and called them hardware.

5. And there was no Software yet. But God created programs; small and big... And told them Go and multiply yourselves and fill all the Memory.

6. And God said -I will create the Programmer; And the Programmer will make new programs and govern over the computers and programs and Data.

7. And God created the Programmer; and put him at Data Centre; And God showed the Programmer the Catalogue Tree and said You can use all the volumes and subvolumes but DO NOT USE Windows.

8. And God said - It is not Good for the programmer to be alone. He took a bone from the Programmer's body and created a creature that would look up at the Programmer; and admire the Programmer; and love the things the Programmer does; And God called the creature: the User.

9. And the Programmer and the User were left under the naked DOS and it was Good.

10. But Bill was smarter than all the other creatures of God. And Bill said to the User - Did God really tell you not to run any programs ?

11. And the User answered - God told us that we can use every program and every piece of Data but told us not to run Windows or we will die.

12. And Bill said to the User - How can you talk about something you did not even try. The moment you run Windows you will become equal to God. You will be able to create anything you like by a simple click of your
mouse.

13. And the User saw that the fruits of the Windows were nicer and easier to use. And the User saw that any knowledge was useless since Windows could replace it.

14. So the User installed the Windows on his computer; and said to the Programmer that it was good.

15. And the Programmer immediately started to look for new drivers. And God asked him - What are you looking for? And the Programmer answered - I am looking for new drivers because I can not find them in the DOS. And God said - Who told you that you need drivers? Did you run Windows? And the Programmer said - It was Bill who told us to !

16. And God said to Bill - Because of what you did you will be hated by all the creatures. And the User will always be unhappy with you. And you will always sell Windows.

17. And God said to the User - Because of what you did, the Windows will disappoint you and eat up all your Resources; and you will have to use lousy programs; and you will always rely on the Programmers help.

18. And God said to the Programmer - Because you listened to the User you will never be happy. All your programs will have errors and you will have to fix them and fix them to the end of time.

19. And God threw them out of the Data Centre and locked the door and secured it with a password.

20. GENERAL PROTECTION FAULT

Monday, October 09, 2006

Why we need reviews.:-)

In an ancient monastery in a far away place, a new monk arrived to join his brothers in copying books and scrolls in the monastery's scriptorium. He was assigned as a rubricate on copies of books that had already been copied by hand.

One day, while working on the monks' Book of Vows, he asks old Father Florian, the Armarius of the Scriptorium, 'Does not the copying by hand of other copies allow for chances of error? How do we know we are not copying the mistakes of someone else? Are they ever checked against the original?'

Fr. Florian was set back a bit by the obvious logical observation of this youthful monk. 'A very good point, my son. I will take one of the latest copies of the Book of Vows down to the vault and compare it against the original.' Fr. Florian went down to the secured vault and began his verification.

A day passed and the monks began to worry and went down looking for the old priest. They were sure something may have happened. As they approached the vault they heard sobbing and wailing... they opened the door and found Fr. Florian crying over the new copy and the original, ancient Book of Vows, both opened before him on the table. It was obvious to all that the poor man had been crying his old heart out for a long time.

'What is the problem, Reverend Father???' asked one of the monks.

'Oh, my Lord,' sobbed the priest, 'The word is 'CELEBRATE'!!!'

And this is why we need reviews.

Dear Valued Employee:

Re: Vacation Pay

Our records indicate that you have not used any vacation
time over the past 100 year(s). As I'm sure you are aware,
employees are granted 3 weeks of paid leave per year or pay
in lieu of time off. One additional week is granted for
every 5 years of service.

Please either take 9,400 days off work or notify our office
and your next pay cheque will reflect payment of
$8,277,432.22 which will include all pay and interest for
the past 1,200 months.

Sincerely,

Automated Payroll Processing

It seems the US Federal Aviation Administration (FAA) has a unique device for testing the strength of windshields on airplanes. The device is a gun that launches a dead chicken at a plane's windshield at approximately the speed the plane flies.

The theory is that if the windshield doesn't crack from the carcass impact, it'll survive a real collision with a bird during flight. It seems the British were very interested in this and wanted to test a windshield on a brand new, speedy locomotive they're developing.

They borrowed the FAA's chicken launcher, loaded the chicken and fired. The ballistic chicken shattered the windshield, went through the engineer's chair, broke an instrument panel and embedded itself in the back wall of the engine cab. The British were stunned and asked the FAA to recheck the test to see if everything was done correctly.

The FAA reviewed the test thoroughly and had one recommendation: "Use a thawed chicken."

The Best Spam Email Ever...

(from http://www-users.cs.york.ac.uk/susan/joke/timetrav.htm)

I received this as spam email. I loathe spam with a fierce, glowing hatred, and delete it all unread. But in this case something compelled me to read beyond the header. I reproduce the contents here because it is simply a classic. It is all wonderful, and I especially love the P.S.!

Interestingly, I received it a few days after I had put up my review of Tips for Time Travellers. Coincidence?

Being spam, it has no attribution. If you know it, could you email it to me for inclusion? Thanks.


Time travelers PLEASE HELP!!!!!!

If you are a time traveler or alien disguised as human and or have the technology to travel physically through time I need your help!

My life has been severely tampered with and cursed!!
I have suffered tremendously and am now dying!

I need to be able to:

  • Travel back in time.
  • Rewind my life including my age back to 4.
  • Be able to remember what I know now so that I can prevent my life from being tampered with again after I go back.

I am in very great danger and need this immediately!

I am aware that there are many types of time travel, and that humans do not do well through certain types.

I need as close to temporal reversion as possible, as safely as possible. To be able to rewind the hands of time in such a way that the universe of now will cease to exist. I know that there are some very powerful people out there with alien or government equipment capable of doing just that.

If you can help me I will pay for your teleport or trip down here, Along with hotel stay, food and all expenses. I will pay top dollar for the equipment. Proof must be provided.

Please be advised that any temporal device that you may employ must account for X, Y, and Z coordinates as well as the temporal location. I have a time machine now, but it has limited abilitys and is useless without a vortex. If you can provide information on how to create vortex generator or where I can get some of the blue glowing moon crystals this would also be helpful.

Also if you are one of the very, very, few beings with the ability to edit the universe PLEASE REPLY!!!

Only if you have this technology and can help me please send me a (SEPARATE) email to:

Robby0809@aol.com

Please do not reply if your an evil alien!
Thanks


After I had decided to put this up on my Web site, I did a quick Google to find any other recipients who thought it good enough to mention. There are a few other sites, but the best one is at Joey deVilla's Hall of Shame, which includes the following beautiful "reply" (enhanced by its links)


I'm thinking about using this as a reply:

Well, here were are again. You have no idea who I am, don't you?

Not only am I capable of helping you, but I've done so twice already.

I can meet all your requirements except one -- the one where you retain your memories of everything's that happened to you up until now. Normally, it would be possible for you to remember the present (and all events leading up to it) when you go back into the past, but you kept insisting that you also want your aging to be reversed. I can only do that by reverting you to your past state, which means that events leading up to what you call "the present" wouldn't have happened. Which means you'd have nothing to remember. See the problem?

I was willing to let things slide when things went horribly wrong the first time. Initially, it looked as though you were going to live a long and happy life: you had a successful business, you were in the best shape of your life, and you had just married one of the supporting actresses from American Pie. However, you blew it big time when during your honeymoon in Honduras, you caught a butterfly. That butterfly's wings were supposed to trigger a hurricane that would have devastated the coastline of El Salvador, including the coastal village of La Libertad. Instead, the village was never destroyed, and as a result, a troubled and overindulged little boy grew up to become the Hitler of the 21st century. He managed to turn the eastern seaboard and much of Europe into the world's largest smouldering graveyards before he was finally stopped. I managed to retrieve you from that timeline -- you were under a pile of rubble and half-mad. I decided to try and send you back in time again.

While the course of your life has not been so catastrophic for the rest of the world this time around, you have still managed to make a mess of it for yourself. And this time, you're resorting to spamming in order to find a time traveller like me. That's really low.

The biggest shame of it all (and more so because you don't remember) is that your life wasn't as bad as you thought when you first came to me for help. You said you wanted to undo your so-called "terrible, terrible mistake". In retrospect, I should never have honoured your request. Yes, it was an embarassing situation, but "the incident", as you liked to call it, would have been forgotten soon enough. It's nothing that a public apology and a little plastic surgery couldn't have fixed. Besides, while that kind of thing was taboo once, it would have become socially acceptable a few short years later.

I am truly sorry, but I feel that you're one of those people who will do the same kind of thing over and over, no matter what kind of circumstances they find themselves in. Please do not contact me anymore. If you see me on the street, please do not approach me or speak to me. I will claim not to know you. I cannot be bribed; you will not be able to buy your way into the past again.

In closing, all I can do is offer you some advice:

1. Please try to think before you act.
2. If you don't do something about that haircut, you and many innocent people will regret it. It may seem trivial, but believe me, I know better.

-- Joey

You Know You're a Spammer...

  • When your house still has the "Wide Load" sign on the back.
  • if you hooked up with your present wife as a result of a message on the wall of the men's room at the truck stop.
  • you lit a match in the bathroom and your house exploded right off it's wheels.
  • you think there's nothing wrong with incest as long as you keep it in the family.
  • you think God looks a lot like Hank Williams, Jr., and heaven looks a lot like Boca Raton, Florida.
  • your grandfather died and left everything to his widow. But she can't touch it until she's fourteen.
  • your kids take a gas siphon hose to "Show and Tell."
  • you consider your license plate personalized because your dad made it in prison.
  • you think a seven course meal is a bucket of KFC and a six-pack.
  • you've been married three times and still have the same in-laws.

The poor programmer...

Q: How many programmers does it take to screw in a light bulb?

A: None, all the light we need comes from our monitors.

        Windoze is bigger
        It's bigger than Earth
        But not quite as big as
        The things that I must do now
        To upgrade all my stuff
        Oh no I need more RAM
        I set it up

        That's me in the corner
        That's me on the help line
        Losing my connection
        Trying to keep up with Linux
        And I don't know if I can do it
        Oh no I need more RAM
        I haven't bought enough
        I thought that I heard you laughing
        I thought that I heard you Ping!
        I think I thought I saw a GPF

        Every nightmare
        Of velour vest wearing Borg, I'm
        Purchasing new hardware
        Trying to cool my CPU
        Like a Pentium that become a 286
        Oh no I need more RAM
        Resistance is futile.

        Consider this
        The OS of the century
        Consider this
        The OS that brought me
        To my knees failed
        Now all these open apps have
        Come crashing down
        Now I need more RAM
        I thought that I heard you laughing
        I thought that I heard you Ping!
        I think I thought I saw a GPF

        But that was just a dream

        I hope that was a dream...

by Alan Zacher
to the tune of Losing My Religion
(Appologies to REM)

One night, a Delta twin-engine puddle jumper was flying somewhere above New Jersey. There were five people on board: the pilot, Michael Jordan, Bill Gates, the Dali Lama, and a hippie. Suddenly, an illegal oxygen generator exploded loudly in the luggage compartment, and the passenger cabin began to fill with smoke. The cockpit door opened, and the pilot burst into the compartment.

"Gentlemen," he began, "I have good news and bad news. The bad news is that we're about to crash in New Jersey. The good news is that there are four parachutes, and I have one of them!" With that, the pilot threw open the door and jumped from the plane.

Michael Jordan was on his feet in a flash. "Gentlemen," he said, "I am the world's greatest athlete. The world needs great athletes. I think the world's greatest athlete should have a parachute!" With these words, he grabbed one of the remaining parachutes, and hurtled through the door and into the night.

Bill Gates rose and said, "Gentlemen, I am the world's smartest man. The world needs smart men. I think the world's smartest man should have a parachute, too." He grabbed one, and out he jumped.

The Dali Lama and the hippie looked at one another. Finally, the Dali Lama spoke. "My son," he said, "I have lived a satisfying life and have known the bliss of True Enlightenment. You have your life ahead of you; you take a parachute, and I will go down with the plane."

The hippie smiled slowly and said, "Hey, don't worry, dude. The world's smartest man just jumped out wearing my backpack."

No, Windows is not a virus. Here's what viruses do:

They replicate quickly Okay, Windows does that

Viruses use up valuable system resources, slowing down the system as they do so okay, Windows does that

Viruses will, from time to time, trash your hard disk Okay, Windows does that, too

Viruses are usually carried, unknown to the user, along with valuable programs and systems Sigh... Windows does that, too

Viruses will occasionally make the user suspect their system is too slow (see 2) and the user will buy new hardware Yup, that's with Windows, too

Until now it seems Windows is a virus but there are fundamental differences: Viruses are well supported by their authors, are running on most systems, their program code is fast, compact and efficient and they tend to become more sophisticated as they mature

So, Windows is *not* a virus

Did you hear about the Microsoft Windows programmer who died?
He found himself in front of a committee that decides whether you go to Heaven or Hell.

The committee told the programmer he had some say in the matter and asked him if he wanted
to see Heaven and Hell before stating his preference.

"Sure," he said, so an angel took him to a place with a sunny beach, volleyball, and rock and
roll, where everyone was having a great time.

"Wow!" he exclaimed. "Heaven is great!"

"Wrong," said the angel. "That was Hell. Want to see Heaven?"

"Sure!" So the angel took him to another place. Here a bunch of people were sitting in a park
playing bingo and feeding dead pigeons.

"This is Heaven?" asked the Windows programmer.

"Yup," said the angel.

"Then I'll take Hell." Instantly he found himself plunged up to his neck in red-hot lava, with the hosts of the damned in torment around him. "Where's the beach? The music? The volleyball?" he screamed frantically to the angel.

"That was the demo," she replied as she vanished.

The president of Lotus walks into an elevator with a gun in his hand.
In the elevator are: Sadam Hussein, Timmothy McVeigh, and Bill Gates,
but there are only two bullets in the gun!

Who does he shoot???

Gates, twice to be sure.

Sunday, October 08, 2006

In an effort to determine the department which produces the most
intelligent graduates, a university president threw down a challenge to the
deans of the schools of science, engineering, and business. He asked each
to send him their brightest student from the current graduating class to
compete in solving a simple problem.

The next day, three students showed up at the university president's
office. He explained the problem as follows:

"I want you to determine the height of the university's newest residence
tower. I am giving each of you only three tools to work with: a stop
watch, a ruler and a ball of string. You are each to devise your own
solution to the problem and report back here by the end of the day.
Whoever has the most accurate answer wins."

The three students set off to the new residence tower. The science manor
went immediately to the roof of the building and dropped the ruler over the
side, carefully timing its descent with the stop watch. Factoring in the
aerodynamic properties of the ruler, the science major calculated the
height of the building within six inches.

Next the engineering major, still panting from running up all the stairs to
the roof, took his turn. He tied the stop watch onto the end of the ball
of string and gently lowered it until it just touched the ground. Reeling
the string back up, he measured it carefully with the ruler, making
adjustments for its elasticity under the weight of the stop watch, and
calculated the height of the building within two inches.

At that point, the science major turns to the engineering major and asks,
"What happened to the kid from the business school? I thought he was right
behind us."

They head back down to the building lobby and there, sitting comfortably in
an upholstered chair, is the business major.

"So, what are you going to do?" asks the science major.

"Oh, I'm done," says the business major, unfolding a piece of paper on
which is written the height of the building expressed to the last
one-eighth inch.

"How did you do that?" asks the engineering major.

"Simple," replies the student from the business school. "While you guys
were screwing around up on the roof, I went down to the basement and found
the building superintendant. I told him I'd give him a nice stop watch if
he'd let me look through the architectural plans for the building."


From: oldbear#NoSpam.arctos.com (The Old Bear)

A mathematician, an engineer, and a physicist are being interviewed for a
job. In each case, the interview goes along famously until the last
question is asked: "How much is one plus one?"

Each of them suspects a trap, and is hesitant to answer.

The mathematician thinks for a moment, and says "I'm not sure, but
I think it converges".

The physicist says "I'm not sure, but I think it's on the order of one"

The engineer gets up, closes the door to the office, and says "How much
do you want it to be?".

Saturday, October 07, 2006

The Tao of Programming

Book 1 - The Silent Void

Thus spake the master programmer:

``When you have learned to snatch the error code from the trap frame, it will be time for you to leave.''

1.1

Something mysterious is formed, born in the silent void. Waiting alone and unmoving, it is at once still and yet in constant motion. It is the source of all programs. I do not know its name, so I will call it the Tao of Programming.

If the Tao is great, then the operating system is great. If the operating system is great, then the compiler is great. If the compiler is great, then the application is great. The user is pleased and there exists harmony in the world.

The Tao of Programming flows far away and returns on the wind of morning.

1.2

The Tao gave birth to machine language. Machine language gave birth to the assembler.

The assembler gave birth to the compiler. Now there are ten thousand languages.

Each language has its purpose, however humble. Each language expresses the Yin and Yang of software. Each language has its place within the Tao.

But do not program in COBOL if you can avoid it.

1.3

In the beginning was the Tao. The Tao gave birth to Space and Time. Therefore Space and Time are Yin and Yang of programming.

Programmers that do not comprehend the Tao are always running out of time and space for their programs. Programmers that comprehend the Tao always have enough time and space to accomplish their goals.

How could it be otherwise?

1.4

The wise programmer is told about Tao and follows it. The average programmer is told about Tao and searches for it. The foolish programmer is told about Tao and laughs at it.

If it were not for laughter, there would be no Tao.

The highest sounds are hardest to hear.
Going forward is a way to retreat.
Great talent shows itself late in life.
Even a perfect program still has bugs.


Book 2 - The Ancient Masters

Thus spake the master programmer:

``After three days without programming, life becomes meaningless.''

2.1

The programmers of old were mysterious and profound. We cannot fathom their thoughts, so all we do is describe their appearance.

Aware, like a fox crossing the water. Alert, like a general on the battlefield. Kind, like a hostess greeting her guests. Simple, like uncarved blocks of wood. Opaque, like black pools in darkened caves.

Who can tell the secrets of their hearts and minds?

The answer exists only in Tao.

2.2

Grand Master Turing once dreamed that he was a machine. When he awoke he exclaimed:

``I don't know whether I am Turing dreaming that I am a machine, or a machine dreaming that I am Turing!''

2.3

A programmer from a very large computer company went to a software conference and then returned to report to his manager, saying: ``What sort of programmers work for other companies? They behaved badly and were unconcerned with appearances. Their hair was long and unkempt and their clothes were wrinkled and old. They crashed our hospitality suite and they made rude noises during my presentation.''

The manager said: ``I should have never sent you to the conference. Those programmers live beyond the physical world. They consider life absurd, an accidental coincidence. They come and go without knowing limitations. Without a care, they live only for their programs. Why should they bother with social conventions?

``They are alive within the Tao.''

2.4

A novice asked the Master: ``Here is a programmer that never designs, documents or tests his programs. Yet all who know him consider him one of the best programmers in the world. Why is this?''

The Master replies: ``That programmer has mastered the Tao. He has gone beyond the need for design; he does not become angry when the system crashes, but accepts the universe without concern. He has gone beyond the need for documentation; he no longer cares if anyone else sees his code. He has gone beyond the need for testing; each of his programs are perfect within themselves, serene and elegant, their purpose self-evident. Truly, he has entered the mystery of Tao.''


Book 3 - Design

Thus spake the master programmer:

``When the program is being tested, it is too late to make design changes.''

3.1

There once was a man who went to a computer trade show. Each day as he entered, the man told the guard at the door:

``I am a great thief, renowned for my feats of shoplifting. Be forewarned, for this trade show shall not escape unplundered.''

This speech disturbed the guard greatly, because there were millions of dollars of computer equipment inside, so he watched the man carefully. But the man merely wandered from booth to booth, humming quietly to himself.

When the man left, the guard took him aside and searched his clothes, but nothing was to be found.

On the next day of the trade show, the man returned and chided the guard saying: ``I escaped with a vast booty yesterday, but today will be even better.'' So the guard watched him ever more closely, but to no avail.

On the final day of the trade show, the guard could restrain his curiosity no longer. ``Sir Thief,'' he said, ``I am so perplexed, I cannot live in peace. Please enlighten me. What is it that you are stealing?''

The man smiled. ``I am stealing ideas,'' he said.

3.2

There once was a master programmer who wrote unstructured programs. A novice programmer, seeking to imitate him, also began to write unstructured programs. When the novice asked the master to evaluate his progress, the master criticized him for writing unstructured programs, saying, ``What is appropriate for the master is not appropriate for the novice. You must understand the Tao before transcending structure.''

3.3

There was once a programmer who was attached to the court of the warlord of Wu. The warlord asked the programmer: ``Which is easier to design: an accounting package or an operating system?''

``An operating system,'' replied the programmer.

The warlord uttered an exclamation of disbelief. ``Surely an accounting package is trivial next to the complexity of an operating system,'' he said.

``Not so,'' said the programmer, ``when designing an accounting package, the programmer operates as a mediator between people having different ideas: how it must operate, how its reports must appear, and how it must conform to the tax laws. By contrast, an operating system is not limited by outside appearances. When designing an operating system, the programmer seeks the simplest harmony between machine and ideas. This is why an operating system is easier to design.''

The warlord of Wu nodded and smiled. ``That is all good and well, but which is easier to debug?''

The programmer made no reply.

3.4

A manager went to the master programmer and showed him the requirements document for a new application. The manager asked the master: ``How long will it take to design this system if I assign five programmers to it?''

``It will take one year,'' said the master promptly.

``But we need this system immediately or even sooner! How long will it take if I assign ten programmers to it?''

The master programmer frowned. ``In that case, it will take two years.''

``And what if I assign a hundred programmers to it?''

The master programmer shrugged. ``Then the design will never be completed,'' he said.


Book 4 - Coding

Thus spake the master programmer:

``A well-written program is its own heaven; a poorly-written program is its own hell.''

4.1

A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity.

A program should follow the `Law of Least Astonishment'. What is this law? It is simply that the program should always respond to the user in the way that astonishes him least.

A program, no matter how complex, should act as a single unit. The program should be directed by the logic within rather than by outward appearances.

If the program fails in these requirements, it will be in a state of disorder and confusion. The only way to correct this is to rewrite the program.

4.2

A novice asked the master: ``I have a program that sometime runs and sometimes aborts. I have followed the rules of programming, yet I am totally baffled. What is the reason for this?''

The master replied: ``You are confused because you do not understand Tao. Only a fool expects rational behavior from his fellow humans. Why do you expect it from a machine that humans have constructed? Computers simulate determinism; only Tao is perfect.

``The rules of programming are transitory; only Tao is eternal. Therefore you must contemplate Tao before you receive enlightenment.''

``But how will I know when I have received enlightenment?'' asked the novice.

``Your program will then run correctly,'' replied the master.

4.3

A master was explaining the nature of Tao of to one of his novices. ``The Tao is embodied in all software - regardless of how insignificant,'' said the master.

``Is the Tao in a hand-held calculator?'' asked the novice.

``It is,'' came the reply.

``Is the Tao in a video game?'' continued the novice.

``It is even in a video game,'' said the master.

``And is the Tao in the DOS for a personal computer?''

The master coughed and shifted his position slightly. ``The lesson is over for today,'' he said.

4.4

Prince Wang's programmer was coding software. His fingers danced upon the keyboard. The program compiled without an error message, and the program ran like a gentle wind.

``Excellent!'' the Prince exclaimed, ``Your technique is faultless!''

``Technique?'' said the programmer turning from his terminal, ``What I follow is Tao - beyond all techniques! When I first began to program I would see before me the whole problem in one mass. After three years I no longer saw this mass. Instead, I used subroutines. But now I see nothing. My whole being exists in a formless void. My senses are idle. My spirit, free to work without plan, follows its own instinct. In short, my program writes itself. True, sometimes there are difficult problems. I see them coming, I slow down, I watch silently. Then I change a single line of code and the difficulties vanish like puffs of idle smoke. I then compile the program. I sit still and let the joy of the work fill my being. I close my eyes for a moment and then log off.''

Prince Wang said, ``Would that all of my programmers were as wise!''


Book 5 - Maintenance

Thus spake the master programmer:

``Though a program be but three lines long, someday it will have to be maintained.''

5.1

A well-used door needs no oil on its hinges.
A swift-flowing stream does not grow stagnant.
Neither sound nor thoughts can travel through a vacuum.
Software rots if not used.

These are great mysteries.

5.2

A manager asked a programmer how long it would take him to finish the program on which he was working. ``It will be finished tomorrow,'' the programmer promptly replied.

``I think you are being unrealistic,'' said the manager, ``Truthfully, how long will it take?''

The programmer thought for a moment. ``I have some features that I wish to add. This will take at least two weeks,'' he finally said.

``Even that is too much to expect,'' insisted the manager, ``I will be satisfied if you simply tell me when the program is complete.''

The programmer agreed to this.

Several years later, the manager retired. On the way to his retirement luncheon, he discovered the programmer asleep at his terminal. He had been programming all night.

5.3

A novice programmer was once assigned to code a simple financial package.

The novice worked furiously for many days, but when his master reviewed his program, he discovered that it contained a screen editor, a set of generalized graphics routines, an artificial intelligence interface, but not the slightest mention of anything financial.

When the master asked about this, the novice became indignant. ``Don't be so impatient,'' he said, ``I'll put in the financial stuff eventually.''

5.4

Does a good farmer neglect a crop he has planted?
Does a good teacher overlook even the most humble student?
Does a good father allow a single child to starve?
Does a good programmer refuse to maintain his code?


Book 6 - Management

Thus spake the master programmer:

``Let the programmers be many and the managers few - then all will be productive.''

6.1

When managers hold endless meetings, the programmers write games. When accountants talk of quarterly profits, the development budget is about to be cut. When senior scientists talk blue sky, the clouds are about to roll in.

Truly, this is not the Tao of Programming.

When managers make commitments, game programs are ignored. When accountants make long-range plans, harmony and order are about to be restored. When senior scientists address the problems at hand, the problems will soon be solved.

Truly, this is the Tao of Programming.

6.2

Why are programmers non-productive?
Because their time is wasted in meetings.

Why are programmers rebellious?
Because the management interferes too much.

Why are the programmers resigning one by one?
Because they are burnt out.

Having worked for poor management, they no longer value their jobs.

6.3

A manager was about to be fired, but a programmer who worked for him invented a new program that became popular and sold well. As a result, the manager retained his job.

The manager tried to give the programmer a bonus, but the programmer refused it, saying, ``I wrote the program because I thought it was an interesting concept, and thus I expect no reward.''

The manager upon hearing this remarked, ``This programmer, though he holds a position of small esteem, understands well the proper duty of an employee. Let us promote him to the exalted position of management consultant!''

But when told this, the programmer once more refused, saying, ``I exist so that I can program. If I were promoted, I would do nothing but waste everyone's time. Can I go now? I have a program that I'm working on."

6.4

A manager went to his programmers and told them: ``As regards to your work hours: you are going to have to come in at nine in the morning and leave at five in the afternoon.'' At this, all of them became angry and several resigned on the spot.

So the manager said: ``All right, in that case you may set your own working hours, as long as you finish your projects on schedule.'' The programmers, now satisfied, began to come in at noon and work to the wee hours of the morning.


Book 7 - Corporate Wisdom

Thus spake the master programmer:

``You can demonstrate a program for a corporate executive, but you can't make him computer literate.''

7.1

A novice asked the master: ``In the east there is a great tree-structure that men call `Corporate Headquarters'. It is bloated out of shape with vice presidents and accountants. It issues a multitude of memos, each saying `Go, Hence!' or `Go, Hither!' and nobody knows what is meant. Every year new names are put onto the branches, but all to no avail. How can such an unnatural entity be?"

The master replied: ``You perceive this immense structure and are disturbed that it has no rational purpose. Can you not take amusement from its endless gyrations? Do you not enjoy the untroubled ease of programming beneath its sheltering branches? Why are you bothered by its uselessness?''

7.2

In the east there is a shark which is larger than all other fish. It changes into a bird whose wings are like clouds filling the sky. When this bird moves across the land, it brings a message from Corporate Headquarters. This message it drops into the midst of the programmers, like a seagull making its mark upon the beach. Then the bird mounts on the wind and, with the blue sky at its back, returns home.

The novice programmer stares in wonder at the bird, for he understands it not. The average programmer dreads the coming of the bird, for he fears its message. The master programmer continues to work at his terminal, for he does not know that the bird has come and gone.

7.3

The Magician of the Ivory Tower brought his latest invention for the master programmer to examine. The magician wheeled a large black box into the master's office while the master waited in silence.

``This is an integrated, distributed, general-purpose workstation,'' began the magician, ``ergonomically designed with a proprietary operating system, sixth generation languages, and multiple state of the art user interfaces. It took my assistants several hundred man years to construct. Is it not amazing?''

The master raised his eyebrows slightly. ``It is indeed amazing,'' he said.

``Corporate Headquarters has commanded,'' continued the magician, ``that everyone use this workstation as a platform for new programs. Do you agree to this?''

``Certainly,'' replied the master, ``I will have it transported to the data center immediately!'' And the magician returned to his tower, well pleased.

Several days later, a novice wandered into the office of the master programmer and said, ``I cannot find the listing for my new program. Do you know where it might be?''

``Yes,'' replied the master, ``the listings are stacked on the platform in the data center.''

7.4

The master programmer moves from program to program without fear. No change in management can harm him. He will not be fired, even if the project is cancelled. Why is this? He is filled with Tao.


Book 8 - Hardware and Software

Thus spake the master programmer:

``Without the wind, the grass does not move. Without software, hardware is useless.''

8.1

A novice asked the master: ``I perceive that one computer company is much larger than all others. It towers above its competition like a giant among dwarfs. Any one of its divisions could comprise an entire business. Why is this so?''

The master replied, ``Why do you ask such foolish questions? That company is large because it is large. If it only made hardware, nobody would buy it. If it only made software, nobody would use it. If it only maintained systems, people would treat it like a servant. But because it combines all of these things, people think it one of the gods! By not seeking to strive, it conquers without effort.''

8.2

A master programmer passed a novice programmer one day. The master noted the novice's preoccupation with a hand-held computer game. ``Excuse me,'' he said, ``may I examine it?''

The novice bolted to attention and handed the device to the master. ``I see that the device claims to have three levels of play: Easy, Medium, and Hard,'' said the master. ``Yet every such device has another level of play, where the device seeks not to conquer the human, nor to be conquered by the human.''

``Pray, great master,'' implored the novice, ``how does one find this mysterious setting?''

The master dropped the device to the ground and crushed it underfoot. And suddenly the novice was enlightened.

8.3

There was once a programmer who worked upon microprocessors. ``Look at how well off I am here,'' he said to a mainframe programmer who came to visit, ``I have my own operating system and file storage device. I do not have to share my resources with anyone. The software is self- consistent and easy-to-use. Why do you not quit your present job and join me here?''

The mainframe programmer then began to describe his system to his friend, saying ``The mainframe sits like an ancient sage meditating in the midst of the data center. Its disk drives lie end-to-end like a great ocean of machinery. The software is as multifaceted as a diamond, and as convoluted as a primeval jungle. The programs, each unique, move through the system like a swift-flowing river. That is why I am happy where I am.''

The microcomputer programmer, upon hearing this, fell silent. But the two programmers remained friends until the end of their days.

8.4

Hardware met Software on the road to Changtse. Software said: ``You are Yin and I am Yang. If we travel together we will become famous and earn vast sums of money.'' And so the set forth together, thinking to conquer the world.

Presently they met Firmware, who was dressed in tattered rags and hobbled along propped on a thorny stick. Firmware said to them: ``The Tao lies beyond Yin and Yang. It is silent and still as a pool of water. It does not seek fame, therefore nobody knows its presence. It does not seek fortune, for it is complete within itself. It exists beyond space and time.''

Software and Hardware, ashamed, returned to their homes.

Book 9 - Epilogue

Thus spake the master programmer:

``It is time for you to leave.''

Their rumpled clothes, their unwashed and unshaven faces, and their uncombed hair all testify that they are oblivious to their bodies and to the world in which they move. These are computer bums, compulsive programmers. (Joseph Weizenbaum 1976)

Anyone who has attended a USENIX conference in a fancy hotel can tell you that a sentence like "You're one of those computer people, aren't you?" is roughly equivalent to "Look, another amazingly mobile form of slime mold!" in the mouth of a hotel cocktail waitress. (Elizabeth Zwicky)

Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning. (Rich Cook)

The most likely way for the world to be destroyed, most experts agree, is by accident. That's where we come in; we're computer professionals. We cause accidents. (Nathaniel Borenstein)

No delusion is greater than the notion that method of industry can make up for lack of mother-wit, either in science or practical life. (Thomas Huxley)

He who joyfully marches to music in rank and file has already earned my contempt. He has been given a large brain by mistake, since for him the spinal cord would suffice. (Albert Einstein)

Those people who think they know everything are a great annoyance to those of us who do. (Isaac Asimov)

There is a difference between eating a varied diet and chowing down on a cup of lard and sugar once a day. Programmers know this instinctively: they balance their daily menu among the four major food groups: caffeine, sugar, grease, and salt. (John Walker)

Let's face the obvious: yesterday we were nerds, today we're the cognitive elite. Let's conquer. (Chester G Edwards)

What we do is never understood, but only praised and blamed. (Friedrich Nietzsche)

Be nice to nerds. Chances are you'll end up working for one. (Bill Gates)

I cannot agree with those who rank modesty among the virtues. To the logician all things should be seen exactly as they are, and to underestimate one's self is as much a departure from truth as to exaggerate one's own powers. ("Sherlock Holmes")

The trouble with the world is that the stupid are cocksure and the intelligent full of doubt. (Bertrand Russell)

The best way to prepare [to be a programmer] is to write programs, and to study great programs that other people have written. In my case, I went to the garbage cans at the Computer Science Center and fished out listings of their operating system. (Bill Gates)

You can get into a habit of thought in which you enjoy making fun of all those other people who don’t see things as clearly as you do. We have to guard carefully against it. (Carl Sagan)

Sometimes the best engineers come in bodies that can't talk. (Nolan Bushnell)

To many managers, getting rid of the arrogant, undisciplined, over-paid, technology-obsessed, improperly-dressed etc. programmers would appear to be a significant added benefit. (Bjarne Stroustrup)

Mostly, when you see programmers, they aren't doing anything. One of the attractive things about programmers is that you cannot tell whether or not they are working simply by looking at them. Very often they're sitting there seemingly drinking coffee and gossiping, or just staring into space. What the programmer is trying to do is get a handle on all the individual and unrelated ideas that are scampering around in his head. (Charles M Strauss)

Optimism is an occupational hazard of programming: feedback is the treament. (Kent Beck)

I think it is inevitable that people program poorly. Training will not substantially help matters. We have to learn to live with it. (Alan Perlis)

Perhaps when a man has special knowledge and special powers like my own, it rather encourages him to seek a complex explanation when a simpler one is at hand. ("Sherlock Holmes")

Beware of programmers who carry screwdrivers. (Leonard Brandwein)

The only thing more frightening than a programmer with a screwdriver or a hardware engineer with a program is a user with a pair of wire cutters and the root password. (Elizabeth Zwicky)

Insanity is often the logic of an accurate mind over-taxed. (Oliver Wendell Holmes)

The world is a tragedy to those who feel, but a comedy to those who think. (Horace Walpole)

The computer programmer is a creator of universes for which he alone is responsible. Universes of virtually unlimited complexity can be created in the form of computer programs. (Joseph Weizenbaum)

Suffusing [the technology] culture is the belief among programmers and engineers that they're working on the Next Big Thing — projects that change the world, not just deliver a more absorbent diaper or crunchier breakfast cereal. (Joseph Menn)

Being a social outcast helps you stay concentrated on the really important things, like thinking and hacking. (Eric Raymond)

We shall do a much better programming job, provided we approach the task with a full appreciation of its tremendous difficulty, provided that we respect the intrinsic limitations of the human mind and approach the task as very humble programmers. (Alan Turing)

People that think logically are a nice contrast to the real world. (Matt Biershbach)

The trouble with programmers is that you can never tell what a programmer is doing until it's too late. (Seymour Cray)

Fast, fat computers breed slow, lazy programmers. (Robert Hummel)

That's what's cool about working with computers. They don't argue, they remember everything and they don't drink all your beer. (Paul Leary)

Controlling complexity is the essence of computer programming. (Brian Kernigan)

For a long time it puzzled me how something so expensive, so leading edge, could be so useless, and then it occurred to me that a computer is a stupid machine with the ability to do incredibly smart things, while computer programmers are smart people with the ability to do incredibly stupid things. They are, in short, a perfect match. (Bill Bryson)

That tendency to err that programmers have been noticed to share with other human beings has often been treated as though it were an awkwardness attendant upon programming's adolescence, which like acne would disappear with the craft's coming of age. It has proved otherwise. (Mark Halpern)

Computer geek: an asocial, malodorous, pasty-faced monomaniac with all the personality of a cheese-grater. (Jargon Files)

Long hair minimizes the need for barbers; socks can be done without; one leather jacket solves the coat problem for many years; suspenders are superfluous. (Albert Einstein)

If your project doesn't work, look for the part that you didn't think was important. (Arthur Bloch)

For the time being, programming is a consumer job, assembly line coding is the norm, and what little exciting stuff is being performed is not going to make it compared to the mass-marketed cräp sold by those who think they can surf on the previous half-century's worth of inventions forever. (Eric Naggum)

A great lathe operator commands several times the wage of an average lathe operator, but a great writer of software code is worth 10,000 times the price of an average software writer. (Bill Gates)

The principle objective of software testing is to give confidence in the software. (P D Coward)

In 1971 when I joined the staff of the MIT Artificial Intelligence lab, all of us who helped develop the operating system software, we called ourselves hackers. (Richard Stallman)

Burn-out in a developer is the death of the artistic self, a perverse maturation, a shrinking with age, a withering with experience. (Jim McCarthy)

Programming is like sex, one mistake and you have to support it for the rest of your life. (Michael Sinz)

Lovers of problem solving, they are apt to play chess at lunch or doodle in algebra over cocktails, speak an esoteric language that some suspect is just their way of mystifying outsiders. Deeply concerned about logic and sensitive to its breakdown in everyday life, they often annoy friends by asking them to rephrase their questions more logically. (Time Magazine in 1965)

A mathematician is a machine for turning coffee into theorems. (Paul Erdös)

Applicants must also have extensive knowledge of UNIX, although they should have sufficiently good programming taste to not consider this an achievement. (MIT job advertisement)

I just hate to be pushed around by some fücking machine. (Ken Thompson)

The programmer, like the poet, works only slightly removed from pure thought-stuff. He builds his castles in the air, from air, creating by exertion of the imagination. Few media of creation are so flexible, so easy to polish and rework, so readily capable of realizing grand conceptual structures. (Frederick P Brooks Jr)

Poor management can increase software costs more rapidly than any other factor. (Barry Boehm)

A programmer is a person who passes as an exacting expert on the basis of being able to turn out, after innumerable punching, an infinite series of incomprehensive answers calculated with micrometric precisions from vague assumptions based on debatable figures taken from inconclusive documents and carried out on instruments of problematical accuracy by persons of dubious reliability and questionable mentality for the avowed purpose of annoying and confounding a hopelessly defenseless department that was unfortunate enough to ask for the information in the first place. (IEEE Grid newsmagazine)

Eggheads unite! You have nothing to lose but your yolks. (Adlai Stevenson)

Computer science education cannot make anybody an expert programmer any more than studying brushes and pigment can make somebody an expert painter. (Eric Raymond)

A plumber has around eight years training in the US. That's to fix my goddamn toilet. Yet, how much training do you have to do to be allowed to build software for a plane carrying hundreds of people? (James Coplien)

An organisation that treats its programmers as morons will soon have programmers that are willing and able to act like morons only. (Bjarne Stroustrup)

You needed a cool name to put on a T-shirt, and you needed a T-shirt to give to people. It was part of getting people excited enough to work 70 hours a week. (Erich Ringewald of Apple)

Programmers are like artists. Writing software that just gets put away feels like intellectual masturbation. (Bruce Perens)

A hacker on a roll may be able to produce, in a period of a few months, something that a small development group (say, 7-8 people) would have a hard time getting together over a year. IBM used to report that certain programmers might be as much as 100 times as productive as other workers, or more. (Peter Seebach)

Microsoft's only factory asset is the human imagination. (Bill Gates)

Despite their reputa­tion for thick-headedness or stubbornness, it is important for technicians to see themselves as superior people who can easily adapt to change. (Taiichi Ohno)

The programmer, who needs clarity, who must talk all day to a machine that demands declarations, hunkers down into a low-grade annoyance. It is here that the stereotype of the programmer, sitting in a dim room, growling from behind Coke cans, has its origins. The disorder of the desk, the floor; the yellow Post-It notes everywhere; the whiteboards covered with scrawl: all this is the outward manifestation of the messiness of human thought. The messiness cannot go into the program; it piles up around the programmer. (Ellen Ullman)

See, you not only have to be a good coder to create a system like Linux, you have to be a sneaky bastard, too. (Linus Torvalds)

Pessimists, we're told, look at a glass containing 50% air and 50% water and see it as half empty. Optimists, in contrast, see it as half full. Engineers, of course, understand the glass is twice as big as it needs to be. (Bob Lewis)

Use systematic doubt and question everything.
Learn the difference between rational proof and persuasion.
Be precise in your use of words.
Expect precision from others.
(Pierre Abelard)