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