UNIX编程艺术

[美] Eric S. Raymond

出版时间

2012-07-31

ISBN

9787121176654

评分

★★★★★

标签

编程

书籍介绍
这不是一本教你写代码的手册,而是一场关于「软件该如何被思考」的对话。作者以 Unix 数十年的演进为线索,把模块化、清晰胜于机巧、宽收严发、小就是美等原则,从历史实践中提炼为可践行的设计纪律。它真正打动人的地方,在于反复追问一个朴素的问题:为什么有些产品成功了,有些却失败了?答案往往不在技巧,而在品味——是否在错误的时间急着动手编码,是否敢于删繁就简。当然,它也有争议:部分实例略显陈旧,译文亦遭诟病。但正因如此,它更适合那些愿意慢下来、把软件设计当作一门技艺来修炼的开发者,而非寻求速成模板的人。
作者简介
Eric S. Raymond 从1982年开始就是UNIX开发者。作为开源社区文化的倡导和呼吁者,他在《大教堂与市集》中写下了这场运动的宣言,同时他还是《新黑客词典》的编辑。
AI导读
核心看点
  • 系统阐述Unix设计哲学,如模块化、简洁与组合原则。
  • 深入探讨开源文化、社群协作及软件工程的底层逻辑。
  • 提供接口设计、代码紧凑性与正交性等具体实践指导。
读者共识
  • 被誉为编程界的圣经,能刷新读者的软件设计世界观。
  • 核心推崇KISS原则,强调程序应只做一件事并做好。
  • 虽部分翻译遭诟病,但其中蕴含的智慧值得反复研读。
精彩摘录
  • "模块化代码的首要特质就是封装。封装良好的模块不会过多向外部披露自身的细节,不会直接调用其他模块的实现代码,也不会胡乱共享全局数据。模块之间通过应用程序变成接口(API)——一组严密、定义良好的程序调用和数据结构来通信。这就是模块化原则的内容。 有一种很好的方式来验证API是否设计良好:如果是这用纯人类语言描述设计(不许摘录任何源代码),能否把事情说清楚?养成在编码前为API编写一段非正式书面描述的习惯,是一个非常好的办法。实际上,一些最有能力的开发者,一开始总是定义接口,然后编写解药的注释,对其进行描述,最后才编写代码——因为编写注释的过程就是阐明了代码必须要到的目的。这种描述能够帮助你组织思"
  • "不要重复自身(Don't Repeat Yourself),意思是说:任何一个知识点在系统内都应当有一个唯一、明确、权威的表述。在本书中,我们更愿意根据Brain Kernighan的建议,把这个远程称为“真理的单点性(Single Point Of Truth)“或者SPOT原则 数据结构也存在类似的SPOT原则:”无垃圾,无混淆(No junk, no confusion)“。”无垃圾“是说数据结构(模型)应该最小化,比如不要让数据结构太通用,居然还能表示不可能存在的情况。”无混淆“是指在真实世界中绝对明确清晰的状态在模型中也应该同样明确清晰。简言之,SPOT原则就是提倡寻找一种数据结构,"
  • "我们将使用五种度量标准对接口风格进行分类:简洁、表现力、易用、透明和脚本化能力。 程序接口的简洁是指一个事务处理需要的动作时间及复杂度有较低的上限(可以用击键量、鼠标手势量和需要多少秒的注意力来衡量)。简洁的接口会以相对较少的比特或状态变化包装更多的作用效果。 接口具有表现力是指接口可以触发相当广泛的行为。最具表现力的接口可以是启动程序设计者没有预见的行为组合,并仍然给予用户有用和一致的结果。 接口易用性同接口要求要求用户记忆的东西成反比——为了使用接口,用户需要特别记忆多少东西(命令,鼠标手势,原语概念)。编程语言的记忆负荷愈高、易用性愈低;菜单和屏幕上标记良好的按钮就较为简单。 接口透明度"
  • "同其它美学形式一样,我们需要注意何时设计上的简约已经不再是有价值的自律形式,而开始成为一件伪装的苦行僧外衣——一种实际上把美德作为借口来敷衍工作的纵容方式。"
  • "这些富有哲理的原则决不是模糊笼统的泛泛之谈。在Unix世界中,这些原则都是直接源于实践,并形成了具体的规定,我们已经在上文中阐述了一些。以下例举的只是部分内容: 1、只要可行,一切都应该做成与来源和目标无关的顾虑器。 2、数据流应尽可能文本化(这样可以使用标准工具来查看和过滤)。 3、数据库部署和应用协议应该尽可能文本化(让人可以阅读和编辑)。 4、复杂的前端(用户界面)和后端应该泾渭分明。 5、如果可能,用C编写前,先用解释性语言搭建原型。 6、当且仅当只用一门语言编程会提高程序复杂度时,混用语言编程才比单一语言编程来得好。 7、宽收严发(对接收的东西要包容,对输出的东西要严格)。 8、过滤"
  • "要良好的运用Unix哲学,你就应该不断地追求卓越。你必须相信,软件设计是一门技艺,值得你付出所有的智慧、创造力和激情。否则,你的视线就不会超越那些简单、老套的设计和实现;你就会在应该思考的时候急急忙忙跑去编程。你就会在该无情删繁就简的时候反而把问题复杂化——然后你还会反过来奇怪你的代码怎么会那么臃肿、那么难以调试。"
  • "Unxi哲学是这样的:一个程序只做一件事,并做好。程序要能协作。程序要能处理文本流,因为这是最通用的接口。"
  • "有一种很好的方式来验证API是否设计良好:如果试着用纯人类语言描述设计(不许摘录任何源代码),能否把事情说清楚?养成在编码之前为API编写一段非正式书面描述的习惯,是一个非常好的方法。实际上,一些最有能力的开发者,一开始总是定义接口,然后编写简要的注释,对其进行描述,最后才编写代码——因为编写注释的过程就是阐述了代码必须达到的目的。"
目录
PartIⅠ1
第1章 哲学3
1.1 文化?什么文化3
1.2 Unix的生命力4

显示全部
用户评论
补标
这一言难尽的翻译
大概过了一遍,主要是说UNIX生态圈的一些东西,以后有时间可以多看几遍。
刷新编程世界观
书的前半部分写的十分完美,简直说出了每一位软件从业人员的心声。而书的后半部分则无对于我这样的Unix门外汉来说读起来吃力很多,毕竟没有那么强的技术背景。对于很多技术点都没办法get到。
too much for me;翻译不太行
十年前朋友就推荐我看的书,去年底才开始看,断断续续花了一个多月到今天才看完。里面有不少关于软件和产品设计的思想,对我有很大的冲击。值得多看几遍的好书。
读研期间闲来无事会翻出来看几章,经典著作,包含了很多Unix的设计思想,对编程有所帮助。
着实有点艺术😅 有点冗长枯燥,暂时搁置了。书中经常可以看见对windows的鄙夷hhhhhh
每个码农都需要一个编程哲学作为指导,如果只能有一个就是它。学习编程哲学,了解计算机历史,思考为什么有的产品成功了,有的失败了,对你的编程品味和技术方案的选择有潜移默化的影响。
下载
收藏