may amount only to HTML tweaking, the upshot is they are able to
launch into learning a ‘difficult’ programming language like C++
without a prior, gentle, introduction to programming and computers
in general. Consequently any science or engineering student ought to
be able to use this book, even if they have not had a first programming
course. To ensure this is possible, the tutorial introduction to C++ in
Chapters 4 and 5 is selective, but at first gentle.
Important thing number 3:The programming language landscape has
changed. Java emerged in the mid-1990s and is dominant in many fields.
C# could be the language of the future, at least for Windows-based
applications. The language used for this book, C++, has been standard-
ized. This environmental change has affected both the text and the pro-
gram examples, and it has meant that I will be providing code in other
languages on the companion website. Chapter 4 includes some com-
ments about the trade-offs between languages and idioms (page 51).
The testimonials I’ve had from Waterloo students who still use their
course notes suggest that the original idea of software design for engi-
neers (and scientists) was a good one – perhaps even good enough to
compensate for the NeXT machine debacle. I think it still is.
Software Design for Engineers and Scientists explains how many dif-
ferent perspectives there are on what software is, and how we can learn
from them all. But there’s no doubt that the greatest benefit to a designer
comes from working with people who are better designers. I’ve been
lucky to work alongside some great programmers and learn from them.
Chronologically, rather than in order of importance (which I couldn’t
even estimate), these are the people who have left a permanent stamp on
my thinking and ability as a software designer: Jürgen Foldenauer, Tim
Dennis, Chris Toulson, Guy Vonderweidt, Charles Nahas, Lawrence Croft,
Michael Chambers, Jason Fischl, Steffen Lindner, Mehran Farimani,
Li-Te Cheng. Thank you all – wherever you are.
My Waterloo students had to provide feedback on the notes that
became this book. Among those writing helpful critiques, the most
important was Todd Veldhuizen, and I also learned a lot from Don
Bowman. Many graduate students read later drafts and provided their
corrections and comments. Thanks to my colleagues at Waterloo for
approving the software design course, particularly Ed Jernigan,
Shekar, and the TAs who were so encouraging about the course when
the project was driving the students (and us) mad.
Thanks to my colleagues in the Electrical and Computer Engineering
discipline at Memorial for providing the most supportive working
environment I’ve experienced: particularly (in the context of this
book) to Theo Norvell for letting me pontificate on software design
during his courses, and to John Quaicoe for wise management and
inspiring teaching quality.
Thanks to the staff and students of the Department of Electronics
at York, especially Stuart Porter and the students in Data Structures
and Algorithms who have experienced some of this book as it went
through yet more iterations.
Finally, my thanks to Gill, Luke and Stephen for everything else.
Preface xiii

Get Software Design for Engineers and Scientists now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.