总结

本书主要介绍了Unix系统领域中的设计和开发哲学、思想文化体系、原则与经验,由公认的Unix编程大师、开源运动领袖人物之一Eric S.Raymond倾力多年写作而成

摘录:

  1. 用错误的方式解决正确的问题总比用正确的方法解决错误的问题好。
  2. Unix的这种自由放纵主义风格会让它失去很多非技术型用户。但从长远考虑,最终你会发觉这个“错误”换来至关重要的优势:策略相对短寿,而机制才会长存。
  3. 只提供机制不提供方针的哲学能使Unix长久保鲜
  4. 既然能够改编、重用、再造,节省自己 90%的工作量,为什么还要从零开始编码呢?
  5. 设计规则:程序得以形成严丝合缝的工具套装,而不是应景的解决对策。
  6. Unix哲学:
    1. 原则 1:你无法断定程序会在什么地方耗费运行时间。瓶颈经常出现在想不到的地方,所以别急于胡乱找个地方改代码,除非你已经证实那儿就是瓶颈所在。
    2. 原则 2:估量。在你没对代码进行估量,特别是没找到最耗时的那部分之前,别去优化速度。
    3. 原则3:花哨的算法在n 很小时通常很慢,而n通常很小。花哨算法的常数复杂度很大。除非你确定n总是很大,否则不要用花哨算法(即使n很大,也优先考虑原则2)。
    4. 原则4:花哨的算法比简单算法更容易出bug、更难实现。尽量使用简单的算法配合简单的数据结构。
    5. 原则 5:数据压倒一切。如果已经选择了正确的数据结构并且把一切都组织得井井有条,正确的算法也就不言自明。编程的核心是数据结构,而不是算法[7]。
    6. 原则6:没有原则6。
  7. Unix哲学中更多的内容不是这些先哲们口头表述出来的,而是由他们所作的一切和Unix本身所作出的榜样体现出来的。从整体上来说,可以概括为以下几点:
    1. 模块原则:使用简洁的接口拼合简单的部件。
    2. 清晰原则:清晰胜于机巧。
    3. 组合原则:设计时考虑拼接组合。
    4. 分离原则:策略同机制分离,接口同引擎分离。
    5. 简洁原则:设计要简洁,复杂度能低则低。
    6. 吝啬原则:除非确无它法,不要编写庞大的程序。
    7. 透明性原则:设计要可见,以便审查和调试。
    8. 健壮原则:健壮源于透明与简洁。
    9. 表示原则:把知识叠入数据以求逻辑质朴而健壮。
    10. 通俗原则:接口设计避免标新立异。
    11. 缄默原则:如果一个程序没什么好说的,就沉默
    12. 补救原则:出现异常时,马上退出并给出足够错误信息。
    13. 经济原则:宁花机器一分,不花程序员一秒。
    14. 生成原则:避免手工hack,尽量编写程序去生成程序。
    15. 优化原则:雕琢前先要有原型,跑之前先学会走。
    16. 多样原则:决不相信所谓“不二法门”的断言。
    17. 扩展原则:设计着眼未来,未来总比预想来得快。
  8. 软件设计有两种方式:一种是设计得极为简洁,没有看得到的缺陷;另一种是设计得极为复杂,有缺陷也看不出来。第一种方式的难度要大得多。
  9. 在Unix历史中,最大的规律就是:距开源越近就越繁荣。
  10. 养成在编码前为API编写一段非正式书面描述的习惯,是一个非常好的办法。实际上,一些最有能力的开发者,一开始总是定义接口,然后编写简要注释,对其进行描述,最后才编写代码——因为编写注释的过程就阐明了代码必须达到的目的。这种描述能够帮助你组织思路,本身就是十分有用的模块说明,而且,最终你可能还想把这些说明做成路标文档(roadmap document),方便以后的人阅读代码。
  11. Hatton 的经验数据表明,假设其它所有因素(如程序员能力)都相同,200 到 400 之间逻辑行的代码是“最佳点”,可能的缺陷密度达到最小。
  12. Hatton 建议逻辑行与物理行之间为两倍的折算率,即最佳物理行数建议应在400至800行之间。
  13. 无论何时,重复代码都是危险信号。
  14. 程序员工具箱中最强大的优化技术就是不做优化。
  15. 最聪明、最便宜、常常也是最迅速的性能提升方法,就是等上几个月,期望硬件性能更好。
  16. 如果有真凭实据证明应用程序运行缓慢,这时(仅当此时)才可以考虑优化代码。但付诸实施前,要先估量。
  17. 最有效的代码优化方法就是保持代码短小简单。
  18. 有时,按需计算出昂贵的结果,再缓存起来为以后使用,通过这种方法可以兼得鱼和熊掌(低延迟和高吞吐量)—合理利用缓存
  19. 代码多并不等于代码好,至少在编写低层次代码和大量重复投入时是如此。
  20. 评估开源软件包的方法是阅读其文档和快速浏览它的部分代码。如果所见的代码编写恰当,文档完备,那么鼓励使用。如果能够证明软件包已经有些年头并且存在实质具体的用户反馈,就可以断定它是相当可靠的(无论如何还是测测为佳)。
  21. 预测未来最好的方法就是去创造未来。1971年XEROX PARC会议上的发言—Alan Kay

UNIX编程艺术-艾瑞克.S.理曼德相关推荐

  1. 《UNIX编程艺术》读书笔记

    <!-- /* Font Definitions */ @font-face {font-family:Wingdings; panose-1:5 0 0 0 0 0 0 0 0 0; mso- ...

  2. 【转载】Unix编程艺术——Unix哲学

    Unix编程艺术主要介绍了Unix系统领域中的设计和开发哲学.思想文化体系.原则与经验.此文大致摘录了Unix的哲学. web程序员也应该看看此书,软件开发和web开发很多地方都是相通的.看完之后,我 ...

  3. Unix编程艺术——Unix哲学

    题外话:一个月之前,刚刚读完<unix编程艺术>这本据说有些"愤青"的书,读书的过程,感觉是种享受,不但unix本身是艺术,连作者著书也是艺术,本想就本书写篇读感,但是 ...

  4. 读《UNIX编程艺术》随记

    2012-07-07 <UNIX编程艺术>这本书是人介绍的, 一看到这书的厚度,我有想打退堂鼓的冲动.好厚的说. 不过,听到可以不用细也可以,就硬着头接下这本书了. 先看它的书皮,一位师傅 ...

  5. Unix 哲学的一些原则——《Unix 编程艺术》

    Unix 哲学是在 Unix 先哲们和 Unix 本身所作出的榜样中体现出来的.可以概括为以下原则: 模块原则:使用简洁的接口拼合简单的部件. 用清晰的接口把若干简单的模块组合成一个复杂软件. 这样, ...

  6. 三读《UNIX编程艺术》

                                              三读<UNIX编程艺术>           第一次读<UNIX编程 艺术>是2004年的夏 ...

  7. [总结]Unix设计哲学 Unix编程艺术

    转载请注明出处:http://blog.csdn.net/horkychen 学习了<<Unix编程艺术>>第一章关于哲学的部分, 做个汇总. 现在对精简设计, 舍弃华而不实是 ...

  8. 《Unix 编程艺术》 理解

    一:机制, 而不是策略 Unix文化贯穿始终的一条设计主线, 被翻译为: 机制, 而不是策略(Mechanism, not policy), 这句话的英文解释如下: The distinction b ...

  9. Unix编程艺术和代码大全比较阅读

    最近在看Unix编程艺术,收获颇多,联想起以前看过的同样获益匪浅的代码大全,突然萌生出比较两者观点的想法,那就开始吧. Unix编程艺术:简称U. 代码大全:简称C. 1) 函数的长度 U ( 4.1 ...

  10. Unix编程艺术(前言)

    Preface 前言 Unix is not so much an operating system as an oral history. --NealStephenson Unix与其说是一个操作 ...

最新文章

  1. 数据分析的 8 种思维
  2. MySQL与oracle报错显示_Oracle中判断表是否存在再删除表避免报错与MySql和SqlServer的不同...
  3. JS编写一个函数,实现传入一个不定长度字符串,查找出重复次数前n名的字符并分别统计其次数
  4. java序列化和反序列化_Java恶意序列化背后的历史和动机
  5. 用python设计学生管理系统_Python实现GUI学生信息管理系统
  6. 利用TabWidget实现底部菜单
  7. 【Vegas原创】imp/exp导入导出数据
  8. (转)常用英语100句
  9. 网页如何转pdf并实现下载
  10. PR音频处理——收尾音乐
  11. win10wifi多了数字_Win10 技巧:如何修改有线 / WiFi 网络优先级?
  12. finebi如何使用mysql_如何利用bi数据分析FineBI配置MySQL
  13. 柠檬班python自动化百度云_柠字取名2019-尚名网
  14. ubuntu 启动、退出 startx界面
  15. 计算机辅助设计表现的发展给设计带来的影响,计算机辅助设计对艺术设计的影响.doc...
  16. 3D简单壳体CAD绘制
  17. 常见的几种手机操作系统
  18. 前端高频面试题-场景题
  19. Android性能优化实践
  20. 红叶黄花秋意晚,千里念君

热门文章

  1. linux tar 绝对路径,tar打包使用绝对路径详解
  2. Allegro导入Altium Designer的pcb文件
  3. pcs7组态虚拟机中的服务器,PCS7冗余服务器配置
  4. 史上最详细的Maven安装教程
  5. 技术分享 | 基于人工势场法的无人机,机间避撞实现
  6. Adobe Flash CS6 下载与安装教程
  7. android金逸电影院客户端
  8. 小米上市之后的危与机
  9. 遥控器进入鼠标模式,退出鼠标模式,上下左右移动和确认
  10. 重编译 microsip 和 pjsip 支持 mp3 录音