GNU 的“工具箱”哲学:问题的分解
转载
via <http://www.chedong.com/tech/study.html>
最近车东的网站挂了,感觉很奇怪,于是 Google 了他一下,没有什么新消息,重新复习一下这篇我觉得不错的文章吧。
[hr]
虽然常常发现自己碰到的很多问题在国外几年前就有人遇到过了,而且往往能通过Google找到大量相关资源。而且类似需求非常多的话,往往还会有很多Open Source的解决方案发布在[url=http://sf.net]SourceForge.net[/url] [url=http://www.apache.org]Apache.org[/url]上。
但不要指望所有问题都能够直接在互联网上找到答案,因为复杂问题本身的解决有可能利用其他一些工具组合解决完成的。比如:我在解决[url=http://www.chedong.com/tech/rotate_merge_log.html]多台服务器之间的日志合并统计过程[/url]中找到的Apache的日志轮循工具cronolog,在[url=http://www.chedong.com/tech/oe2html.html]OutLook Express邮件的HTML归档[/url]过程中找到的mbx2mbox+mhonarc,以及在[url=http://www.chedong.com/tech/cvs_card.html]CVS的常用工具整理[/url]过程中找到的大量优秀应用等。
GNU很推崇“工具箱”哲学:因为很多复杂的问题都可以通过几个更简单的工具通过一定的组合加以解决的。而Perl往往就是粘合这些优秀工具的“胶水语言”。这也是为什么Perl(或者说Perl的哲学)是任何一个程序员都因该学习并掌握的语言。
如果一个问题在Google上也找不到,有时候就需要反思一下自身需求本身的问题了,合理的需求是发展的源动力:如果你发现提出需求目前很多系统中不支持,说明我们对其设计目标理解不够深入或者对问题的复杂度缺乏正确的估计造成的。比如:MySQL早期版本中没有外键和事务处理的支持,CVS没有文件的锁定机制,但事实上经过很长时间的实践证明:这些功能并非必需,而且没有这些功能系统也是“够用”的,而且是高效的。
总结:
1.毕竟搜索引擎只是帮助我们把“模糊的”人类语言转换成立了计算机比较擅长的“精确”匹配,因此往往需要使用一些特征关键词(不仅是多)把自己需要的资源与其他数十亿网页中区别出来;
2.而返回的结果不可能达到非常完美的程度,所以有时候除了一些技巧外,还是需要我们自己从头几十条比较相关的结果中进行一下归纳总结。“搜索==>总结==>再搜索……”,我想基于搜索引擎的学习基本上就是这么一个不断提炼过程吧;
3.如果直接找不到问题的答案就想办法把问题分解,如果还找不到,就反思一下自己的需求是否合理;
4.把自己的经验通过互联网加以总结,反馈和推广,你的观点也可能在Google的结果中很靠前;
顺便说说我对开源软件的印象:开源社区很像一个基于互联网的原始丛林,那些经过近乎“物竞天择”式的发展并能够长期留存下来的工具/开发库往往都是非常“强壮”的,GNU这些工具包的高效稳定给我留下了深刻印象,而且由于很多开源软件都来自资深工程师的实践,实际上可重用度也很高。如果用“自私的基因”原理来解释的话,开源软件开发者最大的野心就是让同类的商业软件几乎没有生存的可能。毕竟连我们最经常用来查找资源最常用的的搜速引擎Google本身也是基于大量开源软件(GNU/Linux GCC Python...)开发出来的。
相关资源:
Google搜索帮助
[url]http://www.google.com/help/[/url]
GNU项目
[url]http://gnu.org[/url]
各种开源项目资源
[url]http://sourceforge.net[/url]
[url]http://freshmeat.net[/url]
NEC Research Institute CiteSeer
[url]http://citeseer.nj.nec.com[/url]
The Apache Software Foundation
[url]http://www.apache.org/[/url]
原文出处:<a href="http://www.chedong.com/tech/study.html">[url]http://www.chedong.com/tech/study.html[/url]</a>