站在大师的肩膀上 - 学习那些伟大的编程思想

前言

在这里插入图片描述

历史上 开宗立派 的大师,都有自己独创的理论或思想:

  • 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,炒作的意思。这里指,新技术刚问世,受到媒体的炒作、热捧。
在这里插入图片描述

想想这幅图对我们的人生是否也有指导意义?
在受到热捧时,要冷静;
在低谷时,不要放弃希望,要不断学习、给自己充电;
人生之路长着呢,没准下一个巅峰即将到来。

参考资料

  1. GitHub - dwmkerr/hacker-laws: 💻📖 Laws, Theories, Principles and Patterns that developers will find useful. #hackerlaws

  • 2
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

plattoo

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值