《软件工艺》语录

《软件工艺》语录

最近居然在市图书馆看到这本书的中译本(英文版名称《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普通程序员。但我现在更愿意把软件工艺视为软件工程的改良,因为现在国内,软件工程都还没有真正深入人心,又谈何工艺。

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
This book asks some tough questions. Is software engineering appropriate for projects of less than 100 developer-years? Is the specialization inherent in software engineering a good idea? Can software development even be expressed in engineering terms? It also asks some sensitive ones: Are less experienced developers paid too much, and should senior developers be paid more than almost anyone else in their organization? Should tools that are less than ten years old be used on long-term projects? And at its heart, this book asks the big question: How can we reorganize the process of building software so that it works? The book has some controversial answers: It suggests that we've lost sight of a simple truth—large methodologies and formal structures don't write software; people do. To fix a growing crisis in software development, we need to start by producing better developers. To do that, Pete looks back to a system that has worked well for hundreds of years—craftsmanship. Craftsmanship is far more than a tag for high-quality work. In the full meaning of the word, craftsmanship is a self-sustaining system in which masters arrange for the training of their replacements and where status is based purely on the work you've done. Apprentices, journeymen, and craftsman all work together as a team, learning from each other. Customers select these teams based on the team's reputation, and teams accept only work that they feel will enhance their reputation. Can this full system of craftsmanship work in our industry? Frankly, I don't know. Many entrenched interests will certainly oppose the idea. But I do know that being apprenticed to masters works. It worked for me. I was lucky enough to attend a great university, where I learned much theory (there was less theory back then). What really made the experience shine, however, was an apprenticeship that I served. One of the graduate students took me under his wing. He didn't explicitly teach me, but he showed me by example how a great programmer thinks. Working next to him month after month, I absorbed more practical knowledge about design, coding, and debugging than any course could impart. Later, I joined a start-up in London where I served a different sort of apprenticeship. My new boss showed me that software development was as about people as it was about technology. He helped me understand the business side of the equation and taught me how great development builds personal relationships from a base of technical strength. I “graduated” from these two very different apprenticeships a far, far better developer than I started out. Based on my personal experience, I'm a believer. Working with masters is the best way to learn a craft. This book offers more than ideas about training the next generation of developers. It is also about a philosophy. Craftsmanship stands for taking personal responsibility: for your work, for your personal development, and for your profession. It doesn't matter how you develop software. You could be working 9-to-5 in a CMM level 5 shop, or you could be pulling 100-hour, caffeine-drenched weeks developing the next cool first-person shooter. You could use RUP, XP, or SCRUM—or no process at all. Whatever the structure of your work, the real value in software development is added when skilled developers write high-quality, appropriate code, delivering what the customer needs. Methodologies don't produce these skilled developers. Honoring and practicing craftsmanship, along with the other ideas in this book, just might. You'll do yourself and your career a favor if you spend some time with Pete McBreen's tough questions. David Thomas The Pragmatic Programmers

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值