Tables of Contents for Code Complete
Welcome to Software Construction
1
6
What Is Software Construction?
Why Is Software Construction Important?
Metaphors for a Richer Understanding of Programming
7
14
The Importance of Metaphors
How to Use Software Metaphors
Common Software Metaphors
Prerequisites to Construction
21
32
Importance of Prerequisites
Problem-Definition Prerequisite
Requirements Prerequisite
Architecture Prerequisite
Choice-of-Programming-Language Prerequisite
Amount of Time to Spend on Prerequisites
Adapting Prerequisites to Your Project
Steps in Building a Routine
53
18
Summary of Steps in Building a Routine
Characteristics of High-Quality Routines
71
44
Valid Reasons to Create a Routine
How Long Can a Routine Be?
How to Use Routine Parameters
Considerations in the Use of Functions
Three out of Four Programmers Surveyed Prefer Modules
115
24
Modularity:Cohesion and Coupling
Good Reasons to Create a Module
Implementing Modules in Any Language
High-Level Design in Construction
139
32
Introduction to Software Design
Comments on Popular Methodologies
Reasons to Create Your Own Types
Guidelines for Creating Your Own Types
Making Variable Declarations Easy
Guidelines for Initializing Data
The Power of Data Names
185
30
Considerations in Choosing Good Names
Naming Specific Types of Data
The Power of Naming Conventions
Informal Naming Conventions
The Hungarian Naming Convention
Creating Short Names That Are Readable
General Issues in Using Variables
215
20
Relationship Between Data Structures and Control Structures
Using Each Variable for Exactly One Purpose
Fundamental Data Types
235
32
Abstract Data Types (ADTs)
Organizing Straight-Line Code
299
12
Statements That Must Be in a Specific Order
Statements Whose Order Doesn't Matter
Selecting the Kind of Loop
Creating Loops Easily---from the Inside Out
Correspondence Between Loops and Arrays
Unusual Control Structures
347
20
General Control Issues
367
32
Compound Statements(Blocks)
Taming Dangerously Deep Nesting
The Power of Structured Programming
Emulating Structured Constructs with gotos
Control Structures and Complexity
Laying Out Control Structures
Laying Out Individual Statements
Laying Out Files, Modules, and Programs
Self-Documenting Code
453
40
Programming Style as Documentation
To Comment or Not to Comment
Keys to Effective Comments
Tool-Oriented Environments
Building Your Own Programming Tools
Ideal Programming Environment
How Program Size Affects Construction
513
14
Effect of Project Size on Development Activities
Effect of Project Size on Errors
Effect of Project Size on Productivity
Managing Construction
527
30
Estimating a Construction Schedule
Treating Programmers as People
The Software-Quality Landscape
557
16
Characteristics of Software Quality
Techniques for Improving Software Quality
Relative Effectiveness of the Techniques
When to Do Quality Assurance
The General Principle of Software Quality
Role of Reviews in Software Quality Assurance
Role of Unit Testing in Software Quality
General Approach to Unit Testing
Overview of Debugging Issues
Psychological Considerations in Debugging
Importance of the Integration Method
Phased vs. Incremental Integration
Incremental Integration Strategies
Code-Tuning Strategies
675
20
Introduction to Code Tuning
Kinds of Fat and Molasses
Summary of the Approach to Code Tuning
Code-Tuning Techniques
695
42
Quick Reference to Tuning Techniques
Kinds of Software Evolution
General Guidelines for Software Evolution
Isn't Personal Character Off the Topic?
Intelligence and Humility
Communication and Cooperation
Creativity and Discipline
Characteristics That Don't Matter As Much As You Might Think
Themes in Software Craftsmanship
773
20
Write Programs for People First, Computers Second
Focus Your Attention with the Help of Conventions
Program in Terms of the Problem Domain
Iterate, Repeatedly, Again and Again
Thou Shalt Rend Software and Religion Asunder
Where to Go for More Information
793
16
The Library of a Software Professional
Information About Software Construction
Topics Beyond Construction
Joining a Professional Organization