feisky

云计算、虚拟化与Linux技术笔记
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Unix编程艺术:透明性

Posted on 2012-01-31 14:28  feisky  阅读(449)  评论(0编辑  收藏  举报

透明性,来点光。

Beauty is more important in computing than anywhere else in technology because software is so complicated. Beauty is the ultimate defense against complexity.

透明性是被动品质,可显性是主动任务。
透明性:没有阴暗的角落和隐藏的深度;能够预测到程序行为,能够看透机器干什么(整个)。
可显性:做什么,怎么做。文档就是为了提高可显性。要必须尽力做到有帮助(具体)。

可显性降低进入门槛;透明性则减少代码中的存在成本。


研究实例

audacity:UI可操作性,易操作性。

fetchmail的-v选项:防弹程序,可显性。
不要让调试工具仅仅成为时候追加或者用后就束之高阁的东西。他们是通往代码的窗口:不要只在墙上造出粗糙的洞,要整修这些洞并装上窗。如果打算让代码一直可被维护,就必须让光照进去。

GCC:预处理器、解析器、代码生成器、汇编器和连接器。
前三个阶段的可读文本流。可以监视中间步骤,有利于回归测试。

kmail:显示过程信息。让你对状态充分了解。
让UI沉默只做对了一半,真正聪明的是找到一个方法,可以访问具体细节,但又不让他们太显眼

SNG:与PNG之间进行无缝、无损转换。用户可以直接编辑SNG纯文本文件,而不是PNG文件。
sng本身程序代码不容易理解,但是通过让PNG的全部内容可显,提高了程序中较大系统的透明性。

Terminfo:使用Unix文件系统作为数据库是一种策略,对数据库要求简单的其他应用程序可以效仿并从中受益。

Freeciv:数据文件的聚合、存储、使用,修正。因为只读,所以不会蠕变。


为透明性和可显性而设计

透明性:不要在具体操作的代码上放太多的抽象层(不要过度抽象)
不要垒高台,要用设计简单而透明的算法和数据结构紧贴基面;薄胶合层。
最大静态深度是4层。
不变性质有助于人们推演代码和发现有问题的情况。
API正交、标志位要少
强调、形象化重要数据。
数据结构与外部实体的关系。
容易找到代码部分。
增加了特殊还是避免了特殊。特殊使代码更难理解。
少用magic number(意义含糊的常量)

提供调试和探测的开关
二进制格式数据考虑文本化器
透明性抵御bug


为可维护性设计

抛弃蹩脚代码;
使用简单算法;
包含开发者手册。

无觅相关文章插件,快速提升流量