对开发人员有用的定律、理论、原则和模式

43课时
411学过
10分

阿姆达尔定律 (Amdahl's Law)

破窗效应 (The Broken Windows Theory)

布鲁克斯法则 (Brooks's Law)

康威定律 (Conway's Law)

坎宁汉姆定律 (Cunningham's Law)

邓巴数字 (Dunbar's Number)

盖尔定律 (Gall's Law)

古德哈特定律 (Goodhart's Law)

汉隆的剃刀 (Hanlon's Razor)

侯世达定律 (Hofstadter's Law)

哈伯特定律 (Hutber's Law)

技术成熟度曲线 (The Hype Cycle or Amara's Law)

隐式接口定律 (Hyrum's Law or The Law of Implicit Interfaces)

柯林汉定律 (Kernighan's Law)

梅特卡夫定律 (Metcalfe's Law)

摩尔定律 (Moore's Law)

墨菲定律 (Murphy's Law / Sod's Law)

奥卡姆剃刀 (Occam's Razor)

帕金森定理 (Parkinson's Law)

过早优化效应 (Premature Optimization Effect)

普特定律 (Putt's Law)

里德定律 (Reed's Law)

复杂性守恒定律 (The Law of Conservation of Complexity or Tesler's Law)

抽象泄漏定律 (The Law of Leaky Abstractions)

帕金森琐碎定理 (The Law of Triviality)

Unix 哲学 (The Unix Philosophy)

Spotify 模型 (The Spotify Model)

沃德勒定律 (Wadler's Law)

惠顿定律 (Wheaton's Law)

呆伯特法则 (The Dilbert Principle)

帕累托法则 (The Pareto Principle or The 80/20 Rule)

彼得原理 (The Peter Principle)

鲁棒性原则 (The Robustness Principle or Postel's Law)

SOLID

单一功能原则 (The Single Responsibility Principle)

开闭原则 (The Open/Closed Principle)

里氏替换原则 (The Liskov Substitution Principle)

接口隔离原则 (The Interface Segregation Principle)

依赖反转原则 (The Dependency Inversion Principle)

不要重复你自己原则 (The DRY Principle)

KISS 原则 (The KISS Principle)

你不需要它原则 (YAGNI)

分布式计算的谬论 (The Fallacies of Distributed Computing)

课程评价 (0)

请对课程作出评价:
0/300

学员评价

暂无精选评价
10分钟

抽象泄漏定律 (The Law of Leaky Abstractions)

在某种程度上,所有非平凡的抽象都是有泄漏的。 乔尔斯·波尔斯基 (Joel Spolsky)

该定律指出,通常用于简化复杂系统的抽象,在某些情况下将底层系统泄漏出来,使得抽象表现出意外的行为。

例如加载文件并读取其内容。文件系统 API 是较低级别内核系统的抽象,它们本身是与磁盘(或 SSD 的闪存)上的数据更改相关的物理过程的抽象。在大多数情况下,处理文件(如二进制数据流)的抽象将起作用。但是,对于磁盘驱动器,顺序读取数据将比随机访问快得多(由于页面错误的开销增加)。但对于 SSD 驱动器,此开销不会出现。需要理解基础细节来处理这种情况(例如,数据库索引文件的良好结构可以减少随机访问的开销),开发人员需要合理的抽象,来处理不同的细节。

当引入更多的抽象时,上面的例子会变得更复杂。Linux 操作系统允许通过网络访问文件,但在本地表示为普通文件。如果存在网络故障,这种抽象将会泄漏。如果开发人员将这些文件视为普通文件,而不考虑它们可能会受到网络延迟和故障的影响,那么解决方案就会出错。

描述该定律的文章表明,过度依赖抽象,加上对底层过程的理解不足,实际上使得问题在某些情况下更加复杂。

参见:

真实的例子:

  • Photoshop 启动缓慢:我过去遇到过一个问题,就是 Photoshop 启动缓慢,有时需要几分钟。问题好像是 Photoshop 启动时,会读取当前默认打印机的一些信息。但是,如果该打印机实际上是一台网络打印机,则可能需要很长的时间。将网络打印机与本地打印机当作同样的抽象,导致连接不良的情况下出现问题。