《UNIX编程艺术》读后感

不懂Unix 的人注定最终还要重复发明一个蹩脚的Unix。

1. 前言

是在年初逛知乎的时候知晓这本书的存在的,看到有个答主在计算机类的话题下多次推荐并引用了书中的一些观点,留下印象比较深刻的有"宁花机器一分,不花程序员一秒",“雕琢前先得有原型,跑之前先得学会走”这两个。

当下的时间节点被作为常识看待的两个观点,出现在一本出版于2003年的书籍上,而且这本书在网上的评价相当高,那么完整看看这本书里到底讲了些什么,就成为一种必然的选择。

2. 全书印象

本书分为四部分。

  1. 第一部分介绍UNIX历史和哲学。为后续章节埋下伏笔。
  2. 第二部分针对第一部分介绍的UNIX哲学原理,从原理到实现进行了专门的讲解。
  3. 第三部分则介绍了UNIX下提供的各类工具,同时一并介绍了各类工具的用途,以及其背后隐含的思想。
  4. 第四部分揭秘UNIX高效文化背后起到顶梁柱作用的一系列人际事务和约定。

本书给我的感受,和几年前从《SICP》得到的非常类似,除了对于编程技艺本身的极致追求外,对于软件研发中人的重要性的强调,也是遍布了整本书。

3. 部分摘抄

3.1 十七条"UNIX哲学基础"

首先是作为cheetbook,这个行业内的从业者都应该融入到血液里的十七条"UNIX哲学基础",发表至今已逾二十载,但其中的每一条都毫无褪色的痕迹:
好的,明白了!以下是全部的原则及其信息:

原则 英文名称 说明 应用建议
模块原则 Module Principle 使用简洁的接口拼合简单的部件 将功能划分为模块,通过简洁的接口进行通信
清晰原则 Rule of Clarity 清晰胜于技巧 命名清晰、代码易读易懂,不要为了追求技巧而牺牲可读性
组合原则 Rule of Composition 设计时考虑拼接组合 多组合,少继承
分离原则 Rule of Separation 策略与机制分离,接口与实现应当分离
简洁原则 Rule of Simplicity 设计要简洁,复杂度能低则低 避免过度设计,保持代码简洁
吝啬原则 Rule of Parsimony 除非确无它法,不要编写庞大的程序 避免不必要的代码和逻辑,保持代码精简
透明性原则 Rule of Transparency 设计应当透明可见,以便审查和调试 可观测性。透明性是重用的关键
健壮原则 Rule of Robustness 健壮源于透明与简洁
表示规则 Rule of Representation 把知识叠入数据以求逻辑质朴而健壮 数据驱动
最小惊喜规则 Rule of Least Surprise 接口设计避免标新立异 接口设计应当符合用户的预期,避免过于特殊和惊喜的设计
缄默原则 Rule of Silence 如果一个程序没什么好说的,就保持沉默 避免不必要的输出和提示信息,减少对用户的打扰
补救原则 Rule of Repair 出现异常时,马上退出并给出足量错误信息 快速失败
经济原则 Rule of Economy 宁花机器一分,不花程序员一秒 在保证质量的前提下,尽量使用计算机资源完成任务,减轻程序员负担
生成原则 Rule of Generation 对于一些固定规则的代码,可以通过自动代码生成工具或者编写抽象的高级程序来生成代码,避免手动编写程序的错误 提高代码质量和效率
优化原则 Rule of Optimization 雕琢前先得有原型,跑之前先得学会走 不要憋大招。先保证运行,其次正确,最后求快。
多样原则 Rule of Diversity 绝不相信所谓"不二法门"的断言 吸收并借鉴各种优秀的设计思想,不断完善自己的设计方法和风格
可扩展性规则 Rule of Extensibility 设计着眼未来,未来总比预想快 设计应当考虑未来的可扩展性。

全书剩下的部分基本就是用UNIX历史中出现的各类广受追捧的工具和影响甚广的错误,从正反两面的实例来论证这十七条原则的普适性和正确性。

过往看到过类似的言论:“计算机领域的日新月异的新技术犹如大海表面的波涛汹涌,而作为底层支撑的技术和原理如同海底一般波澜不惊",本书中想要传达给读者的很明显属于后者,如果你希望在这个行业走完职业生涯,如何抉择自然不言自明。

职业生涯中,你会持续发现这十七条原则的 应用场景,以及因为违背它们而付出的代价。你也会在一次次的切身体会中感悟到先贤们沉淀下的智慧。

3.2 关于性能优化

作者在本书中用了专门的第十二章来向读者强调"过早优化是万恶之源",我们要"先估量,再优化"

过往笔者在这上面也算是踩了不少坑,尤其是在初入职场人微言轻的阶段。领导解决性能问题靠猜 —— 猜个方向去优化,然后再猜一个再优化,然后将好几个优化组合在一起打包进行测试,一个月下来整个团队身心俱疲,然后问题反而更严重了。

现在虽然有了一定的话语权,但发现即使上一级领导,依然也是个含糊的,靠感觉靠经验去猜可能是哪里导致性能出现问题,活生生一门科学给玩成了算命学。

以下是我关于传统业务型软件公司系统性能问题的一些个人看法:

  1. 我们所谓的性能问题 -- 把代码写好, 95%的问题就解决了,剩下的5%就是去数据库调优(例如增加索引,改进SQL语句)。
  2. JVM也不需要你去调优。
  3. "先估量,再优化"。诚如《编写高质量代码——改善Java程序的151个建议》 中所说的「性能是个大"咕咚"」,如果感觉靠谱,那么多五百万等着呢,不值得在这里上这破班。
  4. If You Can’t Measure It, You Can’t Improve It --- Peter Drucker

3.3 不要憋大招

十七条UNIX哲学基础中的"优化原则"同样让人有着"求道终有所得",多年的困惑和探索终于得到认同的,热泪盈眶的感觉。

  1. 雕琢前先得有原型,跑之前先得学会走。
  2. 先保证运行,其次正确,最后求快。
  3. 现在得到90%,比等不来的100%更有价值。

现实的职业生涯里,身边有一些人做点事情总会困难重重 —— 哎呀,这个地方不太行,那个地方还得打磨打磨,这个地方这么写可能会有性能问题。总而言之就是交代点事情出结果时候总是很难产,更要命的是千呼万唤之下,最终出来的“更优秀的作品”很少有达到所宣称效果的,相较于所额外投入的资源,所谓的改进不仅乏善可陈,更可能是闭门造车下导致的无谓"优化"。

先以最快的速度出个V1版本让相关方看到,然后在此基础上,根据相关方的建议以及自己的思考,迅速迭代出V2版本,以及之后的V3版本,其实这就是最近十余年备受追捧的MVP理念。

正如《进化——从孤胆极客到高效团队》所言,闭门造车不适合软件研发这个行业,也正如"多样原则"所说的,一个需求不可能只有一种实现方式,重要的是找到正确的需求,而正确的需求只能从使用者那里获得,不是闭门造车,关起来门想出来的。

3.4 代码越少,产生的问题越少

没想到一本出版于几十年前的书点明了我心中的困惑。

本书中的观点“一个软件中的问题量多少,与语言关系不大,而和代码行数正相关。也就是代码越少,可能的问题越少”

细细想来,所谓的高级语言,除了更符合人类的认知习惯,降低人类理解时候的认知负担外,其另外一个显著特点就是在实现同样的业务功能时,所需要的代码量更少。

简单就是美。

3.5 重要的是人

正如上面小节里已经提到了的,本书给我的最大一个感受就是对于人本身的关注。

这些关注体现在我们应该怎么样组织信息来降低门槛,让人处理起来更为轻松,节省人的时间和精力。

例如以下这些出现在书中的观点,最终都是为了人本身:

  1. 可显性降低入门门槛,透明性则减少代码中的存在成本。这句位于本书第134页底部引用区的短句,不需要过多解释就可以看出隐含的主角依然是人。降低的是人类的入门门槛,减少的是人类为了理解代码所投入的成本,也就是代码中的存在成本。
  2. 书中的第十章关于配置的建议,核心思想之一就是“配置应用能够被人阅读并且可以用常规的文本编辑器修改”。另外就是配置项内容的排版建议也是处处透露着要最大化减少人的注意力消耗。
  3. 另外诸如"模块化,透明性,紧凑性"等等,也都无一不是在于此。

4. 我们能赢,只要我们想赢

整本书看下来,最让人动容的居然是最后第20章,最后的那个小节"20.5 UNIX文化中的问题"。

在这个小节里,作者直面了UNIX文化中的"清高/精英"姿态,坦言UNIX众需要认真考虑站在"普通用户角度思考"的问题了,学习其他操作系统的交互设计。

然后就是最后的那句:"我们能赢,只要我们想赢"。

5. 参考

  1. 如何正确的吹Linux --- 《Unix编程艺术》
  2. 《凤凰架构》
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 216,744评论 6 502
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,505评论 3 392
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 163,105评论 0 353
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,242评论 1 292
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,269评论 6 389
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,215评论 1 299
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,096评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,939评论 0 274
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,354评论 1 311
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,573评论 2 333
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,745评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,448评论 5 344
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,048评论 3 327
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,683评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,838评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 47,776评论 2 369
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,652评论 2 354

推荐阅读更多精彩内容