随想
在开发唱歌背单词AI初次开发的过程当中,我遇到了一些软件工程上的一些困惑,正好刷到一个帖子说可以看看这本书
内容
这里他提到了测试驱动开发(TDD),架构整洁之道 (Robert C. Martin) (Z-Library), 页面 40 尽管对我来说是一个全新的概念,但在工程中我已经在用了:唱歌背单词AI初次开发
编程范式这个概念我之前听说过,但不了解,但函数式编程 面向对象编程 结构化编程 都是编程范式。
在结构化编程当中,为什么说科学证伪/科学方法论可以验证程序的正确性?
一段正确的程序就类似一个科学定律,F=ma。科学定律可以通过实际案例来验证这些定律的正确性,但无论我们进行多少次验证,也不能保证下一次验证是正确的,但只要下一次验证是错误的,我们才能说这个定律是错误的。因此,科学定律的特点是:们可以被证伪,但是没有办法被证明架构整洁之道 (Robert C. Martin) (Z-Library), 页面 59
科学方法论不需要证明某条结论是正确的,只需要想办法证明它是错误的。如 果某个结论经过一定的努力无法证伪,我们则认为它在当下是足够正确的 。
我们可以说数学是要将可证明的结论证明,而与之相反,科学研究则是 要将可证明的结论证伪 。
在这里程序当中,尽管数学可以通过欧几里得式的数学推导证明验证程序的正确性,但这种形式化证明耗时且没必要,科学方法论既可以证明这段程序在目前看来不是错的,也可以节省证明成本。
数条测试就是实际案例,程序能通过测试就代表是正确的,而结构化编程范式促使我们将程序递归讲解为一系列可证明的小函数。如果这些小函数不能证伪,进而推断出整个程序是正确的
什么是面向对象编程? 业界对面向对象编程有不同的说法意见,但对于软件架构师来说:面向对象编程就是以多态 为手段来对源代码中的依赖关系进行控制的能力架构整洁之道 (Robert C. Martin) (Z-Library), 页面 73.
函数式编程中的变量为什么是不可变的?不可变的目的是什么?可行性如何?
当变量不可变时,就不会产生竞争,死锁,并发更新等问题。但在实际问题当中,不可能都是不可变的变量。因此我们需要将不可变组件与可变组件之间进行隔离,将大部分处理逻辑都归于不可变组件中,可变状态组件 的逻辑应该越少越好。
什么是SOLID 原则?SOLID 原则的作用是什么?
- SRP :单一职责原则
- OCP :开闭原则
- LSP:里氏替换原则
- ISP:接口隔离原则
- DIP:依赖反转原则 SOLID 原则应该直接紧贴于具体的代码逻辑之上,这些原则是用来帮助我们定义软件架构中的组件和模块的 架构整洁之道 (Robert C. Martin) (Z-Library), 页面 82