"软件工程"与"软件工艺",孰是孰非

      近来"软件工程"与"软件工艺"是非曲直之争颇为激烈,"软件工程"支持者大骂"软件工艺"离经背道,"软件工艺"支持者口口声声要放弃"软件工程"。自《Software Craftsmanship》的中译本《软件工艺》出版后,在国内软件界也掀起了一阵涟漪。本文阐述本人的一家之见,希望有助于平息不必要之争论。
      计算机界的泰山北斗Fred Brooks在其1986年的著名论文《No Silver Bullet - Essence and Accident in Software Engineering》(《没有银弹-软件工程中的根本和次要问题》)中,论述了软件工程试图解决两种类型的问题,一种是由软件开发内在本质所固有的复杂性、一致性、可变性及不可见性所决定的问题,故称为根本问题(essence),这些根本问题决定了不存在一种单纯的技术或管理上的进步,能在短时间内(10年)显著提升软件开发的效率和质量。近20年过去了,Brooks的这个论断似乎是正确的。另一种问题是诸如解决软件构建等的次要问题(accident),之所以是次要问题,是由于解决这些问题只能提升整个软件开发过程的很小一部分效率。可见,和很多人一样,Brooks眼中的"软件工程"的含义十分宽广,软件开发中几乎一切的技术及管理问题都可以纳入"软件工程"的范畴。这个承载着软件开发方法的方方面面的软件工程,我姑且称之为"广义软件工程"。
      Pete McBreen在《Software Craftsmanship》(国内有人在"craftsmanship"的翻译问题上争论得不可开交,有人说翻译成"工艺"不好, software engineering和software craftsmanship其实都是隐喻,一个代名词而已,在这个问题上争论不休大可不必,关键是中译本内容应尽量反映原文意思)一书中提倡以"软件工艺"这个新的隐喻代替"软件工程"隐喻,因为"软件工程"隐喻会导致人们钟情于"'有组织、可计量'的软件开发过程",迷信那些高成本的所谓标准软件开发过程,使软件开发方法僵硬化、信条化,而"软件工艺"隐喻会引导人们重新重视人的因素,强调个体经验、技艺的重要性。在我看来,Pete McBreen在书中多处批判的软件工程,套用Fred Brooks的语汇,就是只专注于那些确定的、可计量的次要问题,而忽略软件开发本身所固有的复杂的、一致的、可变的、不可见的根本问题的软件工程,我姑且称之为"狭义软件工程"。而软件工艺最关注的问题实际就是软件工程中的根本问题,正因为其内在的复杂性、一致性、可变性和不可见性,人们甚至还不能对这些问题进行清晰的描述和分析,也就更无法确定化、可计量化, "狭义软件工程"对于这些"模糊不清"的问题要么视而不见,要么觉得无足轻重,而实际这些根本问题才是决定软件开发项目成败的关键。
      因而,软件工艺所批判的是厚此而薄彼、舍本而逐末的"狭义软件工程",而不是Fred Brooks以及很多人眼中的"广义软件工程",因为"广义软件工程"承认软件开发的不确定性、模糊性,并承认这些不确定性和模糊性是软件开发本身的固有属性,因而不存在一种包治百病的灵丹妙药(即Fred Brooks所说的"银弹")。软件工艺希望以另一种隐喻以避免软件工程隐喻所带来的一些危害,它提出了一条不同的思路,提供了一套不同的方法,在"广义软件工程"的大舞台上,应该有它的用武之地。
      "软件工程"与"软件工艺"之间门派之争的问题在于,人们对"软件工程"本身的含义、范围有不同的理解,争来争去孰知争的不是同一样东西,此软件工程不是彼软件工程也!
      语言是思想的镜子,它只能局部地反映思想,并把思想的一部分放大了、一部分缩小了、一部分歪曲了,甚至会反过来欺骗了思想本身。看来在软件工程的根本问题当中,人类语言的局限性也许占了一席之地。

  • 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、付费专栏及课程。

余额充值