Hi,
Here are some annotated references to some good books on designing
interfaces. My previous 'optimization references' post has many
that deal with interfaces; and I have only duplicated the first
one from that list.
The most engaging digestable overall discussion of programming.
Includes chapters on interfaces and performance.
.book{kernighan99,
author = "{Brian W. Kernighan and Rob Pike}",
title = "The Practice of Programming",
publisher = "Addison--Wesley",
address = "Reading, Mass.",
year = 1999 }
This classic text presents the concepts of cohesion and coupling.
Software should be constructed from highly cohesive, loosely coupled
pieces. I have noticed that scientific software frequently fails in this
regard due to method-itis without redesign: start with a decent comp
chem program, add method A, then add method C, then method B, ...
and before u know it once cohesive components are diluted and tightly
coupled to other pieces via all manner of mostly undocumented cleverness.
.book{yourdon78,
author = "{Edward Yourdon and Larry L. Constantine}",
title = "Structured Design: Fundamentals of a Discipline of Computer Program and Systems Design",
edition = "Second",
publisher = "Yourdon Press",
address = "New York",
year = 1978 }
Here is another entry from Kernighan which espouses reading and writing
good software. The result is simple versions of many great unix tools.
.book{kernighan81,
author = "{Brian W. Kernighan and P. J. Plauger}",
title = "Software Tools in Pascal",
publisher = "Addison--Wesley",
address = "Reading, Mass.",
year = 1981 }
Another classic. Although the focus and details are on object
oriented software, the generality, depth, and craftmanship are
applicable to all programming.
.book{gamma95,
author = "{Erich Gamma, Richard Helm, Ralph Johnson, and John Vlissides}",
title = "Design Patterns: Elements of Reusable Object-Oriented Software",
publisher = "Addison--Wesley",
address = "Boston",
year = 1995 }
.article{dubois2002,
author = "{Paul F. Dubois}",
title = "Designing Scientific Components",
journal = cse,
volume = 4,
number = 5,
pages = {84--90},
month = "Sep./Oct.",
year = 2002 }
.string{cse = "Computing in Science and Engineering"}
Received on Sun Oct 22 2006 - 06:07:30 PDT