写这篇文章的原因是再次阅读王珢《谈 Linux,Windows 和 Mac》有感。
Linux 和 Unix 里面包含了一些非常糟糕的设计。
毫无疑问,但是很多 Linux 狂热分子却对此避而不谈,赞美(正面意义)的文章却广为传播,因此初学者容易留下刻板的印象。作为一个(桌面领域)需要推广的操作系统可能并不是错误的决定,但是对于真正想要学习 Linux 和 Unix 哲学的人会造成负面影响。
另外,Unix 很多设计问题一方面是当时的基础设施所限,另一方面是历史局限性所致。Windows、Mac 都有自己独特的优势所在,Linux/Unix 的核心哲学也是非常不错的,要公正地比较 3 者我想是一个比较难问题,但是比较 3 者的生态环境和用户群体则相对简单一些。
请不要歧视 IDE。要正视 Emacs,VIM 等文本编辑器的局限性。
在配置 Emacs 和 Vim 的过程中学到了很多平时注意不到的知识,但是也花去了很多真正用于编程的时间,使用一个优秀的 IDE 完成工作会是非常经济的选择。(本文由 Emacs 编写。)
Unix 有许许多多的设计错误,却被当成了教条。
感觉奇怪的地方可以去 StackOverflow 等社区提问,或许知其所以然之后你就知道它究竟是长远的考虑还是历史遗留问题。
可是最后 Unix 靠着自己的“廉价”,“宗教”和“哲学”,战胜了别的系统在设计上的先进,统治了程序员的世界。
不敢妄言技术上的比较,但是成功的产品必有它的优势,或许只是它的优势在当时的意义更大而精品的优点在当时并没有很终要的意义?就像 Java 和 Smalltalk 一样——Java 和缺点很明显,但是它解决了当时 C++ 过于繁杂,脚本语言性能过低的问题,Smalltalk 有很多优秀的设计,但并不足以把人们吸引过来。最后 Smalltalk 虽然并没有推广起来,但是很多新兴的语言都吸收了它优秀的设计思想。
Unix 其实是一个暴君,它不允许你批评它的错误。它利用其它程序员的舆论压力,让每一个系统设计上的错误,都被说成是用户自己的失误。
这只是某些 Unix/Linux 用户的思想,并不难怪到 Unix 这一死物上。
鄙视含有垃圾回收的语言(比如 Java)
Python 表示,作为大多数 Linux 发行版内置的脚本语言压力好大。
微软其实才是真正在乎程序员工具的公司。
Linux 并不是公司主导的,这里可以理解为针对 Apple。个人感觉确实如此,Xcode 的问题让很多开发者苦不堪言,而 Apple 官方并没有重视的感觉。另一方面 Apple 近几年对一些系统底层,比如安全方面的修改都影响了程序群体的正常使用。
Linux 并不是公司主导的,这也导致没有公司为其倾心打造开发工具,虽然并不是 Linux 本身的问题,但确实是生态环境的缺陷。不过近几年一些优秀的跨平台 IDE 真正弥补这些问题。
我为什么当年会鄙视微软?这很简单。我就是跟着一群人瞎起哄而已!
我也这么想过,但实际上微软也和 ATT 一样欺负过小公司、Linux 公司,只不过近些年有些好转。(因为没有了主导行业的能力和地位了?)
我只是想告诉新人们,去除头脑里的宗教,偏激,仇恨和鄙视。每次仇恨一个东西,你就失去了向它学习的机会。
嗯,仇恨会让你失去冷静思考的能力。但是缺点要骂出来,公司/社区才会去改变。
“对用户友好”是一个值得研究,却又研究得非常不够的东西。
王垠的另一篇文章中提供了很好的论述:
统一:随时注意,人是一个统一的系统的一部分,而不是什么古怪的神物。基本上可以把人想象成一个程序模块。
抽象:最大限度的掩盖程序内部的实现,尽量不让人知道他不必要知道的东西。不愿意暴露给其它程序模块的细节,也不要暴露给人。“机所不欲,勿施于人”。
充要:提供给人充分而必要(不多于)的机制来完成人想完成的任务。
正交:机制之间应该尽量减少冗余和重叠,保持正交(orthogonal)。
组合:机制之间应该可以组合(compose),尽量使得干同一件事情只有一种组合。
理性:并不是所有人想要的功能都是应该有的,他们经常欺骗自己,要搞清楚那些是他们真正需要的功能。
信道:人的输入输出包括 5 种感官,虽然通常电脑只与人通过视觉和听觉交互。
直觉:人是靠直觉和模型(model)思考的,给人的信息不管是符号还是图形,应该容易在人脑中建立起直观的模型,这样人才能高效的操作它们。
上下文:人脑的“高速缓存”的容量是很小的。试试你能同时想起 7 个人的名字吗?所以在任一特定时刻,应该只提供与当前被关注对象相关的操作,而不是提供所有情况下的所有操作供人选择。上下文菜单和依据上下文的键盘操作提示,貌似不错的主意。
可以看得出来,深受 Unix 哲学的影响哈!
这么多年后看王垠的文章还是看到了那么多非黑即白的二元论,不由得感到万分惋惜。
王垠论述的很多问题都是和原来一样的片面和偏见。
我很赞同他对于用户友好的看法,很多流行的(开源)软件都存在这样的问题。不过并不是说闭源软件就没有这样的问题,而是解决不好问题的闭源(收费)软件会被竞品战胜而消失,开源软件即使有一些使用上的问题也会更容易存活下来。所以是这就是个幸存者偏差问题。
公司主导的项目跟跟社区主导的项目之间就像是独裁与民主的区别,前者更容易集中力量、统一思想,后者更容易百花齐放、生机勃勃,但前者怕方向错误,后者怕分歧过多。最理想的情况是开明独裁,但是开明独裁也会犯错和腐化。
在我看来,这些生态问题也正是政治问题的缩影,并没有一劳永逸的解决办法。