代码大全(第二版 英文影印版)

代码大全(第二版 英文影印版)
作 者: Steve McConnell
出版社: 电子工业出版社
丛编项:
版权说明: 本书为公共版权或经版权方授权,请支持正版图书
标 签: 暂缺
ISBN 出版时间 包装 开本 页数 字数
未知 暂无 暂无 未知 0 暂无

作者简介

  Steve McConnell 是Construx公司首席软件工程师。他是软件工程知识体系(SWEBOK)项目构建知识领域的先驱。Steve曾就职于微软、波音以及西雅图地区的一些公司,从事软件工程的研究。Steve McConnell是以下著作的作者:《快速开发Rapid Development》(1996)、《软件项目长存之道Software Project Survival Guide 》(1998)、和《专业软件开发Professional Software Development》(2004)的 作者。他的书作为杰出软件开发书籍,曾两次获得Software Development杂志的优震撼大奖。1998 年, Steve被Software Development杂志的读者评为软件业最具影响力的三大人物之一,与比尔.盖茨(Bill Gates)和李纳斯.托瓦兹(Linus Torvalds)齐名。而且,Steve还是SPC(Software Productivity Center,加拿大软件进程改进公司)的ESTIMATE Professional(的一款计划和估算工具)主要开发者, Software Development Productivity award(软件开发生产力大奖)的获得者。Steve从1984年就开始从事桌面软件产业,现在在快速开发方法论、工程估算、软件架构实施、性能调整、系统整合、和第三方合同管理方面已经具有专业的技术。

内容简介

《代码大全(第2版)》是著名IT畅销书作者、IEEE Software杂志前主编、具有20年编程与项目管理经验的SteveMcConnell十余年前的经典著作的全新演绎:第2版做了全面的更新,增加了很多与时俱进的内容,包括对新语言、新的开发过程与方法论的讨论,等等。这是一本百科全书式的软件构建手册,涵盖了软件构建活动的方方面面,尤其强调提高软件质量的种种买践方法。作者特别注重源代码的可读性,详细讨论了类和函数命名、变量命名、数据类型和控制结构、代码布局等编程的最基本要素,也讨论了防御式编程、表驱动法、协同构建、开发者测试、性能优化等有效开发实践,这些都服务于软件的首要技术使命:管理复杂度。为了培养程序员编写高质量代码的习惯,书中展示了大量高质量代码示例(以及用作对比的低质量代码),提高软件质量是降低开发成本的重要途径。除此之外,《代码大全(第2版)(英文版)》归纳总结了来自专家的经验、业界研究以及学术成果,列举了大量软件开发领域的真实案例与统计数据,提高《代码大全(第2版)(英文版)》的说服力。《代码大全(第2版)(英文版)》中所论述的技术不仅填补了初级与高级编程实践之间的空白,而且也为程序员们提供了一个有关软件开发技术的信息来源。《代码大全(第2版)(英文版)》对经验丰富的程序员、技术带头人、自学的程序员及没有太多编程经验的学生都是大有裨益的。

图书目录

Preface

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 DeterminetheKindofSoftwareYou'reWorkingOn

  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 StatementsWhoseOrderDoesn'tMatter

 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 Isn'tPersonalCharacterOfftheTopic?

  33.2 IntelligenceandHumility

  33.3 Curiosity

  33.4 IntellectualHonesty

  33.5 CommunicationandCooperation

  33.6 CreativityandDiscipline

  33.7 Laziness

  33.8 CharacteristicsThatDon'tMatterAsMuchAsYouMightThink

  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 ASoftwareDeveloper'sReadingPlan

  35.5 JoiningaProfessionalOrganization

Bibliography

Index