最近,谈论本质复杂性、偶然复杂性的话题,好像变多了一点。
这两个词就是Brooks在《没有银弹(No Silver Bullet)》里面所说的essential tasks和accidental tasks。《没有银弹》收录在《人月神话》书中。
原因也许是AI正在扫荡accidental tasks,或者我之前所说的“搬砖的工作”,所以大家要讨论,AI能给我们留下来的地盘还有哪些。
首先叠个甲
2023年,我们修订《人月神话》中译本。在第12章之前的内容,确实是认认真真修订了。不能说无懈可击,但至少每个地方都认认真真理了一遍。但12章之后只修订了过去几年被点出来的一小部分内容,其他大多数内容没有动。
主要是时间不够了,打算先出,后面再印的时候再修改。不过,这两年的出版行业也不是那么热乎,倒是lib等网站热乎了。没有紧急说印印印,出出出。所以到现在,工作依然停在第12章。
(修订并没有稿费,出版后,出版社会给我们寄一些样书作为报酬。当然,这不能作为托词。)
现在,我们要趁着大家又讨论《没有银弹》的东风,把《没有银弹》相关的16章、17章部分,彻底修订,争取出现在下一批印本中。
接下来叠第二层甲
《人月神话》的是2001年翻译的,当时译者水平有限,网络没那么灵通,等等等等。当然,这也不是理由,算叠个甲。更多详情参见:mp.weixin.qq.com/s/l9z-DK3p3…
接下来,我们挑选一些严重的翻译错误来剖析。
01 是设计问题,不是需求问题
第16章的开头摘要部分,作者针对essential task提了一些建议。
第一个建议是:
Exploiting the mass market to avoid constructing what can be bought。
原译文:
仔细地进行市场调研,避免开发已上市的产品;
这听起来是在说如何推导需求(需求问题),但作者的意思说的是如何实现需求(设计问题)——要尽量利用大众市场,避免自己造轮子,以便把更多精力投入到essential task上。
其实,那个年代,即使是Brooks,对需求工程的认识也是有限的。所以,《没有银弹》说的主要是需求之后的事情。
1989年,Gause和Weinberg出了一本Exploring Requirements: Quality Before Design,中译本《探索需求:设计前的质量》。
推导需求和实现需求的思路刚好是相反的。
推导需求的时候,要尽量避免和市场上已有的系统完全一样,避免“复用”;实现需求的时候,要尽量利用已有的组件来组装,尽量“复用”。这些已有的组件包括开发组织自身积累的,也包括来自外部的。
更多阐述,可参见《软件方法》第1章。
翻译时,没有理解mass market(大众市场)的意思,从而导致误认为避免雷同构造的是要出售的产品。
修订译文:
利用大众市场,避免构造可以买到的东西(组件)。
我在《软件方法》第8章里面,也批评了热衷于“造轮子”的现象:
可能有的人会想:要是我们卖的就是轮子呢?参见《软件方法》。