Note: Supplemental materials are not guaranteed with Rental or Used book purchases.
Purchase Benefits
Looking to rent a book? Rent Code Complete [ISBN: 9780735619678] for the semester, quarter, and short term or search our site for other textbooks by McConnell, Steve. Renting a textbook can save you up to 90% from the cost of buying.
Steve McConnell is recognized as one of the premier authors and voices in the development community. He is Chief Software Engineer of Construx Software and was the lead developer of Construx Estimate and of SPC Estimate Professional, winner of Software Development magazine's Productivity Award. He is the author of several books, including Code Complete and Rapid Development, both honored with Software Development magazine's Jolt Award.
Preface | p. xix |
Acknowledgments | p. xxvii |
List of Checklists | p. xxix |
List of Tables | p. xxxi |
List of Figures | p. xxxiii |
Laying the Foundation | |
Welcome to Software Construction | p. 3 |
What Is Software Construction? | p. 3 |
Why Is Software Construction Important? | p. 6 |
How to Read This Book | p. 8 |
Metaphors for a Richer Understanding of Software Development | p. 9 |
The Importance of Metaphors | p. 9 |
How to Use Software Metaphors | p. 11 |
Common Software Metaphors | p. 13 |
Measure Twice, Cut Once: Upstream Prerequisites | p. 23 |
Importance of Prerequisites | p. 24 |
Determine the Kind of Software You're Working On | p. 31 |
Problem-Definition Prerequisite | p. 36 |
Requirements Prerequisite | p. 38 |
Architecture Prerequisite | p. 43 |
Amount of Time to Spend on Upstream Prerequisites | p. 55 |
Key Construction Decisions | p. 61 |
Choice of Programming Language | p. 61 |
Programming Conventions | p. 66 |
Your Location on the Technology Wave | p. 66 |
Selection of Major Construction Practices | p. 69 |
Creating High-Quality Code | |
Design in Construction | p. 73 |
Design Challenges | p. 74 |
Key Design Concepts | p. 77 |
Design Building Blocks: Heuristics | p. 87 |
Design Practices | p. 110 |
Comments on Popular Methodologies | p. 118 |
Working Classes | p. 125 |
Class Foundations: Abstract Data Types (ADTs) | p. 126 |
Good Class Interfaces | p. 133 |
Design and Implementation Issues | p. 143 |
Reasons to Create a Class | p. 152 |
Language-Specific Issues | p. 156 |
Beyond Classes: Packages | p. 156 |
High-Quality Routines | p. 161 |
Valid Reasons to Create a Routine | p. 164 |
Design at the Routine Level | p. 168 |
Good Routine Names | p. 171 |
How Long Can a Routine Be? | p. 173 |
How to Use Routine Parameters | p. 174 |
Special Considerations in the Use of Functions | p. 181 |
Macro Routines and Inline Routines | p. 182 |
Defensive Programming | p. 187 |
Protecting Your Program from Invalid Inputs | p. 188 |
Assertions | p. 189 |
Error-Handling Techniques | p. 194 |
Exceptions | p. 198 |
Barricade Your Program to Contain the Damage Caused by Errors | p. 203 |
Debugging Aids | p. 205 |
Determining How Much Defensive Programming to Leave in Production Code | p. 209 |
Being Defensive About Defensive Programming | p. 210 |
The Pseudocode Programming Process | p. 215 |
Summary of Steps in Building Classes and Routines | p. 216 |
Pseudocode for Pros | p. 218 |
Constructing Routines by Using the PPP | p. 220 |
Alternatives to the PPP | p. 232 |
Variables | |
General Issues in Using Variables | p. 237 |
Data Literacy | p. 238 |
Making Variable Declarations Easy | p. 239 |
Guidelines for Initializing Variables | p. 240 |
Scope | p. 244 |
Persistence | p. 251 |
Binding Time | p. 252 |
Relationship Between Data Types and Control Structures | p. 254 |
Using Each Variable for Exactly One Purpose | p. 255 |
The Power of Variable Names | p. 259 |
Considerations in Choosing Good Names | p. 259 |
Naming Specific Types of Data | p. 264 |
The Power of Naming Conventions | p. 270 |
Informal Naming Conventions | p. 272 |
Standardized Prefixes | p. 279 |
Creating Short Names That Are Readable | p. 282 |
Kinds of Names to Avoid | p. 285 |
Fundamental Data Types | p. 291 |
Numbers in General | p. 292 |
Integers | p. 293 |
Floating-Point Numbers | p. 295 |
Characters and Strings | p. 297 |
Boolean Variables | p. 301 |
Enumerated Types | p. 303 |
Named Constants | p. 307 |
Arrays | p. 310 |
Creating Your Own Types (Type Aliasing) | p. 311 |
Unusual Data Types | p. 319 |
Structures | p. 319 |
Pointers | p. 323 |
Global Data | p. 335 |
Statements | |
Organizing Straight-Line Code | p. 347 |
Statements That Must Be in a Specific Order | p. 347 |
Statements Whose Order Doesn't Matter | p. 351 |
Using Conditionals | p. 355 |
if Statements | p. 355 |
Case Statements | p. 361 |
Controlling Loops | p. 367 |
Selecting the Kind of Loop | p. 367 |
Controlling the Loop | p. 373 |
Creating Loops Easily--From the Inside Out | p. 385 |
Correspondence Between Loops and Arrays | p. 387 |
Unusual Control Structures | p. 391 |
Multiple Returns from a Routine | p. 391 |
Recursion | p. 393 |
goto | p. 398 |
Perspective on Unusual Control Structures | p. 408 |
Table-Driven Methods | p. 411 |
General Considerations in Using Table-Driven Methods | p. 411 |
Direct Access Tables | p. 413 |
Indexed Access Tables | p. 425 |
Stair-Step Access Tables | p. 426 |
Other Examples of Table Lookups | p. 429 |
General Control Issues | p. 431 |
Boolean Expressions | p. 431 |
Compound Statements (Blocks) | p. 443 |
Null Statements | p. 444 |
Taming Dangerously Deep Nesting | p. 445 |
A Programming Foundation: Structured Programming | p. 454 |
Control Structures and Complexity | p. 456 |
Code Improvements | |
The Software-Quality Landscape | p. 463 |
Characteristics of Software Quality | p. 463 |
Techniques for Improving Software Quality | p. 466 |
Relative Effectiveness of Quality Techniques | p. 469 |
When to Do Quality Assurance | p. 473 |
The General Principle of Software Quality | p. 474 |
Collaborative Construction | p. 479 |
Overview of Collaborative Development Practices | p. 480 |
Pair Programming | p. 483 |
Formal Inspections | p. 485 |
Other Kinds of Collaborative Development Practices | p. 492 |
Developer Testing | p. 499 |
Role of Developer Testing in Software Quality | p. 500 |
Recommended Approach to Developer Testing | p. 503 |
Bag of Testing Tricks | p. 505 |
Typical Errors | p. 517 |
Test-Support Tools | p. 523 |
Improving Your Testing | p. 528 |
Keeping Test Records | p. 529 |
Debugging | p. 535 |
Overview of Debugging Issues | p. 535 |
Finding a Defect | p. 540 |
Fixing a Defect | p. 550 |
Psychological Considerations in Debugging | p. 554 |
Debugging Tools--Obvious and Not-So-Obvious | p. 556 |
Refactoring | p. 563 |
Kinds of Software Evolution | p. 564 |
Introduction to Refactoring | p. 565 |
Specific Refactorings | p. 571 |
Refactoring Safely | p. 579 |
Refactoring Strategies | p. 582 |
Code-Tuning Strategies | p. 587 |
Performance Overview | p. 588 |
Introduction to Code Tuning | p. 591 |
Kinds of Fat and Molasses | p. 597 |
Measurement | p. 603 |
Iteration | p. 605 |
Summary of the Approach to Code Tuning | p. 606 |
Code-Tuning Techniques | p. 609 |
Logic | p. 610 |
Loops | p. 616 |
Data Transformations | p. 624 |
Expressions | p. 630 |
Routines | p. 639 |
Recoding in a Low-Level Language | p. 640 |
The More Things Change, the More They Stay the Same | p. 643 |
System Considerations | |
How Program Size Affects Construction | p. 649 |
Communication and Size | p. 650 |
Range of Project Sizes | p. 651 |
Effect of Project Size on Errors | p. 651 |
Effect of Project Size on Productivity | p. 653 |
Effect of Project Size on Development Activities | p. 654 |
Managing Construction | p. 661 |
Encouraging Good Coding | p. 662 |
Configuration Management | p. 664 |
Estimating a Construction Schedule | p. 671 |
Measurement | p. 677 |
Treating Programmers as People | p. 680 |
Managing Your Manager | p. 686 |
Integration | p. 689 |
Importance of the Integration Approach | p. 689 |
Integration Frequency--Phased or Incremental? | p. 691 |
Incremental Integration Strategies | p. 694 |
Daily Build and Smoke Test | p. 702 |
Programming Tools | p. 709 |
Design Tools | p. 710 |
Source-Code Tools | p. 710 |
Executable-Code Tools | p. 716 |
Tool-Oriented Environments | p. 720 |
Building Your Own Programming Tools | p. 721 |
Tool Fantasyland | p. 722 |
Software Craftsmanship | |
Layout and Style | p. 729 |
Layout Fundamentals | p. 730 |
Layout Techniques | p. 736 |
Layout Styles | p. 738 |
Laying Out Control Structures | p. 745 |
Laying Out Individual Statements | p. 753 |
Laying Out Comments | p. 763 |
Laying Out Routines | p. 766 |
Laying Out Classes | p. 768 |
Self-Documenting Code | p. 777 |
External Documentation | p. 777 |
Programming Style as Documentation | p. 778 |
To Comment or Not to Comment | p. 781 |
Keys to Effective Comments | p. 785 |
Commenting Techniques | p. 792 |
IEEE Standards | p. 813 |
Personal Character | p. 819 |
Isn't Personal Character Off the Topic? | p. 820 |
Intelligence and Humility | p. 821 |
Curiosity | p. 822 |
Intellectual Honesty | p. 826 |
Communication and Cooperation | p. 828 |
Creativity and Discipline | p. 829 |
Laziness | p. 830 |
Characteristics That Don't Matter As Much As You Might Think | p. 830 |
Habits | p. 833 |
Themes in Software Craftsmanship | p. 837 |
Conquer Complexity | p. 837 |
Pick Your Process | p. 839 |
Write Programs for People First, Computers Second | p. 841 |
Program into Your Language, Not in It | p. 843 |
Focus Your Attention with the Help of Conventions | p. 844 |
Program in Terms of the Problem Domain | p. 845 |
Watch for Falling Rocks | p. 848 |
Iterate, Repeatedly, Again and Again | p. 850 |
Thou Shalt Rend Software and Religion Asunder | p. 851 |
Where to Find More Information | p. 855 |
Information About Software Construction | p. 856 |
Topics Beyond Construction | p. 857 |
Periodicals | p. 859 |
A Software Developer's Reading Plan | p. 860 |
Joining a Professional Organization | p. 862 |
Bibliography | p. 863 |
Index | p. 885 |
Table of Contents provided by Ingram. All Rights Reserved. |
The New copy of this book will include any supplemental materials advertised. Please check the title of the book to determine if it should include any access cards, study guides, lab manuals, CDs, etc.
The Used, Rental and eBook copies of this book are not guaranteed to include any supplemental materials. Typically, only the book itself is included. This is true even if the title states it includes any access cards, study guides, lab manuals, CDs, etc.