The SICP course, hailed by many as the single-best introduction to Computer Science, focuses on » methods to 'control complexity.'
The MIT professors who designed the course (Abelson & Sussman) both come from a background in Electrical Engineering, which obviously influenced their conceptualization of the course.
In other words, it seems they applied the techniques associated with Computer Science to a conceptual framework designed to teach Electrical Engineering (.. a familiar paradigm).
The course focuses on solving the problems associated with building "very large" (complex) computer programs by expounding on the following 2-step process:
- Simple things (such as numbers, symbols, $variables, data, procedures) are combined to build complex things.
- These complex things (typically data & procedures) are then wrapped in a "black-box" in order to 'simplify' them .. so they can be used as components in building even-more complex things.
Consider how a microwave oven (or fridge or stove) is used as a component in building a kitchen (which is part of a house, which is part of a neighborhood, which is part of a city, which is .. part of something ever more-complex).
Notice how the electronics (inside the microwave) are hidden from view. All you know is » cold-food in, hot-food out. (Simple.) That's the principle behind 'abstraction' » hiding complexity.
••• today's entry continues here below •••
After abstraction, the next technique mentioned (to control complexity) is called » "Conventional Interfaces."
Notice how, when you plug in that microwave oven, it's prongs perfectly match the slots in the electrical outlet mounted in the wall (behind which there exists more hidden complexity, consisting of wires, connectors and circuit breakers).
That's an example of a Conventional Interface, which helps control complexity, allowing you to build complex things more easily, since you don't have to rewire every electrical device in your home. Just plug-n-go.
The course actually references 3 main methods to control complexity. The last is called "Meta-linguistic Abstraction," which involves tailoring your programming language to emphasize certain details and supress others.
Notice how Eskimos have many different words to describe different kinds of 'snow,' yet relatively few words for 'sand' (like that found in a desert). That might be an example of metalinguistic abstraction. Seems complicated, but they claim this is the "most magical" part of the course .. so I'm looking forward to it.
I appreciate the SICP course because the conceptual framework it presents is providing me with places where I'll be able to deposit more detailed programming information in the future.
For more along these lines, here's a Google search preconfigured doe the query » structure interpretation computer programs