《设计原本》读书笔记三
第八章:设计中的理性主义和经验主义
人人都会犯错,很多时候,大多数人都是在热情和兴趣的引诱下走向错误之渊。
理解力有两种形式:直觉和推演,无论哪一种都需要以知识为后盾——笛卡尔
PS: 这一章的翻译或内容让我如坠云雾,(一开始)我不清楚是书中的理性/经验主义、正式证明等用词是惯用的哲学/工程术语还是作者生造的,抑或原书确实是这个意思?我头脑中的理性主义对应着书中的经验主义:强调人天生有缺陷且一定会犯错,要通过实验和迭代来消除瑕疵。而书中的理性主义在我看来则是理想主义:认为经过正确的途径可以做出无暇的作品。查询原书的目录,原文是 Rationalism 和 Empiricism。前者指认为(单纯)靠理性能获得全部答案;后者则认为必须依赖于观察。对于“理性主义”的称法,我觉得还是(更加拗口的)“唯理主义”更为恰当,因为“认为理性可以解决一切问题”恰恰是不理性的想法。至于“经验主义”,强调的是以观察为依据。观察到的属于“经验”,所以翻成“经验主义”不算大错,但是总有误导之嫌。
PS II: 由此想到一些哲学名词总会让人产生倾向。最简单的例子就是 metaphysics,在牛津高阶词典中被解释为"branch of philosophy dealing with the nature of existence, truth and knowledge",中文则翻为“形而上学、玄学”。但其实它指的是研究哲学方法本身的哲学(扩展开来就是思考“如何思考”的问题),只不过研究哲学本身最终总会涉及到存在本质之类的问题,才会有以上英文的解释。而在英文中的贬义,则多有那些号称思考者的诗人造成。(伟大的诗人从来都是少数,多数诗人一天到晚成事不足、败事有余,个人看法)至于中文的翻译本来还算准确,但因为马哲毛思的浸润和麻醉,人们也多半将其视作类似神棍之言的胡说八道。但看看当今国内的教育情况就可以知道,我们一向都过分重视教授如何解决(具体)问题,却从来不让学生思考总结这些解决方案背后原理的思考方法。结果教出来的学生个个知识丰富,可脑子却别样的空荡。(对程序员而言,另一个 meta 开头的单词是 meta-programming,非常有前途的方向)
PS III: 不但名词有误导之嫌,短短的两三页纸论点出奇的混乱,试看以下原文(译文):
仅仅依靠深思熟虑就能正确设计好复杂的对象吗?……经验主义者认为可以;理性主义者认为不行。
理性主义者认为……在经过……足够仔细的思考后……可以做出完美无暇的设计。
经验主义者认为人类天生就是有瑕疵的……人类做的任何事都是有瑕疵的……任务……根据实验找出瑕疵。
笛卡尔……理性主义者观点,John Locke……提出了经验主义者观点。
(以上均出现在 P.71)
笛卡尔拥抱经验主义,而 Locke 则认为理性主义是数学的基石。(P.74)
不晓得看完上述文字后你是什么感觉,我是晕了。
第八章个人总结
(原文或者我的思绪太混乱,只好他写他的,我记我的)
人类天生会犯错,而通过推理进行完整的证明由于现代系统的复杂性而只能停留在纯理论的层面。完全证明系统的正确性虽然不可行,但是证明过程可以从不同的角度以不同的推理过程与程序设计中的逻辑进行比较,从而降低错误概率(同样的错误必须通过两种不同的逻辑)。因此 Harlan Mills 提出的 cleanroom 方案(将技术细节公开,由其它团队全面检验,但其增量控制和方法论非常复杂)有其价值所在。
The Federalist Papers 的作者试图证明美国宪法的可行性,但南北战争(极为严重的系统崩溃)表明了这种阐述是不完备的。(这个搞笑)
第九章:用户模型
真理来源于错误而非混乱。
每个人都会有不同的体验、认定各自的假定,所以团队要有明确的模型和假设,并通过正确的方法对所有成员的大脑进行同步。
设计越复杂,设计者越没有可能成为领域专家,则隐含的假定就越多。(危险也越大)
缜密的猜测胜于无言的假设。
错误胜过含糊。(回忆另一个观点:要崩溃则尽早崩溃,要好过静悄悄的失败然后在两天后毁掉一切)
第十章:预算资源
资源限制在设计中期会发生变化,因为我们会变聪明。
要公开资源跟踪表,每个成员都应该知道自己可用的配额。
要有缓冲!
第十一章:约束
格律是一种解放。
必须仔细区分
真正的约束
过时的约束
误以为真的约束
人为制造的约束
在设计时,你要确定需要什么而非如何得到。
第十二章:美学与风格
Shannon 认为英语的冗余度高达 50%。
试图完整描述风格的代价是高昂的。
第十三章:范本
共通的设计占了多数。
计算机领域的设计表明(即使是专业的)设计者不会学习现有的范本。
设计者应该了解范本,清楚它们的优劣,创意不应成为无知的借口。在工程中,没有缘由的革新是愚蠢而自私的。
PS: 每年重复发明的代码浪费了无法估量的金钱和心血,但由于缺乏一种信息共享的机制,人们无法确切知晓自己所作的工作是否存在现有的实现或近似的范本。而即使知道存在这样的实现,由于人们更擅长于写而不是读代码,通常很难在短时间内理解现有的程序,更难以确信其可靠程度。因此多半愿意重新开发一个。可以说,如何更好的共享知识已经成为当今最重要的课题之一。
第十四章:专业错误
专业选手不会像业余选手一样犯那种小错,他们很少错误地设计东西,他们的问题在于设计了错误的东西。
(好吧,这一章很早以前我就在别的地方看到过了,是哪里呢?)
第十五章:设计的分离
由于现代工业的专业化特性和现代系统的复杂性,设计者与用户的分离已成为必然趋势。为此两者间的差别导致了用户体验的不良。为了对这种沟通不足和思维方式迥异造成的情况进行补救,设计者必须亲历用户现场进行体验,并且尽量通过增量式设计与交互和用户进行密切的交流。
第十六章:演变途径和理由
利用一台数字计算机,可以有很多种方法把你自己变成一个傻子。
要记录演进过程,不仅说明设计是什么,也要说明为什么会变成这样。
任何设计都具备错综的立体网状结构(各个功能相互交错缠绕),但具体实现或进行说明时必须以线性的方式进行(一个个文档、代码单独呈现),这就是设计的难度所在。(非常精辟的论点。这也是为什么 Wikimedia 在管理人类知识时如此直观有效的原因。这个耦合结构也让我想起以前学习项目管理时涉及任务依赖性时的一些思考,如果你的任务依赖像一张网还不警惕,那么你就死定了)