There's nothing in computing that can't be broken by another level of indirection.
这是 Rob Pike 的修改版。
经常 level of insriection
误引用为 abstraction layer
。
原始版本出自 Butler Lampson
All problems in computer science can be solved by another level of indirection但是 David Wheeler 完成了下半句:
All problems in computer science can be solved by another level of indirection, except for the problem of too many layers of indirection.还有 Kevlin Henney 的下半句:
ll problems in computer science can be solved by another level of indirection, except for the problem of too many layers of indirection."
这句话幽默地指出,在计算机编程中,通过引入额外的抽象层或中间层,几乎可以解决任何复杂的问题。这种思路在软件设计和架构中很常见。
Data dominates. If you've chosen the right data structures and organized things well, the algorithms will almost always be self-evident. Data structures, not algorithms, are central to programming.
"数据为王"意味着在软件开发中,数据的组织和表示方式比实现算法的具体细节更加重要。
这个观点强调了良好的数据结构设计对于编程效率和代码质量的重要性。它鼓励程序员把更多精力放在思考如何组织和表示数据上,而不是过分关注算法的技巧性。
Object-oriented design is the roman numerals of computing.
这是一句颇具争议性和挑衅性的话。罗马数字在数学史上曾经很重要,但现代计算中已被阿拉伯数字体系取代,因为后者更简单、更高效。这句话暗示面向对象设计(OOD)也是如此。
Pike认为,就像罗马数字对现代数学来说过于繁琐和低效一样,面向对象编程(OOP)的某些方面(如过度的类层次结构和封装)可能导致代码复杂、难以理解和维护。
这个比喻引发了编程圈内的热议。支持者认为它点出了OOP的一些问题,如过度设计和不必要的复杂性。反对者则认为OOP仍然是一个强大和有用的范式。
值得注意的是,Pike是Go语言的创始人之一,Go语言采用了一种不同于传统OOP的设计哲学,更注重简单性和数据结构。
Eventually, I decided that thinking was not getting me very far and it was time to try building.
这句话体现了一种在技术和创新领域常见的实用主义态度。
"光想没出路"是一种常见的中文表达,意思是仅靠思考而不付诸行动是难以取得进展的。
"动手实践"强调了在实践中学习和创新的重要性。在编程、创业等领域,这种"边做边学"的方法被广泛推崇。
但这并不是完全否定思考的价值。恰当的思考和规划仍然重要,只是强调不要陷入"分析瘫痪"(analysis paralysis),即过度分析导致迟迟不能行动的状态。
Narrowness of experience leads to narrowness of imagination.
更为甚者, 见识短浅, 反而将大师的作品视为平庸。一个讽刺性的文章: The Evolution of a Go Programmer
Such is modern computing: everything simple is made too complicated because it's easy to fiddle with; everything complicated stays complicated because it's hard to fix.
Rob Pike 作为一位推崇简洁设计的大师,他对当前计算机行业的复杂性提出了犀利的批评。
第一部分讽刺了一些程序员或设计师的倾向:明明有简单的解决方案,却偏爱使用复杂的技术,导致本来简单的问题变得难以理解和维护。
第二部分点出了一个现实问题:一旦系统变得复杂,就很难简化。原因可能包括兼容性问题、团队惯性、或者是简单地因为理解和重构复杂系统需要大量时间和资源。
它呼应了UNIX哲学中的一个核心原则:做好一件事。也就是说,程序应该简单、模块化,只专注于完成一个任务。
Procedure names should reflect what they do; function names should reflect what they return
这是编程领域的一条重要命名规范,有助于提高代码的可读性和可维护性。
在中文编程圈,"过程"(procedure)和"函数"(function)的区别经常被讨论。简单来说:
Fancy algorithms are slow when N is small, and N is usually small.
"N" 在算法分析中代表输入规模,如要排序的元素个数、要搜索的数据量等。"大 O 表示法"(如 O(n)、O(n²))就是用 N 来描述算法在最坏情况下的时间复杂度。
这句话的启示:
俗语"大炮打蚊子",就是类似的道理。有时候,简单的方法反而更有效。
Not only is UNIX dead, it's starting to smell really bad.
在1990年代,微软的Windows和IBM的OS/2等图形用户界面(GUI)操作系统开始流行,而基于命令行的UNIX看起来过时了。一些人认为,用户友好的GUI是未来,UNIX这样的系统已经落伍,注定会消亡。
讽刺的是,这个预言并没有完全实现:
这句话现在常被用来嘲笑那些过早宣布某项技术"死亡"的人。
Languages that try to disallow idiocy become themselves idiotic.
过度限制程序员可能弊大于利:
这句话也反映了一个更广的设计哲学:过度设计来防止错误,可能带来更多问题。无论是编程语言、产品设计还是管理,给予用户或团队合理的自由和信任,往往比试图规避一切风险更有效。
Caches aren't architecture, they're just optimization.
Pike的观点是:
但这并不意味着缓存不重要。实际上:
关键是平衡:
用中文的一句话概括就是:"先治本,再治标"。缓存是"标"(优化性能),好的架构才是"本"。
When there is no type hierarchy you don't have to manage the type hierarchy.
它直指面向对象编程(OOP)中一个常见的复杂性来源。"类型层次"主要指面向对象语言中的类继承结构:
"没有类型层次"并非完全否定OOP,而是指一种不同的设计风格:
这种思想在Go语言中很明显:
Productivity is most important by engineering management rules, but enjoyment is most important for engineers. One stems from the other.
Pike指出,高生产力实际上源于工程师的乐趣。
当工程师享受工作时,他们会:
这一观点在软件行业有广泛共识:
对管理者的启示:
对工程师的启示:
Rule 1. You can't tell where a program is going to spend its time. Bottlenecks occur in surprising places, so don't try to second guess and put in a speed hack until you've proven that's where the bottleneck is
"猜不准程序会在哪里耗时":
"性能瓶颈总在意想不到的地方冒出来":
"别想当然去优化":
过早优化(premature optimization)是编程界臭名昭著的反模式。它可能导致:
"除非你证实了那里就是瓶颈所在":
这一法则的实践:
第14条事实上来源自Robe Pike的编程五原则, 包括上面的多条名言:
If POSIX threads are a good thing, perhaps I don't want to know what they're better than.
这是一句典型的程序员式嘲讽,直指他认为设计糟糕的一个技术标准。相当于说"它已经够糟了,居然还有比它更糟的?"
Pike为什么这么说?
There's no such thing as a simple cache bug.
"缓存"在计算机中无处不在:CPU缓存(L1, L2, L3)、内存缓存(如Redis)、浏览器缓存、数据库查询缓存、CDN(内容分发网络)、DNS缓存等等。
Pike之所以这么说,是因为缓存bug的特点:
Using Unix is the computing equivalent of listening only to music by David Cassidy.
Rob Pike在一次采访中说了这句话rob pike responds。
Rob Pike可是Unix的大佬级人物,和Ken Thompson、Dennis Ritchie一起在贝尔实验室创造了Unix。他怎么可能真的觉得Unix就像肤浅的流行乐?
现在的macOS(Mach内核)、Linux,甚至Windows(WSL)都有Unix的影子。
Pike仿佛预言般地讽刺:"看看,大家最后都来听'大卫·卡西迪'了。"
Rob Pike这句话是典型的技术人的自嘲式炫耀。表面上自贬,实际上是在用幽默的方式表达:"对,我们就是主流,因为我们简单好用。学院派笑话我们Low,但最后还不是得用我们的东西?"这种自黑中带着骄傲的调调。
A smart terminal is not a smartass terminal, but rather a terminal you can educate.
Rob Pike这句话用带点烟火气的方式,点出了技术设计的一个关键:真正的"智能"不是自作聪明,而是在交互中学习和成长。就像中国老话说的,"学而不舍,才能化茧成蝶"。无论是终端还是人,都是这个道理。
Sockets are the X windows of IO interfaces.
表面上是在夸 Socket,就像当年吹捧 X Window 一样,实际上是 Pike 式的反话,意思是:"Socket 复杂、难用,就跟 X Window 一样令人头疼。"
为什么 Pike 这么黑 Socket?
Why would you have a language that is not theoretically exciting? Because it's very useful.
这话当然还是出自Rob Pike。作为Unix和Go语言之父,他一贯秉持"实用主义者"的态度。
学院派追求"道"(理论和原则)。Pike强调"术"(实用技巧和方法)。
Concurrency is not parallelism
Go Proverbs