《Unix 编程艺术》 第十章 配置
#10.1 什么应是可配置的
对于问题:什么应是可配置的?
无畏的 Unix 回答是“一切”。Unix 程序员只要可能,就建立机制而把策略决定权交给用户。这种方式产生的程序往往功能强大,专家用户用起来会非常顺手。但它所产生的接口往往选项过多,并且配置文件像杂草一样疯长,从而彻底打击了新手和一般用户。
Unix 并不打算修改这种为同行和最老练用户设计的倾向。所以,也许把问题反过来,问问“什么不应该可 ...
《Unix 编程艺术》 第九章 生成
数据比程序逻辑更易驾驭。尽可能把设计的复杂度从程序代码转移到数据中是个好实践,选择便于人类维护和操作的数据表示法也是好实践。
#9.1 数据驱动编程
数据驱动编程有时会跟面向对象混淆起来,后者是另一种以数据组织为中心的风格。它们之间至少有两点不同。
在数据驱动编程中,数据不仅仅是某个对象的状态实际上还定义了程序的控制流
OO 首先考虑的是封装,而数据驱动编程看重的是编写尽可能少的固定代码。
# ...
《Unix 编程艺术》 第八章 微型语言
Unix 有个长期传统,即包容小型的、为专门应用领域特质、大量减少程序行数的语言。
《Unix 编程艺术》 第七章 多道程序设计
多道程序设计是设计中的荒蛮之地,几乎没有好的实践方针。许多程序员尽管精于判断如何将代码分解成子过程,然而最终还是编写出单个庞然大物般的单进程程序,而这些程序往往失败在自身的内部复杂度之上。
Unix 设计风格都运用“做单件事并做好” 的方法,强调用定义良好的进程间通信或共享文件来联通小型进程。
尽管将程序划分成协作进程带来了全局复杂度降低的好处,但代价是我们必须更多地关注在进程间传递信息和命令的协 ...
《Unix 编程艺术》 第六章 透明性
优雅的代码事半功倍:优雅的代码不仅正确,而且显然正确:优雅的代码不仅将算法传达给计算机,同时也把见解和信心传递给阅读代码的人。通过追求代码的优雅,我们能够编写更好的代码。学习编写透明的代码是学习如何编写优雅代码的第一关,很难的一关。
《Unix 编程艺术》 第五章 文本化
序列化(保存)操作有时也称为 列集(marshaling),其反向操作(载入)称为 散集(unmarshaling)。
#文本化的重要性
文本流是非常有用的通用格式,因为人无需专门工具就可以很容易地读写和编辑文本流,这些格式是透明的(或可以设计成透明的)。
《System, Math and Explosions》 摘抄
系统从根本上就是复杂地,因为它不仅仅包含事物的集合,还包含事物的连接关系。而连接关系增长的非常快。 随着系统的发展,理解一切是如何工作的,或者系统是否还仍然有效,变得越来越困难。这会让人感到难以理解、脆弱和不可预测。到那时,系统就正式变成了一坨 * 如果使用得当,上概述的工具可能会非常有效。但数学就是数学。线性地移除系统中的部分,连接会减少得更快。治疗复杂性的症状通常只是重新分配它。简而言之,避免复杂性陷阱的最佳方法就是完全避免复杂性。
《Good decision-making is good process》 摘抄
这篇文章提出了“针对一个问题做出决定的结果并不是最重要的,而做出决定的过程,才是决定是否是好决定的标准” 的看法。文章同时给出了一个解决好问题的应该有的过程:通过自己的术语定义问题,使用不同的视角探索解决方案,获取做出决定所需要的信息并尽可能地降低噪声,以及区分决定是早期决定还是晚期决定并以此做出不同策略。
《Unix 编程艺术》第四章 模块化
软件设计有两种方式:一种是设计得极为简洁,没有看得到的缺陷;另一种是设计得极为复杂,有缺陷也看不出来。第一种方式的难度要大得多。 模块化原则在这里展开来说就是:要编写复杂软件又不至于一败涂地的唯一方法,就是用定义清晰的接口把若干简单模块组合起来,如此一来,多数问题只会出现在局部,那么还有希望对局部进行改进或优化,而不至于牵动全身。
《Unix 编程艺术》 第三章 对比
阐述了 Unix 作为操作系统的几个统一性理念,包含有对多任务,协作进程,二进制文件,CLI 等内容的思考,也对比了与 MacOS,Windows 等操作系统的差异。