Archive
Peace And Despair
Existential despair is the painful discrepancy between what is and what should be – Paul Watzlawick
Your despair can be my peace and vice versa. On the other hand, my despair can be your despair and my peace can be your peace.
Relentless Assault
Microsoft’s Herb Sutter is a whirling dervish. Since the ISO approval of the C++11 standard last fall, he’s been on a crusade to promote C++ via several comparative assaults on Java and Microsoft’s own C#.
Herb’s latest blitzkrieg occurred at the lang.next 2012 conference (video link, slides link). In this slide, Herb summarizes some of the C++11 features that close the productivity and safety gap relative to C# and Java.
In this next slide, Herb contrasts C++11’s adherence to its more open “trust the programmer” philosophy against the more closed “we know what’s good for you” C#/Java philosophy.
Unless the large movement of business applications to the cloud is the latest fad du jour, the following two slides show that the largest software development and maintenance costs will shift from labor to compute efficiency. Thus, it doesn’t matter how programmer friendly your language is and how low the salaries you pay are, you might find that your costs are going up because of power drain in massive data centers and time spent frantically optimizing VM-based code that’s relatively slower and bigger.
In closing, Herb, the nice guy that he is, backs off a bit with this “the right tool for the right job” slide:
Is Herb stretching the truth and exaggerating the improvements offered up by C++11? The fact that I wrote this post obviously means that I don’t. What about you, dear reader? What say you?
Spiritual Google
Wow! I can’t believe I stumbled upon this. What’s “this“, you ask? It’s a video of a talk given by Eckhart Tolle at Google. Yes, Google.
I know that religion is a deeply personal issue, but if you’ve never seen Eckhart Tolle in action, please indulge BD00 by at least watching a few minutes of the video with an open mind. Lemme know if it tickles something inside of you. If you get a “meh” feeling, then that’s OK too. Do you think he’s the real deal or just another Swaggart/Bakker clone?
Quality Living
It’s one thing to have a high falutin’ written quality policy (and it’s standard fare for all commercial enterprises to have one enshrined in magnets, buttons, key chains, and strategically placed posters), but it’s another thing to live it. If DICsters joke about the “quality” policy frequently and managers never utter the word “quality” during the real-time execution of projects, then neither side is living it, no?
How could you know whether your company is living up to your quality policy? Do your customers and users frequently tell you – unsolicited? Do your earned value metrics tell you? Are your people unabashedly and vocally proud of what they build?
Thank god that at most companies, the management group is a true champion of quality and those “few” trench dwellers who cynically joke about it are simply deemed as a handful of miserable and disgruntled blokes who must be marginalized or ex-communicated.
Starting Point
Unless you’re an extremely lucky programmer or you work in academia, you’ll spend most of your career maintaining pre-existing, revenue generating software for your company. If your company has multiple products and you don’t choose to stay with one for your whole career, then you’ll also be hopping from one product to another (which is a good thing for broadening your perspective and experience base – so do it).
For your viewing pleasure, I’ve sketched out the structure and provided some code-level metrics on the software-intensive product that I recently started working on. Of course, certain portions of the graphic have been redacted for what I hope are obvious reasons.
How about you? What does your latest project look like?
The Old Is New Again
Because Moore’s law has seemingly run its course, vertical, single processor core speed scaling has given way to horizontal multicore scaling. The evidence of this shift is the fact that just about every mobile device and server and desktop and laptop is shipping with more than one processor core these days. Thus, the acquisition of concurrent and distributed design and programming skills is becoming more and more important as time tics forward. Can what Erlang’s Joe Armstrong coined as the “Concurrent Oriented Programming” style be usurping the well known and widely practiced object-oriented programming style as we speak?
Because of their focus on stateless, pure functions (as opposed to stateful objects), it seems to me that functional programming languages (e.g. Erlang, Haskell, Scala, F#) are a more natural fit to concurrent, distributed, software-intensive systems development than object-oriented languages like Java and C++; even though both these languages provide basic support for concurrent programming in the form of threads.
Likewise, even though I’m a big UML fan, I think that “old and obsolete” structured design modeling tools like Data and Control Flow Diagrams (DFD, CFD) may be better suited to the design of concurrent software. Even better, I think a mixture of the UML and DFD/CFD artifacts may be the best way (as Grady Booch says) to “visualize and reason” about necessarily big software designs prior to coding up and testing the beasts.
So, what do you think? Should the old become new again? Should the venerable DFD be resurrected and included in the UML portfolio of behavior diagrams?
Mistake Recognition
First question: Is “mistake recognition” allowed in your organization? Second question, if, and only if, the answer to the first question is “yes“: How many different “enabler” groups are required by your process to “have a say” in the path from “recognized” to “repaired”
If the answer to the first question is a cultural “no“, then as the lower trace in the dorky diagram shows, out the door your cannonballs go!
Glide On The Peace Train
The other day at work, while diligently plying away on an interface design, I just happened to notice that I was singing the (artist formerly known as) Cat Stevens’ tune “Peace Train“ to myself. Not out loud (thankfully), but to myself – in my head. This is just another example that reinforces the fact that “we don’t think; thinking happens to us“. No?
It may be scary to some to discover that thinking unconsciously and automatically happens to us, but the saving grace is that at least we can consciously choose how to react to those thoughts. Well, most of the time. Well, some of the time?
What was the last song you sang to yourself?
Roster Of System Thinkers
Someone on Twitter, I can’t remember who, tipped me off to a terrific “Complexity Thinking” Slideshare deck. I felt the need to snip out this slide of system thinkers and complexity researchers to share with you:
So far, I’ve read some of the work of Ackoff (my fave), Deming, Drucker, Meadows, Senge, Weinberg, and Jackson. In addition, I’ve studied the work of “fringe” system thinkers Rudy Starkermann, John Warfield, Bill Livingston, Ludwig von Bertalanffy, Thorstein Veblen, Ross Ashby, Stafford Beer, and Norby Wiener.
I look forward to discovering what the others on the roster have to say.
Empty Lifeline
Check out this “bent” pair of UML sequence diagrams:
The system on the right is pretty loosely coupled, no?












