Tag: Software
书评:从《Joel说软件》到《软件随想录》
by Daniel Lv on Feb.06, 2010, under Geek
第一次知道Joel,是在《程序员》杂志上。大概是2005年,《Joel说软件》 2005年9月出版,那个时候我在杭州,第一时间购得此书,赶上十一过节回家,来回飞机上8个小时,打发无聊时间,读的就是这本书。很少有哪一本书给印象我这么深,甚至连读书的场景都记忆这么深刻。那个时候,我的心态正矛盾在是否尝试一下转行投身软件开发。当时的我,对到底什么是软件开发,一点概念都没有,有的就只有刚刚萌芽的一个想法,给自己一个机会试一下,看看自己是否能转得过来。为了走这一步,每天埋头于各种技术书籍资料中,这本《Joel说软件》是唯一一本非技术书籍。
时间过的好快,弹指一挥间,2010年了,等到了今年4月20日,我作软件开发以满三年。照例会在那一天点评自己一年的工作,收获,所以今天不写,因为还有两个月,我仍然还有机会继续尝试一点不一样的东西,现在就写为时尚早。从上一版《Joel说软件》到第二版《软件随想录——程序部落酋长Joel谈软件》,5年过去了,我已经走在软件开发的道路上了,从当初的茫然到现在有了些许从业经验,开始从自己的角度看待整个行业趋势,有了一点自己的想法思考之后,这本书我读出了不少东西。
在1月初拿到,大概用了两周,每天上下班用断断续续的时间在地铁上读完的。地铁上一个人抱着书在哪里,看得正起劲,冒着随时会坐过站的风险的人也许不多了吧。因为内容太过吸引我了,于是每天上下班都成了一段短暂而美妙的旅程。我在豆瓣上看到很多人对这本书的评论,褒贬不一,不过整体看来基本符合正态分布曲线。大概80%左右的人,赞成其中80%左右的观点,少量反对以及驳斥,且不说我是否认同大家一致认为这本书不足的地方,单说大家普遍认同好的地方,我的看法也不尽相同,不过有一点是一样的,就是这本书读起来有一种阅读的快感。经常遇到这样一种情况,普遍得基本论调很难被大众认同,反而是那些阴谋论者的声音,哪怕那么微小得一点点,哪怕绝对数量少得可怜,但是却更容易被大众所关注,并更容易获得广泛得认同,比如那些内幕,独家披露,小道消息之流… 比如前些日子一条消息,大意是“淘宝关闭两家三钻专营手机得店铺,因为淘宝要推自己得淘宝商城”。八竿子打不着,经不起推敲分析得小道消息,至少在我的同事中获得了广泛一致的认同,呵呵。
读Joel得书,最好你应该先了解Joel是谁,他干过什么,他一贯抱持得观点是什么,这样,你就会更加容易并清晰理解书中得论点,而不会犯断章取义得错误。看到那些不知所谓得评论,就可以一笑了之了。Joel得网站和书中开篇就介绍自己,而且从各个方面多角度介绍得相当清楚。Joel的公司开发了一款叫做FogBugz的项目管理软件,书中很多提及开发与组织管理方面的内容都拿这个项目作为论据,刚巧在我目前就职的公司Factual.com的项目管理工具就是FogBugz。说实话第一次看到FogBugz,给我的印象就是UI界面好土,真的好土,让用惯了Mac,对软件交互界面以及UI的taste被惯坏了的人有点难以忍受,而且市面上那么多项目管理工具,开源,免费,任何一个都比FogBugz要强。当看过Joel在书中解释了非常多关于FogBugz背后的方法学,以及产品理念之后,加上三个月实践下来,我对这款产品真得非常满意,他很符合技术人员对项目管理工具的直觉和认知,功能设计相当体贴,虽然UI界面不那么惊艳,却符合最小惊讶原则,是最不容易让你产生视觉审美疲劳,是最耐看的一种UI设计策略。每天的日常工作,围绕着FogBugz,也帮助我更深体会到了Joel在书中提及的那些软件设计方法论以及如何去指导实践。
Joel是在说道理么?这个世界上聪明人这么多,想要找寻对事物洞悉,拿捏把握比你更透彻的人,太容易了。从前辈哪里获得人生智慧,从来都不是难事。再加上那些数不尽的历史上哲人,也许所有人类哲理,早在公元前就被古希腊哲学家之流给整理全面了,后人只是不断重复,反复,颠倒,然后拨乱反正而已。相信已经没有什么空间可以让你去挖掘新得道理了,所以Joel明显不是在发明新道理,他只是在用自己的方式,自己的声音来解释道理而已。能站在高层面将问题看得很全面透彻的人难得,乐于分享自己的思想,观点的人更难得,但是非常善于表达,用自己的语言文字将道理用风趣幽默的方式阐述得简单浅显易懂得人是极端得少数。Joel讲故事得方法特别容易让人信服,难以反驳,除了所表达得内容,他得表达方式,文笔修辞也让我收益匪浅。当然这离不开译者阮一峰得努力。稍后在写关于阮一峰和他翻译得故事。
Joel都说了些什么?Joel说得事情都是软件开发得事情,不管你是程序员,项目经理,软件公司老板,或者是打算投入这个行业得外行人,这本书都适合你。每篇文字都是Joel最近几年得Blog文章,按照管理,设计,经营,市场以及人得角度提炼整理而成。站在我自己得角度,我更原意从人性和历史两个方面来看这本书。
人性角度,即通过理解Joel得性格特点,从他得角度来理解他得文字,从而能更深理解他得思想。网络上那么多得文章教你如何作一个程序员,以及如何管理项目,如何取得市场成功,但是鲜有从性格角度看待问题,以及帮助你理解性格特点是如何在软件开发过程中,对组织管理产生影响的,虽然Joel没有标榜自己的性格特点,但是整本书每一行文字,其实都是如此,Joel个性鲜明,大舌头,喜欢发表言论,但是他不忽悠,字里行间完全不是站在制高点指点江山,而是站在一个非常非常低的角度,以一种低姿态,甚至市井的角度讲事情的发展,根源,以及各种缘由娓娓道来,读起来完全不会有任何心理压力。
历史角度,因为是Blog摘编,所以每篇文章你都能看到一个确切得发布日期,问题是在文章发布的那个时间点上,你看待正在发生的问题是站在什么角度,而Joel又站在了什么角度?Joel看问题角度很多样,从高层抽象到细腻得底层细节,都可圈可点,这也让他有资本对未来作一些预期猜测。但是Joel往往都是猜得中结局得那个人。我一直在思考这个问题,从作软件开发之前,就一直保持着对整个行业得关注,特别重视培养自己得眼光,看清趋势发展和把握将来机会,这个初衷从高中时代就开始酝酿,但是现在我依然不敢说自己已经有了这样得能力,看问题依然局限,缺乏大局观。最困扰得是,你可以很清晰得将过去得事情发展脉络看得清清楚楚,往回看,一切事物得发展总是相互关联互相影响的,事后诸葛亮人人都能作。困难的是你无法准确看清楚将来的趋势,无法准确拿捏和把握将来的产业事态发展,总是看到一片乱象,而且是空前的乱… Joel很大胆,他点评时事,却不仅仅局限于已经发生过的事情,还包含大量对事情发展预期的暗示,现在回看都变成了现实。他真的这么神?其实看他如何解释自己是怎么做出判断的过程,往往会让你会心一笑,其实道理都不难,历史发展总是惊人得相似,尽管历史上每个伟大的人物都相信自己可以改变历史,但是结局往往仍然回到原点,所以如果你不知道事态会如何发展,就把宝押在跟历史吻合的那一面。除此之外学习Joel这种大局观,分析把握事物发展脉络的能力很有价值,你一定会有所收获,相信我,从书中收获到的知识一定会值回这本书的价格。
写到这里发现自己写的好空洞,需要我举几个例子嘛?我就举几个例子吧。有几篇文章给我留下的印象极深刻。
- 寻找优秀的程序员 + 寻找优秀的程序员之实战指南——其实招聘是一个很大的话题,关于招聘我也思考了很久,其实问题就是人才总是稀缺,在这个情况下你怎么作才能吸引到更多优秀的人呢?从Joel这篇文章,Joel其实是在作活广告,他给他潜在的读者一个信息,他的公司处处体现人性,处处关心人,信任人,所以,如果你希望变成一个很棒的程序员,希望跟Joel共事,你就应知道导怎么做了。
- 在耶鲁大学的演讲——这是对自己软件生涯的一次精彩浓缩点评,其实这哪里是浓缩,简直是经过语言艺术的加工之后,将自己的经历渲染到如此的激情澎湃,这最符合大学毕业生的胃口,于是,那些有抱负,想要做出一番事业的人,请把你的简历寄给 jobs@fogcreek.com
- 别给用户太多选择——拿MS的Vista开涮,拿MS的界面设计师,程序员,测试人员开涮,事实证明,Vista的最后结局是晚景凄凉。
- 易用性是不够的——Joel预言下一个十年,软件公司回雇佣人类学家,而事实是,现在的软件UI设计人员,开始纷纷投入心理学,人类学领域去进修。
- 火星人的打火机——点评了Web浏览器领域的乱象,以及在IE8发布之初,MS的IE团队面临的两难,自己给自己挖了个坑,然后自己把自己推下去的典型。IE8最终也改变不了什么,因为理想主意者的大原则和实用主义者现实的选择,这样的论战将持续到永远。
- 徇证式日程规划——这篇文章我看后心有戚戚嫣,自己在个人事务管理尝试经过一轮又一轮,几个阶段之后,得出的结论跟Joel基类似,Joel的建议更值得采纳。
- 关于战略问题的通信之六——昔日DOS平台上的困境在今日的Ajax应用上继续上演,甚至预言了Google和Gmail将来的困境,因为现在所有影响市场的因素和背后的动力同当年完全一样,我们唯一不知道的就是,它到底发生在何时,何地,何人身上,所以我乐得等发生的那一天。
- 你的编程语言做得到么——看起来是在力挺函数式语言,以及那些将来会非常红火的JavaScript,暗合了之前一篇文章,学校只教Java的危险性,呵呵,这篇2006年的文章现在看来,JavaScript成为下一代主流语言已经成为事实了。
- 飚高音——是我最喜欢的一篇文章,因为它准确点评出了为什么我如此喜欢Apple的产品,apple的设计,风格。
- ……(还有其他未提及的文章,不是因为没有给我留下深刻印象,而是文章太精彩,我的组织表达能力难以归纳出来…)
阮一峰,我很欣赏得一个程序员,我并不确定他本人是否是一个程序员,因为我从来不把他当作一个程序员来看待,因为从他得blog上,关于技术方面得文章,我只记得我曾经花费半天时间仔细阅读并实践他得制作GMail式按钮,我更乐意用见微知著来形容从这篇教程文章中,我看到一个技术细腻,严谨,并追求卓越得程序员高手风范。但我更喜欢他得blog上那些非技术文章,尽管在某些方面我有自己的观点,但这丝毫不影响我透过他文字交流思想(单向
)。他得文风流畅,严谨,而且洗净浮华,毫不造作,虽然同在上海,却不曾有机会见面,但是我相信一定是见文如见其人的。
下面是阮一峰先生翻译这本书相关的一些博文,我认为非常有价值,帮你从一个译者角度理解Joel的思想,以及翻译过程中的点点滴滴,强烈建议阅读,顺便说一句,这本说的作译和出版商是如此的慷慨,公开了前7章的内容,谢谢他们!
软件开发廉价么?
by Daniel Lv on Feb.03, 2010, under Geek
缘起:这是Uncle Bob大叔昨天写的一篇文章,Software on the Cheap. 因为最近在shanghaionrails社区干了不少招聘的事,也一直想发表一点自己的看法,先贴上我全文翻译(不经常翻东西,不足之处还望多多指教):
========== 华丽的分割线:全文翻译开始 ==========
当涉及到软件,你花的每一分钱,到底买到的是什么?你是否曾经想过,你的一行代码到底值多少钱?其实,想要算出来并不难。
过去的14个月,我为FitNesse项目写了大概2万行代码,当然,这都是在业余时间完成的。我的主要工作是运作Object Mentor公司,咨询,授课,指导,写作以及一大堆其他事情。编程活动大概只占据我15%左右的时间。
另一方面,程序员总是有其他很多事情要做,他们要开会,然后他们继续开更多的会。当他们正在开会时,他们还要参加后面的会议。以及后面还有更多的会议等着他们。当然,不要忘记还有各种个样繁琐的统计工具以及晦涩难用的源码控制工具来谋杀程序员的时间,感觉就好像蝾螈在冰冻的泥土上缓慢往前爬。
所以15%这个比例不太理想。
一个典型程序员的全部收入(工资加上其他各种收入)大概在20万美刀(我知道这样听上去好像很高,但是你可以姑且这么计算)。所以 20万美刀 / (2万行代码 / 14个月 * 12月)= 11.66美刀/每行代码。
让我们看一看下面这行代码:
StringBugger nameBuffer = new StringBuffer();
这行代码看起来值11.66美刀么?你会为这行代码支付11.66美刀么?请先不要急着回答,因为在每行这样的代码之前,你需要先声明这样一行代码(并且是完全免费的):
import java.lang.StringBuffer;
一些工厂按照“计件工资”方式支付员工薪水。那么你会接受每行代码11.66美刀来算薪水么?当然前提是每行代码都经过了充分测试。
我敢打赌,只要我真的出钱,那么每个程序员都一定会开始严格遵循TDD的方式开发啦(测试驱动开发)。
言归正传
刚才这个薪资计算方式虽然不靠谱,但是他揭露了一个事实,软件不便宜。即便一个最愚蠢得小程序,也可能超过1000行代码,也就意味着这个软件得成本接近1.2万美刀。
想象一下,如果你不是一个程序员,但是关于建立网站你有一个很好得点子,如果作成了会给你带来巨额收入。你把用户用例故事,以及所有细节都准备得非常充分。现在,你是不是准备要找一个高中生来帮你,就像解压缩zip文件一样轻松把网站给做出来?得了吧,你可以支付最低限度的工资,但只有笨蛋程序员才会乐于为你工作。
其实,这样得杯洗具随处可见。很多人不惜提前预支了他老爹的退休金,就为了实现一个很棒得想法,但实现过程却糟糕至极。更耸人听闻得还有那些知名得大公司,花费着每小时100美刀(甚至更多)的成本,却仅仅为了去找一个廉价的解决方案。
“毕竟,作软件不难”,或者他们会说:“这不是要把火箭送上月球,而且那些要价昂贵的家伙其实一直是在骗我们的钱,软件开发没有那么难”。啊哈!
所以这个可怜得家伙到学校找了一个菜鸟,或者招募了一个去年刚刚读了一本关于HTML的书,作出了一个看起来蛮可爱,用来炫耀自己的宠物小猫的网页,而其人却是一个让人讨厌的家庭主妇来作他的程序员,他们听说过TDD么?他们听说过设计模式么?还有设计原则?他们知道源码控制么?
他们当然没有。他们能作的仅仅是将那些恐怖的代码打包到一起,而且没有测试,更没有版本控制,糟糕至极。也许项目起初看起来还不错,挺激动人心的,但是好景不长,很快项目进度就慢下来了,甚至停顿下来,而你的开销却有增无减。
结局是,网站无法正常运转(这个可怜的家伙的老爸也无法早早退休了)。项目最终成为一场灾难,要么被终止,要么花费两倍甚至三倍的钱,才能让项目回到正轨。
底线
关于底线,那就是:只要涉及到软件,你得到什么取决于你到底花了多少钱。如果你想要高质量的软件,那么你必须支付高昂的费用,甚至成本很可能超过12美刀/行。但是请相信我,这可能是得到正确软件最实惠得方法了。
如果你一心只想寻找最廉价的解决方案,那么最终结果只会让你付出更多,并且损失大量的时间。软件就是这样一种东西,好的软件很花钱,一半的钱只能得到糟糕软件,如果你想要更便宜,那么你实际付出的,可能是两倍,甚至超过三倍。
========== 华丽的分割线:全文翻译结束 ==========
后记:Shanghaionrails成立发展至今,形成了一个特别有意思的小圈子。一直在社区里面为大家发布各种招聘信息,也有一些心得。
总体来所,Rails的社区人才难找,供不应求是常态。经常跟招聘方负责人闲聊,问及招聘情况,得到得反馈都差不多。这两年下来,能亲手促成朋友找到自己心仪的公司的情况,少之又少,很惭愧。不过从另外一方面说,招聘方都希望找到合适自己公司的人才,而且每家公司的用人策略也不尽相同。个中充满了时机,选择,变数,非我个人所能掌控。
从人才角度来说,社区规模,注册人数接近500人了,相信潜在会员还有更多,活跃的会员,保守估计大概在10%,于是乎,就感觉圈子好小,因为经常冒泡说话的就那么些人,而这他们在什么地方,作什么事情,我大抵一清二楚,招聘广告一般都不是针对他们的。
我用class A级来形容而那些低调且华丽的高手们,牛人们,我知道一些这样的人,这些人通常早早就为自己安排好了一切,有非常好的工作,很高的薪水,稳定且前途光明,一般得招聘广告对他们的吸引力不大。
那些有一定水平的,并有一定经验的人,我称之为class B级人才,这也包括我自己。这群人有潜力,加以时日会成为大牛,或者已经成为大牛却不自知。但是自己目前所处环境,限制自己的能力无法充分发挥,更想要寻求更好的发展,更好的薪资。可喜可贺,招聘信息是为这些人准备的。比如最近我代Factual.com发布招聘信息,很幸运吸引到一些来自世界顶级公司,有着非常雄厚的背景,学历极高的人才,请原谅我在这里隐去他们的具体信息,我只是想说社区里面卧虎藏龙,潜伏着牛人无数,可是平时讨论,以及一些社区活动,你不参加,怎么会让别人认识到你,让招聘方了解到你,让朋友们关注到你,当好得机会来了你才不会被错过。所以请积极参与社区活动。
以招聘毫无经验,技能,尤其以学生为主的公司,我认为Uncle Bob的文章用最浅显的例子把道理说的很明白了:好软件不便宜。如果公司是以外包和客户项目为主,那么寻求最廉价的劳动力本质没错,可是综合计算成本,尤其是以智力作为劳动生产资料的软件开发行业,一个没有经验技能的人能产生多少价值,刨去必须支付得哪怕相当低廉的工资,还有多少利润剩余?我不否认学生中有出类拔萃的顶尖人才,也无意冒犯在校读书或者刚刚毕业的年轻人,学生是一个很特殊得群体,他们还没有定性,对发展,对机会得诉求更高,却对未知得将来充满恐惧,请不要利用学生的这种心态,这样得心态无法长期持续为公司创造价值。软件从业门槛是有的,而且软件行业也是商业,也要从商业角度考虑问题。(其实很想说的在透一点,招聘中最好不要涉及对中国的开源环境的点评,像中日软件社区对比以及差距这种敏感话题,也最好避免讨论,只要涉及到我都不会参与其中,对社区发展无益。)
对于没有经验,刚刚进入这个行业得人,尤其是学生朋友,其实我不想说教,也轮不到我。我只想说,一定不要灰心丧气,每个人都是从0经验入行这么过来的,开始的时候都茫然不知所措,找不到方向。关键是你是能看清楚目标,是不是每天都在进步,是否真的想好了要投身这IT行业并打算长期坚持,如果仅仅想要赚钱,建议趁早赶快转行吧,作程序员不能保证你赚大钱。如果你喜欢技术,喜欢钻研,只要你每天作的都是靠谱的事情,成为Class B级别,迈入Class A级别只是一个时间问题。

