


Alarming News: I like Morgan Freeberg. A lot.
American Digest: And I like this from "The Blog That Nobody Reads", because it is -- mostly -- about me. What can I say? I'm on an ego trip today. It won't last.
Anti-Idiotarian Rottweiler: We were following a trackback and thinking "hmmm... this is a bloody excellent post!", and then we realized that it was just part III of, well, three...Damn. I wish I'd written those.
Anti-Idiotarian Rottweiler: ...I just remembered that I found a new blog a short while ago, House of Eratosthenes, that I really like. I like his common sense approach and his curiosity when it comes to why people believe what they believe rather than just what they believe.
Brutally Honest: Morgan Freeberg is brilliant.
Dr. Melissa Clouthier: Morgan Freeberg at House of Eratosthenes (pftthats a mouthful) honors big boned women in skimpy clothing. The picture there is priceless--keep scrolling down.
Exile in Portales: Via Gerard: Morgan Freeberg, a guy with a lot to say. And he speaks The Truth...and it's fascinating stuff. Worth a read, or three. Or six.
Just Muttering: Two nice pieces at House of Eratosthenes, one about a perhaps unintended effect of the Enron mess, and one on the Gore-y environ-movie.
Mein Blogovault: Make "the Blog that No One Reads" one of your daily reads.
The Virginian: I know this post will offend some people, but the author makes some good points.
Poetic Justice: Cletus! Ah gots a laiv one fer yew...
186k Per Second
4-Block World
84 Rules
9/11 Families
A Big Victory
Ace of Spades HQ
Adam's Blog
After Grog Blog
Alarming News
Alice the Camel
Althouse
Always Right, Usually Correct
America's North Shore Journal
American Daily
American Digest
American Princess
The Anchoress
Andrew Ian Dodge
Andrew Olmstead
Angelican Samizdat
Ann's Fuse Box
Annoyances and Dislikes
Another Rovian Conspiracy
Another Think
Anti-Idiotarian Rottweiler
Associated Content
The Astute Bloggers
Atlantic Blog
Atlas Shrugs
Atomic Trousers
Azamatterofact
B Movies
Bad Catholicism
Bacon Eating Atheist Jew
Barking Moonbat Early Warning System
The Bastidge
The Belmont Club
Because I Said So
Bernie Quigley
Best of the Web
Between the Coasts
Bidinotto's Blog
Big Lizards
Bill Hobbs
Bill Roggio
The Black Republican
BlameBush!
Blasphemes
Blog Curry
Blogodidact
Blowing Smoke
A Blog For All
The Blog On A Stick
Blogizdat (Just Think About It)
Blogmeister USA
Blogs For Bush
Blogs With A Face
Blue Star Chronicles
Blue Stickies
Bodie Specter
Brilliant! Unsympathetic Common Sense
Booker Rising
Boots and Sabers
Boots On
Bottom Line Up Front
Broken Masterpieces
Brothers Judd
Brutally Honest
Building a Timberframe Home
Bush is Hitler
Busty Superhero Chick
Caerdroia
Caffeinated Thoughts
California Conservative
Cap'n Bob & The Damsel
Can I Borrow Your Life
Captain's Quarters
Carol's Blog!
Cassy Fiano
Cato Institute
CDR Salamander
Ceecee Marie
Cellar Door
Chancy Chatter
Chaos Manor Musings
Chapomatic
Chicago Boyz
Chickenhawk Express
Chief Wiggles
Chika de ManiLA
Christianity, Politics, Sports and Me
Church and State
The Cigar Intelligence Agency
Cindermutha
Classic Liberal Blog
Club Troppo
Coalition of the Swilling
Code Red
Coffey Grinds
Cold Fury
Colorado Right
Common Sense Junction
Common Sense Regained with Kyle-Anne Shiver
Confederate Yankee
Confessions of a Gun Toting Seagull
Conservathink
Conservative Beach Girl
Conservative Blog Therapy
Conservative Boot Camp
Conservative Outpost
Conservative Pup
The Conservative Right
Conservatives for American Values
Conspiracy To Keep You Poor & Stupid
Cox and Forkum
Cranky Professor
Cranky Rants
Crazy But Able
Crazy Rants of Samantha Burns
Create a New Season
Crush Liberalism
Curmudgeonly & Skeptical
D. Challener Roe
Da' Guns Random Thoughts
Dagney's Rant
The Daily Brief
The Daily Dish
Daily Flute
Daily Pundit
The Daley Gator
Daniel J. Summers
Dare2SayIt
Darlene Taylor
Dave's Not Here
David Drake
Day By Day
Dean's World
Decision '08
Debbie Schlussel
Dhimmi Watch
Dipso Chronicles
Dirty Election
Dirty Harry's Place
Dissecting Leftism
The Dissident Frogman
Dogwood Pundit
Don Singleton
Don Surber
Don't Go Into The Light
Dooce
Doug Ross
Down With Absolutes
Drink This
Dumb Ox News
Dummocrats
Dustbury
Dustin M. Wax
Dyspepsia Generation
Ed Driscoll
The Egoist
Eject! Eject! Eject!
Euphoric Reality
Exile in Portales
Everything I Know Is Wrong
Exit Zero
Expanding Introverse
Exposing Feminism
Faith and Theology
FARK
Fatale Abstraction
Feministing
Fetching Jen
Finding Ponies...
Fireflies in the Cloud
Fish or Man
Flagrant Harbour
Flopping Aces
Florida Cracker
For Your Conservative Pleasure
Forgetting Ourselves
Fourth Check Raise
Fred Thompson News
Free Thoughts
The Freedom Dogs
Gadfly
Galley Slaves
Gate City
Gator in the Desert
Gay Patriot
The Gallivantings of Daniel Franklin
Garbanzo Tunes
God, Guts & Sarah Palin
Google News
GOP Vixen
GraniteGrok
The Greatest Jeneration
Green Mountain Daily
Greg and Beth
Greg Mankiw
Gribbit's Word
Guy in Pajamas
Hammer of Truth
The Happy Feminist
Hatless in Hattiesburg
The Heat Is On
Hell in a Handbasket
Hello Iraq
Helmet Hair Blog
Heritage Foundation
Hillary Needs a Vacation
Hillbilly White Trash
The Hoffman's Hearsay
Hog on Ice
HolyCoast
Homeschooling 9/11
Horsefeathers
Huck Upchuck
Hugh Hewitt
I, Infidel
I'll Think of Something Later
IMAO
Imaginary Liberal
In Jennifer's Head
Innocents Abroad
Instapundit
Intellectual Conservative
The Iowa Voice
Is This Life?
Islamic Danger 4u
The Ivory Tower
Ivory Tower Adventures
J. D. Pendry
Jaded Haven
James Lileks
Jane Lake Makes a Mistake
Jarhead's Firing Range
The Jawa Report
Jellyfish Online
Jeremayakovka
Jesus and the Culture Wars
Jesus' General
Jihad Watch
Jim Ryan
Jon Swift
Joseph Grossberg
Julie Cork
Just Because Your Paranoid...
Just One Minute
Karen De Coster
Keep America at Work
KelliPundit
Kender's Musings
Kiko's House
Kini Aloha Guy
KURU Lounge
La Casa de Towanda
Laughter Geneology
Leaning Straight Up
Left Coast Rebel
Let's Think About That
Liberal Utopia
Liberal Whoppers
Liberalism is a Mental Disorder
Liberpolly's Journal
Libertas Immortalis
Life in 3D
Linda SOG
Little Green Fascists
Little Green Footballs
Locomotive Breath
Ludwig von Mises Institute
Lundesigns
Rachel Lucas
The Machinery of Night
The Macho Response
Macsmind
Maggie's Farm
Making Ripples
Management Systems Consulting, Inc.
Marginalized Action Dinosaur
Mark's Programming Ramblings
The Marmot's Hole
Martini Pundit
MB Musings
McBangle's Angle
Media Research Center
The Median Sib
Mein Blogovault
Melissa Clouthier
Men's News Daily
Mending Time
Michael's Soapbox
Michelle Malkin
Mike's Eyes
Millard Filmore's Bathtub
A Million Monkeys Typing
Michael Savage
Minnesota Democrats Exposed
Miss Cellania
Missio Dei
Missouri Minuteman
Modern Tribalist
Moonbattery
Mother, May I Sleep With Treacher?
Move America Forward
Moxie
Ms. Underestimated
My Republican Blog
My Vast Right Wing Conspiracy
Mythusmage Opines
Naked Writing
Nation of Cowards
National Center Blog
Nealz Nuze
NeoCon Blonde
Neo-Neocon
Neptunus Lex
Nerd Family
Network of Enlightened Women (NeW)
News Pundit
Nightmare Hall
No Sheeples Here
NoisyRoom.net
Normblog
The Nose On Your Face
NYC Educator
The Oak Tree
Obama's Gaffes
Obi's Sister
Oh, That Liberal Media!
Old Hippie
One Cosmos
One Man's Kingdom
One More Cup of Coffee
Operation Yellow Elephant
OpiniPundit
Orion Sector
The Other (Robert Stacy) McCain
The Outlaw Republican
Outside The Beltway
Pajamas Media
Palm Tree Pundit
Papa Knows
Part-Time Pundit
Pass The Ammo
Passionate America
Patriotic Mom
Pat's Daily Rant
Patterico's Pontifications
Pencader Days
Perfunction
Perish the Thought
Personal Qwest
Peter Porcupine
Pettifog
Philmon
Philosoblog
Physics Geek
Pigilito Says...
Pillage Idiot
The Pirate's Cove
Pittsburgh Bloggers
Point of a Gun
Political Byline
A Political Glimpse From Ireland
Political Party Pooper
Possumblog
Power Line
PrestoPundit
Professor Mondo
Protein Wisdom
Protest Warrior
Psssst! Over Here!
The Pungeoning
Q and O
Quiet Moments, Busy Lives
Rachel Lucas
Radio Paradise
Rantburg
Real Clear Politics
Real Debate Wisconsin
Reason
Rebecca MacKinnon
RedState.Org PAC
Red, White and Conservative
Reformed Chicks Babbling
The Reign of Reason
The Religion of Peace
Resistance is Futile!
Revenge...
Reverse Vampyr
Rhymes with Cars and Girls
Right Angle
Right Events
Right Mom
Right Thinking from the Left Coast
Right Truth
Right View Wisconsin
Right Wing Rocker
Right Wing News
Rightwingsparkle
Robin Goodfellow
Rocker and Sage
Roger L. Simon
Rogue Thinker
Roissy in DC
Ronalfy
Ron's Musings
Rossputin
Roughstock Journal
The Rude Pundit
The Rule of Reason
Running Roach
The Saloon
The Salty Tusk
Samantha Speaks
Samizdata
Samson Blinded
Say Anything
Say No To P.C.B.S.
Scillicon and Cigarette Burns
Scott's Morning Brew
SCOTUSBlog
Screw Politically Correct B.S.
SCSU Scholars
Seablogger
See Jane Mom
Self-Evident Truths
Sensenbrenner Watch
Sergeant Lori
Seven Inches of Sense
Shakesville
Shark Blog
Sheila Schoonmaker
Shot in the Dark
The Simplest Thing
Simply Left Behind
Sister Toldjah
Sippican Cottage
SISU
Six Meat Buffet
Skeptical Observer
Skirts, Not Pantsuits
Small Dead Animals
Smallest Minority
Solomonia
Soy Como Soy
Spiced Sass
Spleenville
Steeljaw Scribe
Stephen W. Browne
Stilettos In The Sand
Still Muttering to Myself
SoxBlog
Stolen Thunder
Strata-Sphere
Sugar Free But Still Sweet
The Sundries Shack
Susan Hill
Sweet, Familiar Dissonance
Tail Over Tea Kettle
Tale Spin
Talk Arena
Tapscott's Copy Desk
Target of Opportunity
Tasteful Infidelicacies
Tequila and Javalinas
Texas Rainmaker
Texas Scribbler
That's Right
Thirty-Nine And Holding
This Blog Is Full Of Crap
Thought You Should Know
Tom Nelson
Townhall
Toys in the Attic
The Truth
Tim Blair
The TrogloPundit
Truth, Justice and the American Way
The Truth Laid Bear
Two Babes and a Brain
Unclaimed Territory
Urban Grounds
Varifrank
Verum Serum
Victor Davis Hanson
Villanous Company
The Virginian
Vodkapundit
The Volokh Conspiracy
Vox Popular
Vox Veterana
Walls of the City
The Warrior Class
Washington Rebel
Weasel Zippers
Webutante
Weekly Standard
Western Chauvinist
A Western Heart
Wheels Within Wheels
When Angry Democrats Attack!
Whiskey's Place
Wicking's Weblog
Wide Awakes Radio (WAR)
Winds of Change.NET
Word Around the Net
Writing English
Woman Honor Thyself
"A Work in Progress
World According to Carl
WorldNet Daily
WuzzaDem
WyBlog
Yorkshire Soul
Zero Two Mike SoldierBeen making a point of fleshing this out & polishing it, while I’m actually working on stuff, for clarity’s sake. These are things I’ve had to learn the hard way, that they don’t (so far as I know) teach you in class…in fact, some of them are diametrically opposed to what they teach you in class. Well hey, those who can, do, those who can’t, teach…
It’s not just professors. Management has a tendency to “teach” the wrong stuff; they’re supposed to be all about producing positive results, doing more with less, but unfortunately they tend to gravitate toward making the job of managing easier. Which is not the same thing at all. I’ve noticed that the other job, my job, the designing & coding, is a young-man’s game. There aren’t too many people who’ve stuck with it as long as I have, unless they’ve made it a point to avoid principal-engineer & design positions, and just do what they’re told. As long as it works for them, I won’t judge. Some of the young guys who had tech-lead positions over me & a lot of others, back in the day, I see went on to go sell Amway or real estate just a few years later. So the institutional memory is lacking; it’s missing the advantage that masonry had, with journeymen & apprentices, while the cathedrals were being built hundreds of years ago. It isn’t common for someone in the coding business to actually jot down what they learned, unless they’re going into the book-writing business, in which case…yeah, they still quit what they were doing, and start writing books.
Well. This is what’s helped me, in the past, today, and probably will without much change in the foreseeable future. Take it for what it’s worth…the better job I do keeping them in mind, the better the results I see at the end…
1. Any proposed statement not specifically defined and validated to be true, must be presumed false. The only exceptions to this rule involve things that, by being false, would make your efforts easier. These must be presumed true. In short, presume Murphy. Presume everything is aligned against you until your tests prove it isn’t so…then, presume your tests are wrong.
2. Programmers create programs and the purpose of a program is to define behavior. The job, therefore, is to define behavior. Bearing Rule #1 in mind, the mission becomes one of identifying and managing uncertainties. Any aspect of this left undone is failure, even if the shortage is not recognized immediately.
3. Keep the machinery doing what machinery does, keep the people doing what people do. When people have to act like automated processes in order to use your product, you built it wrong. If the automated process makes decisions factoring in arcane, obscure and unpredictable experience & state data, like people do, you built it wrong. Either one of these sins will bring consequences in the form of diminished confidence felt by those who use it. The test is, is there a feeling of dread when the user produces a stimulus, which is a product of the uncertainty about what the response will be. This should not be happening.
4. People listen to speeches and machines run programs. Programs, therefore, are not speeches. It is said that a speech is like a skirt, it should be short enough to hold people’s attention but long enough to cover the subject. The program just has the job of making sure the subject is covered; all other objectives are secondary. Contrary to popular belief, there is no correlation between brevity in a computer program and the ease involved in its maintenance. This presumes sloppiness on the part of those who write long programs and neatness on the part of those who write short programs. This axiom doesn’t hold, at least not with any logical certainty; it is a myth propounded by those who consider themselves above the occasionally onerous task of grappling with details.
5. The product of my experience investigating situations where systems aren’t behaving correctly, is a learned bias that the machines are doing exactly what they should be doing, and the people are the problem. That’s because mistakes have a tendency to originate with lack of definition (see rules 1 and 2). Machines and automated processes work according to complete definitions; people have the ability to work without complete definitions. That is a bug, and not a feature, with the people. The dysfunction in a system tends to start with the people, and with something they left undefined, or defined only inside their own heads and failed to communicate with other involved people.
6. Error messages are unappreciated. A lot of people who might have been solid contributors in the field, decide they’re not right for it and go do something else because they find themselves confused a lot, and they’re confused because they’ve been reading bad error messages. The best-designed processes will treat their session mission as one of correctly reporting on whatever went wrong, so that a successful execution is the exception and not the rule. When fixing a bug that involves a malformed error message in the aftermath of something else that went wrong, always fix the error message FIRST, THEN proceed to the other condition that caused it. The rationale is that the test with the malformed data but repaired error message, is a valuable test, but the test with the repaired data and broken error message is worthless, because it effectively conceals an execution path known to be broken.
7. A design can’t be good unless it solidly prioritizes its own objectives and then sticks to its knitting. These design objectives compete with each other. Example: A fragment of code can make use of a design pattern so it’s more maintainable across time, even with the introduction of new requirements, by engineers who are nominally familiar with the pattern. But it will be grossly unrecognizable and confusing to a coder who is not familiar with the pattern, even if he is experienced in the programming language. A decision not to use the pattern would result in code more readable to a new programmer, but more difficult to maintain. So there is mutual exclusivity here. Be aware. Choose your battles.
8. A great design takes testing into account, essentially beginning with the end in mind. Simple requirements translated into a complex suite of regression tests, manifest a mediocre design. A simple suite of tests, covering a complex patchwork of requirements, is a sign of a great design — assuming, of course, that the tests do indeed provide this coverage.
9. A good design delegates responsibility to as many layers as there are subjects to be addressed in the definition of behavior, with each layer having a substantial reason for being, but no layer taking on more than one subject within the definition. Each layer should be conceptualized and built with strict adherence to Design by Contract (DbC), Separation of Concerns (SoC), and fulfillment of the dicutum that interfaces should be easy to use correctly and hard to use incorrectly. The design of these layers must apply definition of behavior in response to both success and failure of operations at run-time. The test of good application of SoC is, how much of the implementation has to be changed when a new requirement is introduced, or an existing requirement changes. If this causes a ripple effect throughout the application even though it’s a relatively innocuous change, this may reflect inadequate or ineffective separation. If the necessary change is contained, with the layer boundaries acting as a sort of “breakwater” and as a result the overwhelming majority of prior work escapes unmolested, this is a sign of strong, effective separation.
10. If the most charismatic people are making all the decisions that matter, the project may already be in trouble. Making definitions that have to be made in order for the project to succeed, often is achieved at the expense of being interesting & fun; being interesting & fun often comes at the expense of making these vital definitions. Not always. But often. The litmus test is, at the point these definitions are needed for work to continue, is it a common occurrence that guidance is already available because someone successfully anticipated the need. If this is not the case, refer back to Rule 5 — people are the problem, they tend to spin new definitions out of whole cloth and proceed as if no one else could’ve arrived at a different definition. This is the point of team-dysfunction, where the team starts to produce work inferior to what any one of the members could have produced working in solitude, or fails to address problems that would have easily been solved by any one of them working in solitude. In such a situation, the advantages of charismatic leadership are mostly neutralized.
11. “Technical debt” is a great term. If your project takes on a life of its own and becomes self-sustaining, manage T.D. just like real, corporate debt. Pay what you can against it, when you can, allow it to languish a bit only when you have no other choice, get back to reducing it again just as soon as you can, down to zero if possible. And if you can’t get to it, you’d better get busy finding out why.
12. Programmers are not system administrators. Sys admins are not programmers. The only time it makes sense to have the same people doing both these things, is when the operation is too small to practically divide the roles up into separate personnel, in which case it’s best to think of it as administrator-less. There are many rationales for this. The first is that system admins and programmers labor toward different goals, the former toward continuity, the latter toward progress against time, which translates to invasive, and frequent, change. The second is operational security, which can be compromised if these roles are not separated.
Leave a Reply
You must be logged in to post a comment.