Monthly Archives: August 2001

Common Sense

Steve McConnell is one of the most practical software guys that I am aware of. In the recent issue of IEEE Software, he wrote an editorial entitled Common Sense. He wrote about one of his pet peeves, the idea that good software engineering is “all just common sense.” My favorite is his commentary on Spare the rod and spoil the child.

Here is the article: Common Sense, by Steve McConnell.

Slack off

I decided to slack off a bit. I need some slack time to recharge my batteries. I noticed that I am not nearly as creative as I could be if I’m not rested, or if I don’t have time to think and absorb the big picture. You say you don’t have time to slack off? You are too busy? You have too many things to do? Think again.One of my favorite gurus decided to not slack off entirely, and he wrote a pretty good book on the subject. Read it the first chance you get: Slack: Getting Past Burnout, Busywork, and the Myth of Total Efficiency, by Tom DeMarco. Fast Company magazine asked Tom in an interview to talk about the reasons for “slacking off.”

As some of you already know, I share Tom’s point of view on many of the issues he raises. Telling people to only plan for 15 to 20 effective on-task hours per week comes as a shock at first, but then they start getting some data, and they realize that 15 might be at times too ambitious.

One idea that I have followed through the years was that I try to turn everything that I need to do into some sort of process. This allows me to free up my thinking. Once I have a process for a problem I don’t have to think about that problem again quite as much. It is not that I don’t think about it all—not unless I manage to automate it—but rather, I can concentrate on other problems, for which I don’t have a solution yet.

So, do you have a solution for slacking? If not, I urge you to figure it out how to work slacking into your regular schedule.

Aspect-Oriented Programming

A few months ago I came across the concept of Aspect Oriented Programming or AOP. I thought that it was interesting. And I stored the information away… somewhere. The current issue of the Communications of the ACM features a series of articles on this topic. I received my copy a few weeks ago. After the cover was staring me in the face for a while, I decided that it is time to read it.

What is AOP? Is this a new fad? I haven’t even gotten down this OOP (Object-Oriented Programming) thing—you might say—and you want to talk to me about something new already? The good news is that OOP is not going away, so don’t worry. AOP augments OOP and enables you to express certain concepts in a more powerful way.

Another piece of good news: There is a ton of information on the web about AOP. When OOP came about one had to buy books, go to conferences, schmooze with other OOP enthusiasts to find out more about the technology. These days you can turn to the web and learn a great deal. Start with, the Aspect Oriented Software Development web site.

The definition of AOP from is: “Aspect-oriented software development is a new technology for separation of concerns (SOC) in software development. The techniques of AOSD make it possible to modularize crosscutting aspects of a system.”

Before you stop reading because you think that this is yet another purely theoretical nonsense with absolutely no practical applications take a look at AspectJ. AspectJ is a seamless extension to support AOP for Java.

It is important to emphasize about AOP that it builds on existing technologies. It doesn’t work without a sound design. If you are to create a great design, you will have to apply the right technique to the right problem, be it AOP, OOP, functional decomposition, structured programming, or anything else. Remember: AOP is yet another tool into your software developer’s toolbox. If all you have is a hammer then everything will look like a nail!

Now you know that AOP exists. Go an and read about it, learn about, and write to me about it. Share your thoughts with the rest of your network.

* Association for Computing Machinery
* Aspect Oriented Software Development
* AspectJ