Archive
Where’s The Bug?
When you’re designing and happily coding away in the application layer and you discover a nasty bug, don’t you hate it when you find that the chances are high that the critter may not be hiding in your code – it may be in one of the cavernous homegrown libraries that prop your junk up. I hate when that happens because it forces me to do a mental context switch from the value-added application layer down into the support layer(s) – sometimes for days on end (ka-ching, ka-ching; tic-toc, tic-toc).
Compared to writing code on top of an undocumented, wobbly, homegrown BBoM, writing code on top of a professionally built infrastructure with great tutorials and API artifacts is a joy. When you do find a bug in the code base, the chances are astronomically high that it will be in your code and not down in the infrastructure. Unsurprisingly, preferring the professional over the amateur saves time, money, and frustration.
For the same strange reason (hint: ego) that command and control hierarchy is accepted without question as the “it just has to be this way” way of structuring a company for “success“, software developers love to cobble together their own BBoM middleware infrastructure. To reinforce this dysfunctional approach, managers are loathe to spend money on battle-tested middleware built by world class experts in the field. Yes, these are the same managers who’ll spend $100K on a logic analyzer that gets used twice a year by the two hardware designer dudes that cohabitate with the hundreds of software weenies and elite BMs inside the borg. C’est la vie.
Your Chetan Heart
OK, OK. The title of this post has nothing to do with its content. It just “felt” right.
The “Chetan” in the post title is a placeholder for “Chetan Dhruve”, the author of the splendidly candid and hard-hitting “Why Your Boss Is Programmed To Be A Dictator“. Recently, Chetan (I don’t know how to pronounce his name but I’ll bet it doesn’t sound like “cheetin'”) contacted me via LinkedIn. He graciously asked if he could use the content of my “Leader Or Dictator” post on his web site. Of course, being the needy, fame-seeking, egomaniac that I am, I used my “power of authority” to “approve” of his request – after he filled out all of the proper forms and paid the licensing fee, of course. Check out Mr. Dhruve’s site here – and then buy the freakin’ book.
Note: The “man” on book cover is actually a collage of six of the most notorious dictators of all time. Can you guess who they are? If not, you can find out on Mr. Dhruve’s site.
Super Secret Recipe
Wanna know what the super secret recipe is for building an impenetrable UCB pyramid? OK, you said no – but that t’aint gonna stop me from loosening my lips and sinking ships. Here we go…..
- Directly or (better yet) vicariously experience a real-life situation involving people in which the outcome is a “surprise” to you.
- Judge the outcome as absolutely good or bad (no gradations allowed!)
- Strip and discard all messy contextual meaning from the situation.
- If you judged the outcome as “good”, then ignore it and kick out of this recipe – you’re done! Otherwise…..
- Concoct a reason why the outcome turned out “bad”.
- By removing all the uncomfortable details that don’t align with your existing UCB, vertically abstract your interpretation of the reason for the outcome.
- Horizontally generalize your cause-effect conclusion to subsume any and all situations with any remote resemblance to the experienced situation.
- Pour mental concrete around your newly discovered nugget of knowledge and jam it somewhere into your growing UCB pyramid.
- Pat yourself on the back for “knowing” how the world worx. Whoo Hoo!
Every man, wherever he goes, is encompassed by a cloud of comforting convictions, which move with him like flies on a summer day. – Bertrand Russell
One-Two Punch Combo
Check out this one-two punch combo on creativity and innovation (which fit together like hand and glove) that I randomly stitched together from Chris “The Long Tail” Anderson and Scott “Myths Of Innovation” Berkun:
Scary stuff, no? That’s why I think that the first and biggest obstacle to self-realization through the “create and innovate” dynamic duo is yourself, and not the inevitable downstream naysayers that will peck and gnaw away at your innards. Nevertheless, the second obstacle is huge too, especially if you work in a big, stuffy, corpricracy with an endless queue of risk-averse, (dis)approvers in the way.
Eclipsed!
Steve Taylor‘s “The Fall” is an epic work. It’s both an academic and spiritual tour de force that covers the birth and subsequent explosion of the human ego throughout history. Using documented evidence from a wide range of archaeologists and anthropologists, he presents (what I opine is) an overwhelming argument that there is no innate “selfish gene“. You know, the one that everyone seemingly takes for granted and conveniently blames for man’s inhumanity to man.
In a nutshell, Mr. Taylor asserts that before 8000 BCE (yes, he goes all the way back to the dawn of man and painstakingly traces the life of the ego right up to us) all the available historical evidence points to the non-existence of war, oppression, patriarchy, and human exploitation of others. Please bookmark this page, read the book for the juicy details, and report your personal conclusions back here. Regardless of whether your UCB has been altered, I’d love to hear your before-and-after thoughts on the subject.
Improper Inheritance
Much like Improper Inheritance (II) can wreck family relationships, rampant II can also destroy a project after large and precious investments in time, money, and people have been committed. Before you know it, BAM! All of a sudden, you’ve noticed that you’re in BBoM city; not knowing how you got there and not knowing how to get the hell out of the indecipherable megalopolis.
Here’s what the “C++ FAQ” writers have to say on the II matter:
Here’s what Stephen Dewhurst says in “C++ Gotchas” number 92:
Use of public inheritance primarily for the purpose of reusing base class implementations in derived classes often results in unnatural, unmaintainable, and, ultimately, more inefficient designs.
Herb Sutter and Andrei Alexandrescu‘s chapter number 34 in “C++ Coding Standards: 101 Rules, Guidelines, and Best Practices” is titled “Prefer composition to inheritance“. Here’s a snippet from them:
Avoid inheritance taxes: Inheritance is the second-tightest coupling relationship in C++, second only to friendship. Inheritance is often overused, even by experienced developers. A sound rule of software engineering is to minimize coupling: If a relationship can be expressed in more than one way, use the weakest relationship that’s practical.
On page 19 in Design Patterns, the GoF state:
“Favoring object composition over class inheritance helps you keep each class encapsulated and focused on one task. Your classes and class hierarchies will remain small and will be less likely to grow into unmanageable monsters.”
Let’s explore this malarial scourge a little closer with a couple of dorky bulldozer00 design and code examples.
The UML class diagram pair below shows two ways of designing a message. It’s obvious that a message is composed of a header and payload (and maybe a trailer), no? Thus, you would think that the “has a” model on the left is a better mapping of a message structure in the (so-called) real world into the OO world than the multi “Is a” model on the right.
I don’t know about you, but I’ve seen many mini and maxi designs like this implemented in code during my long and undistinguished career. I’ve prolly unconsciously, or consciously but guiltily, hatched a few mini messes like this too.
For our second, more concrete example, let’s look at the mixed design and code example below. Since the classes and member functions are so generic, it’s hard to decide which one is “better”, no?
By looking at the test driver below, hopefully the “prefer composition to inheritance” heuristic should become apparent. The inheritance approach breaks encapsulation and exposes a “fatter” interface to client code, which in this case is the main() function. Fatter interfaces are more likely to be unknowingly abused by your code “users” than thinner interfaces – especially when specific call sequencing is required. With the composition approach, you can control how much wider the external interface is – by delegation. In this example, our designer has elected to expose only one of the two additional interface functions provided by the Base class – the ifaceFunc1() function.
Like all heuristics in programming and other technical fields of endeavor, there are always exceptions to the “prefer composition to inheritance” rule. This explains why you’ll see the word “prefer” in virtually all descriptions of heuristics. Even if you don’t see it, try to “think” it. An equivalent heuristic, “prefer acceptance to militancy“, perhaps should also hold true in the world of personal opinions, no?
C++ Dudes To Follow
If you’re a twit like me, and you also “do” C++, you might want to follow these people and resources on twitter:
They don’t tweet much, but when they do, they’re worth listening to. Do you know of any other C++ twitter resources that I should add to my list?
2010 Blog Metrics From WordPress.Com
Note: The content of this post was auto-generated by the folks at WordPress.com.
The stats helper monkeys at WordPress.com mulled over how this blog did in 2010, and here’s a high level summary of its overall blog health:

The Blog-Health-o-Meter™ reads Wow.
Crunchy numbers
A Boeing 747-400 passenger jet can hold 416 passengers. This blog was viewed about 10,000 times in 2010. That’s about 24 full 747s.
In 2010, there were 350 new posts, growing the total archive of this blog to 587 posts. There were 614 pictures uploaded, taking up a total of 25mb. That’s about 2 pictures per day.
The busiest day of the year was March 2nd with 127 views. The most popular post that day was Strongly Typed.
Where did they come from?
The top referring sites in 2010 were linkedin.com, Google Reader, en.wordpress.com, and stumbleupon.com.
Some visitors came searching, mostly for quantum physics, do you design the classes diagrams before writing code, accountability, sysml, and quantum.
Attractions in 2010
These are the posts and pages that got the most views in 2010.
Strongly Typed February 2010
8 comments
UML And SysML March 2009
2 comments
Quantum Consciousness July 2009
1 comment
What The Hell’s A Unit? November 2009
About Me March 2009
2 comments
We’d Do This?
Wise ole’ Ron Jeffries and dumb ole’ Bulldozer00 go back… way, way back. Ron prolly won’t remember the multi-week e-exchange we had, but back in the 90’s we engaged in a passionate, tete-ah-tete tango on the merits and “perceived lack-thereof” of the eXtreme Programming (XP) software development process. That historic exchange (which changed the course of history!) actually happened before the invention of social networking and effortless person-to-person comm – OMG!.
After the dust was settled, the chaw was spat, the pistols were re-loaded, and the ‘nads were comfortably repositioned back into the sack, Ron graciously sent me a signed copy of “Extreme Programming Installed“. I’ll never forget his generous gesture.
It Has To Be This Way
This Fortune blarticle, “When you’re the boss, who gives you reviews?”, starts out with:
“A chief executive at a fast growing tech start-up recently approached executive coach Dave Kashen with an all-too common problem. The CEO frequently reached out to his executive team for feedback, but whenever he sought their opinions, his subordinates seemed to shut down and withdraw.”
Well, duh. This systemic behavior is the result of the cultural environment that CCH forms of governance auto-install into each bozone layer – all the way down the pyramidal stack. In corpo CCHs, the dudes at level N-1 are “taught” by the system to be subservient to their bosses at level N. Dudes at level N-2 are “taught” to be even more subservient to the bosses at level N than their own boss man at level N-1.
This “that’s just the way it has to be” indoctrination is so successful that it works the other way too. The dudes at level N are “taught” by the system to require subservience by the lessers at all levels below them. I wonder if the flustered CEO in the quote realizes this.
If the corpo system wasn’t designed to work this way, there would be anarchy and annihilation. No “ifs“, “ands“, or “buts” about it……… right?














