جزییات کتاب
Серьёзная книга на английском языке о программировании, которая не просто учит какому-нибудь языку программирования, а рассматривает более общие вопросы программирования. Например, как наилучшим образом решить ту или иную задачу, когда вариантов исполнения может быть множество, но важно выбрать именно оптимальный вариант. Так же подробно рассматривается много фундаментальных вопросов, причём, судя по просмотру, книга практически не »грузит» математическим формализмом.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.ContentsPrefaceWhy Everyone Should Learn to ProgramDesign RecipesThe Choice of Scheme and DrSchemeThe Parts of the BookAcknowledgmentsI Processing Simple Forms of Data1 Students, Teachers, and Computers2 Numbers, Expressions, Simple Programs3 Programs are Function Plus Variable Definitions4 Conditional Expressions and Functions5 Symbolic Information6 Compound Data, Part 1: Structures7 The Varieties of Data8 Intermezzo 1: Syntax and SemanticsII Processing Arbitrarily Large Data9 Compound Data, Part 2: Lists10 More on Processing Lists11 Natural Numbers12 Composing Functions, Revisited Again13 Intermezzo 2: List AbbreviationsIII More on Processing Arbitrarily Large Data14 More Self-referential Data Definitions15 Mutually Referential Data Definitions16 Development through Iterative Refinement17 Processing Two Complex Pieces of Data18 Intermezzo 3: Local Definitions and Lexical ScopeIV Abstracting Designs19 Similarities in Definitions20 Functions are Values21 Designing Abstractions from Examples22 Designing Abstractions with First-Class Functions23 Mathematical Examples24 Intermezzo 4: Defining Functions on the FlyV Generative Recursion25 A New Form of Recursion26 Designing Algorithms27 Variations on a Theme28 Algorithms that Backtrack29 Intermezzo 5: The Cost of Computing and VectorsVI Accumulating Knowledge30 The Loss of Knowledge31 Designing Accumulator-Style Functions32 More Uses of Accumulation33 Intermezzo 6: The Nature of Inexact NumbersVII Changing the State of Variables34 Memory for Functions35 Assignment to Variables36 Designing Functions with Memory37 Examples of Memory Usage38 Intermezzo 7: The Final Syntax and SemanticsVIII Changing Compound Values39 Encapsulation40 Mutable Structures41 Designing Functions that Change Structures42 Equality43 Changing Structures, Vectors, and Objects