Code Complete
Edition: 2 edition
Publisher: Microsoft Press
Published: June 2004
Language: eng
Format: Paperback
Number of pages: 914
ISBN-13: 9780735619678
Subjects: Computer Software Packages; Reference - General; Development; Computers; Computers - General Information; Handbooks, manuals, etc; Computers / Programming / Software Development; General; Computer software
First sentence: Developing computer software can be a complicated process, and in the last 25 years, researchers have identified numerous distinct activities that go into software development.
Notes: Second Edition
Table of contents: title: Preface p. xix; title: Acknowledgments p. xxvii; title: List of Checklists p. xxix; title: List of Tables p. xxxi; title: List of Figures p. xxxiii; title: Part I Laying the Foundation; title: 1 Welcome to Software Construction p. 3; title: 1.1 What Is Software Construction? p. 3; title: 1.2 Why Is Software Construction Important? p. 6; title: 1.3 How to Read This Book p. 8; title: 2 Metaphors for a Richer Understanding of Software Development p. 9; title: 2.1 The Importance of Metaphors p. 9; title: 2.2 How to Use Software Metaphors p. 11; title: 2.3 Common Software Metaphors p. 13; title: 3 Measure Twice, Cut Once: Upstream Prerequisites p. 23; title: 3.1 Importance of Prerequisites p. 24; title: 3.2 Determine the Kind of Software You're Working On p. 31; title: 3.3 Problem-Definition Prerequisite p. 36; title: 3.4 Requirements Prerequisite p. 38; title: 3.5 Architecture Prerequisite p. 43; title: 3.6 Amount of Time to Spend on Upstream Prerequisites p. 55; title: 4 Key Construction Decisions p. 61; title: 4.1 Choice of Programming Language p. 61; title: 4.2 Programming Conventions p. 66; title: 4.3 Your Location on the Technology Wave p. 66; title: 4.4 Selection of Major Construction Practices p. 69; title: Part II Creating High-Quality Code; title: 5 Design in Construction p. 73; title: 5.1 Design Challenges p. 74; title: 5.2 Key Design Concepts p. 77; title: 5.3 Design Building Blocks: Heuristics p. 87; title: 5.4 Design Practices p. 110; title: 5.5 Comments on Popular Methodologies p. 118; title: 6 Working Classes p. 125; title: 6.1 Class Foundations: Abstract Data Types (ADTs) p. 126; title: 6.2 Good Class Interfaces p. 133; title: 6.3 Design and Implementation Issues p. 143; title: 6.4 Reasons to Create a Class p. 152; title: 6.5 Language-Specific Issues p. 156; title: 6.6 Beyond Classes: Packages p. 156; title: 7 High-Quality Routines p. 161; title: 7.1 Valid Reasons to Create a Routine p. 164; title: 7.2 Design at the Routine Level p. 168; title: 7.3 Good Routine Names p. 171; title: 7.4 How Long Can a Routine Be? p. 173; title: 7.5 How to Use Routine Parameters p. 174; title: 7.6 Special Considerations in the Use of Functions p. 181; title: 7.7 Macro Routines and Inline Routines p. 182; title: 8 Defensive Programming p. 187; title: 8.1 Protecting Your Program from Invalid Inputs p. 188; title: 8.2 Assertions p. 189; title: 8.3 Error-Handling Techniques p. 194; title: 8.4 Exceptions p. 198; title: 8.5 Barricade Your Program to Contain the Damage Caused by Errors p. 203; title: 8.6 Debugging Aids p. 205; title: 8.7 Determining How Much Defensive Programming to Leave in Production Code p. 209; title: 8.8 Being Defensive About Defensive Programming p. 210; title: 9 The Pseudocode Programming Process p. 215; title: 9.1 Summary of Steps in Building Classes and Routines p. 216; title: 9.2 Pseudocode for Pros p. 218; title: 9.3 Constructing Routines by Using the PPP p. 220; title: 9.4 Alternatives to the PPP p. 232; title: Part III Variables; title: 10 General Issues in Using Variables p. 237; title: 10.1 Data Literacy p. 238; title: 10.2 Making Variable Declarations Easy p. 239; title: 10.3 Guidelines for Initializing Variables p. 240; title: 10.4 Scope p. 244; title: 10.5 Persistence p. 251; title: 10.6 Binding Time p. 252; title: 10.7 Relationship Between Data Types and Control Structures p. 254; title: 10.8 Using Each Variable for Exactly One Purpose p. 255; title: 11 The Power of Variable Names p. 259; title: 11.1 Considerations in Choosing Good Names p. 259; title: 11.2 Naming Specific Types of Data p. 264; title: 11.3 The Power of Naming Conventions p. 270; title: 11.4 Informal Naming Conventions p. 272; title: 11.5 Standardized Prefixes p. 279; title: 11.6 Creating Short Names That Are Readable p. 282; title: 11.7 Kinds of Names to Avoid p. 285; title: 12 Fundamental Data Types p. 291; title: 12.1 Numbers in General p. 292; title: 12.2 Integers p. 293; title: 12.3 Floating-Point Numbers p. 295; title: 12.4 Characters and Strings p. 297; title: 12.5 Boolean Variables p. 301; title: 12.6 Enumerated Types p. 303; title: 12.7 Named Constants p. 307; title: 12.8 Arrays p. 310; title: 12.9 Creating Your Own Types (Type Aliasing) p. 311; title: 13 Unusual Data Types p. 319; title: 13.1 Structures p. 319; title: 13.2 Pointers p. 323; title: 13.3 Global Data p. 335; title: Part IV Statements; title: 14 Organizing Straight-Line Code p. 347; title: 14.1 Statements That Must Be in a Specific Order p. 347; title: 14.2 Statements Whose Order Doesn't Matter p. 351; title: 15 Using Conditionals p. 355; title: 15.1 if Statements p. 355; title: 15.2 Case Statements p. 361; title: 16 Controlling Loops p. 367; title: 16.1 Selecting the Kind of Loop p. 367; title: 16.2 Controlling the Loop p. 373; title: 16.3 Creating Loops Easily--From the Inside Out p. 385; title: 16.4 Correspondence Between Loops and Arrays p. 387; title: 17 Unusual Control Structures p. 391; title: 17.1 Multiple Returns from a Routine p. 391; title: 17.2 Recursion p. 393; title: 17.3 goto p. 398; title: 17.4 Perspective on Unusual Control Structures p. 408; title: 18 Table-Driven Methods p. 411; title: 18.1 General Considerations in Using Table-Driven Methods p. 411; title: 18.2 Direct Access Tables p. 413; title: 18.3 Indexed Access Tables p. 425; title: 18.4 Stair-Step Access Tables p. 426; title: 18.5 Other Examples of Table Lookups p. 429; title: 19 General Control Issues p. 431; title: 19.1 Boolean Expressions p. 431; title: 19.2 Compound Statements (Blocks) p. 443; title: 19.3 Null Statements p. 444; title: 19.4 Taming Dangerously Deep Nesting p. 445; title: 19.5 A Programming Foundation: Structured Programming p. 454; title: 19.6 Control Structures and Complexity p. 456; title: Part V Code Improvements; title: 20 The Software-Quality Landscape p. 463; title: 20.1 Characteristics of Software Quality p. 463; title: 20.2 Techniques for Improving Software Quality p. 466; title: 20.3 Relative Effectiveness of Quality Techniques p. 469; title: 20.4 When to Do Quality Assurance p. 473; title: 20.5 The General Principle of Software Quality p. 474; title: 21 Collaborative Construction p. 479; title: 21.1 Overview of Collaborative Development Practices p. 480; title: 21.2 Pair Programming p. 483; title: 21.3 Formal Inspections p. 485; title: 21.4 Other Kinds of Collaborative Development Practices p. 492; title: 22 Developer Testing p. 499; title: 22.1 Role of Developer Testing in Software Quality p. 500; title: 22.2 Recommended Approach to Developer Testing p. 503; title: 22.3 Bag of Testing Tricks p. 505; title: 22.4 Typical Errors p. 517; title: 22.5 Test-Support Tools p. 523; title: 22.6 Improving Your Testing p. 528; title: 22.7 Keeping Test Records p. 529; title: 23 Debugging p. 535; title: 23.1 Overview of Debugging Issues p. 535; title: 23.2 Finding a Defect p. 540; title: 23.3 Fixing a Defect p. 550; title: 23.4 Psychological Considerations in Debugging p. 554; title: 23.5 Debugging Tools--Obvious and Not-So-Obvious p. 556; title: 24 Refactoring p. 563; title: 24.1 Kinds of Software Evolution p. 564; title: 24.2 Introduction to Refactoring p. 565; title: 24.3 Specific Refactorings p. 571; title: 24.4 Refactoring Safely p. 579; title: 24.5 Refactoring Strategies p. 582; title: 25 Code-Tuning Strategies p. 587; title: 25.1 Performance Overview p. 588; title: 25.2 Introduction to Code Tuning p. 591; title: 25.3 Kinds of Fat and Molasses p. 597; title: 25.4 Measurement p. 603; title: 25.5 Iteration p. 605; title: 25.6 Summary of the Approach to Code Tuning p. 606; title: 26 Code-Tuning Techniques p. 609; title: 26.1 Logic p. 610; title: 26.2 Loops p. 616; title: 26.3 Data Transformations p. 624; title: 26.4 Expressions p. 630; title: 26.5 Routines p. 639; title: 26.6 Recoding in a Low-Level Language p. 640; title: 26.7 The More Things Change, the More They Stay the Same p. 643; title: Part VI System Considerations; title: 27 How Program Size Affects Construction p. 649; title: 27.1 Communication and Size p. 650; title: 27.2 Range of Project Sizes p. 651; title: 27.3 Effect of Project Size on Errors p. 651; title: 27.4 Effect of Project Size on Productivity p. 653; title: 27.5 Effect of Project Size on Development Activities p. 654; title: 28 Managing Construction p. 661; title: 28.1 Encouraging Good Coding p. 662; title: 28.2 Configuration Management p. 664; title: 28.3 Estimating a Construction Schedule p. 671; title: 28.4 Measurement p. 677; title: 28.5 Treating Programmers as People p. 680; title: 28.6 Managing Your Manager p. 686; title: 29 Integration p. 689; title: 29.1 Importance of the Integration Approach p. 689; title: 29.2 Integration Frequency--Phased or Incremental? p. 691; title: 29.3 Incremental Integration Strategies p. 694; title: 29.4 Daily Build and Smoke Test p. 702; title: 30 Programming Tools p. 709; title: 30.1 Design Tools p. 710; title: 30.2 Source-Code Tools p. 710; title: 30.3 Executable-Code Tools p. 716; title: 30.4 Tool-Oriented Environments p. 720; title: 30.5 Building Your Own Programming Tools p. 721; title: 30.6 Tool Fantasyland p. 722; title: Part VII Software Craftsmanship; title: 31 Layout and Style p. 729; title: 31.1 Layout Fundamentals p. 730; title: 31.2 Layout Techniques p. 736; title: 31.3 Layout Styles p. 738; title: 31.4 Laying Out Control Structures p. 745; title: 31.5 Laying Out Individual Statements p. 753; title: 31.6 Laying Out Comments p. 763; title: 31.7 Laying Out Routines p. 766; title: 31.8 Laying Out Classes p. 768; title: 32 Self-Documenting Code p. 777; title: 32.1 External Documentation p. 777; title: 32.2 Programming Style as Documentation p. 778; title: 32.3 To Comment or Not to Comment p. 781; title: 32.4 Keys to Effective Comments p. 785; title: 32.5 Commenting Techniques p. 792; title: 32.6 IEEE Standards p. 813; title: 33 Personal Character p. 819; title: 33.1 Isn't Personal Character Off the Topic? p. 820; title: 33.2 Intelligence and Humility p. 821; title: 33.3 Curiosity p. 822; title: 33.4 Intellectual Honesty p. 826; title: 33.5 Communication and Cooperation p. 828; title: 33.6 Creativity and Discipline p. 829; title: 33.7 Laziness p. 830; title: 33.8 Characteristics That Don't Matter As Much As You Might Think p. 830; title: 33.9 Habits p. 833; title: 34 Themes in Software Craftsmanship p. 837; title: 34.1 Conquer Complexity p. 837; title: 34.2 Pick Your Process p. 839; title: 34.3 Write Programs for People First, Computers Second p. 841; title: 34.4 Program into Your Language, Not in It p. 843; title: 34.5 Focus Your Attention with the Help of Conventions p. 844; title: 34.6 Program in Terms of the Problem Domain p. 845; title: 34.7 Watch for Falling Rocks p. 848; title: 34.8 Iterate, Repeatedly, Again and Again p. 850; title: 34.9 Thou Shalt Rend Software and Religion Asunder p. 851; title: 35 Where to Find More Information p. 855; title: 35.1 Information About Software Construction p. 856; title: 35.2 Topics Beyond Construction p. 857; title: 35.3 Periodicals p. 859; title: 35.4 A Software Developer's Reading Plan p. 860; title: 35.5 Joining a Professional Organization p. 862; title: Bibliography p. 863; title: Index p. 885