
Code Complete
by McConnell, Steve-
Free Shipping on All Orders!
*excludes Marketplace items.
-
Complimentary 7-Day eTextbook Access - Read more
When you rent or buy this book, you will receive complimentary 7-day online access to the eTextbook version from your PC, Mac, tablet, or smartphone. Feature not included on Marketplace Items.
Buy New
Buy Used
Rent Book
Rent Digital
How Marketplace Works:
- This item is offered by an independent seller and not shipped from our warehouse
- Item details like edition and cover design may differ from our description; see seller's comments before ordering.
- Sellers much confirm and ship within two business days; otherwise, the order will be cancelled and refunded.
- Marketplace purchases cannot be returned to eCampus.com. Contact the seller directly for inquiries; if no response within two days, contact customer service.
- Additional shipping costs apply to Marketplace purchases. Review shipping costs at checkout.
Summary
Author Biography
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.
Table of Contents
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. |
An electronic version of this book is available through VitalSource.
This book is viewable on PC, Mac, iPhone, iPad, iPod Touch, and most smartphones.
By purchasing, you will be able to view this book online, as well as download it, for the chosen number of days.
Digital License
You are licensing a digital product for a set duration. Durations are set forth in the product description, with "Lifetime" typically meaning five (5) years of online access and permanent download to a supported device. All licenses are non-transferable.
More details can be found here.
A downloadable version of this book is available through the eCampus Reader or compatible Adobe readers.
Applications are available on iOS, Android, PC, Mac, and Windows Mobile platforms.
Please view the compatibility matrix prior to purchase.