Adios to “computer programming”

Have you noticed how seldom people put the modifier “computer” in front of “programming” nowadays?

This may be because our formerly esoteric discipline is now so mainstream that it needs no elaboration.

It may be that we’re all growing lazy.

But I think there’s something deeper.

“Software Engineering” isn’t good enough

The set of things besides traditional computers that need to be programmed is growing by leaps and bounds:┬áTV remotes, holiday light displays, e-readers, smartphones and tablets, Arduino boards, fuel injectors, point-of-sale terminals, MRI machines, 3D printers, LEGO MindStorm robots, networks (software-defined networking / SDN), storage (software-defined storage / SDS), nanobots, social networks, clouds…

Nanobots replicating in a petri dish. Is it fair to say we “program” nanobots? Photo credit: PhOtOnQuAnTiQuE (Flickr)

“Right,” I hear you say. “That’s why I like the term software engineering. Wherever you see programming, it’s software that’s in play. And engineering implies a more sophisticated approach than mere hackish programming.”

Okay.

I think that’s true, but it misses the really big insight. Continue reading

The 8th Characteristic

Biologists will tell you that life has 7 characteristics: organization, metabolism, irritability, reproduction, homeostasis, adaptation, and growth.

I think this list is missing something. It’s foundational, indisputable, and familiar even to kindergartners. But perhaps only kindergartners would call it out; several generations of biologists seem not to notice it enough to add it to their short list. Pick up a biology textbook, and you are unlikely to find a single chapter devoted to it.

Are you ready?

The 8th characteristic of life: mortality.

All living things die.

We see without seeing… Photo credit: John O’Neil (Wikimedia Commons)

Think about the consequences for a few moments. Would any of the ecosystems that you see on nature documentaries be possible without death? Would human civilization, as we know it? Read Orson Scott Card’s short story, “Mortal Gods,” and ponder.

Community blindness

Why am I writing about this as a software guy?

Continue reading

Are You Designing an Apex Predator?

(This post is an excerpt from my forthcoming book, Lifeware. Follow my blog [see right sidebar] to catch the publication announcement.)

A paleontologist walks along a canyon. She finds part of a fossilized crocodilian skull in a layer of sandstone. She immediately knows that this creature’s environment was wet and warm, with an abundance of animal and plant life at all layers in the energy pyramid. In fact, that single clue implies an entire ecosystem with an amazing amount of detail.

Crocodylus Porosus: eats competitors for lunch. Photo credit: Molly Ebersold (Wikimedia Commons)

Her predictions derive from the fact that adult crocodiles are apex predators. They’re at the top of a food chain which stretches down through medium-sized herbivores, omnivores, or carnivores (in modern times, a zebra or jackal, for example), to smaller omnivores and herbivores (fish, turtles), to insects and nematodes and molluscs and arachnids, to plants in a thousand varieties… At every trophic level in the energy pyramid, there’s roughly 10x the biomass of the layer above it, so one crocodile implies a lot of bugs and reeds and mangroves.

Ask a kid for his favorite animal, and you’re likely to hear about an apex predator: tiger, orca, polar bear, great white shark, eagle. The freedom, fearlessness, and power of these animals captures our imagination.

Kids who grow into software engineers have an affinity for complex software “organisms” with highly developed competitive advantage. They still love apex predators.

As my friend Chris was pointing out to me yesterday, a highly evolved design comes naturally in software. Structural engineers are constrained by gravity and tensile properties of steel to not attempt bridges across the ocean; software, on the other hand, has much fuzzier (and more poorly understood) limits.

But here’s an important lesson from biology: apex predators require a rich, layered ecosystem in which their adaptations can shine. Take a crocodile and plop it down in the middle of the Sahara or the artic tundra; how long will it survive?

Software is the same way. If you are designing an enterprise application that offers rich reporting, seamless transitions to and from the cloud, sophisticated licensing, integration with management frameworks and directory services, single sign-on, and industrial-strength security, you are designing an apex predator. That’s cool. But is there enough “biomass” in the environment to sustain your killer app? The enabling environment has to include trained support and sales staff, analysts, VARs, professional IT organizations with time and budget, a friendly legal climate, whitepapers, a developer community, and so on and so on. If you don’t have this, your apex predator will die. Make sure you understand the ecosystem implied by your design; addressing the environment is as much a part of the design and development as the UML diagrams and the WSDL.

Cheating is possible. You can keep crocodiles alive in a zoo without an acre of mangrove swamp, and you can short-circuit VARs and skimp on whitepapers and so forth. But cheating is expensive and suboptimal. And even cheating requires plenty of planning and investment.

An alternative to cheating is to not try to build your apex predator until the ecosystem evolves. Maybe you should settle for a handful of snapping turtles and a snake, until the swamp’s big enough to house a crocodile. Snapping turtles might not be a bad business… This choice isn’t the same as abandoning a vision–it’s just realizing that ignoring the timetable of evolution may be unwise.

Action Item

Look at your roadmap. Is the next round of releases going to drop an “apex predator” on the market like a crocodile in the arctic? What must be true of the ecosystem for the product to succeed, and how can you make those things true?