编程艺术之文本加工

最近在推上跟人吵编辑器什么什么的,加上最近看的几本书也都提到了文本处理的一些原则和技巧,这里把我的一些观点罗列出来,同时也作为自省的一个途径。

最近读到的书籍,主要就是《程序员修炼之道》(pragmatic programmer)和《Unix编程艺术》。另外值得提及的就是《C专家编程》。凡是讨论到这个话题,这些书都无一例外的表现出他们的黑客情结,即那种恪守清规的苦行僧般的程序大师。这种恪守清规的殉道精神纵然值得敬佩,但施用于工业则未免可笑。

编辑器的争吵已经经历了几十年,作为一个无名小辈我没有必要再跳进这个泥潭了。这里推荐的是《Unix编程艺术》中对5个Unix通用文本编辑器的讨论,虽然作者本人崇尚黑客精神,但讨论时及其严谨客观,对从精简的无可挑剔的神级编辑器ed到vi到复杂到无以附加的emacs等等,都做了及其客观的评价。并根据前文提出的十几条Unix程序设计原则以及一些程序复杂度的标准,对这些项目的设计目标和崎岖的发展历程做了总结。后文对多种编程语言的评论和分析,以及使用场合介绍,同样严谨客观,推荐诸位语言死忠阅读。

无论是语言,编辑器还是任何工具,都没有绝对的好与坏的争斗。必然在其使用范围和适用条件下有其可取之处。真正的程序员不应该抱定某种特定的环境不放,而应自如的运用任何一种工具,并将其威力发挥到极致。如同武林大师,任何武器都可手到擒来,随手抄起身边板砖菜刀,都能发挥出神入化的境界。

然而说到我本人的观点,仍难以克制心中对MS visual studio系列工具的鄙夷。首先MS这种封闭的文化确实难令人苟同,再加上他着力培养初级程序员,并通过繁杂的IDE环境来潜在的支配奴役程序员的做法更是让人感到仇恨。许多通过VB入门的人都感到自己算不上程序员,或者说难以学习其他程序。许多通过VC入门的程序员都感到VC和(不使用VC的)C++简直就是两门语言。我相信离开VS,大多数C#程序员都无法工作。我想这样的例子在编程论坛的新手区,可以找到极多例子。Apple是培养傻瓜用户,MS是培养傻瓜程序员。或许商业意义上他是对的。但作为程序员则绝无法忍受。

这也是我仇恨框架的理由。程序员不应被框架所奴役,而应随心所欲的使用程序库提供的便利。程序框架(Framework)给人的感觉就是,根本就是框架在编程序,而把你程序员当成是一个函数库。是他在调用你。作为一个程序员被程序戏耍的滋味绝不好受。这也是我对java没有好感的理由。一个程序要限定好他的界限范围,而这个要求对于一个框架来说太难做到了。一个大而全的东西总想做得更大更全,最后包罗万象,然后无可避免的走向毁灭。

最后谈一谈Unix编程思想中的“懒惰原则:宁多机器一分勿多程序员一秒”以及“生成原则:让代码生成代码”。这点在《程序员修炼之道》中也有不少论述。yacc和lex可能过于复杂了,但一些简单的脚本至少是很容易编写的。学习一门脚本语言,然后试着在C或者其他重型语言开发中使用脚本语言从旁辅助,生活会变得相当美好。在linux上cat+grep已经可以做很多事情。配合bash配合awk,或者任何其他脚本,比如流行的ruby或python,许多无意义的键盘敲击都能省却,许多依赖复杂IDE的需求,例如重构代码段,寻找函数调用和声明,检查编码规范等等,都可利用脚本完成。我之所以喜欢emacs一个重要原因就是自己写的这些脚本还可链接到一个键盘快捷键上,调用更加方便。

当然所有这些话题都是见仁见智了。或许有人会认为使用IDE正是符合了“宁多机器一分无多程序员一秒”的精神。假如确定这增加了的机器的一分钟确确实实能减少程序员一秒钟的开销的话,那也确实是值得的。

年度读书计划-总结

去年11月份给自己定了一年的读书计划,结果可以说实现得非常糟糕。

决定当年读完的《linux内核》和《编译原理》两部书,都没有认真看完。只是概略翻了翻。

不过也不是说自己一点书都没有读。

图书馆借到的两本书,就看得津津有味。

一部是《linux设备驱动程序》,我一直都没找到合适的学习linux内核的书籍,才发现学习驱动是认识内核的一个非常好的切入点。而这一部书原理介绍的非常清晰,更容易从学习中抓到内核脉络。

另一部是《C专家编程》。年少无知的我一直认为自己对C语言了解已经足够了,接下来不再需要阅读语言相关的书籍了。看了这部书之后我的看法大大转变。可以说学无止境这句话用不能忘吧。这部书是Solaris系统程序员所写,风趣生动,包含大量系统开发过程中遇到的实际案例,同时介绍了C 语言标准、编译链接等等众多细节和trick。看这本书那两天,我几乎一直在捧腹大笑。实在是好书。尤其这本书言谈中吐露出的黑客文化,对我也是再一次的激励。

说到黑客文化,这里强烈推荐的是emacs中附带的advanture文字冒险游戏。相信喜欢tbbt的同志们应该已经看到Sheldon玩过了,“动用全球最先进的图形渲染引擎,AKA 大脑”,;)

新的一年一定要努力读书了,否则书架上书看不完也带不走,那就太浪费了!!

新年第一篇

新年要早起哈~

好久没写博客了。。也许是因为忙吧,也许是因为沉迷游戏。。也许是因为不够细心了所以不像之前那样一直有新发现。。

总归新的一年一定会有新的感想和新的成绩的~

— \ | / — 莫名其妙的分割线 — \ | / —

n年没上豆瓣的人被人加了一下好友,结果又去逛了逛,然后就火星的发现了这个

是正在看某个电影的页面的时候,出现在页面右上的。

确实是个很不错的主意啊,把fm和电影整合在了一起。

呵呵,应该说豆瓣的那一群人还是蛮有意思的吧。