2020年4月


摘自《基督山伯爵》

三个月前,唐戴斯一心只想着自由,现在光有自由不够了,他还渴望财富;要说过错,那不在唐戴斯,而在天主,它限制了人的能力,却给了他无穷的欲望!


至于您,莫雷尔,我要告诉您的秘密是:这个世界上无所谓幸福,也无所谓不幸,有的只是一种境况和另一种境况的比较,如此而已。只有体验过极度不幸的人,才能品尝到极度的幸福。只有下过死的决心的人,马克西米利安,才会知道活着有多好。

幸福地生活下去吧,我心爱的孩子们,请你们永远别忘记,直至天主垂允为人类揭示未来图景的那一天来到之前,人类的全部智慧就包含在这五个字里面:

等待和希望!


摘自《肖申克的救赎》

我当然记得那个小镇的名字,圣华塔尼欧,这名字太美了,令人忘不了。

我发现自己兴奋莫名,颤抖的手几乎握不住笔。我想惟有自由人才能感受到这种兴奋,一个自由人步上漫长的旅程,奔向不确定的未来。

我希望安迪在那儿。

我希望我能成功跨越美墨边界。

我希望能见到我的朋友,和他握握手。

我希望太平洋就和我梦中所见的一样蔚蓝。

我希望……

摘自《Python基础教程》

虽然这里提倡使用原型,但务必对推倒重来持谨慎态度,在你为编写原型投入了不少时间和精力时尤其如此。更好的选择可能是,对原型进行重构和修改,让其变成功能上更好的系统,其原因有多个。

一个可能出现的常见问题是“第二系统综合征”,即力图让第二个版本非常灵巧或完美无缺,导致永远没有完工的时候

“不断重写综合征”在小说创作领域很常见,指的是不断地修改程序,甚至推倒重来。在有些情况下,让程序“还行”可能是最佳的策略——管用就好。

还有“代码疲劳症”,即你对代码逐渐感到厌烦。你花了很长时间来编写代码,却发现它丑陋而笨拙。导致代码看起来粗糙而笨拙的原因之一是,必须处理各种特殊情况并包含多种形式的错误处理等。无论如何,在新版本中也必须包含这些功能,而最初为了实现它们,你可能花了很大的精力(更别说为调试花费的精力了)。

换而言之,如果你觉得原型还有得救,能变成可行的系统,就应竭尽所能地修改它,而不是推倒重来。在本书后面关于开发项目的章节中,我将开发成果分成了界线清晰的两个版本:原型和最终程序。这样做既是出于清晰考虑,也是为了突出通过编写软件的第一个版本获得的经验和洞察力。在实际开发工作中,完全可以先开发原型,再通过重构它来获得最终的系统。

要深入地了解推倒重来的恐怖之处,请参阅Joel Spolsky撰写的文章“Things You Should Never Do, Part I”(joelonsoftware.com)。据Spolsky讲,对所有软件公司来说,推倒重来都是最严重的策略性错误。