Thursday, April 5, 2012

Analysis and synthesis in software engineering

"In engineering, as in other creative arts, we must learn to do analysis to support our efforts in synthesis. One cannot build a beautiful and functional bridge without a knowledge of steel and dirt, and a considerable mathematical technique for using this knowledge to compute the properties of structures. Similarly, one cannot build a beautiful computer system without a deep understanding of how to 'previsualize' the process generated by the code one writes."
~Abelson and Sussman


Engineering, unlike art, aims to satisfy a client's needs. This involves tradeoffs between the different qualities in the final artifact. To achieve an acceptable tradeoff requires that the designer be able to predict the qualities that the final artifact will exhibit before it is built. Software Engineering currently has a poor track record of predictably achieving a balance of qualities in the final software product. We have achieved some success in predictive models for performance and availability, at least I hope we have. But there are many other qualities that we still lack good measures for no less predictive models for assessing design. End-user usability, code comprehension, modifiability, tracability are just some of the ones that come to my mind. I think this quote is one of the best for capturing the essence of the problem.

No comments:

Post a Comment