《软件工艺》语录
最近居然在市图书馆看到这本书的中译本(英文版名称《Software Craftsmanship》),看来图书馆的进书速度不是我原先想象的比较慢的,才3个月我就看到了它。虽然dearbook早就大张旗鼓的宣传了,我居然还轻松地从图书馆里借到了这本书。在我们这个市图书馆,就连什么“电脑×”的合订本你都无法借到的,因为借的人太多。
然而,我居然在图书馆的外借处借到了这一孤本(外借处仅此一本)。
这本书实际上我认为把她当作一本思想性的读本,而不是一般意义上的技术书籍更好。她通篇就只谈一个问题“软件工艺”,恕我孤陋寡闻,我到现在才明白为什么总是有大师级的程序员总是称自己为工匠,听起来“俗”,实际上人家是从“大俗”中获得了“大雅”,你看完这本书就会明白了。
书中一些经典观点罗列如下,供大家参详(楷体文字为个人观点)。
1、 简而言之,软件工程的关键问题就在于:它使我们忘记了“是人来开发软件”这样一个简单的事实。(第2章 软件工程的困境? 中文版 P13)
作者在前面两章致力于证明有组织、可计量的软件开发过程是不可能,并举了一个经典的例子:“Mary had a little lamb”。并由重音的不同而会衍生出五种意思。由此证明需求文档的不确定性。从而动摇传统软件工程的根基。并由此提出谁能取代软件工程这个问题。
2、 对于很多项目,软件工程并不那么适用。软件工程被创造出来,是为了要解决那些超大型项目中所遇到的问题的,这些项目需要庞大的团队、需要延续经年。但是,现在的绝大多数软件开发项目都是由相对较小的团队来完成的。(第3章 理解软件开发 P30)
不是吗?软件工程适用范围狭窄,作者是这么认为的。可是,我们的很多软件公司都是这么认为的,为什么要按软件工程的那一套来开发,我们要的是客户需要的软件,而不是做软件工程的殉道者。其实,作者不是这个意思。因为看了全书后就会明白,不是不要软件工程,而是要丢掉软件工程的“工程”化的隐喻,因为大多数软件的开发过程是不能用计量工具来计量的,从而也就不能工程化。
3、 在我看来,软件开发是一种全新的东西,它融合了艺术、科学和工程学三者,其最终目的是要为用户提供实用的系统。能够阐述这种观点的最好办法就是使用“软件工艺”的隐喻,……(第4章 寻找一个比软件工程更好的隐喻 P36-37)
就是我们需要的软件开发过程是艺术、美学和可度量、机械的综合。实际上,从辨正的角度来说,任何事物都有其两面性甚至多面性,我们不能只强调一方面而忽视其他方面。但正是从这个意义上说,我认为这本书不适合现在的中国,因为我们还没有足够地重视工程化,就要什么工艺,无异于对软件开发过程管理彻底的无所谓,如果是这样,那么这本书就决不是译者推给广大中国读者的本意了。
4、 如果项目中的成员不具备执行项目过程所必备的技能,那么纵有全世界最好的过程也无法挽救项目失败的命运;与此相反,真正优秀的开发者能够让任何过程发挥最大的效用。(第5章 重拾软件开发 P48)
工艺强调人的作用,实际上就是在机械加工车间,有一些精度要求高的活就只有个别掌握工艺的技师可以拿得下来,所以你就不会奇怪一个工人怎么会月薪8000,甚至更高。同样,一个高水平的软件工匠他的作用就是这样的。“编程是一门手艺”,这句话一定会让不少执着的程序员泪流满面。可是,大多数的人是还称不上一个工匠的。
5、 软件开发者不是太少,而是太多。我们并不缺乏开发软件的人。(第6章 无须执照的工艺学 P57)
每次的招聘,包括微软招不到人的招聘,都会有众多的人来应聘。我们甚至都在怀疑招聘的企业是否在作秀?难道我们都不合适?书中的观点是:本科=在学校多混了四年,如果一个人把4年时间用来向一位优秀的开发者学习,而不是在学校里攻读学位那就会有不同的效果了。作者认为甄别人才的方法可以是个人的声望和个人的推荐。这可是一个大胆的观点,事实上我们有的企业就是这样选人的,效果也很好。
6、 软件工艺代表着开发者与用户之间的另一种关系:软件工匠为用户提供有用、好用的工具,并相信假以时日每个人都能够理解软件开发的技术。(第7章 工艺学对系统的用户有何影响 P69)
软件工艺要重建用户与开发者之间的联系。在现实中,用户和开发者之间的关系往往是扭曲的。个人用户弱小可怜,听命于软件开发商的版本更新。而集团用户往往是横挑鼻子,竖挑眼,无论你怎么解释,就是要按需求来,一个字都不能改。开发者和用户能否建立互相理解并能够帮助对方、信任对方的关系,那世界将会多么美好!
7、 家有一老,如有一宝。 软件开发只有年轻人才能干,这已经成为一种思维定势了——但是这种定势是错误的。随着从业时间越来越长,软件工匠能够获得越来越丰富的经验。(第9章 工匠的管理P101)
我记得《程序员》杂志上曾有一篇《解析程序员老化》的文章,文中说:一个优秀的程序员也许在他三十岁之前还能笑傲江湖,恐怕他们四十岁的时候就难免消声匿迹了。举了很多国内大师的例子:求伯君、严援朝、王志东等等......。大家要么转行要么做管理,反正不再编码了。那么工匠又是从何而来呢?所以我们国内没有太多的工匠供你选择。
8、 学徒是比学校教育更有效的学习方式(第10章 成为软件工匠P111)
但是,我不知道中国大陆有没有这样的教学方式。软件工匠带徒弟,不是导师带研究生。我对书中描写的徒弟四海游学的理想画面感到怀疑,纵然你想师从于一个软件工匠可是他愿意收你为徒吗,即便是收你为徒又是否会完全将自己的手艺传授于你呢?要知道中国的传统是“留一手”的。否则师父的饭碗成了问题了。我对于该书最为疑惑的就是这里了。
9、 但是,大多数人都曾经遇到过“厂商放弃某个工具”的情形,此时你为学习这个工具所投入的精力就全部付诸东流了。(第11章 工艺的掌握P120)
“慎用某家公司私有的技术”,这句话足以让我们猛醒。所以我们用C/C++时就坚持用下去,不要为java和C#所迷惑。当然如果你是做一个全新的选择,那就要根据你的开发项目而定了。
10、 由于忘记了“开发者能够不断学习”这一事实,把他们当作可以替换的资源,软件工程人为地造成了一种“技能缺乏”的假象。由于软件工程忽视个人的存在,这个结果是很自然的。(第15章 “软件工程”隐喻的危害 P169)
又是一宗软件工程的原罪。我们都是受害者,“至少有两年以上使用Java1.3和Swing在Windows2000上开发CRM应用程序的经验。”也都是受益者,可以让公司确定地招到一些人,组成一个庞大的开发团队,拿着不菲的月薪。但是,效果是软件的低水平制造、bugs。
书中还有很多惊世的观点,恕不能一一列举。如Java对项目的健康有害等等,恐怕会让Java程序员气的发疯。总而言之,找一个工匠胜过找100普通程序员。但我现在更愿意把软件工艺视为软件工程的改良,因为现在国内,软件工程都还没有真正深入人心,又谈何工艺。
本文地址:http://com.8s8s.com/it/it36433.htm