前言
历史上 开宗立派 的大师,都有自己独创的理论或思想:
Alan Turing: Turing Machine, Turing Test
Alonzo Church: Lambda Calculus
Donald Knuth: 算法分析巨作 The Art of Computer Progamming
Denis Ritchie: UNIX, C 语言
Ken Thompson: UNIX, C 语言, UTF-8
John McCarthy: AI, Garbage Collection
Edsger Dijkstra: Structured Programming, Semaphor, Shortest Path
Stephen Cook: NP-completeness
Alan Kay: OOP, GUI
这些只是大师们的 部分成就(排名不分先后)。
我们现在达不到大师的水平。但是,站在大师的肩膀上,我们可以看得更远。
学习那些伟大的编程思想,提高自己的知识水平。理论联系实际,指导我们的编程人生,让我们少犯错误,足矣。
话不多说,我们进入正题。
SOLID 原则
S
: Single Responsibility Principle - 单一职责原则O
: Open/Closed Principle - 开闭原则L
: Liskov Substitution Principle - 里氏替换原则I
: Interface Segregation Principle - 接口隔离原则D
: Dependency Inversion Principle - 依赖反转原则
Single Responsibility Principle - 单一职责原则
一个模块/类/方法,应该只有一个职责,只实现一个功能。
这样逻辑简单,易于编写,易于维护;当我们要实现更复杂的功能时,可以组合多个这样的简单的功能。
是不是很熟悉?没错,这也是 UNIX 哲学。
Open/Closed Principle - 开闭原则
程序应该对扩展开放,对修改关闭。
简言之,我们可以在一个已有的功能上,增加新的功能,但是不要修改这个已有的功能。
这应该是开发新功能最稳妥的方式了。
Liskov Substitution Principle - 里氏替换原则
子类型可以代替父类型。
当一个模块依赖某个类型,我们可以使用这个类型的子类型代替这个类型,系统仍然正常运行。
这个跟 OOP
中的继承、多态紧密联系。
Interface Segregation Principle - 接口隔离原则
不同的功能,应该由不同接口定义。
每个接口尽可能声明最少的方法。
减少耦合。
Dependency Inversion Principle - 依赖反转原则
上层模块不应该依赖下层模块的实现细节。
两者都应该依赖抽象。
抽象不应该依赖细节,细节应该依赖抽象。
UNIX 哲学
软件的功能应该尽可能简单,专注于做好一件事。小即是美。
在 UNIX
中,有各种优秀的工具,它们大都专注于做好一件事。
我们可以编写脚本,组装这些工具,完成更加复杂的功能。
Hyrum’s Law (The Law of Implicit Interfaces)
隐式接口定律:
当你提供一个 API 给外部系统使用时,不止你的接口文档,你的响应中的一切细节,都会被外部系统依赖。
举个例子,我们对接支付系统,调用支付接口报错。我们会根据支付接口返回的响应码 code,甚至是返回的 msg,判断是什么错误、然后再决定我们该做什么处理。
相信很多朋友都处理过这种情况,这说明了 API
的设计不是一件简单的事。好的 API
,需要下很多的功夫去设计。
Brooks’ Law
《人月神话》作者提出的论断:
Adding human resources to a late software development project makes it later.
向一个延期项目增加人力,只会令这个项目更加延期。
在项目已经延期的情况下,增加人力,新来的人要熟悉项目,新人和老人要沟通,这些都需要额外的时间。
最终的结果就是,项目又往后延期了。(想想我们有没有遇到过这种情况?)
帕累托法则(八二法则)
这个法则有多种表述:
- 20% 的时间可以解决 80% 的问题。(剩下 80% 的时间解决最难的 20% 的问题;举个例子,在编程中,我们 80% 的时间在调试)
- 20% 的工作产生 80% 的收入。
- 20% 的功能可以满足 80% 的使用需求。(开发一个产品,实现基础功能,就可以满足大部人的需求了;那些花哨复杂的功能,只有少数人需要。)
八二法则对我们的启示:集中精力解决最重要、最基本的问题。
Moore’s Law
The number of transistors in an integrated circuit doubles approximately every two years.
集成电路上的晶体管数量,大约每两年翻一倍。
没错,作者的原话是 每两年 翻一倍(不是18个月)。
谁能想到这个论断,对计算机行业的发展,产生了多么重大的影响呢?
Hype Cycle(技术成熟度曲线)
这是 Gartner
咨询公司提出的,描述新技术从问世、热捧、冷落、发展、成熟的生命周期。
hype
,炒作的意思。这里指,新技术刚问世,受到媒体的炒作、热捧。
想想这幅图对我们的人生是否也有指导意义?
在受到热捧时,要冷静;
在低谷时,不要放弃希望,要不断学习、给自己充电;
人生之路长着呢,没准下一个巅峰即将到来。
参考资料