计算机程序是由代码零件拼装起来的机器,当我们想自己造一架机器的时候,难免会想看看其他机器是怎么拼的,特别是那些经由历代高手匠人修善,在实践考炼中表现优秀的机器。我们会惊奇,它为什么这么快?为什么这么小?为什么这么稳定?为什么能承受这么高的负载?
所幸的是,有相当多这类程序都开放了源代码——它们也正是因此才得以在众多聪明头脑的协作下逐步达到今天的高度。开放源代码,这意味着我们可以拆开每一颗螺钉,走近每一个零件,观察每一个动作,触摸每一根链条,转动每一个齿轮(阅读代码,运行,调试)。我们可以像孩子一样拆散它们,然后再拼到一起,可以摆弄它们的位置(修改)。在清楚一些时,我们可以把其中的一些零件用自己制作的替换掉(实验),还可以把零件卸下来安在自己的机器里(复用)。
当然,最初我们很可能会被慎密而复杂的结构搞晕,但一旦开始渐渐理清它们的关系,我们会首先为那些按高品质行业标准打造的标准零件的规范赞不绝口(代码规范,软件包构建,接口设计),接着为那特殊零件赏心悦目的精湛工艺而惊叹(语言技巧,数据结构/算法的设计、选择和实现,细节处理),然后为它们各司其职的明确分工和合理的安排而心服口服(模块化设计,接口设计,代码组织结构),其间我们会不断得到零件上友好简洁的标注的帮助(注释和可读性)。我们甚至会偶然为匠人们的幽默而捧服。有时我们会感到,那些聪明的家伙在对我们微笑,用带着一点挑衅却又友好的语气说道:"嘿,怎么样?我的代码写得不错吧?你能写得更好么?"
渐渐地,我们理解了我们所见到的又小又快又稳定又强壮的背后,有着怎样的神奇,并且发现这复杂之中所蕴含的简单。我们会感受到匠人们对高质量的不懈追求,看到他们怎样遵守和实践那些我们听说过的"玄乎"原则和哲学,并为他们付出的努力而动容。
后来,我们会发现诸多不完美,其中有些被证明是我们理解的问题,但有些确实需要改进,那么就动手吧,这时,我们可以恭喜一下自己——我们已经跟上了这些聪明黑客的节奏,并且开始融入其中。
如果我们对历史版本进行考古,会有更多发现,我们会看到今天我们面前的强壮青年经历过怎样的幼稚,看到他的成长轨迹。这时将会明白,罗马不是一天建成的,更不是一个人建成的,那些代码中包含的是大量黑客多年积累的努力和智慧,每一次修改和重构都吸取了上一版本的教训。今天宏伟光鲜的罗马城下,压着无数旧代码的尸体,而大师们也是在经历这些风雨后才成为大师。所以,优秀的开源软件代码所示范的手段,是历史之浪淘出的黄金(也有些带有古董的痕迹,但不影响代码的质量)。如果我们不去吸取这些血泪浇灌的营养,或许就免不了重流前人流过的血泪了。
总结一下,通过阅读优秀的开源软件代码,我们能够
- 可以修改、重写后通过运行、调试进行实验
- 找到可复用的代码用在自己的项目中
- 学到代码编写、软件包构建等工程规范
- 学到语言技巧,数据结构/算法的设计、选择和实现,以及细节处理方法
- 学到模块化设计方法和良好规范的代码组织方法
- 学到良好的编程风格和注释规范
- 理解编程理论和原则
- 了解软件发展规律,吸取前人经验教训
- 对它们进行改进
- 满足好奇心
当然,还有最不重要,也是最重要的:
本文地址:http://www.nowamagic.net/librarys/veda/detail/1229,欢迎访问原出处。