@@ -347,7 +347,7 @@ http://book.douban.com/subject/3088353/
347
347
不同的语言,不同的开源项目,可能具有不同的插件体系,较为著名的,有Eclipse的插件体系OSGi、FireFox的插件体系、jQuery的插件体系、Redmine的插件体系以及Joomla!的插件体系等等。
348
348
349
349
在维基百科上有一个关于插件的概要介绍:
350
- [ http://en.wikipedia.org/wiki/Plug-in_(computing) ] ( http://en.wikipedia.org/wiki/Plug-in_(computing) )
350
+ < http://en.wikipedia.org/wiki/Plug-in_(computing) >
351
351
352
352
要理解某个项目的插件体系,通常需要找到专门的介绍文档,仔细阅读。例如Java的OSGi,已经非常的复杂,值得专门写N本书来深入介绍:[ 豆瓣搜索OSGi的结果] ( http://www.douban.com/search?cat=1001&q=OSGi )
353
353
@@ -447,28 +447,34 @@ class BannersModelBanner extends JModelLegacy
447
447
往大了说,整个这份文档,希望帮助读者达到的,就是能够对于开源软件“知其所以然”。这样才算是真正提高了软件开发的能力。因此,我们可以将“架构决策”、“代码风格”、“领域知识”、“编程技巧”等等内容,都算作是所以然的一部分。
448
448
449
449
** 架构决策** 通过深入阅读和分析源代码,理解整个项目,为何像这样,而不是那样做架构设计。其间蕴含着项目作者的经验和智慧,理解了这个,将是一种巨大的收获。
450
+
450
451
** 代码风格** 每一种语言、每一个社区、每一个开发者群体,甚至每一个开源项目,都有其独特的代码风格,这种风格,有其背后的合理性,也有很多是来源于某种开发哲学的思 考。理解一种代码风格,就是理解一种思考的模式,一种思想的体系。能够多了解一些不同种类的代码风格,对于提高软件开发能力,将有很大的帮助。
452
+
451
453
** 领域知识** 有些代码不容易看懂,很重要的一个原因,是这个项目所涉及的领域,我们没有什么深入的了解。多年的程序员经验告诉我,要做好某一个行业的软件,一定要成为 某一个行业的内行。甚至要比那个本行业的业内人士,更加精通。因此,一个优秀的程序员,通常是能够跟你聊多个不同行业的话题的。强大到你几乎无法分别他的 是不是业内人士。因此,通过理解开源项目,进而理解相关的领域知识,会有很多收获。
454
+
452
455
** 编程技巧** 阅读优秀的开源项目的代码,有时候很像是看一本好书。细细品味,慢慢的体会。我们会发现一点一滴的“妙处”。这些妙处凝聚了程序员的巧思妙想,能够体会得越多,对我们的帮助也就越大。
453
456
454
457
### 所以然还包括的一些内容:
455
458
456
459
** 个人偏好** 开源作者也是普通人,他们有很多观点和取舍,未必能够说服他人,只能算是他们自己的偏好。而他们将自己的偏好表达在代码里,有些时候,我们能够很容易理解 (因为我们也是这样想的)。有些时候,我们就会感觉很不解,而且,常常会发生的一类故事就是:某某大牛写了一个开源项目,另一个大牛有感觉不爽的地方。提 了意见建议,人家又不肯改。结果,这另外一个大牛,就一怒之下,另起炉灶,写了一个新的开源项目。
460
+
457
461
** 历史原因** 有一篇很有意思的文章,解释了《[ 为什么Vim使用HJKL键作为方向键] ( http://linux.cn/article-542-1.html ) 》,其实原因很简单。当Bill Joy创建Vi文本编辑器时,他使用的机器机器是ADM-3A终端机,这机器就是把HJKL键作为方向键的。
458
462
459
463
![ ] ( images/keyboard.jpg )
460
464
461
465
### 如何搞清楚这些所以然呢?
462
466
463
- 思考 当然,这种思考应该伴随我们“通过开源项目,学习软件开发”的始终。但是,从方法论来说,可以尝试从以下一些角度出发来思考:
467
+ ** 思考 ** 当然,这种思考应该伴随我们“通过开源项目,学习软件开发”的始终。但是,从方法论来说,可以尝试从以下一些角度出发来思考:
464
468
465
469
* 如果我来做一个,会如何去做?
466
470
* 如果能够对这个项目做减法,我可以去掉那些模块和代码?真的能够去掉吗?
467
471
* 通过阅读单元测试,理解开发者的设计思路。
468
472
* 尝试做一些破坏或者修改,来理解项目中的那些做法。这个在下一章会更详细的讨论。
469
473
470
474
** 讨论** 到开源社区去,发起一些讨论。当然,前提是你必须经过足够深入的思考。不要尽是问一些傻问题
475
+
471
476
** 向作者提问** 与上面的讨论类似,前提是要先思考。当然,还有一个讨巧的办法,你可以提出:翻译这个开源项目的英文文档,然后,对方当然会很高兴——国际化了嘛。然后,你可以在翻译的过程中,提出各种各样的问题。。。
477
+
472
478
** 阅读指南** 有些著名的开源项目,本身也非常复杂,所以会有一些文档与书籍:linux内核代码分析、MySQL源码解读、PHP源码分析等等。如果有心学习这样的大 型开源项目,这种入门指南,也是很有价值的。但是,这毕竟是别人嚼过的饭,肯定不如自己去啃来的香。所以,还是回到那句老话,源代码才是最有营养的。
473
479
474
480
### 参考文档
0 commit comments