《程序员应该知道的97件事》即将上市

一、出版信息

【书名】程序员应该知道的97件事

【作者】Kevlin Henney 

【译者】李军 吕骏审校

【出版社】电子工业出版社    

【书号】978-7-121-11756-5

【定价】45.00

【上市日期】20109

【开本】16  

【版次】1-1

 

二、内容简介

本书是一线程序员的经验荟萃,他们根据各自在软件工程各环节里的实践经历,现身说法,提出了自己的真知灼见,这些经验涵盖了用户需求、系统分析设计、编码实践、编码风格、bug管理和项目管理等多个方面。来自各领域的程序员都能从中找到自己感兴趣的内容,因此,适合不同层次程序员的阅读。

 

三、宣传导语

·         97位顶尖程序员的的经验分享

·         无论你使用何种编程语言,都可以从本书收获智慧

 

四、目录

前言         I

谨慎行动     2

勒布·罗斯(Seb Rose

函数式编程原则的应用     4

爱德华·加森(Edward Garson

试问自己用户会怎么做?(你不能算是用户)     6

吉尔斯·科尔伯恩(Giles Colborne

编码标准的自动化     8

菲利普··莱能(Filip van Laenen

美在于简单     10

乔恩·奥尔姆海姆(Jørn Ølmheim

在你重构之前     12

拉吉斯·阿塔帕图(Rajith Attapattu

谨防共享     14

伍迪·达汉(Udi Dahan

童子军规则     16

罗伯特·C·马丁(鲍伯大叔)(Robert C. Martin (Uncle Bob)

在责备别人之前先检查自己的代码     18

阿伦·凯利(Allan Kelly

谨慎选择你的工具     20

乔瓦尼·阿斯普罗尼(Giovanni Asproni
领域语言里的代码     22

·诺斯(Dan North

代码就是设计     24

瑞恩·布勒西(Ryan Brush

关于代码布局的麻烦事     26

史蒂夫·弗里曼(Steve Freeman

代码审查     28

马蒂亚斯·卡尔森(Mattias Karlsson

编写代码的理由     30

耶切尔·凯姆治(Yechiel Kimchi

对注释的一个注释     32

卡尔·埃文斯(Cal Evans

代码说不清,注释来补充     34

凯文·亨尼(Kevlin Henney

不断学习     36

克林特·谢恩克(Clint Shank

易用不是一种能力     38

格雷格·霍普(Gregor Hohpe

早部署,常部署     40

史蒂夫·巴克扎克(Steve Berczuk

区分业务异常和技术异常     42

·贝格·约翰松(Dan Bergh Johnsson

有针对性地勤加练习     44

乔恩·贾格尔(Jon Jagger

领域特定语言     46

迈克尔·亨格(Michael Hunger

不要怕搞砸     48

麦克·里维斯(Mike Lewis

不要在你的测试代码里装可爱     50

洛德·贝吉比(Rod Begbie

不要忽略那个错误     52

皮特·古德利夫(Pete Goodliffe

不要只学习语言,还要了解它的文化内涵     54

安德斯·诺拉斯(Anders Norås

不要把程序钉死在老地方     56

维里蒂·什托布(Verity Stob

不要指望魔法会在此发生     58

艾伦·格里菲思(Alan Griffiths

不要重复你自己     60

史蒂夫·史密斯(Steve Smith

别碰那些代码!     62

卡尔·埃文斯(Cal Evans

封装行为,而不仅仅是状态     64

埃纳尔·兰德雷(Einar Landre

浮点数不是真正的数     66

查克·阿利森(Chuck Allison

开源助你实现雄心壮志     68

理查德·默森-海菲尔(Richard Monson-Haefel

API设计的黄金法则     70

迈克尔·费瑟(Michael Feathers

高手神话     72

瑞恩·布勒西(Ryan Brush

加班加点,事倍功半     74

奥尔夫·莫德尔(Olve Maudal

如何使用bug跟踪器     76

马特·多尔(Matt Doar

代码的去芜存菁     78

皮特·古德利夫(Pete Goodliffe

安装我吧     80

马库斯·巴克(Marcus Baker

进程间通信对应用程序响应时间的影响     82

兰迪·斯坦福(Randy Stafford

保持构建的整洁     84

约翰内斯·布罗德沃(Johannes Brodwall

知道如何使用命令行工具     86

卡罗尔·罗宾逊(Carroll Robinson

通晓两门以上编程语言     88

拉塞尔·文德(Russel Winder   

了解你的IDE   90

亨氏·卡布兹(Heinz Kabutz

了解你的局限性     92

格雷格·科尔文(Greg Colvin

知道你下次提交的内容     94

·贝格·约翰松(Dan Bergh Johnsson

大型、相关联的数据属于数据库     96

迪奥米德斯·斯皮内利斯(Diomidis Spinellis

学习外语     98

克劳斯·马夸特(Klaus Marquardt

要学会估算     100

乔瓦尼·阿斯普罗尼(Giovanni Asproni

学着说Hello,World     102

托马斯·盖斯特(Thomas Guest

让你的项目能表达它自己     104

丹尼尔·林德纳(Daniel Lindner

链接器(Linker)并不神秘     106

沃尔特·布莱特(Walter Bright

临时解决方案的寿命     108

克劳斯·马夸特(Klaus Marquardt

使接口易于正确使用,难于错误使用     110

斯科特·迈尔斯(Scott Meyers

让不可见的更加显眼     112

乔恩·贾格尔(Jon Jagger

在并行系统中使用消息传递可获得更好的伸缩性     114

拉塞尔·文德(Russel Winder

带给未来的消息     116

琳达·瑞辛(Linda Rising

错失采用多态的机会     118

柯克·佩珀丁(Kirk Pepperdine

奇闻轶事:测试人员是你的朋友     120

比尔克·胡夫纳盖尔(Burk Hufnagel

二进制文件仅此一份     122

史蒂夫·弗里曼(Steve Freeman

有代码有真相     124

彼得·索默莱德(Peter Sommerlad

拥有(及重构)构建脚本     126

史蒂夫·巴克扎克(Steve Berczuk

结对编程,感受流程     128

古德妮·霍克尼斯,卡里·罗斯兰,安·卡特林·加耐特(Gudny HauknesKari RøsslandAnn Katrin Gagnat

特定领域类型胜过原始类型     130

埃纳尔·兰德雷(Einar Landre

预防错误     132

吉尔斯·科尔伯恩(Giles Colborne

专业程序员     134

罗伯特·C·马丁(鲍伯大叔)(Robert C. Martin (Uncle Bob)

把一切都置于版本控制之下     136

迪奥米德斯·斯皮内利斯(Diomidis Spinellis

放下鼠标,远离键盘     138

比尔克·胡夫纳盖尔(Burk Hufnagel

阅读代码     140

卡利亚恩·伯格(Karianne Berg

读懂人性     142

基斯·布雷斯韦特(Keith Braithwaite

经常重新发明轮子     144

贾森·P·塞奇(Jason P. Sage

抗拒单子模式的诱惑     146

山姆·沙利斯特(Sam Saariste

通向高性能之路布满了脏代码炸弹     148

柯克·佩珀丁(Kirk Pepperdine

简单来自于删减     150

保罗·W·荷马(Paul W. Homer

单一职责原则     152

罗伯特·C·马丁(鲍伯大叔)(Robert C. Martin (Uncle Bob)

Yes开始     154

亚历克斯·米勒(Alex Miller

请转回去做自动化、自动化、自动化     156

·伊霍斯特曼(Cay Horstmann

充分利用代码分析工具     158

萨拉·芒特(Sarah Mount

为必需行为测试,而不是偶发行为     160

凯文·亨尼(Kevlin Henney

测试要严密而具体     162

凯文·亨尼(Kevlin Henney

在睡觉的时候(或度周末的时候)进行测试     164

拉吉斯·阿塔帕图(Rajith Attapattu

软件开发的工程严密性来自测试     166

尼尔·福特(Neal Ford

关于状态的思想     168

尼克拉斯·尼尔森(Niclas Nilsson

一人计短,二人计长     170

阿德里安·威伯尔(Adrian Wible

错上加错就是貌似正确(并且难以纠正)     172

阿伦·凯利(Allan Kelly

我写代码为人人,人人为我写代码     174

阿斯拉姆·汉(Aslam Khan

Uinx工具是你的好朋友     176

迪奥米德斯·斯皮内利斯(Diomidis Spinellis

使用正确的算法和数据结构     178

·克里斯蒂安(JC··温克尔(Jan Christiaan JC van Winkel

冗长的日志会让你睡不安枕     180

约翰内斯·布罗德沃(Johannes Brodwall

WET掩盖了性能瓶颈     182

柯克·佩珀丁(Kirk Pepperdine

当程序员和测试人员开始合作的时候     184

珍妮特·格雷戈里(Janet Gregory

编写代码时要像余生都要给它提供支持一样     186

尤里·祖巴列夫(Yuriy Zubarev

使用实例编写小函数     188

基斯·布雷斯韦特(Keith Braithwaite

测试为人而写     190

杰拉德·梅萨罗斯(Gerard Meszaros

你应该关心你的代码     192

皮特·古德利夫(Pete Goodliffe

心口不一的客户     194

内特·杰克逊(Nate Jackson

作者简介         196

索引         221

 

五、译者序

熟知软件开发的人都知道这个行业里充满了一次次悲壮的失败,每一座成功项目的丰碑底下都埋葬着无数同类型的失败项目。大多数软件项目都像是一次典型的死亡行军。

在开拔前,项目经理向公司立下军令状,宣布自己打算用多少人员多少预算,在多少天内拿下客户方的全部需求。他坚信目前使用的开发模式完成这类作战任务,如同牛刀杀鸡,石头砸蛋。团队上下也自信满满,忘记了上一个项目带来的伤痛。

随着项目经理一声令下,程序员和其他项目组成员们一起抱着灭此朝食的决心,奋勇向前。第一波攻势异常凌厉,有效的甲乙方沟通、高效的团队合作、灵活健壮的系统架构以及高昂的战斗热情像四连杀一般轻松地把客户的前期需求分割包围、聚而歼之。团队士气从来没有这么高涨过,项目经理甚至偷偷地跟公司上层表示说“可以提前完成”。

可惜好景不长,坏消息终于还是传来了:“某某模块的代码效率欠高,在集成测试时,拖垮了整个工程。”怎么回事?是谁干的?怎么办?谁去援救?怎么补救?修改还是重写?会影响进度的吧?要告诉客户吗?…… 所有相关问题瞬间堆满了桌面,程序员们面面相觑。有人建议说让他吃自己的狗食吧,随后有人反对说他那种水平吃下去的是狗食,挤出来的还是狗食;有人建议增派高手来,但马上又有人用《人月神话》里的名言反驳掉了;还有人说要么项目经理亲自上阵吧,急得项目经理直翻白眼,赶忙辩解说不写代码很多年了。大家吵吵嚷嚷,莫衷一是,最后还是一位资深程序员自告奋勇说“还是我加班来解决吧。”项目经理很高兴,又加了一句“我们不能辛苦一个好兄弟,大家一起加班吧,争取早日完成项目!”

加班是一种习惯,并会逐渐产生依赖。团队里的一些程序员开始像某种啮齿类动物一样爱上了昼伏夜出—白天上网聊天,晚上加班加点;而剩余一些人仍然维持着原来的生物钟,不合拍的气氛正在团队里四散弥漫。好在项目经理平时用聚餐的方式维系着兄弟情深,除了心里有点疙瘩外,也不太会计较半夜里接到同事的工作电话。

但是,从此坏消息成了常态,听到最多的是“用户的需求变了!”。拥抱变化?在书上看到过马丁叔叔讲拥抱变化,可大家都没实际地拥抱过,怎么办?只好用临时方案糊弄着过去了。《左传》曰:“一鼓作气,再而衰,三而竭。”现在整个团队就处于很“衰”的阶段。大家忘记了当初是如何快乐地为项目加班,也差点忘了自己是在开发什么软件,甚至还有几个人已经悄悄地退出这场战役,换上了懵懵懂懂的新兵蛋子。项目经理除了每天上班更早,下班更晚,坐在客户那里喝茶时间更多之外,也没什么良策应对。而公司上层看他们的眼神已经很不满了。没办法,硬着头皮干下去吧。

程序员们走在死亡行军的路上,个个精疲力竭,不知道什么时候能到达目的地,也许是明天,也许是明年。

《程序员必须知道的97件事》不属于《战场生存手册》系列,不能教你百分之百正确的东西,因为软件开发没有永恒的真理:有了“模式”,还有“反模式”;快速排序在小数据集上还不如冒泡排序;函数式编程在并行计算时代里又迎来了它的春天。但是,它们确实能提高在每一场项目恶战中的生存几率,这些共享的技巧、技能、知识和经验都是“运用之妙,存乎一心”,需要你亲自在项目实践中去应用、去体会、去变通、去牢记。但是,一个人的时间毕竟有限,为了能学得更多,除了举一反三之外,更重要的是要能够从别人的经验教训中学习,达到事半功倍的效果。本书几十位作者给你提供了这样一个机会,他们现身说法,用实践经历来告诉你哪里会有陷阱,哪里会是弯路,如何做才能做得更好、更少犯错。

这份集体智慧的主题范围非常广泛,从分类目录中就能看出,它涵盖了用户需求、系统建构、代码风格、开发模式、开发实践、算法、编程思想、测试和程序语言文化等多方面的内容。老实说,这种水果拼盘式的内容组合不可能获得读者的全盘接受,但是,每位程序员,不管水平高低,不管来自哪个业务领域,都有可能从中读到自己感兴趣的内容,用批判的眼光加以取舍,必能弥补阙漏,有所裨益。而这正是本书编者和所有作者的本意。

本书由李军翻译,吕骏审校。在大约三个月的翻译过程中,得到了编辑徐定翔老师及刘唯一老师的莫大帮助,没有他们的支持,这本书可能仍然只在网上流传,无法让更多需要它的人读到,在此向他们表示深深的感谢。

本书的作者们善于旁征博引,所以,在翻译过程中,译者不得不四处寻找援手,在此要感谢于阳、李侠他们的专业知识,还要特别感谢柴杭飞小姐自始至终不厌其烦的支持。

由于本人学识有限,译文里总会有未尽“信、达、雅”之处,还请各位读者不吝赐教。

李军
2010
8

 

posted @ 2010-09-09 11:01  博文视点  阅读(616)  评论(0编辑  收藏  举报