编辑推荐
伟大的计算机科学著作之一
程序设计人员的案头需要的著作
计算机先驱BrianW.Kernighan和RobPike的经典作品
经典名著《UNIX编程环境》的作者BrianKernighan和RobPike再次运用了他们的真知灼见,撰写了这《程序设计实践 英文版》,来帮助每一个程序员提高效率和生产力。
这《程序设计实践 英文版》中所包含的内容比仅仅写代码要丰富得多。程序员需要评估权衡、遴选设计、调试测试、优化性能,还要对自己或他人撰写的软件进行维护。在做这些事情的同时,程序员还要关注诸如兼容性、健壮性和可靠性这样的问题,并且需要符合各种规范。
《程序设计实践 英文版》涵盖了所有这些主题,并且不止于此。书中满是实用的建议和使用C、C++、Java还有一系列特殊用途的语言写就的真实示例。
Kernighan和Pike集多年写程序、教学和与其他程序员共同工作的经验写成《程序设计实践 英文版》。只要你也在写软件,就能从这《程序设计实践 英文版》中获得原则和方向上的教益。内容简介
《程序设计实践 英文版》是计算机科学方面的经典名著,由计算机界极具影响力的两位专家BrianW.Kernighan和RobPike合著。书的内容围绕程序设计实践中的一系列问题展开,讲述对于程序员有共性的知识,以帮助各程序员写出更高效的程序。《程序设计实践 英文版》从排错、测试、性能、可移植性、设计、界面、风格和记法等方面,讨论了程序设计中既具有实际意义又具有广泛意义的思想、技术和方法。
《程序设计实践 英文版》值得每位梦想并努力成为程序员的人参考,值得每位计算机专业的学生和计算机工作者阅读,也适合作为程序设计高级课程的教材或参考书。作者简介
BrainKernighan计算机科学家,曾与UNIX的缔造者KenThompson和DennisRitchie一起在贝尔实验室工作。他也是AWK和AMPL程序设计语言的共同作者。“K&RC”和“AWK”中的“K”都是指“Kernighan”。2000年起,他在普林斯顿大学计算机科学系任教授,并任本科部代表。
RobPike软件工程师。他在贝尔实验室任职期间,作为UNIX小组成员参与开发了Plan9和Inferno操作系统以及Limbo程序设计语言。目前他在Google公司工作,参与了Go和Sawzall程序设计语言的开发。目录
Chapter 1:Style/风格 1
1.1 Names/名字 3
1.2 ExpressionsandStatements/表达式和语句6
1.3 ConsistencyandIdioms/一致性和习惯用语10
1.4 FunctionMacros/函数宏17
1.5 MagicNumbers/幻数19
1.6 Comments/注释23
1.7 WhyBother?/为何要在风格方面费心 27
Chapter 2:AlgorithmsandDataStructures/算法与数据结构29
2.1 Searching/检索30
2.2 Sorting/排序32
2.3 Libraries/库34
2.4 AJavaQuicksort/一个Java快速排序实现37
2.5 O-Notation/大O记法40
2.6 GrowingArrays/自增长数组41
2.7 Lists/表44
2.8 Trees/树50
2.9 HashTables/散列表55
2.10 Summary/小结 58
Chapter 3:DesignandImplementation/设计与实现61
3.1 TheMarkovChainAlgorithm/马尔可夫链算法62
3.2 DataStructureAlternatives/在多种数据结构之间选择64
3.3 BuildingtheDataStructureinC/使用C语言构建数据结构65
3.4 GeneratingOutput/生成输出69
3.5 Java 71
3.6 C++ 76
3.7 AwkandPerl/Awk和Perl 78
3.8 Performance/性能80
3.9 Lessons/经验教训82
Chapter 4:Interfaces/接口85
4.1 Comma-SeparatedValues/逗号分隔值86
4.2 APrototypeLibrary/一个原型库87
4.3 ALibraryforOthers/一个给他人用的库91
4.4 AC++Implementation/一个C++实现99
4.5 InterfacePrinciples/接口原则103
4.6 ResourceManagement/资源管理106
4.7 Abort,Retry,Fail?109
4.8 UserInterfaces/用户界面113
Chapter 5:Debugging/调试117
5.1 Debuggers/调试器 118
5.2 GoodClues,EasyBugs/线索明显、易于发现的错误119
5.3 NoClues,HardBugs/线索不明、难以发现的错误123
5.4 LastResorts/最后的手段127
5.5 Non-reproducibleBugs/不可重现的错误 130
5.6 DebuggingTools/调试工具131
5.7 OtherPeople'sBugs/他人引入的错误 135
5.8 Summary/小结136
Chapter 6:Testing/测试139
6.1 TestasYouWritetheCode/一边编码,一边测试140
6.2 SystematicTesting/系统化测试145
6.3 TestAutomation/测试自动化149
6.4 TestScaffolds/测试脚手架151
6.5 StressTests/压力测试155
6.6 TipsforTesting/测试心得158
6.7 WhoDoestheTesting?/谁来测试 159
6.8 TestingtheMarkovProgram/马尔可夫程序的测试160
6.9 Summary/小结162
Chapter 7:Performance/性能165
7.1 ABottleneck/瓶颈166
7.2 TimingandProfiling/计时和剖析171
7.3 StrategiesforSpeed/加速策略175
7.4 TuningtheCode/代码调优178
7.5 SpaceEfficiency/空间利用率182
7.6 Estimation/评估184
7.7 Summary/小结187
Chapter 8:Portability/可移植性189
8.1 Language/语言190
8.2 HeadersandLibraries/头文件和库196
8.3 ProgramOrganization/程序架构198
8.4 Isolation/隔离202
8.5 DataExchange/数据交换203
8.6 ByteOrder/字节序204
8.7 PortabilityandUpgrade/可移植性和升级207
8.8 Internationalization/国际化209
8.9 Summary/小结212
Chapter 9:Notation/记法215
9.1 FormattingData/数据格式化216
9.2 RegularExpressions/正则表达式222
9.3 ProgrammableTools/可编程工具228
9.4 Interpreters,Compilers,andVirtualMachines/解释器、编译器和虚拟机 231
9.5 ProgramsthatWritePrograms/写程序的程序237
9.6 UsingMacrostoGenerateCode/用宏生成代码240
9.7 CompilingontheFly/运行中编译241
Epilogue /后记247
Appendix: CollectedRules/规则汇编249