关于linux/unix编程哲学所悟

最近看了一本叫《Linux/unix设计思想》的树让我对软件设计有了新的认识,这本书总结了unix社区软件设计准则:

1.小即是美

以前每次写程序完成一个项目我都会统计一下自己一个程序总共有多少行代码,如果一个程序有几万行代码的话我会有莫名的成就感。自己认为代码的数量代表了自己的能力。现在我不这么认为了。真正有力量的程序往往是那些小程序,Linux系统中有那么多命令,他们大多数只有几百行代码但他们却构成了强大的Linux。

2.让每一个程序只做好一件事

只做好一件事的小程序是最美的,理解了以上两条准则后我们就明白了Linux为什么没有大型的IDE作为开发工具却作为大多数开发人员的开发系统,因为只要拆分得当组成大型应用的每一个小程序只需要做好一件事就好了,它的代码规模只有几百行一个vim编辑器加几个插件就完全够用了。

3.尽快建立原型

这条准则我深有体会并一直践行之,每次客户有什么新需求或者经理有什么新的想法我都是先建立一个实例程序演示给客户或者经理,然后就会得到客户或者经理的反馈,我根据反馈再逐步完善就会很快完成一个项目。反观我的同事,他总是要先写一个没有太大用处的方案然后再付诸行动。其实有时候项目实施方案只有试过才知道尤其是软件方案。

4.舍高效取可移植性

在这一点上我感触颇深,在我参加工作的两年时间里移植在为嵌入式Linux系统编写不同的C/C++程序,每一个项目都建立一个工程,在工程中积聚了这个项目的所以功能。现在回头总结发现在这些我做过的项目中我似乎做了许多重复性的工作。每个程序都有串口,只是解析的报文不同而已。过去我只注重用C/C++来建立软件功能却忽视了shell脚本的作用,其实用shell脚本也可以建立软件功能,有时候反而更高效且可移植性更好。

5.使用纯文本文件存储数据

书中认为用纯文本文件存储数据用户可以随时阅读和修改数据而且不依赖固定的平台,只要用纯文本文件存储数据数据就是自由的,我也认可这样的观点。我举个例子,大学毕业的时候我的舍友用WPS写毕业论文,结果文件损坏了,然后他花了两百块钱充了一个WPS的会员来恢复数据但最终还时失败了。我想如果文本处理软件用纯文本文件存储数据的话我想就不会让我舍友有那样的损失。二进制格式文件存储数据就是这么不可靠,上面就是最好的例子。Linux所以文件都是以纯文本文件存储的,这就是Linux哲学。

6.充分利用软件的杠杆效应

软件的杠杆效应就是充分利用已有的软件代码来构建新软件,他的前提是我们已有的软件代码的可移植性。所以第四个准则是这条准则的基础。

7.使用shell脚本来提高杠杆效应和可移植性

相比于C/C++这样编译性语言shell脚本有其独特的优势,它可以随时随地修改,修改完成后不需要编译即可执行。另外Linux系统集成了大量的命令以及管道的功能,能利用现有的命令完成大多数用户的需求,所以利用shell脚本提高软件的杠杆效应是最佳的工具,另外前面也说了,相比于编译性语言shell脚本也有更高的可移植性。

8.避免那些强制性的用户界面

9.让每个程序都成为过滤器

这两条合起来说,Linux与windows很大的区别就在于两者假定的用户不同,Windows假定他们的应用程序的用户只有人类,而且是对计算机一无所知的人类。这就导致他们的应用程序总是假定计算机屏幕前面总是坐在一个人类在点击鼠标和键盘。Linux将应用程序的用户假定为其他程序,所以Linux的应用程序输出总是可以作为另一个程序的输入。正是基于这样的假设,Linux要求每个程序都成为数据的过滤器,程序本身不产生数据它只作为数据的过滤器处理用户输入的数据。(其实这是程序的本质,只有人类才会创造数据)。当然Linux这样的假定要求使用计算机的人有一定的专业技能,这就导致Linux对新手表现的不是那么的友好。但是Linux会让用户变得牛逼而Windows却只能让用户点点鼠标和键盘系统做了什么用户一无所知。

10.允许用户定制环境

如果你是一个嵌入式Linux开发人员,那你一定经常会裁剪Linux系统让他更适应自己的硬件。这就是Linux另一个成功的地方。他几乎可以运行在所有计算机硬件上。从安装在大型数据中心机房的服务器到我们使用的自能手机、车载系统。再看看可怜的windows系统,他被困在了x86的牢笼之中。我们从未听说Windows系统可以安装在银行卡大小的硬件系统上,只有几百兆的nand falsh怕是放不下几个G的Windos。

11.尽量使操作系统内核小而轻巧

这件事Windows无法实现,它只会变得越来越臃肿。

12.使用小写字母并尽量简短

小写字母让人看起来更加舒服和更容易阅读。

13.保护树木

尽量用计算机存储文件和数据,这样更容易修改和处理。数据一旦打印到纸上它就死了,而且还白白的浪费纸张,我们应该保护树木不是吗?

14.沉默是金

在Linux系统中没有消息就是好消息。我们执行一个程序除了输出必要的数据外,执行成功是不会有任何消息的。正是因为每个程序都是过滤器,程序执行完成不会把“执行成功”打印在屏幕上。这样的输出不利于作为其他程序的输入。

15.并行思考

16.各部分之和大于整体的效果

17.寻找90%的解决方案

18.更坏就是更好

19.层次化思考

后面这几条我几乎已经理解好了,但是我感觉我自己表达不好,希望读者去阅读原文。这本书应该不厚,我很快就看完了一遍,对我影响很深刻所以推荐读一读。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

南波儿万

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值