本书主要讲的是Unix程序设计思想,具体涉及到linux的内容不多。
整本书的一个基本出发点是开源。其中主要强调的观点包括:
1.小即是美
作者持有的主要观点是程序应该以小为美。小程序实现小功能,每个程序尽量保持单一职责,大的处理过程由多个小程序串联组成,而不是创建一个大的程序包含所有功能。作者指出的一个软件误区如下:
“往往有这样一类软件工程师,为自己能编写出规模宏大的程序而深感骄傲,可除了他自己,没有任何人能读懂这些程序。他会认为只有这样才具有“职业保障”。可以这么说,就只剩他编写的应用程序要大过其自负情结。在传统软件工程环境中,这样的软件工程师可以说是屡见不鲜。”
个人对作者观点表示同意,个人以为,做软件的目的在于通过软件从一定程度上改变特定人群的行为方式,提高某方面的行为效率。软件宜以简洁为准,把握好出发点,而不是盲目的堆砌功能点。
2.快速建立原型
通过建立原型有效规避风险。对于软件研发来说,我一直持有的观点是尽早的建立原型,以减少不同角色人员在项目开展过程中对目标的理解偏差。我们曾出现过在没有原型的情况下,根据文档进行讨论,最后发现我们很多的甚至基本目标概念上出现偏差的问题,并且多次出现,极易导致项目初始版本出来以后又去回溯需求,重新定义目标,严重影响研发效率。
3.人类创造的三个系统
第一个系统:单枪匹马或一小群开发人员在一定压力下,以达成目标为目的,做出的具有基本功能的精简、其貌不扬的计算系统。一般具有很高的开创性,显示了一个能够激发别人想象的概念,极具创意。
第二个系统:“专家”使用“第一个系统”验证过的想法来创建“第二个系统”,通常是由委员会设计的,臃肿而缓慢,但在市场上大展宏图,被誉为伟大的成就的系统。
第三个系统:第三个系统通常是对第二个系统不满,并力求精简和实用,保持第一系统的概念,并融合第二系统中某些最佳特性的系统。
4.可移植性的优先权
作者强调,在可移植性与程序执行效率之间,应该偏向于可移植性。最高效的方法往往是针对特定环境做出了优化,其移植性比较低,不利于软件的长期发展。而执行效率往往能够随着硬件的发展很快的提升。
作者提出,以纯文本格式存储数据是比较适合移植性的方法。出文本格式的数据相比二进制文件来说更加通用。同样的,速度欠佳可以被新硬件所克服。
纯文本格式存储数据在跨平台及跨命令传输之间具有很高的优势,但在处理大量数据的时候,确实会存在某些问题。
5.充分利用软件的杠杆效应
“良好的程序员编写优秀代码,优秀的程序员借用优秀代码”。
软件开源对于软件的发展来说,具有极大的好处,可以在更高的数量级上对软件进行优化。
6.交互式程序的高风险
良好的程序,应该避免使用强制性的用户界面(CUI)。这里的界面不只包含了我们通常的图形用户界面,也包含了命令行下的提示操作信息等内容。以小即是美为原则,良好的程序应该是收到命令,处理数据,输出数据,所有程序都是“过滤器”,将数据从一种形式转换为另一种形式。CUI从一定程度上影响了数据在不同程序之间的传输,多余的提示信息往往导致多个程序命令之间不能够以管道的形式进行数据传输。
“当你假设可能是另外一个程序而不是由人来接收程序的数据流时,就能消除我们固有的偏见,即试图让应用程序具有用户友好性。你不会再局限于思考菜单的选择项,而是开始研究数据最终可能会到达的地方。”
“把应用程序分解成更小的程序,每个程序只执行应用程序的一个功能”
7.在Unix下建立复杂应用程序的范例
8.内容为王
从操作系统的角度出发处理应用程序,对于操作系统而言,图形界面没有任何意义。Gnome和KDE只是操作系用户之上的一个应用程序,只是面向用户的,并不是面向操作系统的。
视频、音频、图形图像也是如此,对于操作系统而言,这些内容是极不易检索和识别的,是不具备真实意义的,只有文本才是高效的。
对于大数据处理来说,文本才是最实用的资源。
个人以为,在图像识别及语音识别技术成熟以后,视频及图形图像是一种发展趋势,毕竟二维码比一维码能够存储的内容实在是多太多了。
所有评论(0)