• 《设计原本》阅读笔记(四)


      本次阅读笔记主要谈一谈设计原本的第八章——设计中的理性主义与经验主义

      理性主义与经验主义一直存在分歧,面对设计也是如此,主要是对“依靠思考能否正确完成设计”这一问题。理性主义者认为人类天生就是健全的,虽然会犯错误,但可以通过后天的学习不断完善自己,因此随着不断的教育,经过仔细的思考后是可以完成设计任务,在他们看来设计方法学的任务就是学习如何达到完美无瑕的程度。经验主义者认为人类天生就是有瑕疵的,会不断犯错,因此设计方法学的任务就是学习如何根据实践寻找瑕疵,加以改进迭代。然而软件设计要跟计算机程序打交道,而程序则是纯粹的数学意义上的对象,原则上可以通过正确的思考达成完美设计。所以困难转移到了设计者本身,而不是设计方法。那么软件设计就不是经验主义了么?显然不是,实际上现在的软件设计方法,如早期原型,早期用户测试,迭代式增量及回归测试都是基于经验主义提出来的。

      本书作者偏向经验主义,其实想一想就可以理解。除了Hello World那种一句话就完成的简单程序之外,当面对一个大型工程设计时,谁又能按照理性主义的思路一蹴而就呢?如果严格按照推理进行,那么证明程序的正确性就会是一个庞大的工程,它基于程序代码量会呈指数性增长。这并不是说软件设计就不需要证明,而是要结合成本来考量,在单元测试或集成测试上,证明技术很受欢迎。之所以提到证明这一部分,是因为没有哪个设计领域的设计师尝试通过严格的形式化方法来验证正确性。因为软件像数学一样都是纯粹的思想,这也是为什么数学专业的学生转型到计算机专业有一定优势的原因吧。软件工程之外的设计领域可能不会进行正确性证明,但他们却通过无数的分析与模拟技术广泛应用了设计验证。

      大量的经验性分析所导致的必然结果就是设计过程中会出现反复迭代,分析越精细越能度量出必要条件的满足程度与约束的遵从程度。因此,针对特定目标的设计验证成为了更加直接和确定的过程。值得注意的是,这些分析和模拟都没有强调目标的正确性或关于环境假设的有效性。

      显然,在软件设计这一方面,经验主义更吃香一些。

  • 相关阅读:
    Linux-获取当前正在执行脚本的绝对路径
    Linux-SSL和SSH和OpenSSH,OpenSSL有什么区别
    Nginx-SSI
    Linux-TCP/IP TIME_WAIT状态原理
    Linux-IP地址后边加个/8(16,24,32)是什么意思?
    Nginx-/etc/sysctl.conf 参数解释
    Linux-内核缓存区和write行为
    常用音频软件:Cool edit pro
    常用音频软件:Wavesufer
    【转】智能音箱技术概览
  • 原文地址:https://www.cnblogs.com/20183711PYD/p/14929246.html
Copyright © 2020-2023  润新知