The aim of this text is to define the principal elements in the science of computing. The authors' approach reinforces that computer scientists deal not just with programming syntax and applications, but also use programming as a tool with which to explore and develop ideas. The book is broken down into units on algorithms, architecture, artificial intelligence, database theory, human computer interfacing, communications, numerical computing, operating systems, programming languages, software methodology and social, ethical and professional issues. Presentation of the C language is integrated with other topics throughout the book. This approach fosters the use of programming as a problem-solving tool and places the study of programming in the broadest context.