23 April 2008

Stop Optimizing

by mo

I’m still reading…

Effective Java(TM) Programming Language Guide (The Java Series)
by Joshua Bloch

Read more about this book...

Here’s a few quotes from the book, that I found interesting:

We should forget about small efficiencies, say about 97% of the time: premature optimization is the root of all evil. - Donald E. Knuth

Don’t sacrifice sound architectural principles for performance. Strive to write good programs rather than fast ones. If a good program is not fast enough, its architecture will allow it to be optimized. Good programs embody the principle of information hiding: Where possible, they localize design decisions within individual modules, so individual decisions can be changed without affecting the remainder of the system.

A typical example of pre-mature optimization is thinking about database calls when working up in a UI layer. These are two completely separate architectural layers and should be developed without optimization constraints in mind.

For example:

...we have to check if its a post back, to make sure we don't make another database hit. If we retrieve the contents of the page each time the page is requested that’s going to be another database hit.

Relax… there are lots of techniques (lazy loading, identity map…) to improve performance if it’s an issue. Optimizing the UI for database performance is weak, and will more than likely cause you to build a crippled UI layer before even hitting the lower layers.

Often attempted optimizations have no measurable effect on performance; sometimes they make it worse.

If we take the above example, if you’re constantly optimizing for database performance be weary of what it’s costing you.

E.g. ViewState, extra conditional code that’s is difficult to understand and that no deveveloper wants to come back and touch that code.

It is sub-optimal to solve a problem that doesn’t exist.