The aim of this textbook is to present the central and basic concepts, techniques, and tools of computer science. The emphasis is on presenting a problem-solving approach and on providing a survey of all of the most important topics covered in computer science degree programmes. Scheme is used throughout as the programming language and the author stresses a functional programming approach which concentrates on the creation of simple functions that are composed to obtain the desired programming goal. Such simple functions are easily tested individually. This greatly helps in producing programs that work right first time. Throughout, the author presents techniques to aid in the writing of programs and makes liberal use of boxes which present "Mistakes to Avoid." Many programming examples are discussed in detail which illustrate general approaches to programming. These include: * abstracting a problem; * creating pseudo code as an intermediate solution; * top-down and bottom-up design; * building procedural and data abstractions; * writing progams in modules which are easily testable. Numerous exercises help the readers test their understanding of the material and develop some ideas in greater depth. As a result this text will make an ideal first course for all students coming to computer science for the first time.