热门标签 | HotTags
当前位置:  开发笔记 > 人工智能 > 正文

为什么我们需要阅读优秀开源软件代码

计算机程序是由代码零件拼装起来的机器,当我们想自己造一架机器的时候,难免会想看看其他机器是怎么拼的,特别是那些经由历代高手匠人修善,在实践考炼中表现优秀的机器。我们会惊奇,它为什么这么快?为什么这么小?为什么这么稳定?为什么能承受这么高的负载?

计算机程序是由代码零件拼装起来的机器,当我们想自己造一架机器的时候,难免会想看看其他机器是怎么拼的,特别是那些经由历代高手匠人修善,在实践考炼中表现优秀的机器。我们会惊奇,它为什么这么快?为什么这么小?为什么这么稳定?为什么能承受这么高的负载?

所幸的是,有相当多这类程序都开放了源代码——它们也正是因此才得以在众多聪明头脑的协作下逐步达到今天的高度。开放源代码,这意味着我们可以拆开每一颗螺钉,走近每一个零件,观察每一个动作,触摸每一根链条,转动每一个齿轮(阅读代码,运行,调试)。我们可以像孩子一样拆散它们,然后再拼到一起,可以摆弄它们的位置(修改)。在清楚一些时,我们可以把其中的一些零件用自己制作的替换掉(实验),还可以把零件卸下来安在自己的机器里(复用)。

当然,最初我们很可能会被慎密而复杂的结构搞晕,但一旦开始渐渐理清它们的关系,我们会首先为那些按高品质行业标准打造的标准零件的规范赞不绝口(代码规范,软件包构建,接口设计),接着为那特殊零件赏心悦目的精湛工艺而惊叹(语言技巧,数据结构/算法的设计、选择和实现,细节处理),然后为它们各司其职的明确分工和合理的安排而心服口服(模块化设计,接口设计,代码组织结构),其间我们会不断得到零件上友好简洁的标注的帮助(注释和可读性)。我们甚至会偶然为匠人们的幽默而捧服。有时我们会感到,那些聪明的家伙在对我们微笑,用带着一点挑衅却又友好的语气说道:"嘿,怎么样?我的代码写得不错吧?你能写得更好么?"

渐渐地,我们理解了我们所见到的又小又快又稳定又强壮的背后,有着怎样的神奇,并且发现这复杂之中所蕴含的简单。我们会感受到匠人们对高质量的不懈追求,看到他们怎样遵守和实践那些我们听说过的"玄乎"原则和哲学,并为他们付出的努力而动容。

后来,我们会发现诸多不完美,其中有些被证明是我们理解的问题,但有些确实需要改进,那么就动手吧,这时,我们可以恭喜一下自己——我们已经跟上了这些聪明黑客的节奏,并且开始融入其中。

如果我们对历史版本进行考古,会有更多发现,我们会看到今天我们面前的强壮青年经历过怎样的幼稚,看到他的成长轨迹。这时将会明白,罗马不是一天建成的,更不是一个人建成的,那些代码中包含的是大量黑客多年积累的努力和智慧,每一次修改和重构都吸取了上一版本的教训。今天宏伟光鲜的罗马城下,压着无数旧代码的尸体,而大师们也是在经历这些风雨后才成为大师。所以,优秀的开源软件代码所示范的手段,是历史之浪淘出的黄金(也有些带有古董的痕迹,但不影响代码的质量)。如果我们不去吸取这些血泪浇灌的营养,或许就免不了重流前人流过的血泪了。

总结一下,通过阅读优秀的开源软件代码,我们能够

  • 可以修改、重写后通过运行、调试进行实验
  • 找到可复用的代码用在自己的项目中
  • 学到代码编写、软件包构建等工程规范
  • 学到语言技巧,数据结构/算法的设计、选择和实现,以及细节处理方法
  • 学到模块化设计方法和良好规范的代码组织方法
  • 学到良好的编程风格和注释规范
  • 理解编程理论和原则
  • 了解软件发展规律,吸取前人经验教训
  • 对它们进行改进
  • 当然,还有最不重要,也是最重要的:

  • 满足好奇心

本文地址:http://www.nowamagic.net/librarys/veda/detail/1229,欢迎访问原出处。


推荐阅读
  • 本文详细探讨了 Android Service 组件中 onStartCommand 方法的四种不同返回值及其应用场景。Service 可以在后台执行长时间的操作,无需提供用户界面,支持通过启动和绑定两种方式创建。 ... [详细]
  • 苹果官方在线商店(中国)提供了关于MacBook Pro的详细信息。通过先进的工厂校准技术,新MacBook Pro能够精确地适应多种色彩空间标准,如sRGB、BT.601、BT.709及P3-ST.2084(HDR),确保用户获得最佳视觉效果。 ... [详细]
  • 如何寻找程序员的兼职机会
    随着远程工作的兴起,越来越多的程序员开始寻找灵活的兼职工作机会。本文将介绍几个适合程序员、设计师、翻译等专业人士的在线平台,帮助他们找到合适的兼职项目。 ... [详细]
  • 本文介绍了用户界面(User Interface, UI)的基本概念,以及在iOS应用程序中UIView及其子类的重要性和使用方式。文章详细探讨了UIView如何作为用户交互的核心组件,以及它与其他UI控件和业务逻辑的关系。 ... [详细]
  • 本文探讨了线性表中元素的删除方法,包括顺序表和链表的不同实现策略,以及这些策略在实际应用中的性能分析。 ... [详细]
  • Python网络编程:深入探讨TCP粘包问题及解决方案
    本文详细探讨了TCP协议下的粘包现象及其产生的原因,并提供了通过自定义报头解决粘包问题的具体实现方案。同时,对比了TCP与UDP协议在数据传输上的不同特性。 ... [详细]
  • 汇编语言标识符和表达式(四)(表达式与符号定义语句)
    7、表达式表达式是程序设计课程里的一个重要的基本概念,它可由运算符、操作符、括号、常量和一些符号连在一起的式子。在汇编语言中,表达式分为:数值表达式和地址表达式。(1)进制伪指令R ... [详细]
  • 对于非计算机专业背景的开发者而言,如何快速掌握.NET基础知识以应对技术面试是一个挑战。本文将提供一系列实用建议,帮助读者在短时间内提高.NET基础水平。 ... [详细]
  • 本文介绍了使用Python和C语言编写程序来计算一个给定数值的平方根的方法。通过迭代算法,我们能够精确地得到所需的结果。 ... [详细]
  • 本文提供了一个关于AC自动机(Aho-Corasick Algorithm)的详细解析与实现方法,特别针对P3796题目进行了深入探讨。文章不仅涵盖了AC自动机的基本概念,还重点讲解了如何通过构建失败指针(fail pointer)来提高字符串匹配效率。 ... [详细]
  • 本文提供了一个详尽的前端开发资源列表,涵盖了从基础入门到高级应用的各个方面,包括HTML5、CSS3、JavaScript框架及库、移动开发、API接口、工具与插件等。 ... [详细]
  • 本文介绍了在达梦数据库(DM7)中通过两种方法实现两表之间的联接更新操作,包括使用子查询的更新语句和MERGE语句的具体应用。 ... [详细]
  • SSE图像算法优化系列三:超高速导向滤波实现过程纪要(欢迎挑战)
    自从何凯明提出导向滤波后,因为其算法的简单性和有效性,该算法得到了广泛的应用,以至于新版的matlab都将其作为标准自带的函数之一了&#x ... [详细]
  • 解读基因集富集分析(GSEA)结果及应用
    本文详细介绍了基因集富集分析(Gene Set Enrichment Analysis, GSEA)的基本原理,以及如何通过GSEA分析结果来解析基因表达数据。此外,还提供了使用R语言进行GSEA分析的具体方法。 ... [详细]
  • 社会网络分析学习笔记 - 模块4
    本文探讨了小世界现象及其在社交网络中的应用,包括厄多斯数和培根数的概念。文章还介绍了图的基本表示方法,如边列表和邻接矩阵,并讨论了它们在不同规模网络中的适用性和效率。 ... [详细]
author-avatar
花开不美
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有