一、哲学
Unix哲学:
一个程序只做好一件事
程序要能处理文本流
归纳起来一句话:
Kiss:keep it simple,stupid
展开是以下原则:
1.模块单一职责:编程本质是控制复杂度,新闻服务端模块化就是这样一种例子
2.清晰胜于机巧
3.策略同机制分离,接口同引擎分离,MVC就是这样一个例子
4.简洁至上
5.设计考虑过滤器拼接组合,serving模块里面process设计就是这样一个例子
6.慎写大程序
7.设计要可见
8.健壮缘于可见和简洁
9.把知识叠入数据以求逻辑质朴而健壮
10.选项遵循常识习惯:最少立异。c++不重载常见运算符
11.保持输出交互清爽
12.出现异常,马上退出并给出足够错误信息,宽容接收,谨慎发出。现在的程序加上了异常处理,不会马上退出,但会进行异常处理
13.程序员时间比机器时间宝贵
14.避免手工hack,让代码去干基础的活
15.先建能运转起来的模型,而不是上来就码代码追求产出
16.考虑多语言,开放可扩展和移植性
转到UNIX实践,看以下几条:
- 尽可能做成上下游无关的过滤器
- 数据流文本可视化可序列化以及反序列化
- 数据库部署和应用协议文本化
- 前端和后端分离
- 先让原型运转
- 尽可能降低复杂度 宽收严发 过滤保持最少损耗
- 模块单一职责
二、实践
Unix文本格式常用约定
- 一行一条记录
- 一行尽可能不超过80字符
- 使用#注释
- 支持反斜杠约定
- 冒号或者连续空白作分隔符
- 不严格区分tab和whitespace
- 使用16进制表示数值
- 不要对文件的一部分进行压缩或者二进制编码
Unix从-a 2 -z的命令行选项常用含义
- -a 所有项
- -b 缓冲区或者块的大小
- -c 参数选项
- -d 调试
- -D define
- -e 执行或者编辑
- -f 文件或者强制
- -h 表头或者帮助
- -i 初始化或者交互
- -I 包含
- -k 保留
- -l 列表或者加载,登陆
- -m 消息
- -n 数字或者否定
- -o 输出
- -p 端口或者协议
- -q 安静
- -r 递归
- -s 静音或者主题
- -t 标记
- -u 用户
- -v 显示输出过程或者版本
- -V 版本
- -w 宽度或者警告
- -x启用调试
- -y 确认
- -z 启用压缩
Unix接口常用设计模式
- 过滤器模式 例子:grep/cat
- cantrip模式:无入无出,只被调用一次,产生退出状态码 例子:clear/rm/touch
- 源模式:无入有出 例子:ls/ps
- 阱模式:无出有入 例子:lpr/spooler
- 编译器模式:无入,无标准输出,但有错误输出 例子:cc/gcc
- ed模式:启动传入控制信息,同数据分离,之后与用户交互
- roguelike模式:通常单键触发而且不回显发出的命令,每项一行,带有模式行 例子:vim
- 引擎和接口分离模式:例子 MVC
- CLI服务器模式:前端出发,有界面io 例子:POP和http服务器
各主流语言优缺点点评
- C 优点:最接近硬件效率的高级语言 缺点:内存管理
- C++ 优点:编译效率,OO和STL,范型 缺点:非常复杂
- shell 优点:小清新 缺点:大了不好移植
- python 优点:清新易读好上手 缺点:低效
- java 优点:内存管理 缺点:效率比C/C++略逊