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

8.内容为王
从操作系统的角度出发处理应用程序,对于操作系统而言,图形界面没有任何意义。Gnome和KDE只是操作系用户之上的一个应用程序,只是面向用户的,并不是面向操作系统的。
视频、音频、图形图像也是如此,对于操作系统而言,这些内容是极不易检索和识别的,是不具备真实意义的,只有文本才是高效的。
对于大数据处理来说,文本才是最实用的资源。
个人以为,在图像识别及语音识别技术成熟以后,视频及图形图像是一种发展趋势,毕竟二维码比一维码能够存储的内容实在是多太多了。
读书笔记-《Linux/Unix设计思想》的更多相关文章
- csapp读书笔记-并发编程
这是基础,理解不能有偏差 如果线程/进程的逻辑控制流在时间上重叠,那么就是并发的.我们可以将并发看成是一种os内核用来运行多个应用程序的实例,但是并发不仅在内核,在应用程序中的角色也很重要. 在应用级 ...
- CSAPP 读书笔记 - 2.31练习题
根据等式(2-14) 假如w = 4 数值范围在-8 ~ 7之间 2^w = 16 x = 5, y = 4的情况下面 x + y = 9 >=2 ^(w-1) 属于第一种情况 sum = x ...
- CSAPP读书笔记--第八章 异常控制流
第八章 异常控制流 2017-11-14 概述 控制转移序列叫做控制流.目前为止,我们学过两种改变控制流的方式: 1)跳转和分支: 2)调用和返回. 但是上面的方法只能控制程序本身,发生以下系统状态的 ...
- CSAPP 并发编程读书笔记
CSAPP 并发编程笔记 并发和并行 并发:Concurrency,只要时间上重叠就算并发,可以是单处理器交替处理 并行:Parallel,属于并发的一种特殊情况(真子集),多核/多 CPU 同时处理 ...
- 读书笔记汇总 - SQL必知必会(第4版)
本系列记录并分享学习SQL的过程,主要内容为SQL的基础概念及练习过程. 书目信息 中文名:<SQL必知必会(第4版)> 英文名:<Sams Teach Yourself SQL i ...
- 读书笔记--SQL必知必会18--视图
读书笔记--SQL必知必会18--视图 18.1 视图 视图是虚拟的表,只包含使用时动态检索数据的查询. 也就是说作为视图,它不包含任何列和数据,包含的是一个查询. 18.1.1 为什么使用视图 重用 ...
- 《C#本质论》读书笔记(18)多线程处理
.NET Framework 4.0 看(本质论第3版) .NET Framework 4.5 看(本质论第4版) .NET 4.0为多线程引入了两组新API:TPL(Task Parallel Li ...
- C#温故知新:《C#图解教程》读书笔记系列
一.此书到底何方神圣? 本书是广受赞誉C#图解教程的最新版本.作者在本书中创造了一种全新的可视化叙述方式,以图文并茂的形式.朴实简洁的文字,并辅之以大量表格和代码示例,全面.直观地阐述了C#语言的各种 ...
- C#刨根究底:《你必须知道的.NET》读书笔记系列
一.此书到底何方神圣? <你必须知道的.NET>来自于微软MVP—王涛(网名:AnyTao,博客园大牛之一,其博客地址为:http://anytao.cnblogs.com/)的最新技术心 ...
- Web高级征程:《大型网站技术架构》读书笔记系列
一.此书到底何方神圣? <大型网站技术架构:核心原理与案例分析>通过梳理大型网站技术发展历程,剖析大型网站技术架构模式,深入讲述大型互联网架构设计的核心原理,并通过一组典型网站技术架构设计 ...
随机推荐
- python基础学习1-类相关内置函数
#!/usr/bin/env python # -*- coding:utf-8 -*- #===issubclass(class,classinfo) 检查class是否是classinfo类的子类 ...
- 9.13 开课第十天(JS脚本语音:语句:循环)
循环:循环操作某一个功能(执行某段代码) 四要素: 循环初始值 循环条件 状态改变 循环体 for 穷举 迭代 while(true) break //先执行 ...
- 14-[mysql内置功能]--视图,触发器,存储过程,事务
1.视图 (1)准备数据 /* 数据导入: Navicat Premium Data Transfer Source Server : localhost Source Server Type : M ...
- 3503: [Cqoi2014]和谐矩阵
3503: [Cqoi2014]和谐矩阵 链接 分析: 对于每个点,可以列出一个方程a[i][j]=a[i][j-1]^a[i][j+1]^a[i-1][j]^a[i+1][j],于是可以列出n*m个 ...
- 查看Chrome浏览器扩展程序源码的两种方法
注意:仅在当前最新的版本 55.0.2883.87 m (64-bit)上测试有效 首先获取extensionId: chrome 打开扩展程序页面 chrome://extensions/ 比如我想 ...
- 树莓派3b无驱动打印
Linux系统下很少有对打印机做驱动支持,自己做起来又有非常麻烦,还好大多数打印机都能够支持escpos协议,因此我们可以做到无驱动打印. 1.安装python-usb库 git clone http ...
- redis-4.0.2
redis-4.0.2.tar.gz 链接:https://pan.baidu.com/s/1qj4bSgM1s2InLikugRNqKA 提取码:tozq 复制这段内容后打开百度网盘手机App,操作 ...
- PHPCMS 栏目添加字段和修改描述textarea变成fceditor编辑器
一.添加字段方法: 1. 添加数据库字段:description1,添加位置:v9_catetory表 找到phpcms/moudles/admin/templates/category_add.tp ...
- 在HTML中引用JavaScript中的变量
和上次的代码几乎一样,但这次是引用已经写好的变量.主要功能和用法如下: document对象的getElementId方法得到HTML元素. HTML元素的value属性可以用来设置变量的值. 02. ...
- 单纯形法MATALAB实现
参考单纯形法的步骤,MATALAB中的实现如下(求极小值): 注:对于极大值的求解,只需要对目标函数添加负号,求解出来的\(X\),再带入原目标函数即可. function [ X, z ] = si ...