首页 > 其他分享 >Unix哲学

Unix哲学

时间:2022-12-06 11:33:54浏览次数:66  
标签:程序 Unix 算法 哲学 规则 数据结构


M一、McIlroy:四分之一世纪的 Unix​​编辑​


Douglas McIlroy是Unix系统上管道机制的发明者,也是Unix文化的缔造者之一。他归纳的Unix哲学如下:


程序应该只关注一个目标,并尽可能把它做好。让程序能够互相协同工作。应该让程序处理文本数据流,因为这是一个通用的接口。




罗勃·派克在他的《Notes on Programming in C》中提到了以下格言。虽然这些规则是关于程序设计的,但作为Unix哲学丝毫不为过:


规则一:你永远不会知道你的程序会在什么地方耗费时间。程序的瓶颈常常出现在意想不到的地方,因此在你确信找到瓶颈后再动手优化代码吧。


规则二:测试代码。只有在你详细测试了代码,并且发现一部分代码耗费了绝大部分的运行时间时再对程序作速度优化。


规则三:功能全面的算法(fancy algorithm)在处理小规模问题时效率很低,这是因为算法时间效率中的常量很大,而问题往往规模很小。除非你知道你遇到的常常是复杂的情况,否则就让代码丑陋但是简单而高效吧。(即使问题规模确实很大,也首先尝试第二条规则。)


规则四:功能全面的算法比简单的算法更容易产生Bug,更难实现。尽量使用简单的算法和数据结构。


规则五:数据决定一切。如果选择的数据结构能很好的管理数据,算法部分往往不言自明。记住,数据结构,而非算法,才是编程的关键。


规则六:没有第六条规则。


Pike的第一、二条规则重申了高德纳的著名格言:“过早的优化是一切罪恶的根源。” Pike的第三、四条规则被肯·汤普逊改述成:“疑惑不定之时最适合穷举。”事实上,这两条规则也是KISS原则的具体表现。规则五在之前Fred Brooks的人月神话中也被提及。Jon Bentley的《Programming Pearls》中也有一章阐述了相同的设计哲学。此规则作为“如果你的数据结构很好,那么控制它的算法就无关痛痒了”的例子常常被简化成“简约地写代码,聪明地用数据”。第六条规则当然只是Pike针对蒙提·派森之小品Bruces sketch的幽默发挥而已了。


二、Mike Gancarz:UNIX哲学​​编辑​



1994年,X Window系统开发组的成员Mike Gancarz根据他自己的Unix系统经验以及和其他领域使用Unix系统的资深程序员们的讨论结果,写成了《The UNIX Philosophy》,提出了9条训格之言:



一:小即是美。



二:让程序只做好一件事。



三:尽可能早地建立原型。



四:可移植性比效率更重要。



五:数据应该保存为文本文件。



六:尽可能地榨取软件的全部价值。



七:使用shell脚本来提高效率和可移植性。



八:避免使用可定制性低下的用户界面。



九:所有程序都是数据的过滤器。



此外还有十条原则则并不为所有人认同,甚至还是争论的焦点(如宏内核和微内核之争):



一:应该允许用户定制操作环境。



二:让操作系统核心小而轻。



三:使用小写字母并尽量简短。



四:节约纸张,保护树林。



五:沉默是金。



六:并行地思考。



七:部分加部分大于整体。



八:寻找问题的帕雷托法则。



九:程序随需求而增长(Worse is better)。



十:层级地思考。



三、糟糕的更好



Richard P. Gabriel提议Unix的一个关键优势是他称作“糟糕的更好”的设计哲学。在“糟糕的更好”的设计风格下,接口和实现的简单性比系统的任何其他属性都更重要,包括准确性、一致性和完整性。Gabriel主张这种设计风格拥有关键的进化优势,尽管他也怀疑一些结果的质量。



标签:程序,Unix,算法,哲学,规则,数据结构
From: https://blog.51cto.com/u_15903730/5915588

相关文章

  • mysql中的unixtime归纳
    1什么是Unix时间戳(Unixtimestamp)?Unix时间戳(Unixtimestamp),或称Unix时间(Unixtime)、POSIX时间(POSIXtime),是一种时间表示方式,定义为从格林威......
  • unix网络编程2.5——高并发服务器(五)epoll进阶篇——基于epoll实现reactor
    目录系列文章unix网络编程1.1——TCP协议详解(一)unix网络编程2.1——高并发服务器(一)基础——io与文件描述符、socket编程与单进程服务端客户端实现unix网络编程2.2——高并......
  • dos2unix 安装和使用
    dos2unix是将Windows格式文件转换为Unix、Linux格式的实用命令。Windows格式文件的换行符为rn,而Unix&Linux文件的换行符为n。dos2unix命令其实就是将文件中的rn转换为n......
  • Learn by testing: Unix socket 如何通信?
    本文参考communicatewithunixsockets做了一些简单的测试,了解unixsocket是如何通信的。创建一个tcpsocket创建一个unixsocket,命令不会返回,会一直等待:#nc-U/tmp......
  • 哲学家就餐
    哲学家就餐产生死锁      哲学家就餐解决:所有人都先拿到左边筷子再拿右边筷子,但是有一个人先拿右边再拿左边实现方式代码: ......
  • 哲学
    我认为学习哲学,要从观念本身学起。哲学涵盖的范围太广,一篇文章说不完,但它跟我们的生活是息息相关的,我甚至认为哲学可以解决这世界上所有的问题,我并非哪一门派的宗教信徒,但......
  • unix网络编程2.4——高并发服务器(四)epoll基础篇
    目录前置文章unix网络编程1.1——TCP协议详解(一)unix网络编程2.1——高并发服务器(一)基础——io与文件描述符、socket编程与单进程服务端客户端实现unix网络编程2.2——高并......
  • UML 哲学之道——类图[三]
    前言简单整理一些uml中的类图。正文类的基本表示法:名称、属性(类型、可见性)、方法(参数、返回值、可见性)想上面这样,第一行是名称,第二行是属性,第三行是方法可见性:表......
  • UML 哲学之道——概况篇[二]
    前言简单介绍一下uml的概况篇。正文UML概述:url包括:事物关系图扩展机制事物:结构:类、接口、构件、节点等等行为:交互、状态等等分组:包、子系统等等注释......
  • UML 哲学之道——启航篇[一]
    前言简单去介绍一下uml的哲学之道也是自我整理之道。正文什么是uml,全程是统一建模语言(unifiedmodelinglanguage),简单的说就是用图形来表示文档。是描述构造和文档化......