出版時(shí)間:2006-12 出版社:電子工業(yè)出版社 作者:邁克康奈爾 頁數(shù):914
Tag標(biāo)簽:無
內(nèi)容概要
《代碼大全(第2版)》是著名IT暢銷書作者、IEEE Software雜志前主編、具有20年編程與項(xiàng)目管理經(jīng)驗(yàn)的SteveMcConnell十余年前的經(jīng)典著作的全新演繹:第2版做了全面的更新,增加了很多與時(shí)俱進(jìn)的內(nèi)容,包括對(duì)新語言、新的開發(fā)過程與方法論的討論,等等。這是一本百科全書式的軟件構(gòu)建手冊(cè),涵蓋了軟件構(gòu)建活動(dòng)的方方面面,尤其強(qiáng)調(diào)提高軟件質(zhì)量的種種買踐方法。作者特別注重源代碼的可讀性,詳細(xì)討論了類和函數(shù)命名、變量命名、數(shù)據(jù)類型和控制結(jié)構(gòu)、代碼布局等編程的最基本要素,也討論了防御式編程、表驅(qū)動(dòng)法、協(xié)同構(gòu)建、開發(fā)者測(cè)試、性能優(yōu)化等有效開發(fā)實(shí)踐,這些都服務(wù)于軟件的首要技術(shù)使命:管理復(fù)雜度。為了培養(yǎng)程序員編寫高質(zhì)量代碼的習(xí)慣,書中展示了大量高質(zhì)量代碼示例(以及用作對(duì)比的低質(zhì)量代碼),提高軟件質(zhì)量是降低開發(fā)成本的重要途徑。除此之外,《代碼大全(第2版)(英文版)》歸納總結(jié)了來自專家的經(jīng)驗(yàn)、業(yè)界研究以及學(xué)術(shù)成果,列舉了大量軟件開發(fā)領(lǐng)域的真實(shí)案例與統(tǒng)計(jì)數(shù)據(jù),提高《代碼大全(第2版)(英文版)》的說服力?!洞a大全(第2版)(英文版)》中所論述的技術(shù)不僅填補(bǔ)了初級(jí)與高級(jí)編程實(shí)踐之間的空白,而且也為程序員們提供了一個(gè)有關(guān)軟件開發(fā)技術(shù)的信息來源?!洞a大全(第2版)(英文版)》對(duì)經(jīng)驗(yàn)豐富的程序員、技術(shù)帶頭人、自學(xué)的程序員及沒有太多編程經(jīng)驗(yàn)的學(xué)生都是大有裨益的。
作者簡(jiǎn)介
Steve McConnell 是Construx公司首席軟件工程師。他是軟件工程知識(shí)體系(SWEBOK)項(xiàng)目構(gòu)建知識(shí)領(lǐng)域的先驅(qū)。Steve曾就職于微軟、波音以及西雅圖地區(qū)的一些公司,從事軟件工程的研究。Steve McConnell是以下著作的作者:《快速開發(fā)Rapid Development》(1996)、《軟件項(xiàng)目長(zhǎng)存之道Software Project Survival Guide 》(1998)、和《專業(yè)軟件開發(fā)Professional Software Development》(2004)的 作者。他的書作為杰出軟件開發(fā)書籍,曾兩次獲得Software Development雜志的優(yōu)震撼大獎(jiǎng)。1998 年, Steve被Software Development雜志的讀者評(píng)為軟件業(yè)最具影響力的三大人物之一,與比爾.蓋茨(Bill Gates)和李納斯.托瓦茲(Linus Torvalds)齊名。而且,Steve還是SPC(Software Productivity Center,加拿大軟件進(jìn)程改進(jìn)公司)的ESTIMATE Professional(的一款計(jì)劃和估算工具)主要開發(fā)者, Software Development Productivity award(軟件開發(fā)生產(chǎn)力大獎(jiǎng))的獲得者。Steve從1984年就開始從事桌面軟件產(chǎn)業(yè),現(xiàn)在在快速開發(fā)方法論、工程估算、軟件架構(gòu)實(shí)施、性能調(diào)整、系統(tǒng)整合、和第三方合同管理方面已經(jīng)具有專業(yè)的技術(shù)。
書籍目錄
PrefaceAcknowledgmentsListofChecklistsListofTablesListofFiguresPartI LayingtheFoundation1 WelcometoSoftwareConstruction 1.1 WhatIsSoftwareConstruction?1.2 WhyIsSoftwareConstructionImportant?1.3 HowtoReadThisBook2 MetaphorsforaRicherUnderstandingofSoftwareDevelopment2.1 TheImportanceofMetaphors2.2 HowtoUseSoftwareMetaphors2.3 CommonSoftwareMetaphors3 MeasureTwice,CutOnce:UpstreamPrerequisites3.1 ImportanceofPrerequisites3.2 DeterminetheKindofSoftwareYoureWorkingOn3.3 Problem-DefinitionPrerequisite3.4 RequirementsPrerequisite3.5 ArchitecturePrerequisite3.6 AmountofTimetoSpendonUpstreamPrerequisites4 KeyConstructionDecisions4.1 ChoiceofProgrammingLanguage4.2 ProgrammingConventions4.3 YourLocationontheTechnologyWave4.4 SelectionofMajorConstructionPracticesPartII CreatingHigh-QualityCode5 DesigninConstruction5.1 DesignChallenges5.2 KeyDesignConcepts5.3 DesignBuildingBlocks:Heuristics5.4 DesignPractices5.5 CommentsonPopularMethodologies6 WorkingClasses6.1 ClassFoundations:AbstractDataTypes(ADTs)6.2 GoodClassInterfaces6.3 DesignandImplementationIssues6.4 ReasonstoCreateaClass6.5 Language-SpecificIssues6.6 BeyondClasses:Packages7 High-QualityRoutines7.1 ValidReasonstoCreateaRoutine7.2 DesignattheRoutineLevel7.3 GoodRoutineNames7.4 HowLongCanaRoutineBe?7.5 HowtoUseRoutineParameters7.6 SpecialConsiderationsintheUseofFunctions7.7 MacroRoutinesandInlineRoutines8 DefensiveProgramming8.1 ProtectingYourProgramfromInvalidInputs8.2 Assertions8.3 Error-HandlingTechniques8.4 Exceptions8.5 BarricadeYourProgramtoContaintheDamageCausedbyErrors8.6 DebuggingAids8.7 DeterminingHowMuchDefensiveProgrammingtoLeaveinProductionCode8.8 BeingDefensiveAboutDefensiveProgramming9 ThePseudocodeProgrammingProcess9.1 SummaryofStepsinBuildingClassesandRoutines9.2 PseudocodeforPros9.3 ConstructingRoutinesbyUsingthePPP9.4 AlternativestothePPPPartIII Variables10 GeneralIssuesinUsingVariables10.1 DataLiteracy10.2 MakingVariableDeclarationsEasy10.3 GuidelinesforInitializingVariables10.4 Scope10.5 Persistence10.6 BindingTime10.7 RelationshipBetweenDataTypesandControlStructures10.8 UsingEachVariableforExactlyOnePurpose11 ThePowerofVariableNames11.1 ConsiderationsinChoosingGoodNames11.2 NamingSpecificTypesofData11.3 ThePowerofNamingConventions11.4 informalNamingConventions11.5 StandardizedPrefixes11.6 CreatingShortNamesThatAreReadable11.7 KindsofNamestoAvoid12 FundamentalDataTypes12.1 NumbersinGeneral12.2 integers12.3 Floating-PointNumbers12.4 CharactersandStrings12.5 BooleanVariables12.6 EnumeratedTypes12.7 NamedConstants12.8 Arrays12.9 CreatingYourOwnTypes(TypeAliasing)13 UnusualDataTypes13.1 Structures13.2 Pointers13.3 GlobalDataPartIV Statements14 OrganizingStraight-LineCode14.1 StatementsThatMustBeinaSpecificOrder14.2 StatementsWhoseOrderDoesntMatter15 UsingConditionals15.1 ifStatements15.2 caseStatements16 ControllingLoops16.1 SelectingtheKindofLoop16.2 ControllingtheLoop16.3 CreatingLoopsEasily--FromtheInsideOut16.4 CorrespondenceBetweenLoopsandArrays17 UnusualControlStructures17.1 MultipleReturnsfromaRoutine17.2 Recursion17.3 goto17.4 PerspectiveonUnusualControlStructures18 Table-DrivenMethods18.1 GeneralConsiderationsinUsingTable-DrivenMethods18.2 DirectAccessTables18.3 IndexedAccessTables18.4 Stair-StepAccessTables18.5 OtherExamplesofTableLookups19 GeneralControlIssues19.1 BooleanExpressions19.2 CompoundStatements(Blocks)19.3 NullStatements.19.4 TamingDangerouslyDeepNesting19.5 AProgrammingFoundation:StructuredProgramming19.6 ControlStructuresandComplexityPartV CodeImprovements20 TheSoftware-QualityLandscape20.1 CharacteristicsofSoftwareQuality20.2 TechniquesforImprovingSoftwareQuality20.3 RelativeEffectivenessofQualityTechniques20.4 WhentoDoQualityAssurance20.5 TheGeneralPrincipleofSoftwareQuality21Co llaborativeConstruction21.1 OverviewofCollaborativeDevelopmentPractices21.2 PairProgramming21.3 FormalInspections21.4 OtherKindsofCollaborativeDevelopmentPractices22 DeveloperTesting22.1 RoleofDeveloperTestinginSoftwareQuality22.2 RecommendedApproachtoDeveloperTesting22.3 BagofTestingTricks22.4 TypicalErrors22.5 Test-SupportTools22.6 ImprovingYourTesting22.7 KeepingTestRecords23 Debugging23.1 OverviewofDebuggingIssues23.2 FindingaDefect23.3 FixingaDefect23.4 PsychologicalConsiderationsinDebugging23.5 DebuggingTools--ObviousandNot-So-Obvious24 Refactoring24.1 KindsofSoftwareEvolution24.2 IntroductiontoRefactoring24.3 SpecificRefactorings24.4 RefactoringSafely24.5 RefactoringStrategies25 Code-TuningStrategies25.1 PerformanceOverview25.2 IntroductiontoCodeTuning25.3 KindsofFatandMolasses25.4 Measurement25.5 Iteration25.6 SummaryoftheApproachtoCodeTuning26 Code-TuningTechniques26.1 Logic26.2 Loops26.3 DataTransformations26.4 Expressions26.5 Routines26.6 RecodinginaLow-LevelLanguage26.7 TheMoreThingsChange,theMoreTheyStaytheSamePartVI SystemConsiderations27 HowProgramSizeAffectsConstruction27.1 CommunicationandSize27.2 RangeofProjectSizes27.3 EffectofProjectSizeonErrors27.4 EffectofProjectSizeonProductivity27.5 EffectofProjectSizeonDevelopmentActivities28 ManagingConstruction28.1 EncouragingGoodCoding28.2 ConfigurationManagement28.3 EstimatingaConstructionSchedule28.4 Measurement28.5 TreatingProgrammersasPeople28.6 ManagingYourManager29 Integration29.1 ImportanceoftheIntegrationApproach29.2 IntegrationFrequency--PhasedorIncremental?29.3 IncrementalIntegrationStrategies29.4 DailyBuildandSmokeTest30 ProgrammingTools30.1 DesignTools30.2 Source-CodeTools30.3 Executable-CodeTools30.4 Tool-OrientedEnvironments30.5 BuildingYourOwnProgrammingTools30.6 ToolFantasylandPart VII SoftwareCraftsmanship31 LayoutandStyle31.1 LayoutFundamentals31.2 LayoutTechniques31.3 LayoutStyles31.4 LayingOutControlStructures31.5 LayingOutIndividualStatements31.6 LayingOutComments31.7 LayingOutRoutines31.8 LayingOutClasses32 Self-DocumentingCode32.1 ExternalDocumentation32.2 ProgrammingStyleasDocumentation32.3 ToCommentorNottoComment32.4 KeystoEffectiveComments32.5 CommentingTechniques32.6 IEEEStandards33 PersonalCharacter33.1 IsntPersonalCharacterOfftheTopic?33.2 IntelligenceandHumility33.3 Curiosity33.4 IntellectualHonesty33.5 CommunicationandCooperation33.6 CreativityandDiscipline33.7 Laziness33.8 CharacteristicsThatDontMatterAsMuchAsYouMightThink33.9 Habits34 ThemesinSoftwareCraftsmanship34.1 ConquerComplexity34.2 PickYourProcess34.3 WriteProgramsforPeopleFirst,ComputersSecond34.4 ProgramintoYourLanguage,NotinIt34.5 FocusYourAttentionwiththeHelpofConventions34.6 PrograminTermsoftheProblemDomair34.7 WatchforFallingRocks34.8 Iterate,Repeatedly,AgainandAgain34.9 ThouShaltRendSoftwareandReligionAsunder35 WheretoFindMoreInformation35.1 InformationAboutSoftwareConstruction35.2 TopicsBeyondConstruction35.3 Periodicals35.4 ASoftwareDevelopersReadingPlan35.5 JoiningaProfessionalOrganizationBibliographyIndex
編輯推薦
“《代碼大全》第1版在我看來堪稱軟件工程領(lǐng)域的經(jīng)典之作一而第2版則更棒!” ——Ralph Johnson,伊利諾伊州立大學(xué):《設(shè)計(jì)模式》(Design Patterns)作者之一 “無論您是新手還是經(jīng)驗(yàn)豐富的開發(fā)人員,《代碼大全》(第2版)都能教會(huì)您思考編程的最佳方法。” ——Jeffrey Richter(WWW.wintellect.com),《Microsoft NET框架程序設(shè)計(jì)》(AppfiedMicrosoft.NET Framework Programming)作者 “這本書是講述軟件構(gòu)建的權(quán)威指南一準(zhǔn)備孤身前往荒島的程序員只要帶上這本書就足夠了?!薄 狣iomidis Spinellis,《代碼閱讀方法與實(shí)踐》(Code Readin9:The Open Soume Perspective)作者 “Steve McConnell是一位既在一線實(shí)踐,又能把其中奧妙講個(gè)明白的少數(shù)人之一?!薄 狫ohn Vlissides,IBM研究院; 《設(shè)計(jì)模式》(Design Patterns)作者之一 “Steve McConnell比任何人都·懂得如何構(gòu)建軟件;我們十分慶幸他能把其所有的深邃見解和實(shí)踐經(jīng)驗(yàn)寫成這樣一本重要而新穎的圖書?!薄 癡isual Basic之父”Alan Cooper,《軟件觀念革命》(About Face 2.0)作者 Steve McConnell的原作《代碼大全》(第1版)是公認(rèn)的關(guān)于編程的最佳實(shí)踐指南之一,在過去的十多年間,本書一直在幫助開發(fā)人員編寫更好的軟件。現(xiàn)在,作者將這本經(jīng)典著作全新演繹,融入了最前沿的實(shí)踐技術(shù),加入了上百個(gè)嶄新的代碼示例,充分展示了軟件構(gòu)建的藝術(shù)性和科學(xué)性。McConnell匯集了來自研究機(jī)構(gòu)、學(xué)術(shù)界以及業(yè)界日常實(shí)踐的主要知識(shí),把最高效的技術(shù)和最重要的原理交織融會(huì)為這本既清晰又實(shí)用的指南。無論您的經(jīng)驗(yàn)水平如何,也不管您在怎樣的開發(fā)環(huán)境中工作,也無論項(xiàng)目是大是小,本書都將激發(fā)您的思維一并幫助您構(gòu)建高品質(zhì)的代碼?! 谋緯梢粤私獾饺缦逻@些經(jīng)久不衰的技術(shù)與策略: 做出具有最小復(fù)雜度和最大創(chuàng)造性的設(shè)計(jì) 從協(xié)作式的開發(fā)中獲益 應(yīng)用防御式編程技術(shù)來減少并排查錯(cuò)誤 發(fā)掘重構(gòu)或改善代碼的機(jī)會(huì),并安全可靠地進(jìn)行代碼重構(gòu)和改善 結(jié)合項(xiàng)目的規(guī)格合理選用恰當(dāng)?shù)臉?gòu)建技術(shù) 快速而有效地排除問題 盡早地正確解決關(guān)鍵構(gòu)建問題 分別在項(xiàng)目的早期、中期以及后期加強(qiáng)代碼的質(zhì)量
圖書封面
圖書標(biāo)簽Tags
無
評(píng)論、評(píng)分、閱讀與下載