C++: Not Dead

dennis_ritchieWith all the new languages that have come up since I started programming, I can't help but remember reading Dr. Dobbs Journal in the mid 1980s. The worth of C++ was being debated.

About 3 decades later, 'The Beast Is Back' according to this O'Reilly book. And yet, the India Times complains that Indians are writing in the language of the past: C++.

Nevermind that C++ has a heavy code base. But the India Times doesn't seem to understand what that means.

It makes you wonder, doesn't it? It should. After all, Facebook is working with C++. C++ is getting extended.

Why is it that C++ is such an ugly duckling for some?

Since over the years I have coded in more languages than most, I think of C++ as a manual transmission on a car. You can directly access the power under the hood and use it as well as your skill permits. You can dig into the hardware directly (if your operating system lets you). And, you can shoot yourself in the foot. A skilled C++ developer can do a lot, quickly - but it takes more time to do that. It's fast. Yes, it's faster than C#/.Net (long read) in most cases.

I joked with someone not long ago after cleaning a whiteboard, ".Net developers don't know how to clean up after themselves". A seasoned C++ developer is used to being responsible for their code rather than being dependent on someone else to be responsible - particularly when that someone doesn't assume liability.

This is not to say that C++ should be used for everything. Far from it. Yet it is not a dead language. If you need things done fast, C++ is still the way to go - particularly if you bother to design the application properly so you don't have to keep changing it.

No, no, C++ is not dead. It has lived longer than the .Net framework despite not having a marketing department.


The Right Question To Ask About Communication.

Museum of CommunicationsI read two posts in the past week that had me thinking about communication - and some real world experience to add weight to it. The first post is Social Discourse 101: Listening to Your Adversary - a title that says more than you may think when you consider if you're 'listening to an adversary', you may not be listening at all. We don't listen to adversaries. We argue with them, and when we argue we have our filters on.

Read The Argument Culture: Moving from Debate to Dialogue. Really.

The other post is, amusingly, Email is Broken, It Needs To Die, and We'll Be Sorry When It's Gone. As a species, we're very good for blaming our child technologies for our inability to communicate properly - and our answer is typically to birth Yet Another Technology that fails to meet our needs and adds another technology babel where we already have cultural and linguistic babels.

And the real world? Who hasn't been to a meeting where two opposing sides have strong opinions and refuse to find the middle ground? Who hasn't been constantly interrupted by someone who thinks talking loud makes you agree? I could explain it away as people suck, but people don't suck as much as we think. We think they suck when they don't agree with us, which is all about ego - invariably, you'll hear people who have these problems use 'I' and 'me' until they're blue in the face. For people like me, I find it annoying, and that becomes a problem for me because I don't want to listen to annoying people.

Oh look. There's my ego.

So should I adapt a technology to be heard? A bullhorn? Then they'll get a bullhorn. The escalation will continue until there are dueling nuclear monologues.

There's something to be said for communicating properly. Some people aren't good at it, and they're not good at it because they think that their method is working. Sometimes the best strategy is to demonstrate to them that their method is not working.

How do you do that?

Now that's the real question we should be asking.

It's not technology. It's people.

The Tyranny Of An Inefficient Skynet

Skynet for DummiesIf you haven't watched at least one of the Terminator movies, I'd like to welcome you to the planet.

The basis for the Terminator movies is that this system, Skynet. In the movies, Skynet is built on the best hardware and software we humans can pile together (rumor has it the Pyramids were one of the initial attempts). The supersystem we created then proceeds to get rid of the problems - not even bothering with Asimov's laws - and a movie series was begun.

It's not a new story. It's a Frankenstein with asexual self-replication. Golems Gone Wild. Heinlein even played with it a bit in 'The Moon Is a Harsh Mistress'.

A predictable Skynet, though, is hardly a concern. Following brutal logic that lacks humanity (or maybe the wrong parts of it?), we can see how a super-intelligence would think that humans are problems that need to find... resolution.

An inefficient Skynet, on the other hand, would be horrid. Imagine, if you would, a system built in a hodge podge sort of way. It would 'break' now and then, creating unpredictable behaviors. Network congestion in this case would be nothing to sneeze at - the system might override itself when doing something predictable. It could just randomly kill people and then act innocent the rest of the time, completely unaware that it had - because, of course, it lacks logging ability. Or it might suddenly decide every human on the planet needs emails about erectile dysfunction and Russian wives.

It might take over your internet enabled device and control how brown your toast is, or get into a patient database at a hospital and decide to switch people's medications.

It might get bogged down while trying to figure out how to brew a proper cup of tea. (we miss you, DNA)

No, I'll take the rational Skynet any time.

Please, follow sensible software engineering practices.