Posted by: camz | September 3, 2004

Fragile Developers

Most applications are far from simple, those days are gone. Most applications are actually distributed systems with complex interactions between modules and architecture layers. The first hint of this was in client/server applications. These were some of the first distributed applications created and to build them properly and efficiently required different design methodologies. Suddenly the performance of IPC or the network was now a factor in the performance of the overall system.

Some developers thought that client/server was “hard” or complicated, or any number of other excuses. The reality was that they required knowledge of other architecture layers that had been abstracted. If you understood the layers below your application, it was easy, and you could develop applications that performed well. If you didn’t understand the layers below, or blindly used the abstractions of them, then you ran into problems.

We see the same thing with some of these modern languages, J2EE in particular. The problem has compounded itself with far too many layers of abstraction and architecture. Not only is it more difficult to understand all the layers, but there are conceivable so many of them that it may even be impossible to properly understand them all. One thing is certain though, which is that you are still fundamentally building a distributed system. Which is where the problem lies. Language frameworks like J2EE trick too many developers into thinking they are building one big application, and they fail to think about the distributed nature of the whole thing.

When you are working with client/server applications or developing a system in QNX it’s pretty obvious that the system is distributed. The solution consists of discrete modules that are started and stopped from a command line independent of each other. It’s not so obvious in J2EE where the framework does it all, including startup and shutdown and hides it away from the fragile developers.

That is what it comes down to in the end, these modern languages and frameworks produce fragile developers. You’ve heard the cliche that if you program in C it is easy to “shoot yourself in the foot”, and it’s darn near impossible to do that in something like Java. It’s those darn pointers and memory leaks they all say.

The thing that we forget is that shooting yourself in the foot is rarely fatal. Sure, it hurts like hell, but we learn from it. The things we learn are the details of the underlying architecture layers. If you are in Java, you can’t shoot yourself in the foot, at the very worst, you can drop something moderately heavy on your foot. The problem is that it’s not painful enough so you tend to do it over and over again because you forget the pain all to quickly.

We don’t need more fragile developers, we need ones that that know the value of getting bumped and bruised along the way… those bumps and bruises ultimately make us stronger. As a result we make stronger applications.

So go ahead, be a fragile developer, but don’t expect to be able to build anything other than a fragile application.



  1. […] Objective Relations April 6, 2007 Posted by camz in Software Development. trackback I have often heard people say that you can’t mix object models and relational models. I have to admit that I don’t get it, perhaps I’m too dumb to understand what they are trying to tell me, or perhaps not, I guess I’ll never know. I do know that the people most likely to say this have comp-sci degrees and learned how to program in an academic setting. They also tend to believe in “pure” programming methodologies, and they tend to call things patterns, and anti-patterns, and they probably talk about extreme programming. Unfortunately, most of them couldn’t spot a pattern in real code without a reference book and hours of research. You can probably tell by now (if you are still reading) that I don’t have a lot of respect for this sort of so called developers, and I’ve written about them before. […]

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s


%d bloggers like this: