三读《UNIX编程艺术》
          第一次读《UNIX编程 艺术》是2004年的夏天。那时我正忙着把一套只肯在Windows上跑的分布式存储系统移植到UNIX和LINUX上来,业余时间里则正在北大裘宗燕教 授的指导下,一字一句地翻译“古奥艰深”的R5RS;于是,像《UNIX编程艺术》这样一本没有太多恼人的代码,又约略可以指导手头工作的大部头就自然成 了我临睡前的“催眠读物”。

真正从书中学到了什么,现在已经很难说清楚了。只是隐约记得,《UNIX编程艺术》一开头罗列出的那一大堆Rules 着实让我陶醉了一阵子。此前对UNIX的认识几乎都是零散的。从make到cc,从emacs到gdb,从ssh到xinetd,尽管我知道在遇到障碍时 去howto或faq文档中翻找答案,知道在不知所措时请出开源软件的代码来帮忙,但我却总也想不明白,一个普通的程序员该怎样才能在UNIX的世界里从 无到有地勾画出一幅真正属于自已的图景。一种强烈的恐惧感似乎总是与我形影不离——那是一种独自走进克里特岛或是秦始皇陵的人都会产生的恐惧感,是一位缺 乏经验的程序员在UNIX种类繁多的工具、接口与源码面前必然会遭遇的恐惧感。也许,《UNIX编程艺术》里罗列的Rules是治疗这种恐惧感的药方,因 为有规则总比没有规则强,有一套充满哲学意味的规则更要比仅有些生硬的技术规约强上百倍。通常,Rules意味着坚定,Rules代表着勇气,就像电影 《Transporter》中的男主角一样,当凡事都可以用编了号的规则来描述或阐释的时候,就连黑社会的老大也会不由自主地对你说“I like rules”了。

阅读的副产品是一个有趣的可扩展计算工具xeval。我的确是在读过了《UNIX编程艺术》的第五章“文本化:好协议产生好实 践”之后才有了编写xeval的想法的。当时,我的思维历程大致如下:多用户、多任务的操作系统必然要为不同的应用提供相互交流的平台;最好的平台应该拥 有最简单的实现方案; UNIX利用文本格式实现信息交互的想法符合UNIX的KISS(Keep It Simple, Stupid!)准则;与Windows系统提供的协议或交互方式(注册表、剪贴板、DDE、OLE等等)相比,文本格式就像“天仙美眉”一样质朴和脱 俗;质朴和脱俗意味着实现简单和扩展方便;不过通常说来,文本化的做法与命令行方式的应用结合得更好一些;为了在Word或Excel这样的纯GUI应用 中发挥文本化的优势,我们需要一些桥梁或隧洞;Windows系统中的热键和剪贴板可以成为GUI程序文本化的桥梁之一;最终实现并发布到网上的 xeval就是这样一个可以在GUI应用中嵌入文本化应用的程序原型。

第二次读《UNIX编程艺术》是去年有了一台属于自己的“小白” (Apple iBook G4的俗称)之后。在那之前,我一直以为Apple发布UNIX内核的MAC OS X是在向UNIX阵营投降,是彻底承认MAC OS无法长时间稳定运行的无奈之举。实践表明,我的想法错得离谱。在MAC OS X漂亮的外衣下面,Apple的设计师们并没有完全克隆或仿制UNIX的所有“生理特征”:无论是Cocoa的巧妙设计还是Widgets的新颖创意,无 论是应用程序的封装方式还是AppleScript的自动化机理,这些区别于传统UNIX架构的系统特征似乎在竭力向我们证明,原本属于Apple的优先 “关心用户体验”的编程文化可以和原本属于UNIX的优先“考虑基础设施”的编程文化以某种方式优雅地共存、共赢。由此我很快想到,《UNIX编程艺术》 在论述“Unix文化中的问题”时已经专门辨析和比对了两种看似矛盾的编程文化与思维方式,并特别指出“两种设计哲学都有正确的一面”,它们“将会融合在 一起,如同过去互联网和早期Unix文化在1980年后的融合一样”

有了这样的认识,我读《UNIX编程艺术》时的关注重心就很自然地从工具和方 法转移到了思想和文化上来。比如,在重读“使用Emacs整合工具”一节时,我不会再有打开emacs动手实验的冲动,反之,我更愿意静下心来想一想:那 些非UNIX出身的IDE们(比如Visual Studio)是否已经从emacs这样一个“像IDE一样,但更强”的UNIX工具身上吸收或借鉴了足够多的有用特性?同样是可扩展的IDE环境, Eclipse和emacs之间是否存在本质的差异?当elisp在emacs中发挥着不可或缺的核心功效时,为什么Word里的VBA就只能扮演边缘化 的辅助角色?李连杰在影片《霍元甲》中说,茶没有高下之分,武术也没有高下之分——在程序设计的世界里,不同的文化和不同的技术之间,是否也没有高下之 分?

第三次读《UNIX编程艺术》是今年电子工业出版社的中译本出版以后。我没有仔细核检过英文版和中文版的文句,不敢妄评译本的翻译质量如何如 何。但译本把原书第二章标题中的“A Tale of Two Cultures”译为“双流记”的做法的确值得称赞。要知道,翻译也有风格和流派上的差异。同样是这么一个标题,你可以完全不考虑原文与《双城记》之间 的双关性,你也可以用更复杂的句式将原文中的文化内涵阐发得通通透透,但你不得不承认,“双流记”的译法是诸多译法中最有UNIX味道的一种,最符合 《UNIX编程艺术》一书反复强调的KISS准则。从这一点看来,UNIX平台上以简约、深刻为特征的编程文化在其他领域也大有用武之地,《UNIX编程 艺术》一书勾勒技术脉络,辨析文化源流的论述方式也值得所有著书人和读书人好好品味。

三读《UNIX编程艺术》相关推荐

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

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

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

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

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

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

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

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

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

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

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

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

  7. 《Unix 编程艺术》 理解

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

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

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

  9. Unix编程艺术(前言)

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

最新文章

  1. 计算机对文字信息交流方式案例,《信息交流的方式》题本梳理_教师资格面试初中信息技术...
  2. centos 调整home分区xfs_Linux中对lvm逻辑卷分区大小的调整教程(针对xfs与ext4不同文件系统)...
  3. c++中的pod类型
  4. 关于Actionscript 3中给Flash传参数方法(一)
  5. sklearn 特征降维利器 —— PCA TSNE
  6. Python学习笔记-数字类型
  7. MATLAB 画常见二次曲面汇总
  8. linux内存的优化大师,Linux性能优化大师(调整操作系统参数)
  9. leetcode算法 森林中的兔子
  10. windows7计算机测试,WinSAT 测试在 Windows 7 中失败
  11. 不可能得到的最短骰子序列
  12. 三入职场 - 你可以从我身上学到这些(附毕业Vlog)
  13. MATLAB 用拉格朗日插值验证龙格现象
  14. 2023年中国石油大学(华东)生物化工考研上岸前辈备考经验
  15. outlook 服务器未响应,出现错误,Outlook 无法设置你的帐户
  16. 一起来看流星雨--------魏晨
  17. eNSP—静态路由+NAT网络地址转换
  18. sessionStorage储存对象的方式
  19. java面试题集中了好几篇的搜索的
  20. python 排列组合函数_Python概率统计(1):排列组合

热门文章

  1. 菜鸟的数学建模之路(一):最短路径算法
  2. 《Oracle 11G 单机安装手册》
  3. 蓝翔技术学院计算机,蓝翔计算机学子马安然:我眼中的蓝翔
  4. 总说未雨绸缪,一觉醒来窗外已是漫天飞雪
  5. 如何用C语言编写学生选修课程系统?
  6. 《哲学·科学·常识》记与思
  7. 抖音大火的AI虚拟人,画的猫为啥这么丑?
  8. MSP430 ADC_10bit
  9. 黑马程序员C++第一章
  10. CF——1721A - Image