Is Software Art?

I was reading Architecture by Sir Thomas Graham Jackson tonight to see if and where the parallels between real Architecture and Software Architecture are.  I was struck by the amount of art that is imbued and intertwined with Architecture.  As he says:

So two workmen will do the same thing, but will do it in a different way.  The work of both may be useful and serviceable, but that of one will show thought and imagination, suggestive of further progress; that of the other will be correct, but dull and commonplace, leading no further.  The one man is an artist, the other a mere mechanic.

Am I a mechanic or an artist?  I consider myself a Software Architect, but that would mean I’m an artist.

Where is the art in software?

Where is the beauty in software?

Is it from the graphic designers? NO.  They are like interior decorators in my opinion.  They make our buildings look nice to the inhabitant.  We make the structure.

I can tell you where the beauty in software is:

  • TCP/IP
  • The World Wide Web

We have something called elegance in software.  There are elegant solutions and brutish solutions.  I propose the elegant ones are where our craft becomes architecture.  Something sustainable, something that will stand the test of time.  Something to be copied.  That is what Software Architecture is.



What are your best practices when it comes to exceptions?

Do you always log them?

In the past, I have stuck with the advice of Joshua Bloch.  Exceptions are for exceptional situations.  It is Item 39 in his great work Effective Java: Programming Language Guide. If it’s not exceptional and you expect the condition to happen sometimes; use an if.. else block.

Also, stick to the out-of-the-box exceptions as much as possible and create your own exceptions only when you need to.

Exceptions are a great way to communicate the contract of a method if you’re writing an API or client library.  But if you’re writing a code in a small team, does it really help to throw exceptions all over the place?

I think it does in certain situations.  For example, if your team is writing a layered architecture app; then each layer would benefit from throwing exceptions to the layer above it that depends on it.  Within the layer I don’t think it buys you much.  But from the data layer to the business logic layer and then to the presentation layer; a lot of meaning can be translated through exceptions.  Plus, these layers are usually written by different people and in parallel.  Exceptions help the other developers know what to expect from the methods they call in these lower layers.

Please comment with your exception best practices!

Software Education in the 21st century

It is unfortunate that today’s software practitioners are put at such a disadvantage by spending four years of their lives studying things that are totally irrelevant to creating software (i.e. a BS in Computer Science).  I have yet to use any calculus in my career.  Discrete Mathematics was also a total waste of time.  P = NP is nifty, but not really relevant to my profession.

That is why there is such a brazen turn against the term software engineering.  This is where things such as the Agile Manifesto come from.  It is the pent-up frustration of software developers finally saying “ENOUGH”!  I want to get things done, I don’t feel like studying so much theory that I forget why I started Computer Science in the first place.

This era in time is analoguous to the late 1800’s in which established universities such as Harvard, et. al. were still teaching Latin and other useless subjects.  What came out of this was MIT, all the A & M schools, Virginia Tech, Texas Tech, etc.  Universities that actually prepared there graduates for the real world.

The big universities are so large that they cannot be turned quickly and today’s software profession changes every month.  A new model of education needs to be developed lest these big university programs are replaced.  There is a vacuum right now for certifying and educating software developers.  Either universities need to change, and change quickly, or the industry will find another way.   But time is running out….