软件随想录:程序员部落酋长Joel谈软件
【原书名】
More Joel on Software
【内容提要】
本书是一部关于软件技术、人才、创业和企业管理的随想文集,作者以诙谐幽默的笔触将自己在软件行业的亲身感悟娓娓道来,观点新颖独特,内容简洁实用。全书分为36讲,每一讲都是一个独立的专题。
本书从不同侧面满足了软件开发人员、设计人员、管理人员及从事软件相关工作的人员的学习与工作需要。
【样章】
下载
【序】
Joel、Apress 、网志 和网志书
“很久以前,在一个很遥远、很遥远的星系中,……” 好吧,实际上没有那么久啦,那是在2000年接近年底的时候,Apress出版公司正式运营刚满一年。当时,我们只是一家非常小的计算机书籍出版商,毫无名气。那一年,我们计划出版的书籍只有很少几本,大概只相当于Apress现在一个月的出版量。
那时,我苦苦学习如何成为一个出版商,可能花费了过多的时间,忙于浏览网站和编写程序。有一天,我偶然来到了一个叫做“Joel谈软件”(Joel on Software)的网站,发现网站的主人是一个观点鲜明的家伙,他的写作风格有点不寻常,很聪明并且还有意挑战一些传统观念。最特别的是,那时他正在写一组系列文章,批评大多数软件的用户界面是多么糟糕。总的来说,这主要是因为程序员们对用户的实际需求几乎毫无所知——用Joel和我经常使用的话说,这叫做“bupkis”(近乎没有),这是一句来源于意第绪语 的纽约土话。我同许多其他人一样,被Joel的这组系列文章以及其他几篇随笔吸引住了。
然后,我就冒出了一个想法:我是出版商,我喜欢读他的文章,那么为什么不出书呢?我给Joel写信,自我介绍了一番。虽然他起初有些怀疑,但是我不知怎地就说服他相信,如果他将那组用户界面的系列文章写成一本书,会有很多人购买,我和他都会赚到很多钱。(当然,那是发生在很久以前的事情,那时FogBugz 还没有变得像今天这样成功,Joel也还不是一个令人羡慕的收入颇丰的演讲者。不过,那时我们都比现在年轻,并且正如你想的那样,比现在穷得多。)
闲话少说,Joel后来又为新书加入一些新内容,使得它更具吸引力,我觉得也更有销路了。突然之间,Apress就必须考虑如何出版它的第一本全彩书籍了。User Interface Design for Programmers(《面向程序员的用户界面设计》)正式出版是在2001年6月21日。现在,它被公认为有史以来第一本“网志书”(blook) 。令计算机图书行业和我本人有些震惊的是,按照当时的畅销标准,它竟然成了一本很优秀的畅销书。顺便说一句,直到今天,它仍然在不断重印,仍然卖得非常好,仍然值得一读。(不过,作为Joel的出版商,而不是作为朋友,我想对他说:你是不是该考虑出个修订版了?)
不过,还是有人出来说,User Interface Design for Programmers并不是一本纯粹的“网志书”,因为加入了“太多的”网站上没有的新内容,使得这本书看上去更像一个混合体——我的看法是,这正同它的先锋地位相适合。
短短几年之后,“Joel谈软件”成了全世界程序员中最著名的网志,原因当然是Joel一直不停地写作那些非常有趣的文章。其中最著名的大概是那篇经典文章《微软公司如何在API战争中失利》(How Microsoft Lost the API War)。据我所知,这篇文章着实把微软的开发部门折腾得够呛。
这样,我就有了另一个想法:将Joel最好的那些文章收集起来,再出一本书,不做大的变动,除了加上一篇字数很少的前言,只要Joel觉得合适就可以。这样一本书的名字就叫做《Joel谈软件》(Joel on Software)。即使书中98%的内容都能在互联网上找到,即使人们认定Apress出版这样一本书一定是疯了,它还是在2004年底出版了。今天,这本书已经印刷了10次,而且依然是一本畅销书。
为什么呢?人们的阅读习惯并没有改变,在像品尝美味的巧克力糖果一样品味Joel的文章时,很多人仍然习惯于看书而不是看浏览器。
但是,Joel并没有因此停下来,他依然在努力思索如何才能更好地编程,或者怎样招聘到优秀的程序员,他也没有停止用自己的观点挑战传统看法。所以,我说服他,现在可以出一本续集,收录2004年底上一本书出版之后的那些“Joel的精华文章”。
结果就是你现在手里拿的这第二本文集,Joel的观点、随感以及偶尔的夸夸其谈都浓缩在了他才华横溢的文章之中。除了少量的编辑加工,原文几乎毫无变动,但是同显示器屏幕或者Kindle阅读器 相比,你确实以一种非常不同的形式拥有了最新的“Joel的精华文章”,现在这被称为“网志书”。(我要对Joel说,我很希望你像中意第一本集子里那些文章那样,中意这本集子里的文章。)
这本书同第一本一样,有着不同寻常的封面和副标题。这是因为Joel和我都是藏书爱好者(好吧,Joel才是藏书爱好者,我是藏书狂人)。17世纪和18世纪那些经典著作的印刷商,为了让他们的书变得生动,往往会做一些特别的设计,我们两人都非常喜欢这一类东西。在第一本《Joel谈软件》的封面上,我们向伯顿(Burton)的《忧郁的剖析》 (Anatomy of Melancholy)致敬;这一本的封面上,我们向霍布斯(Hobbes)的《利维坦》 (The Leviathan)致敬,它的封面很著名,一个巨人由许多个小人组成。Joel和我都感到这个隐喻很不错,可以暗示程序是如何编写完成的:宏伟的整体由个体组成,并且个体是关键。
最后,是一点很个人化的说明:尽管现在Joel的名气很大,但也依然是一个很朴实的人,或者再一次用我们共同的土话说,是一个真正的“mensch”(好人)。我非常骄傲,我有这样一个好朋友。
Gary Cornell
Apress出版公司创始人
正在改变世界的Joel
这个世界也许与你无关,而属于程序员、软件公司以及和他们共事的人。但是,Joel正在改变世界的方式值得我们每一个人注意。
Joel在纽约经营着一家小软件公司,他如今真正的兴趣就是谈论如何经营小软件公司。通过博客、书籍和讨论会,Joel改变了很多人对于寻找、雇佣和管理程序员的想法。越来越多的追随者聚集到他的麾下,逐渐形成了一个颇有影响的大部落。
一群人彼此关联,由领导者带领,抱着同样的理念集结在一起,这就成了部落。数百万年来,人类非彼部落成员,就是此部落成员。一群人要形成部落,只需两个条件:共同的兴趣和沟通方式。Joel全部做到了。他建立了一个可盈利的职业交流网络社区,聚集了全球最顶尖的程序员和最好的职位信息。他甚至自创了被广为使用的“Joel测试”,用来衡量某份程序员工作是否足够好。用谷歌搜索Joel,有7600万个结果,但Joel Spolsky名列前茅;这是理所当然的。
部落需要有人领导。有时一人,有时多人。人们想要关联、发展以及新事物。他们期待变化。Joel就提供了变化。他给了这个部落一根杠杆,戏剧性地改变了他们所在行业的游戏规则。一路走来,他发现了自己的热情所在(同时也发展了自己的公司)。
没有领导不成部落——没有部落也就无所谓领导。
——《部落》,全球10大畅销书作者赛斯•高汀新作
【目录】
第一部分 人员管理
1 我的第一次BillG审查
2 寻找优秀的程序员
2.1 优秀的程序员都在哪里
2.2 我能得到他们吗
2.3 走出去,伙计
2.4 实习生
2.5 建立社区(*难)
2.6 员工推荐:小心陷阱
2.7 寻找优秀的程序员之实战指南
3 寻找优秀的程序员之实战指南
3.1 私人办公室
3.2 工作环境
3.3 玩具
3.4 程序员的社交生活
3.5 我干的是什么活
3.6 我能够认同公司吗
3.7 程序员不在乎的一件事
4 3种管理方法(引言)
5 军事化管理法
6 经济利益驱动法
7 认同法
第二部分 写给未来程序员的建议
8 Java语言学校的危险性
9 在耶鲁大学的演讲
10 给计算机系学生的建议
10.1 毕业前练好写作
10.2 毕业前学好C语言
10.3 毕业前学好微观经济学
10.4 不要因为枯燥就不选修非计算机专业的课程
10.5 选修有大量编程实践的课程
10.6 别担心所有工作都被印度人抢走
10.7 找一份好的暑期实习工作
第三部分 设计的作用
11 字体平滑、反锯齿和次像素渲染
12 寸土必争
13 大构想的陷阱
14 别给用户太多选择
15 易用性是不够的
15.1 几个实例
15.2 设计社会化软件
15.3 推广社会化界面
15.4 一个新领域
16 用软件搭建社区
第四部分 管理大型项目
17 火星人的耳机
18 为什么Microsoft Office的文件格式如此复杂
(以及一些对策)
19 要挣钱,就别怕脏
第五部分 编程建议
20 循证式日程规划
20.1 分解时间
20.2 追踪时间的用途
20.3 对未来情况进行模拟
20.4 不要有强迫症
20.5 积极管理你的项目
20.6 范围渐变
20.7 我们的做法
20.8 总结
20.9 附言
21 关于战略问题的通信之六
21.1 低速CPU和小容量内存的环境
21.2 跨平台的编程语言
21.3 完善的互动性和用户界面标准
22 你的编程语言做得到吗
23 让错误的代码显而易见
23.1 一个例子
23.2 一条通用规则
23.3 匈牙利命名法
23.4 推荐阅读
第六部分 开办软件公司
24 Eric Sink on the Business of Software的前言
25 Micro-ISV: From Vision to Reality的前言
26 飙高音
26.1 等等,我还没说完
26.2 等等,我还是没说完
第七部分 经营软件公司
27 仿生学办公室
28 他山之石,不可攻玉
29 简化性
30 揉一揉,搓一搓
31 组织beta测试的12个最高秘诀
32 建立优质客户服务的7个步骤
32.1 每件事都有两种做法
32.2 建议吹掉灰尘
32.3 让客户迷上你
32.4 承担责备
32.5 学会说软话
32.6 学会做木偶
32.7 贪婪让你一无所获
32.8 (再附送一条)为客服人员提供职业发展道路
第八部分 发布软件
33 挑选发布日期
34 软件定价
第九部分 修订软件
35 5个为什么
36 确定优先顺序