While this is intended as an intro programming textbook, I suspect more people here will be considering it as an intro to Scheme/LISP than as beginning programming text. If you try to use this book to learn Scheme, you will be frustrated. It is planned out to show problem-solving skills rather than how to use Scheme. That said, I suspect I do have some insight into how the book would be received by an intro programming student. I had not done any previous functional programming and thus I had some of the same conceptual issues a beginner would have. I don't think it would work well here either. While the pedagogical approach is well thought out, the low-level writing (ie, the actual sentences and paragraphs) is often incomprehensible. I think Scheme, or any other form of LISP, is also a poor choice of language for an intro class. Obviously, these writers have a different point of view-check out their "Teach Scheme" web site to see what they are thinking. I think LISP is a mighty language and that functional programming is great for advanced projects and lots of fun to boot. However, the great bulk of programming students will end up mostly doing OOP with languages like Java or C++, starting with the very next CS class they take. It makes more sense to begin with skills that are more like typical programming than to start with a paradigm that most students will never work with after CS 1 is over. Functional programming and LISP are better left for those who have already mastered the basic skills. This book is designed to be used with the free PLT Scheme package, produced by the same group that wrote the book. PLT Scheme is a very good mini-IDE on the usual LISP pattern, mixing a compiler and an interpreter surprisingly seamlessly (you'll understand how this works after you use it a little bit.) Unlike the other free LISP packages, PLT is at home in MS Windows, it does not try to simulate a UNIX environment. Skip this book, but get PLT Scheme anyway. Processing simple forms of data. Students, teachers, and computers Numbers, expressions, simple programs Programs are function plus variable definitions Conditional expressions and functions Symbolic information Compound data, part 1: structures The varieties of data Syntax and semantics Processing arbitrarily large data. Compound data, part 2: lists More on processing lists Natural numbers Composing functions, revisited again List abbreviations More on processing arbitrarily large data. More self-referential data definitions Mutually referential data definitions Development through iterative refinement Processing two complex pieces of data Local definitions and lexical scope Abstracting designs. Similarities in definitions Functions are values Designing abstractions from examples Designing abstractions with first-class functions Mathematical examples Defining functions on the fly Generative recursion. A new form of recursion Designing algorithms Variations on a theme Algorithms that backtrack The cost of computing and vectors Accumulating knowledge. The loss of knowledge Designing accumulator-style functions More uses of accumulation The nature of inexact numbers Changing the state of variables. Memory for functions Assignment to variables Designing functions with memory Examples of memory usage The final syntax and semantics Changing compound values. Encapsulation Mutable structures Designing functions that change structures Equality Changing structures, vectors, and objects. This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills—critical reading, analytical thinking, creative synthesis, and attention to detail—that are important for everyone, not just future computer programmers. The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners. The environment grows with the readers as they master the material in the book until it supports a full-fledged language for the whole spectrum of programming tasks.All the book's support materials are available for free on the Web. The Web site includes the environment, teacher guides, exercises for all levels, solutions, and additional projects.A second edition is now available. This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skillscritical reading, analytical thinking, creative synthesis, and attention to detailthat are important for everyone, not just future computer programmers. The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners. The environment grows with the readers as they master the material in the book until it supports a full-fledged language for the whole spectrum of programming tasks. All the book's support materials are available for free on the Web. The Web site includes the environment, teacher guides, exercises for all levels, solutions, and additional projects. A second edition is now available.
This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills—critical reading, analytical thinking, creative synthesis, and attention to detail—that are important for everyone, not just future computer programmers.The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners. The environment grows with the readers as they master the material in the book until it supports a full-fledged language for the whole spectrum of programming tasks.All the book's support materials are available for free on the Web. The Web site includes the environment, teacher guides, exercises for all levels, solutions, and additional projects.
This introduction to programming places computer science in the core of a liberal arts education. Unlike other introductory books, it focuses on the program design process. This approach fosters a variety of skills -- critical reading, analytical thinking, creative synthesis, and attention to detail -- that are important for everyone, not just future computer programmers. The book exposes readers to two fundamentally new ideas. First, it presents program design guidelines that show the reader how to analyze a problem statement; how to formulate concise goals; how to make up examples; how to develop an outline of the solution, based on the analysis; how to finish the program; and how to test. Each step produces a well-defined intermediate product. Second, the book comes with a novel programming environment, the first one explicitly designed for beginners. The environment grows with the readers as they master the material in the book until it supports a full-fledged language for the whole spectrum of programming tasks. - Publisher.