The basis for education in the last millennium was "reading, writing, and arithmetic." Now it is reading, writing and computing. Learning to program is an essential part of the education of every student in the sciences and engineering. Beyond direct applications, it is the first step in understanding the nature of the undeniable impact of computer science on the modern world. This book aims to teach programming to those who need or want to learn it, in a scientific context.

The primary goal is to empower students by supplying the experience and basic tools necessary to use computation effectively. The approach is to teach students that writing a program is a natural, satisfying and creative experience (not an onerous task reserved for experts). This book progressively introduces essential concepts, use classic applications from mathematics and the sciences to illustrate the concepts, and provide opportunities for students to write programs to solve engaging problems.

This book uses the Java programming language for all of the programs in this book—it refers to Java parenthetically in the title to emphasize the idea that the book is about programming and problem-solving, not Java per se. It teaches basic skills that are applicable to many modern computing environments. It is a self-contained treatment intended for people with no previous experience in programming.

Intended Audience:

This book is an interdisciplinary approach to the traditional CS1 curriculum, where it emphasizes the role of computing in other disciplines, from materials science to genomics to astrophysics to network systems. This approach emphasizes for students the essential idea that mathematics, science, engineering, and computing are intertwined in the modern world. While it is a CS1 textbook for first-year college students in the sciences and engineering (including computer science students), the book also can be used for self-study or as a supplement in a course that integrates programming with mathematics, science, and/or engineering.

For instructors.
If you wish to consider adoption, please fill out this form to examine prepublication chapters or ask for more information.


For students.
This booksite contains an extensive amount of supplementary information that is intended for your use while programming. It includes links to program code, test data, and solutions to selected exercises. It also contains text digests of each chapter.

For self-study.
You can begin learning to program using the textbook and this booksite. Section