I think as programmers you should read and understand this:
http://martinfowler.com/ieeeSoftware/explicit.pdf
From the expert in OOAD and related stuff - Martin Fowler.
Software Engineers should read this
A short recommendation: every programmer should read and understand Martin Fowler's IEEE Software column on making implicit design and behaviour explicit.
