Code Complete
Quotes from the Book
Programs must be written for people to read, and only incidentally for machines to execute.
Computational processes are abstract beings that inhabit computers. As they evolve, processes manipulate other abstract things called data. The evolution of a process is directed by a pattern of rules called a program. People create programs to direct processes. In effect, we conjure the spirits of the computer with our spells.
Syntactic sugar causes cancer of the semicolon.
I think that it's extraordinarily important that we in computer science keep fun in computing. When it started out, it was an awful lot of fun. Of course, the paying customers got shafted every now and then, and after a while we began to take their complaints seriously. We began to feel as if we really were responsible for the successful, error-free perfect use of these machines. I don't think we are. I think we're responsible for stretching them, setting them off in new directions, and keeping fun in the house. I hope the field of computer science never loses its sense of fun. Above all, I hope we don't become missionaries. Don't feel as if you're Bible salesmen. The world has too many of those already. What you know about computing other people will learn. Don't feel as if the key to successful computing is only in your hands. What's in your hands, I think and hope, is intelligence: the ability to see the machine as more than when you were first led up to it, that you can make it more.
Underlying our approach to this subject is our conviction that "computer science" is not a science and that its significance has little to do with computers. The computer revolution is a revolution in the way we think and in the way we express what we think. The essence of this change is the emergence of what might best be called procedural epistemology—the study of the structure of knowledge from an imperative point of view, as opposed to the more declarative point of view taken by classical mathematical subjects. Mathematics provides a framework for dealing precisely with notions of "what is". Computation provides a framework for dealing precisely with notions of "how to".
We are about to study the idea of a computational process. Computational processes are abstract beings that inhabit computers. As they evolve, processes manipulate other abstract things called data. The evolution of a process is directed by a pattern of rules called a program. People create programs to direct processes. In effect, we conjure the spirits of the computer with our spells. A computational process is indeed much like a sorcerer's idea of a spirit. It cannot be seen or touched. It is not composed of matter at all. However, it is very real. It can perform intellectual work. It can answer questions. It can affect the world by disbursing money at a bank or by controlling a robot arm in a factory. The programs we use to conjure processes are like a sorcerer's spells. They are carefully composed from symbolic expressions in arcane and esoteric programming languages that prescribe the tasks we want our processes to perform. A computational process, in a correctly working computer, executes programs precisely and accurately. Thus, like the sorcerer's apprentice, novice programmers must learn to understand and to anticipate the consequences of their conjuring. Even small errors (usually called bugs or glitches) in programs can have complex and unanticipated consequences.
It is possible, indeed important, to be able to separate these two notions—to create procedures without naming them, and to give names to procedures that have already been created.
I hope the field of computer science never loses its sense of fun. ... What you know about computing other people will learn. Don’t feel as if the key to successful computing is only in your hands. What’s in your hands I think and hope is intelligence: the ability to see the machine as more than when you were first led up to it, that you can make it more.
A powerful programming language is more than just a means for instructing a computer to perform tasks. The language also serves as a framework within which we organize our ideas about processes. Thus, when we describe a language, we should pay particular attention to the means that the language provides for combining simple ideas to form more complex ideas. Every powerful language has three mechanisms for accomplishing this: - primitive expressions, which represent the simplest entities the language is concerned with, - means of combination, by which compound elements are built from simpler ones, and - means of abstraction, by which compound elements can be named and manipulated as units.
If art interprets our dreams, the computer executes them in the guise of programs!
Every reader should ask himself periodically ``Toward what end, toward what end?'' -- but do not ask it too often lest you pass up the fun of programming for the constipation of bittersweet philosophy.
Watch on YouTube
About Harold Abelson
Book details
- Author
- Harold Abelson
- Genre
- Nonfiction
- Goodreads rating
- 4.47 (5k ratings) →
Keep reading
Code Complete
The Pragmatic Programmer: From Journeyman to Master
Domain-Driven Design: Tackling Complexity in the Heart of Software
Gödel, Escher, Bach: An Eternal Golden Braid
In the Beginning...Was the Command Line
Hackers & Painters: Big Ideas from the Computer Age
The Most Human Human: What Talking with Computers Teaches Us About What It Means to Be Alive
Software Engineering at Google: Lessons Learned from Programming Over Time
Life 3.0: Being Human in the Age of Artificial Intelligence
The Information: A History, a Theory, a Flood
Superintelligence: Paths, Dangers, Strategies
The Singularity is Near: When Humans Transcend Biology
Co-Intelligence: Living and Working with AI
Algorithms to Live By: The Computer Science of Human Decisions
Pragmatic Thinking and Learning: Refactor Your Wetware
Thinking In Systems: A Primer
From Bacteria to Bach and Back: The Evolution of Minds
The Stuff of Thought: Language as a Window into Human Nature
You Are Not a Gadget
How the Mind Works
Humble Pi: A Comedy of Maths Errors
Philosophical Investigations
Shape: The Hidden Geometry of Information, Biology, Strategy, Democracy, and EverythingElse
JavaScript: The Good Parts
The Soul of a New Machine
Just for Fun: The Story of an Accidental Revolutionary
The Future of the Mind: The Scientific Quest to Understand, Enhance, and Empower the Mind
The Big Picture: On the Origins of Life, Meaning, and the Universe Itself
Math with Bad Drawings
Physics of the Future: How Science Will Shape Human Destiny and Our Daily Lives by the Year 2100
Because Internet: Understanding the New Rules of Language
How to Take Smart Notes
A Mathematician's Lament: How School Cheats Us Out of Our Most Fascinating and Imaginative Art Form
The Design of Everyday Things
Permutation City
Chaos: Making a New Science
Ways of Being: Animals, Plants, Machines: The Search for a Planetary Intelligence
The Age of Spiritual Machines
Artificial Intelligence: A Guide for Thinking Humans
Don't Make Me Think, Revisited: A Common Sense Approach to Web Usability
The Blind Watchmaker: Why the Evidence of Evolution Reveals a Universe Without Design
Distrust That Particular Flavor
Microserfs
What Technology Wants
Science and Sanity: An Introduction to Non-Aristotelian Systems and General Semantics
Emotional Design: Why We Love (or Hate) Everyday Things
The Cyberiad
The Innovators: How a Group of Hackers, Geniuses and Geeks Created the Digital Revolution
The Language Instinct: How the Mind Creates Language
The Unfolding of Language: An Evolutionary Tour of Mankind's Greatest Invention
A Mind for Numbers: How to Excel at Math and Science
Rationality: From AI to Zombies
The Goal: A Process of Ongoing Improvement
Getting Things Done: The Art of Stress-Free Productivity
Our Mathematical Universe: My Quest for the Ultimate Nature of Reality
The Medium is the Massage
The Lives of a Cell: Notes of a Biology Watcher
Stories of Your Life and Others

