《代码大全》第2版,由Steve McConnell倾心打造,不仅继承了第1版的经典之处,还在内容与方法论上做了全面的更新与扩展,这本书以其百科全书式的详实内容,成为软件开发领域内不可多得的佳作,它深入探讨了软件构建的各个方面,从基础的代码编写规范到高级的开发实践,旨在帮助读者提高软件质量,有效管理复杂度,特别值得一提的是,书中对代码可读性的强调,以及丰富的高质量代码示例,对于想要精进编程技能的开发者来说,具有极高的参考价值,通过引入大量的真实案例、专家经验和最新研究成果,这本书不仅桥接了初级与高级编程实践之间的鸿沟,还为广大程序员提供了一个全面了解软件开发技术的宝贵资源,对于那些追求卓越、希望在软件工程领域深造的专业人士而言,它的指导意义无疑是巨大的。
“无论您是新手还是经验丰富的开发人员,《代码大全》(第2版)都能教会您思考编程的优秀方法。”
本书是著名IT畅销书作者、IEEE Software杂志前主编、具有20年编程与项目管理经验的SteveMcConnell十余年前的经典著作的全新演绎:第2版做了全面的更新,增加了很多与时俱进的内容,包括对新语言、新的开发过程与方法论的讨论,等等。这是一本百科全书式的软件构建手册,涵盖了软件构建活动的方方面面,尤其强调提高软件质量的种种买践方法。作者特别注重源代码的可读性,详细讨论了类和函数命名、变量命名、数据类型和控制结构、代码布局等编程的基本要素,也讨论了防御式编程、表驱动法、协同构建、开发者测试、性能优化等有效开发实践,这些都服务于软件的首要技术使命:管理复杂度。为了培养程序员编写高质量代码的习惯,书中展示了大量高质量代码示例(以及用作对比的低质量代码),提高软件质量是降低开发成本的重要途径。除此之外,《代码大全(第2版)(英文版)》归纳总结了来自专家的经验、业界研究以及学术成果,列举了大量软件开发领域的真实案例与统计数据,提高《代码大全(第2版)(英文版)》的说服力。《代码大全(第2版)(英文版)》中所论述的技术不仅填补了初级与高级编程实践之间的空白,而且也为程序员们提供了一个有关软件开发技术的信息来源。《代码大全(第2版)(英文版)》对经验丰富的程序员、技术带头人、自学的程序员及没有太多编程经验的学生都是大有裨益的。
目录
- Acknowledgments
- ListofChecklists
- ListofTables
- ListofFigures
- PartI LayingtheFoundation
- 1 WelcometoSoftwareConstruction
- 1.1 WhatIsSoftwareConstruction?
- 1.2 WhyIsSoftwareConstructionImportant?
- 1.3 HowtoReadThisBook
- 2 MetaphorsforaRicherUnderstandingofSoftwareDevelopment
- 2.1 TheImportanceofMetaphors
- 2.2 HowtoUseSoftwareMetaphors
- 2.3 CommonSoftwareMetaphors
- 3 MeasureTwice,CutOnce:UpstreamPrerequisites
- 3.1 ImportanceofPrerequisites
- 3.2 DeterminetheKindofSoftwareYoureWorkingOn
- 3.3 Problem-DefinitionPrerequisite
- 3.4 RequirementsPrerequisite
- 3.5 ArchitecturePrerequisite
- 3.6 AmountofTimetoSpendonUpstreamPrerequisites
- 4 KeyConstructionDecisions
- 4.1 ChoiceofProgrammingLanguage
- 4.2 ProgrammingConventions
- 4.3 YourLocationontheTechnologyWave
- 4.4 SelectionofMajorConstructionPractices
- PartII CreatingHigh-QualityCode
- 5 DesigninConstruction
- 5.1 DesignChallenges
- 5.2 KeyDesignConcepts
- 5.3 DesignBuildingBlocks:Heuristics
- 5.4 DesignPractices
- 5.5 CommentsonPopularMethodologies
- 6 WorkingClasses
- 6.1 ClassFoundations:AbstractDataTypes(ADTs)
- 6.2 GoodClassInterfaces
- 6.3 DesignandImplementationIssues
- 6.4 ReasonstoCreateaClass
- 6.5 Language-SpecificIssues
- 6.6 BeyondClasses:Packages
- 7 High-QualityRoutines
- 7.1 ValidReasonstoCreateaRoutine
- 7.2 DesignattheRoutineLevel
- 7.3 GoodRoutineNames
- 7.4 HowLongCanaRoutineBe?
- 7.5 HowtoUseRoutineParameters
- 7.6 SpecialConsiderationsintheUseofFunctions
- 7.7 MacroRoutinesandInlineRoutines
- 8 DefensiveProgramming
- 8.1 ProtectingYourProgramfromInvalidInputs
- 8.2 Assertions
- 8.3 Error-HandlingTechniques
- 8.4 Exceptions
- 8.5 BarricadeYourProgramtoContaintheDamageCausedbyErrors
- 8.6 DebuggingAids
- 8.7 DeterminingHowMuchDefensiveProgrammingtoLeaveinProductionCode
- 8.8 BeingDefensiveAboutDefensiveProgramming
- 9 ThePseudocodeProgrammingProcess
- 9.1 SummaryofStepsinBuildingClassesandRoutines
- 9.2 PseudocodeforPros
- 9.3 ConstructingRoutinesbyUsingthePPP
- 9.4 AlternativestothePPP
- PartIII Variables
- 10 GeneralIssuesinUsingVariables
- 10.1 DataLiteracy
- 10.2 MakingVariableDeclarationsEasy
- 10.3 GuidelinesforInitializingVariables
- 10.4 Scope
- 10.5 Persistence
- 10.6 BindingTime
- 10.7 RelationshipBetweenDataTypesandControlStructures
- 10.8 UsingEachVariableforExactlyOnePurpose
- 11 ThePowerofVariableNames
- 11.1 ConsiderationsinChoosingGoodNames
- 11.2 NamingSpecificTypesofData
- 11.3 ThePowerofNamingConventions
- 11.4 informalNamingConventions
- 11.5 StandardizedPrefixes
- 11.6 CreatingShortNamesThatAreReadable
- 11.7 KindsofNamestoAvoid
- 12 FundamentalDataTypes
- 12.1 NumbersinGeneral
- 12.2 integers
- 12.3 Floating-PointNumbers
- 12.4 CharactersandStrings
- 12.5 BooleanVariables
- 12.6 EnumeratedTypes
- 12.7 NamedConstants
- 12.8 Arrays
- 12.9 CreatingYourOwnTypes(TypeAliasing)
- 13 UnusualDataTypes
- 13.1 Structures
- 13.2 Pointers
- 13.3 GlobalData
- PartIV Statements
- 14 OrganizingStraight-LineCode
- 14.1 StatementsThatMustBeinaSpecificOrder
- 14.2 StatementsWhoseOrderDoesntMatter
- 15 UsingConditionals
- 15.1 ifStatements
- 15.2 caseStatements
- 16 ControllingLoops
- 16.1 SelectingtheKindofLoop
- 16.2 ControllingtheLoop
- 16.3 CreatingLoopsEasily--FromtheInsideOut
- 16.4 CorrespondenceBetweenLoopsandArrays
- 17 UnusualControlStructures
- 17.1 MultipleReturnsfromaRoutine
- 17.2 Recursion
- 17.3 goto
- 17.4 PerspectiveonUnusualControlStructures
- 18 Table-DrivenMethods
- 18.1 GeneralConsiderationsinUsingTable-DrivenMethods
- 18.2 DirectAccessTables
- 18.3 IndexedAccessTables
- 18.4 Stair-StepAccessTables
- 18.5 OtherExamplesofTableLookups
- 19 GeneralControlIssues
- 19.1 BooleanExpressions
- 19.2 CompoundStatements(Blocks)
- 19.3 NullStatements.
- 19.4 TamingDangerouslyDeepNesting
- 19.5 AProgrammingFoundation:StructuredProgramming
- 19.6 ControlStructuresandComplexity
- PartV CodeImprovements
- 20 TheSoftware-QualityLandscape
- 20.1 CharacteristicsofSoftwareQuality
- 20.2 TechniquesforImprovingSoftwareQuality
- 20.3 RelativeEffectivenessofQualityTechniques
- 20.4 WhentoDoQualityAssurance
- 20.5 TheGeneralPrincipleofSoftwareQuality
- 21Co llaborativeConstruction
- 21.1 OverviewofCollaborativeDevelopmentPractices
- 21.2 PairProgramming
- 21.3 FormalInspections
- 21.4 OtherKindsofCollaborativeDevelopmentPractices
- 22 DeveloperTesting
- 22.1 RoleofDeveloperTestinginSoftwareQuality
- 22.2 RecommendedApproachtoDeveloperTesting
- 22.3 BagofTestingTricks
- 22.4 TypicalErrors
- 22.5 Test-SupportTools
- 22.6 ImprovingYourTesting
- 22.7 KeepingTestRecords
- 23 Debugging
- 23.1 OverviewofDebuggingIssues
- 23.2 FindingaDefect
- 23.3 FixingaDefect
- 23.4 PsychologicalConsiderationsinDebugging
- 23.5 DebuggingTools--ObviousandNot-So-Obvious
- 24 Refactoring
- 24.1 KindsofSoftwareEvolution
- 24.2 IntroductiontoRefactoring
- 24.3 SpecificRefactorings
- 24.4 RefactoringSafely
- 24.5 RefactoringStrategies
- 25 Code-TuningStrategies
- 25.1 PerformanceOverview
- 25.2 IntroductiontoCodeTuning
- 25.3 KindsofFatandMolasses
- 25.4 Measurement
- 25.5 Iteration
- 25.6 SummaryoftheApproachtoCodeTuning
- 26 Code-TuningTechniques
- 26.1 Logic
- 26.2 Loops
- 26.3 DataTransformations
- 26.4 Expressions
- 26.5 Routines
- 26.6 RecodinginaLow-LevelLanguage
- 26.7 TheMoreThingsChange,theMoreTheyStaytheSame
- PartVI SystemConsiderations
- 27 HowProgramSizeAffectsConstruction
- 27.1 CommunicationandSize
- 27.2 RangeofProjectSizes
- 27.3 EffectofProjectSizeonErrors
- 27.4 EffectofProjectSizeonProductivity
- 27.5 EffectofProjectSizeonDevelopmentActivities
- 28 ManagingConstruction
- 28.1 EncouragingGoodCoding
- 28.2 ConfigurationManagement
- 28.3 EstimatingaConstructionSchedule
- 28.4 Measurement
- 28.5 TreatingProgrammersasPeople
- 28.6 ManagingYourManager
- 29 Integration
- 29.1 ImportanceoftheIntegrationApproach
- 29.2 IntegrationFrequency--PhasedorIncremental?
- 29.3 IncrementalIntegrationStrategies
- 29.4 DailyBuildandSmokeTest
- 30 ProgrammingTools
- 30.1 DesignTools
- 30.2 Source-CodeTools
- 30.3 Executable-CodeTools
- 30.4 Tool-OrientedEnvironments
- 30.5 BuildingYourOwnProgrammingTools
- 30.6 ToolFantasyland
- Part VII SoftwareCraftsmanship
- 31 LayoutandStyle
- 31.1 LayoutFundamentals
- 31.2 LayoutTechniques
- 31.3 LayoutStyles
- 31.4 LayingOutControlStructures
- 31.5 LayingOutIndividualStatements
- 31.6 LayingOutComments
- 31.7 LayingOutRoutines
- 31.8 LayingOutClasses
- 32 Self-DocumentingCode
- 32.1 ExternalDocumentation
- 32.2 ProgrammingStyleasDocumentation
- 32.3 ToCommentorNottoComment
- 32.4 KeystoEffectiveComments
- 32.5 CommentingTechniques
- 32.6 IEEEStandards
- 33 PersonalCharacter
- 33.1 IsntPersonalCharacterOfftheTopic?
- 33.2 IntelligenceandHumility
- 33.3 Curiosity
- 33.4 IntellectualHonesty
- 33.5 CommunicationandCooperation
- 33.6 CreativityandDiscipline
- 33.7 Laziness
- 33.8 CharacteristicsThatDontMatterAsMuchAsYouMightThink
- 33.9 Habits
- 34 ThemesinSoftwareCraftsmanship
- 34.1 ConquerComplexity
- 34.2 PickYourProcess
- 34.3 WriteProgramsforPeopleFirst,ComputersSecond
- 34.4 ProgramintoYourLanguage,NotinIt
- 34.5 FocusYourAttentionwiththeHelpofConventions
- 34.6 PrograminTermsoftheProblemDomair
- 34.7 WatchforFallingRocks
- 34.8 Iterate,Repeatedly,AgainandAgain
- 34.9 ThouShaltRendSoftwareandReligionAsunder
- 35 WheretoFindMoreInformation
- 35.1 InformationAboutSoftwareConstruction
- 35.2 TopicsBeyondConstruction
- 35.3 Periodicals
- 35.4 ASoftwareDevelopersReadingPlan
- 35.5 JoiningaProfessionalOrganization
- Bibliography
- Index