| |
| |
| |
The Computing Perspective | |
| |
| |
Technology, Science and Culture | |
| |
| |
What is Technology | |
| |
| |
Technology and Human Evolution | |
| |
| |
Paradigmatic Change | |
| |
| |
The Age of Tribal Consciousness | |
| |
| |
Abstract Media Technology | |
| |
| |
The Age of Absolute Abstraction | |
| |
| |
Mechanical Media Technology | |
| |
| |
The Age of Mechanistic Thinking | |
| |
| |
Electronic Media Technology | |
| |
| |
Hallmarks of a Paradigm Shift | |
| |
| |
Essential Features of the Emerging Paradigm | |
| |
| |
The Central Theme of the New Paradigm | |
| |
| |
The Algorithmic Model | |
| |
| |
Introduction | |
| |
| |
Flow Charts | |
| |
| |
Properties of Algorithms | |
| |
| |
Algorithms | |
| |
| |
Components | |
| |
| |
Seeing Things from the Computing Perspective | |
| |
| |
Summary | |
| |
| |
| |
The Algorithm Toolkit | |
| |
| |
Basic Data, Operations, and Decisions | |
| |
| |
Atomic Data | |
| |
| |
Operators | |
| |
| |
Data Types and Declarations | |
| |
| |
Conditions and Decisions | |
| |
| |
Summary | |
| |
| |
Tools for Procedural Abstraction | |
| |
| |
Why modularity? | |
| |
| |
Two Kinds of Modules | |
| |
| |
The Scope of Data | |
| |
| |
Parameters | |
| |
| |
The Importance of Procedural Abstraction | |
| |
| |
Documenting Modules | |
| |
| |
Recursive Control | |
| |
| |
Using a stack to Trace Recursion | |
| |
| |
Summary | |
| |
| |
Tools for Data Abstraction | |
| |
| |
Records | |
| |
| |
The Difference Between Types and Variables | |
| |
| |
Anonymous Data Types | |
| |
| |
Dynamic Data Structures | |
| |
| |
Linked Lists | |
| |
| |
The Scope of Linked Data | |
| |
| |
Binary Trees | |
| |
| |
Graphs | |
| |
| |
Iterative Control | |
| |
| |
Iteration vs. Recursion | |
| |
| |
Arrays | |
| |
| |
The Abstraction Power of Constants | |
| |
| |
The Data Abstraction Power of Creating New Data Types | |
| |
| |
Summary | |
| |
| |
Graphical Data Notation | |
| |
| |
Algorithmic Methods | |
| |
| |
Searches and Traversals | |
| |
| |
Divide and Conquer | |
| |
| |
Optimization Algorithms | |
| |
| |
Summary | |
| |
| |
Tools for Estimating Cost and Complexity | |
| |
| |
Measures of Performance | |
| |
| |
Analysis of work done | |
| |
| |
Performance and Data Structures | |
| |
| |
Reasonable vs. Unreasonable Algorithms | |
| |
| |
Summary | |
| |
| |
Tools for Verifying Correctness | |
| |
| |
Bugs and Debugging | |
| |
| |
Ambiguity | |
| |
| |
Language errors | |
| |
| |
Logic errors | |
| |
| |
Proving correctness | |
| |
| |
Verification | |
| |
| |
Summary | |
| |
| |
Tools for Behavioral Abstraction | |
| |
| |
The Object-Oriented Paradigm | |
| |
| |
The Benefits of the OO Approach | |
| |
| |
Achieving Superior Encapsulation | |
| |
| |
Achieving Superior Reusability | |
| |
| |
Achieving Superior Adaptability | |
| |
| |
Achieving Polymorphism | |
| |
| |
Everything is an Object | |
| |
| |
Summary | |
| |
| |
| |
The Limits of Computing | |
| |
| |
Concurrency and Parallelism | |
| |
| |
Overview: Concurrency vs. Parallelism | |
| |
| |
Concurrency | |
| |
| |
Issues in Concurrency | |
| |
| |
Parallelism | |
| |
| |
Summary | |
| |
| |
Hierarchies of Complexity | |
| |
| |
The Complexity of Problems | |
| |
| |
Tractable vs. Intractable Problems | |
| |
| |
NP-Complete Problems | |
| |
| |
Oracles and Determinism | |
| |
| |
NP-Complete vs. Intractable Problems | |
| |
| |
Undecidability | |
| |
| |
Summary | |