MIT Press - Software Engineering - How To Design Programs