Unix 设计哲学基础

参考:

The ‘Unix philosophy’ originated with Ken Thompson‘s early meditations on how to design a small but

capable operating system with a clean service interface. It grew as the Unix culture learned things about

how to get maximum leverage out of Thompson‘s design. It absorbed lessons from many sources along the way.

Unix哲学起源于Ken Thompson早期关于如何设计一个小巧而精干,服务接口清晰的冥想。而它也正成长为如何获从

Thompson的设计中获取最大影响力的Unix文化。它一路走来也从许多源码中吸收了经验。

The Unix philosophy is not a formal design method. It wasn‘t handed down from the high fastnesses of theoretical

computer science as a way to produce theoretically perfect software.

Unix 哲学不是一个正式的设计方法。它并没有被用作指导生产理论上完美软件的牢不可破的理论计算机科学。

The Unix philosophy (like successful folk traditions in other engineering disciplines) is bottom-up, not top-down.

Unix 哲学是自底向上的,而不是自顶向下。

Doug McIlroy, the inventor of Unix pipes and one of the founders of the Unix tradition, had this to say at the time:

(i) Make each program do one thing well. To do a new job, build afresh rather than complicate old programs by adding new features.

(ii) Expect the output of every program to become the input to another, as yet unknown, program. Don‘t clutter output with extraneous information. Avoid stringently columnar or binary input formats. Don‘t insist on interactive input.

(iii) Design and build software, even operating systems, to be tried early, ideally within weeks. Don‘t hesitate to throw away the clumsy parts and rebuild them.

(iv) Use tools in preference to unskilled help to lighten a programming task, even if you have to detour to build the tools and expect to throw some of them out after you‘ve finished using them.

Doug McIlroy,unix 管道的创始人同时也是Unix传说的缔造者,如下说到:

1)让一个程序做一件事情,并做好。开展新工作时,重写新代码而不是由于添加新特性而使老的程序变得复杂。

2)尽量使每个程序的输出成为另一个程序的输入。不要让无关的信息令输出显得杂乱无章。避免严格的分栏或者二进制输入形式。不要坚持采用交互式输入。

3)设计和编译软件,即便是操作系统,也要及早进行测试,理想状态下在几周内实现。对于笨拙的实现要直接丢弃。

4)优先使用工具而不是不熟悉的帮助以减轻程序员的工作量,即使你不得不避开这些工具或者使用结束直接丢掉它们。

He later summarized it this way (quoted in A Quarter Century of Unix

This is the Unix philosophy: Write programs that do one thing and do it well. Write programs to work together. Write programs to handle text streams, because that is a universal interface.

他后来这样总到:

这就是Unix 哲学:写只做一件事并把它做好的程序。写可以协同工作的程序。写可以处理文本流的程序,因为那是通用接口。

Rob Pike, who became one of the great masters of C, offers a slightly different angle in Notes on C Programming

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.

Rule 2. Measure. Don‘t tune for speed until you‘ve measured, and even then don‘t unless one part of the code overwhelms the rest.

Rule 3. Fancy algorithms are slow when n is small, and n is usually small. Fancy algorithms have big constants. Until you know that n is frequently going to be big, don‘t get fancy. (Even if n does get big, use Rule 2 first.)

Rule 4. Fancy algorithms are buggier than simple ones, and they‘re much harder to implement. Use simple algorithms as well as simple data structures.

Rule 5. 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.

Rule 6. There is no Rule 6.

Rob Pike, 这个精通C的人在 Notes on C Programming 中提出了一些稍许不同的观点:

1)你不能确定程序将在哪里耗时。瓶颈发生于令人惊奇的地方,所以不要试图再去猜想以及添加速度设置直到你能确认瓶颈在哪里

2)测量。不要调速直到你已经测量出来,只有那一部分代码已经压垮了其它地方的运行才做调整。

3)当规模很小时 花式的算法总是慢的,而规模通常来说是小的。

4)花式的算法总是比简单算法容易产生bug,而且他们常常难以实现。使用简单的算法以及简单的数据结构。

5)数据占优。如果你已经选择了正确的数据结构且整理的很好,数据结构才是编程的中心而不是算法。

6)没有规则6.

时间: 2024-10-13 10:35:08

Unix 设计哲学基础的相关文章

《Linux/Unix设计思想:软件的杠杆效应》读后感

<Linux/Unix设计思想:软件的杠杆效应>读后感 CSDN送一本书给我,本来我是选择Python相关的书,可惜没有货了,CSDN的美女给我一个目录列表,我选择了这本<Linux/Unix设计思想>,当我读到下面这个故事时,深深地打动了我,让我不断反思,久久不能入睡,下面将这个故事分享如下: 我的姑姑却在一年时间内,卖出了价值将近一百万美元的特百惠产品. 当我听说这件事情时,我首先想到的就是:"这得卖出多少保鲜盒啊!"在慢慢适应了我们家族中很快就会出现一个新

Linux/Unix设计思想

Mike Gancarz 1.Unix开发基于Multics分时操作系统 2.NIH(Not invented here,非我发明) 3.GPL:GUN公共授权协议,适用于软件的法律协议.开源 4.Unix哲学: 1)小即是美:易理解.维护.低消耗系统资源.易于其他工具结合 2)让每一个程序制作好一件事 3)尽快建立原型(prototyping):"第三个系统"概念 4)舍高效而取可移植性 5)使用纯文本文件来存储数据:二进制严格禁止 6)充分利用软件的杠杆效应:借用代码模块;将一切自

Mike Gancarz:Linux/Unix设计思想

Mike Gancarz是一位技术布道者.他是Linux/Unix最主要的倡导者之一,也是最早开发X Window System的先驱.他把一些在Unix/Linux社区里口口相传的哲学思想总结提炼,写成了<Linux and the UNIX Philosophy>这样一本完整的Unix/Linux哲学理论书籍.他在书中提出了九条训格之言: 一.小即是美 二.让每一个程序只做好一件事情 三.尽快建立原型 四.舍高效率而取可移植性 五.使用纯文本文件来存储数据 六.充分利用软件的杠杆效应 七.

《Linux/Unix设计思想》 简要

SMALL 小即是美 1THING 让每个程序只做好意见事情 PROTO 尽快建立原型 PORT 舍高效率而取可移植性 FLAT 使用纯文本文件来存储数据 REUSE 充分利用软件的杠杆效应 SCRIPT 使用shell脚本来提高杠杆效应和可移植性 NOCUI 避免强制性的用户界面 FILTER 让每一个程序成为过滤器 custom 允许用户定制环境 kernel 尽量使操作系统的内核小而轻巧 lcase 使用小写字母并尽量简短 trees 保护树木 silence 沉默是金 parallel 

Unix发展与现状

Unix 简史 1965年时,贝尔实验室(Bell Labs)加入一项由奇异电子(General Electric)和麻省理工学院(MIT)合作的计划:该计划要建立一套多使用者.多任务.多层次(multi-user.multi- processor.multi-level)的MULTICS操作系统.直到1969年,因MULTICS计划的工作进度太慢,该计划就被停了下来.当时,Ken Thompson(后被称为Unix之父)已经有一个称为「星际旅行」的程序在GE-635的机器上跑,但是反应非常的慢

解耦设计手法小结

设计是一个平衡的产物,需要在各个约束条件下(组织目标,业务目标,开发流程,技术能力,学习及维护成本等)不断地进行演进. 我们虽然不提倡做大而全的设计,但会坚持进行基础性设计,以保证我们的设计一直在正确的方向上演进. 设计演进的过程既可以是自上而下的,也可以是自下而上的. 基本设计原则 业界普遍被接受的设计原则不再赘述.这里特别针对基于开源项目的软件,其总体主旋律将是:跟随,扩展,贡献,其中跟随将是一个基本能力,反观深度定制的方式会遭遇越来越多的尴尬.落实在设计上,其最核心的设计原则:隔离自有业务

来自Unix/Linux的编程启示录

2017年第一篇文章,祝各位好友新年快乐. 年前由于不小心坐到了自己左手大拇指导致轻微的骨裂,没有按时更新,实在是惭愧.今年给自己订了个小目标,在安顿好新工作后,每周一篇来总结这些年所学. 话不多说,步入正题 写本文的最初灵感源于16年11月份我将工作环境切换到Mac OS上,其中一些使用"差异"让我开始对Unix/Linux中设计产生了浓厚的兴趣. 在整个探究过程中,那些经典的著作再次让我获益匪浅:C和指针,C专家编程,深入理解计算机系统(原书第3版),Linux/Unix设计思想,

zz从面向对象的设计模式看软件设计

原贴:https://coolshell.cn/articles/8961.html 前些天发了一篇<如此理解面向对象编程>的文章,然后引起了大家的热议.然后我在微博上说了一句--"那23个经典的设计模式和OO半毛钱关系没有,只不过人家用OO来实现罢了--OO的设计模式思想和Unix的设计思想基本没什么差别",结果引来了一点点争议.所以,我写下这篇文章把我的观点说明一下.我希望这样可以让大家更容易地理解什么是设计模式.我顺便帮OO和 Unix/Linux搞搞基. 什么是模式

软件设计的思想与哲学

以下是从比较经典的书籍中摘录了的几条跟软件设计相关的原则和思想,这些思想不仅可以帮助你在设计软件.编写代码时有用,而且正如Mike Gancarz的<Linux/Unix设计思想>的译者序的作者漆犇所说"如果用"武侠"来作一个类比,这本书就好像是一部教你修炼内功的秘笈,无论新手老手,修炼基本内功都是一件必须持之以恒甚至可以毕生研习的事情,而同时我们也要知道,有时候优秀程序员和普通程序员水平差距的关键也正在于此". 摘自Robbins和Beebe的<