1 The Purpose of This Text This text has been written in response to two trends that have gained considerable momentum over the past few years. The first is the decision by many undergraduate engineering and science departments to abandon the traditional programming course based on the aging Fortran 77 standard. This decision is not surprising, considering the more modem features found in languages such as Pascal and C. However, Pascal never developed a strong following in scientific computing, and its use is in decline. The new Fortran 90 standard defines a powerful, modem language, but this long-overdue redesign of Fortran has come too late to prevent many colleges and universities from switching to C. The acceptance of C by scientists and engineers is based perhaps as. much on their perceptions of C as an important language, which it certainly is, and on C programming experience as a highly marketable skill, as it is on the suitability of C for scientific computation. For whatever reason, C or its derivative C++ is now widely taught as the first and often only programming language for undergraduates in science and engineering. The second trend is the evolving nature of the undergraduate engineering curriculum. At a growing number of institutions, the traditional approach of stressing theory and mathematics fundamentals in the early undergraduate years, and postponing real engineering applications until later in the curriculum, has been turned upside down.