Shiny Silver Bullets again

That Silver Bullet guy came calling again, but this time we were prepared. We made a quick call and sent him packing, trussed up in the back of a Turing Patrol squad car and still hollering about the O(N) sort written “In FORTH, in FORTH! Don’t you get it? In FORTH!” I swear that I heard one of the Turing cops radio ahead for Thorazine.

The problem with wackos is that they often exude confidence and suck in your bosses with reasonable arguments bit by bit until you find yourself forced to tell your management “These people are bozos, please believe me that this methodology is about as likely to generate good code as rubbing two ducks together.” Yet on Monday you’re in the mandatory 7am team meeting, rubbing duck feathers into your hair and repeating a mantra chosen for you by the Holy Duck of Software Quality. “WebTwoOhWebTwoOh…” Yes, and you have office-mates now. Three of them. One to watch you type, one to watch the person watching you type, and one to watch that person and make sure that everyone is talking in the correct Agile Duck Code (e.g., “Quackity quack quack” means, “Refactor that method and shout out the new verbal documentation down the hallway so that everyone knows.”)

If it’s borderline fucked up, it’s agile. I think that’s probably the official definition of Agile.

Anyway, back to our raving looney. In all the fuss he somehow forgot his briefcase. And naturally, being the curious sort, we decided to take a look at the tools that snake-oil-and-silver-bullet salesmen carry around.

Did I say briefcase? More like a Mary Poppins bag. We turned it over, gave it a good shake, and wished we hadn’t.

Empowerification. The moment you hear this word, take your trusty six-shooter out and start pulling the trigger. Six times, if you please, after which you must wait beside the body until after sunset, then burn it and bury the ashes at a crossroads with three priests standing by doing heavy-duty priest stuff.

“You’re sure this guy isn’t coming back?”

“Um, Is this the two dollar burial or the five dollar burial?”

“I paid each of you guys about a bajillion bucks.”

“He ain’t coming back.”

Collaborificate. “Truly,” said the Prophet, “If you are travelling on the same road together, you are cooperating, or at least not trying to kill each other, are you not collaborificating?” Judging by the recent attempts on my life, my fellow travellers on the freeway into work are more interested in offing me for parking space. A lot of collaborification in the computer industry is like that; get in there with your new code real quick before some other bozo breaks the build and you have to stay all night picking up the shrapnel. Collaborification is what teams do to each other across a no-man’s land, from muddy trenches. Collaborification is what you do when you’re too bloody chicken to pick up a phone and just yell at someone for a while; it’s sneaky, underhanded stuff that gets the job done, with a minimum of having to find inventive places to hide bodies.

“Um, there might be a problem.”

“What?”

“One of the incantations we used? Well, it was kind of in Beta.”

“WHAT?”

Agile. I prefer the term twisty. Agile will get into your org’s bones and chew the marrow out of them, quick as a wink; it’s like hydroflouric acid for the soul. Any processes you have now that might possibly work will be tossed onto the pile and burnt in the square. Mmmm, marshmallows. Welcome to the Dark Ages. Do you like Shmores?

“I don’t care. Look, you get on horn to the Holy Guy Support and get a patch for that incantation, you get that update and apply it, I don’t know, reboot the whole bloody rite and start over again with F8 and some Goddamned fresh holy water this time –”

Scrum.  What did you do yesterday?  Nothing?  Me, neither.  Today: I think a long nap after lunch, after which why don’t you join me in the Underbarrows and kick some Orc butt.  Am I blocked?  Isn’t that kind of a personal question?

Maybe some incentive?

Another unexpected admission of guilt from a Guantanamee, this one from the Aussie Hicks after being held for only five years without due process (link).

“Ya got me fair, coppers.”

It occurred to me that maybe Congress simply needs to apply these same techniques to the “problem” folks in the Bush administration who are all simply going to take the fifth now on the Gonzales / DA firing fiasco (link).  Clearly it should be just fine to whip people off in blindfolds and smelly sacks to Nofunistan, deprive them of sleep with bad 80s rock, do laundry on their faces, and after they voluntarily sign confessions, roll them back out on some street in Washington DC where they haven’t yet cleaned up from the 60s riots.

Seems fair; I’ll write my congressman if you’ll write yours.

Rainy day

“It’s days like today, when I’m fiddling with connectors or restoring a backup or reinstalling an operating system or just swabbing the decks clean of C++ inheritance botches, that I like to reflect that my mom thinks I work in High Tech.”

One man’s cute hack is another man’s searing pit of hell.

When you sit down at the keyboard and nothing comes out, you have three choices: Push it anyway (there’s a deadline, after all), go do something else (maybe inspiration will strike?), or write little pieces of craps like the ones I’m writing right now.

If God had a programming language, it probably wasn’t standardized, and I’ll bet you a dollar it didn’t have trigraphs, either.

The guy who cut you off in traffic (and who you made a rude gesture to, the rudest that one person can possibly accomplish alone, in a car, without causing an accident) will turn out to work five doors down the hall.

Every time you use #define, God kills a start-up.

Cat-like typing detected (link). “Hey, it compiled!”

Shed Metaphor

Almost every guy has a shed (or a garage, or at least a closet) where he spends time puttering around, fixing things (or more likely, taking them apart and forgetting how to stick them back together), but most importantly, for accumulating stuff. The stuff ranges from the probably useful (jars of metal screws, fasteners and string), to borderline trash (bits of wire, odd brackets, plasticky pieces broken off from equipment, and string), to absolute rubbish (dead batteries, manuals for obsolete computers, and string).

That string could be useful someday…. 

The bench in the shed is always covered with half-disassembled motors from haplessly disemboweled vacuum cleaners, yellowed clock-radios cracked open like crabs, little trays of parts waiting to be scattered, and cables with oddball connectors requiring adapters only found in surplus stores. If there is a peg-board with hooks and painted outlines of tools, the tools themselves are invariably missing or hanging on the wrong hooks. Drawers are full of sockets, screwdrivers, punches, hammers, goggles, paint brushes, rulers, squares, pencils (both worn-down nubs and the ones unsuccessfully sharpened on a file), “still good” spark plugs, tiny cans of putty, a rabbit’s foot grey with dust, and endless little pieces of debris, in other words, stuff fractally down to microscope junk.

There is reason and order to the shed, but you have to have lived with it for quite some time to comprehend the philosophy of the arrangement. Ask the owner of the mess where anything is, and he’ll be able to tell you. Mostly. Maybe. “Um, I’d better have a look.” Tubular widgets go there and electrical ones (up to a certain size) go there, but it will be impossible for the shed’s owner to explain precisely why. Someone coming into the shed to help out with a project will have a ton of trouble coming up to speed.

I argue that this kind of organization is what modern programming languages encourage: The willy-nilly scattering of functionality (and worse, mis-functionality and pseudo-functionality) through sets of “headers” and “sources” and “configurations” that more closely resemble a graveyard for unlucky lawnmowers and radios than an engineering effort. Cross-dependencies, strong coupling, “scripts” that run random pieces of code, you name the sin and modern programming languages are what make this possible.

For the most part we are still in the “toggle bolts go in that baby food jar because that’s where all the other toggle bolts already are” stage of software development.

Sometimes the best thing that can happen to a project is for an accident to happen. “Oh my gosh, we lost all the source code over the weekend when the bulldozers revolted and took out the shed we had the servers in.” It’s all gone, what do you do?  In such a situation, you should be happy.  Even overjoyed.

Most engineers will “lose” a project some time during their career. This has happened to me a couple of times; maybe a week’s worth of work vaporized for some stupid reason. What I found was that reconstructing the work went quite quickly, and that in the end I had nearly bug-free code that I understood more clearly. Things got better.

You can also get good results if you go on a rampage. Start throwing crap out. See how much you can remove from something and still have a workable product. Unused functions? Virtual methods and other forms of bet-hedging? Obsolete documentation? Ornate and useless comments? When in doubt, toss them out!

As for “shed” languages, I don’t know. Certainly things like COBOL’s rigid “DATA DIVISION” / “FROBOZZ DIVISION” are next to useless, procrustean at best. Maybe the answer is to have people on your staff who walk around simply whacking people on the head from time to time. Maybe the answer is long, God-awful boring design review meetings to act as flypaper in order to let the really productive people on your staff have undisturbed hours in which to type. I don’t know, but sometimes just shaking stuff up makes interesting things fall out.

Sheds aren’t all bad. I just wish I could find that #2 Spagthorpe standard spanner…

Big book

At the library the toddler takes a BIG book from the shelf full of children’s books.

“This is a BIG book,” he says, “Read it!”

Indeed it is. It’s a large book; it’s big and floppy and the reason for this is that it is printed in braille.  Inside is blank page after blank page of raised dots.

He ponders.

“No pictures.”

Urm.  Well, no.  Then we get to explain that we don’t know how to read it….

Sheds, I had no idea….

Um, sheds.  Sheds sheds sheds and more sheds.  Here.  The FAQ (not to be missed) is here.

We do indeed have a shed.  A very stout but ill-used shed.  I must ponder.

From the FAQ:

C++ is something of a sheddy language: full of bits you don’t really   
need but which might come in useful one day, not easy to get into, and 
anything you do want will be impossible to find as it will be buried   
under several layers of inherited classes in an include file called from
another include file…..                                              

Simple Buffalo or Turkey Chili

(30 minutes prep, 30-60 minutes cooking, not much cleanup)

One pound ground buffalo (turkey or 9% ground beef will also work)
3 medium carrots
1 green pepper
1 largish onion
1 stick celery
4-5 cloves garlic
2 tsp cumin
2 tsp chili powder (we get ours from Whole Foods), or to taste (less is often more)
2-3 tsp oregano
28oz can whole plum tomatoes
8oz can tomato paste
1 cup water
salt, pepper
1-2 T brown sugar (optional)
15oz can beans of your choice (e.g., Red Kidney beans) (optional)
15oz can corn (optional)

Put carrots in food processor, run them until they’re roughly like cornmeal (10 1-second pulses). Chop green pepper and celery more roughly (say 5 pulses). Set aside.

Roughly chop onion and garlic together. We’re not talking puree, just a rough to fine chop, and largish pieces are okay.

Put whole tomatoes in food processor, chop very roughly, set aside. (I used to use pre-chopped tomatoes, but whole ones are far better).

Brown meat, make sure you break it up really well. Salt and pepper to taste. Once things get going, sprinkle with half the cumin and half the chili powder and mix in really well. With buffalo and turkey I don’t bother to drain any fat, it’s your choice about what to do if you use ground beef.

While the meat is browning, in a deepish pot brown the onions and garlic, add salt and pepper to taste. After a few minutes (the onions are soft and just turning a bit transparent) add the carrots, green pepper and celery. Add maybe 1/3 cup water to get some steam action going. Sprinkle the rest of the cumin and chili powder, add the oregano and mix well. Add more water as necessary to prevent burning, cook for a maybe five more minutes.

Add browned meat to the pot, add the tomatoes and the tomato paste. Add brown sugar if you want. Stir, reduce heat once it’s bubbling. Simmer for at least half an hour. You can add the beans and corn now or five or ten minutes before serving (or never).

My wife complains that I often make this too hot. It helps to have a predictable chili powder and cumin; you’ll just have to experiment. With fewer spices this approaches a spaghetti sauce rather than a chili (which is fine in my book).

As always, the chili is better the next day…

Outsorcery

“Out-sourcing to Middle Earth? That is so last year.”

“Really? I thought you were doing that. All those trips, ahem, ”overseas” and stuff. Those gifts to the kids that the feds got so interested in.  The spooks just swarming over that Plantir…”

“Look, it was a fugging disaster. Once the Dwarves found out that the aluminum beer cans we were passing off as “super mithril” were for beer, we had a bunch of angry midgets on our hands demanding Coors and full disclosure of the Periodic Table of the Elements. We’re still trying to convince them that the Lanthanides and Actinides don’t exist. Can you imagine what they’re going to do once they discover Uranium? Goodbye, Mordor. Hellllo glowing hole in the ground.  Where are we going to get Orcs then?

“And the Elves got pretty bored with the Disney crap we were foisting off on them when they discovered Harley Davidson and leather. Now there probably isn’t a single god damned elf who doesn’t have a pair of shit-kickers, a wallet with a chain and at least three tattoos.

“Don’t get me started about code quality. The elves? They wrote wonderful code, simply bee-yoo-ti-ful stuff, but maintain it? Nooooo. They’d give you a module or two, then flip over to some entirely new language a month later. One release you’d get continuation-passing style and tail-recursion so efficient you could cry, but the next month you’d be dealing with monads, and the following we’d get page after page of Y-combinator crap maybe mixed in with FORTH or Jovial, just for giggles.  Bug free, but if you can’t modify it, who cares?

“If I never see another single line of Visual Basic written by a halfling I’ll die a happy man. Whoever told them that Access was a perfectly good database, and that surrrre you can run an enterprise with it . . . Oh God, I hate those miserable creatures, I just want to format the whole damned Shire. Dim this, Sub that, and Goto, Goto, Goto.

“On the bright side, we got some Orcs on H1-Bs and they’re working out great. They’re simply naturals at get-tough project management. You want to see Agile done right? Full-contact SCRUM is where it’s at, man. Miss a schedule and you’d better show up in battle armor. Did wonders on a few of our attitude-prone prima-donnas, now when they see Nagret or Zarbik coming down the hallway they practically scurry back to their cubes.  Agile is wonderful, especially with axes and leather.