加入收藏 | 设为首页 | 会员中心 | 我要投稿 南京站长网 (https://www.025zz.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 服务器 > 搭建环境 > Unix > 正文

unix编程 Unix哲学,YYDS!

发布时间:2023-01-09 14:31:10 所属栏目:Unix 来源:转载
导读: 大家好,我是小北。
最近在看《Unix编程艺术》这本书,非常认同书中提到的一些「Unix哲学」,不过哲学听起来有点像玄学。
哲学在这里其实本意是原则、方法论,而非真正意义上的哲学。
首先

大家好,我是小北。

最近在看《Unix编程艺术》这本书,非常认同书中提到的一些「Unix哲学」,不过哲学听起来有点像玄学。

哲学在这里其实本意是原则、方法论,而非真正意义上的哲学。

首先说下 Unix 吧,它应该是现代操作系统的鼻祖,尤其是现在各种发行版的 Linux、macOS 都被叫做「类Unix」系统。

macOS是直接发源自 Unix,而 Linux 则是创始人 Linus 在暑假学完操作系统后,参考 Unix 实现了一个类似系统,起名为 Linus 的 Minix,即 Linux 。。。

而 Windows 虽然说是微软独立设计实现的,但是很多思想也是来源于 Unix,比如进程、线程、信号、管道等。

Unix 哲学有很多条,也有不同的版本,在这我说几条个人觉得比较有用的经验:

一、 一个程序,一个目标

编程的本质就是实现功能unix编程,同时控制复杂度,当一个程序做的事情太多了,那么就会导致复杂度急剧上升,而复杂度是各自 Bug、错误的根源。

那么如何化解呢?

那就是拆分,一个程序/模块只实现原子化的能力,同时保留灵活的程序间通信能力。

这一点在 Unix 系统上得到了广泛运用,有很多的命令行工具,就只做一件事,比如 grep、wc、awk、sed等等。

但是程序之间要可以轻松的组合起来,比如这些文本处理工具都可以文本流的形式进行输入输出,然后通过 Unix 系统的管道,就可以便捷的组合不同的工具。

比如我要统计 test 目录下 C 文件数量可以这样:

find test/ -name "*.c" |wc -l

统计 test 目录下所有 c 件代码行数,并且过滤空行:

find test/ -name "*.c" |xargs cat|grep -v ^$|wc -l

这种能力是极其强大的,很多时候可能需要写成百上千代码才能完成任务,一行命令就解决了。

类似的比如 VSCode,为什么应用如此广泛?

我觉得核心原因就是 VSCode 将一系列的编辑器能力通过 API 的方式开放出去,这样第三方可以任意的组合并二次开发各种插件。

这就比 VSCode 本身做一个大而全的编辑器更加的强。总之,在开发、设计系统过程中,尽可能的遵循模块化思维,一个接口只做一件事,并且把这件事做好。接口之间通过清晰的协议交互,这样就能降低耦合,易于维护。

代码如此,生活亦如此。

比如是找一个大而全的 APP 满足我们所有的需求?

还是让专业的 APP 做专业的事,尽可能让多个 APP 互相协调 / 组合?

做加法简单,对于代码而言往上面加 if 即可,对于 APP 而言往上面加功能、按钮即可。

二、一切皆文件

Everything is a file

在 Unix 里,一张照片、一个视频、硬盘、显示器都是一个文件,这是一种高度抽象,带来的好处就是接口一致性:你可以用 read/write/close 去读写 file、socket、pipe 等。

文件就等同于信息输入输出的高度抽象,而 Unix 很多系统配置、命令本身也是采用简单、文本化的格式。

Unix 很多命令都是 文本输入 -> 处理|过滤 -> 文本输出 的形式,信息交换基本都是基于纯文本。

三、面向扩展设计

比如在后端存储模型设计过程中,要为数据格式、代码的扩展预留下空间。

否则当你想要添加功能的时候,就会发现非常难以在变更的同时保持兼容性。

比如协议是文本的时候,那么应该是其具有「自描述性」方便扩展,常见的方式是加上协议版本号、自描述的语句。

这样可以修改数据的格式,而不会搞乱格式导致使用方读取代码的解析出错。

代码则要求我们适当运用设计模式来提高可扩展性,比如职责链模式和观察者模式主要是用来降低模块间耦合的,耦合低了就可以很方便的对他们进行组织,给他们扩展功能。

适配器模式和装饰器模式主要是用来在不影响原有代码的基础上进行扩展的。

当然,所有的 Unix 哲学都被浓缩为一条:“KISS” 原则,即 “Keep It Simple, Stupid”。

用简单的方法解决问题,保持简洁。

而关键就在于清晰的划分模块。

希望「Unix 哲学」可以给大家一些启发~

(编辑:南京站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章