惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

T
The Exploit Database - CXSecurity.com
A
Arctic Wolf
K
Kaspersky official blog
T
Threat Research - Cisco Blogs
PCI Perspectives
PCI Perspectives
www.infosecurity-magazine.com
www.infosecurity-magazine.com
P
Privacy International News Feed
K
KPMG report finds enterprise disconnect between AI and its ROI | CIO
U
Unit 42
cs.CL updates on arXiv.org
cs.CL updates on arXiv.org
Simon Willison's Weblog
Simon Willison's Weblog
P
Privacy & Cybersecurity Law Blog
O
OpenAI News
量子位
奇客Solidot–传递最新科技情报
奇客Solidot–传递最新科技情报
C
Cisco Blogs
AWS News Blog
AWS News Blog
Vercel News
Vercel News
Microsoft Security Blog
Microsoft Security Blog
Threat Intelligence Blog | Flashpoint
Threat Intelligence Blog | Flashpoint
美团技术团队
T
Threatpost
S
Schneier on Security
Cyber Security Advisories - MS-ISAC
Cyber Security Advisories - MS-ISAC
C
Cyber Attacks, Cyber Crime and Cyber Security
Last Week in AI
Last Week in AI
C
CERT Recently Published Vulnerability Notes
Blog — PlanetScale
Blog — PlanetScale
C
Cybersecurity and Infrastructure Security Agency CISA
F
Full Disclosure
博客园_首页
N
Netflix TechBlog - Medium
Security Latest
Security Latest
有赞技术团队
有赞技术团队
Google DeepMind News
Google DeepMind News
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
The Register - Security
The Register - Security
Application and Cybersecurity Blog
Application and Cybersecurity Blog
Recent Announcements
Recent Announcements
博客园 - Franky
P
Palo Alto Networks Blog
Project Zero
Project Zero
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
H
Help Net Security
Hacker News: Ask HN
Hacker News: Ask HN
Cisco Talos Blog
Cisco Talos Blog
H
Heimdal Security Blog
The Hacker News
The Hacker News
博客园 - 【当耐特】
GbyAI
GbyAI

博客园 - 雨吁的嘘

urllib在某些情况下性能低于urllib2 美化fedora字体 ie6 - ie9支持Css特性的补丁 django Mysql初始化命令 Mysql post install 在线转换Postgresql 到Mysql nginx upload-progress配置 从源码安装nginx,并增加upload-porgress模块 django默认启用事务时session异常 让urllib2的DNS亦通过Proxy查询 解决urllib2的DNS远端解析问题,另Django-social-auth很好的支持本地调试 必须为Release版本的Django网站提供404和500.html 更换Chrome为Chromium 为Redhat 6.3安装Famillcollection源 内容丰富的第三方rpm库 多余的拼音导致Python的数据类型错误 CentOS 6.3升级Python2.7.3 解决Tomcat未在IP v4监听问题 Rpm 软件库
Unix编程艺术心得
雨吁的嘘 · 2013-02-02 · via 博客园 - 雨吁的嘘

这本书被称为Unix世界"教外别传"的心法,此言不虚!

大家都公认主流的IT文化就是Unix的文化。此书对这种原来靠言传身教和源代码流传的文化进行总结。是一本深入到文化精髓,值得仔细反复玩味的经典。
同时书中还有很多坊间故事,对Unix历史发展历史的梳理,案例的分析等。有助于了解历史的脉络,深入理解文化精髓的奥秘。

翻阅此书不时能发现一些或让人眼前一亮,或茅塞顿开,或醍醐灌顶,或沉思良久,亦或莞尔一笑之处。

现将印象深刻的几点做一小结。

* 明示胜于隐喻

这是一条Unix发展过程中非常重要的原则。在实现方面体现在采用文本化的协议,文本化的配置,反对专有软件。提倡能够使用最普通的文本工具即可读取与修改;也体现在提倡代码的开源(提高对程序员用户的透明度),反对二进制的封闭。

这种文化的内涵乍看不过尔尔,细想其实不然。比如没有受过unix文化熏陶的人(比如在下)在通讯协议上,往往会采用基于二进制的格式。而二进制的协议导致不得不依靠专有工具才能阅读与调试,大量专用代码与工具的产生。稍有不慎,常常会落得不可扩展的结果。而文本化的协议,几乎避免了绝大部分这种情况。从HTTP协议及大量基于HTTP协议的扩展协议可见一斑。

这种文化不尽在Unix上发扬光大,而且在其之上发展起来的编程语言也深受影响。比如所谓的Python之禅中就明确“ 明了胜于晦涩”。

* 数据重于算法

"程序=数据结构+算法"是一个众所周知的公式。这一公式虽然有名却未必获得了真心实意的应用。现代主流编程思想更多的体现在OO方面,在算法方面。而对数据的关注较少。

先辈们已经在结构方面发展出大量方法和技术,比如数据流图,数据字典,ER,甚至关系型数据库等等等等。这些方法可以非常自然,非常直接的反映出现实世界的模型。有时候比OO更加直接与明朗。

举个例子,在OO方法里,有一个非常著名的通过找名词,动词来确定对象及其方法的技术。然而真正运用这些方法的话,就会发现找出来的对象往往莫名其妙,名称怪异。甚至会陷入到一个词究竟是名词、动词还是形容词的纠结当中。这完全是把宝压在了**从不精确的自然语言提炼精确的OO表达之上**。语言是否能够完全描述现实都不一定,从其上提炼出来的对象就更可想而知了。

换个角度,如果从数据的视角来看,几乎能够将现实世界的某些模型直接映射到数据上来。这个过程精确而直接。

* 现有实现再有标准

标准的制定必须要有实现的验证。据说X标准是与其实现同步编写的,在此之后标准几乎没有变化。

* 除非必要,绝不写庞大的软件

一个软件应该专注于其所面对的核心功能,其他功能尽量能够借助已有的工具/库来完成。提倡编写短小精悍,功能足够的小型软件。除非别无选择。

这一原则背后还有Unix通过管道,重定向等基础设施构建起来的上下文环境管理的支撑。这两者相辅相成,最终让Unix成为一个最好用的开发平台。也有助于培养程序员协作,共享,专注的思维。

* 烂代码就要扔掉

众所周知,维护烂代码远比重写编写的成本要高。在Unix文化里对烂代码从不姑息,现在流下来的代码都是经过历史考验遗留下来的。都是非常优秀的代码。

这一原则给我们大胆重构,重写提供了底气。但动手之前,一定要有足够的理由认定这是维护代价高昂的烂代码,而不是出于对*别人的代码不可靠,只有我的才是最棒*的心里因素。