如何阅读他人代码(六)

原文为繁体中文,地址:http://www.ithome.com.tw/itadm/article.php?c=48272

下文为经过Google翻译过的简体中文版,有翻译不准确的地方,请参照原文一起阅读:


 

阅读他人的程序码( 6 -阅读的乐趣:透过程序码认识作者

即便每个人的写作模式多半受到他人的影响,程序人通常还是会融合多种风格,而成为自己独有的特色,如果你知道作者程序设计的偏好,阅读他的程序码就更得心应手。

阅读程序码时,多半会采取由上而下,抽丝剥茧的方式。透过记录层层展开的树状结构,程序人可以逐步地建立起对系统的架构观,而且可以依照需要的粒度(粒度) ,决定展开的层次及精致程度。 

建立架构观点的认识是最重要的事情。虽然这一系列的文章前提为阅读他人的程序码,但我们真正想做的工作,并不在于彻底地详读每一行程序码的细节,而是想要透过重点式的程序码摘读,达到对系统所需程度的了解。每个人在阅读程序码的动机不尽相同,需要了解的程度也就有深浅的分别。只有极为少数的情况下,你才会需要细读每一行程序码。 

阅读程序码是新时代程序人必备的重要技能

 
这一系列的文章至此已近尾声,回顾曾探讨的主题,我们首先研究了阅读程序码的动机。尤其在开放原始码的风气如此之盛的情况下,妥善利用开放原始码所提供的资源,不仅能够更快学习到新的技术,同时在原始码版权合适时,还可以直接利用现成的程序码,大幅地提高开发阶段的生产力。所以,阅读程序码俨然成为了新时代程序人必备的重要技能之一。 
接着,我们提到了阅读程序码前的必要准备,包括了对程序语言,命名惯例的了解等等。在此之后,我们反复提起了由上而下的阅读方向的重要性。 
由上而下的阅读方式,是因为我们重视架构更胜于细节。从最外层的架构逐一向内探索,每往内探索一层,我们了解系统的粒度就增加了一个等级。当你识别出系统所用的架构时,便能够轻易了解在这个架构下会有的角色,以及它们之间的动态及静态的关系。如此一来,许多资讯便不言可喻,毋需额外花费力气,便能够快速理解。 

好的名称能够摘要性地点出实体的作用 


追踪原始码时,固然可以用本来的方式,利用编辑器开启所需的档案,然后利用编辑器提供的机制阅读,但是倘若能够善用工具,阅读程序码的效率及品质都能大大提升。在本系列文章中,我们介绍了一些工具,或许你还可以在坊间找到其他更有用的工具。 
我在这一系列的文章中,实际带着大家阅读,追踪了一个名为ml_pod的开放原始码专案。它是一个AOLWinampiPod的外挂程序。在追踪的过程中,我们试着印证这一系列文中所提到的观念及方法。我们采用逐渐开展的树状结构来记录追踪的过程,并借以建立起对系统的概观认识。 

就原始码的阅读来说,之前的讨论涉及了工具面及技巧面。但还有一些主题不在这两个范畴之内,例如,善用名称赋予你的提示。名称做为隐喻(隐喻)的作用很大,好的名称能够摘要性地点出实体的作用,例如我们看到autoDetectIpod ,自然而然能够想象它的作用在于自动(自动)侦测(检测)的iPod的存在。 

我们在展开树状结构时,有时候需要预看一层,有时却不需要这么做,便可得到印证。程序人都会有惯用的名称以及组合名称的方法,倘若能够从名称上理解,便毋需钻进细节,可以省去相当多的时间。例如,当我们看到parseIpodDb )时,便可以轻易了解它是剖析(解析)的iPod的资料库( DB )的,因此便不需要立即钻进parseIpodDb )中查看底细。 

尽管如此,能否理解程序人命名的用意,和自身的经验以及是否了解原作者的文化背景,是息息相关的。 

命名本身就是一种文化产物。不同的程序人文化,就会衍生出不同的命名文化。当你自己的经验丰富,看过及接触过的程序码也多时,对于名称的感受及联想的能力自然会有不同。 

这种感受和联想的能力,究竟应该如何精进,很难具体描述。就我个人的经验,多观察不同命名体系的差异,并且尝试归纳彼此之间的异同,有助于更快地提升对名称的感受及联想力。 

转换立场,理解作者的思考方式

 
除了工具及技巧之外,想要阅读程序码,得先试着阅读写这个程序码的程序人的心。这句话说来十分抽象,或许也令人难以理解。 

当你在阅读一段程序码时,或许可以试着转换自己的立场,从旁观者的角度转换成为写作者的心态,揣摩原作者的心理及处境。当你试着设身处地站在他的立场,透过他的思考方式来阅读,追踪他所写下的程序码,将会感觉更加流畅。 

许多软体专案,都不是由单一程序人所独力完成。因此,在这样的专案中,便有可能呈现多种不同的风格。 

许多专案会由架构师决定主体的架构及运作,有既定实施的命名惯例,及程序设计需要遵守方针。在多人开发的模式下,越是好的软体专案,越看不出某程序码片段究竟是由谁所写下的。 

不过,有些开放原始码的专案,往往又整合了其他开放原始码的专案。有的时候,也很难求风格的统一,便会出现混杂的情况。好比之前提到的ml_pod专案,因为程序码中混合了不同的来源,而呈现风格不一致的情况。 

我在阅读非自己所写的程序码时,会观察原作者写作的习惯,借以对应到脑中所记忆的多种写作模型。在阅读的过程中,读完几行程序码,我会试着猜想原作者在写下这段程序码时的心境。他写下这段程序码的用意是什么?为什么他会采取这样的写法?顺着原作者的思考理路阅读,自己的思考才能更贴近对方写作当时的想法。 

当你短暂化身为原作者时,才能更轻易的理解他所写下的程序码。 
如果你能知道原作者的背景,程序设计时的偏好,阅读他的程序码,就更能得心应手了。 

从程序码着手认识作者独有的风格,进而见贤思齐 


我在阅读别人写下的程序码时,我会试着猜想,原作者究竟是属于那一种流派呢?每个人都有自己独特的写作模式,即便每个人的写作模式多半受到他人的影响 不论是书籍的作者,学习过程中的指导者,或一同参与专案的同侪,但每个程序人通常会融合多种风格,而成为自己独有的风格。 

对象导向的基本教义派,总是会以他心中觉得最优雅的对象导向方式来撰写程序。而阅读惯用,善用设计模式的程序人所写下的程序码时,不难推想出他会在各种常见的应用情境下,套用哪些模式。 

有些时候,在阅读之初,你并不知道原作者的习性跟喜好,甚至你也不知道他的功力。但是,在阅读之后,你会慢慢地从一个程序人所写下的程序码,开始认识他。 

你或许会在阅读他人的程序码时,发现令人拍案叫绝的技巧或设计。你也有可能在阅读的同时,发现原作者所留下的缺失或写作时的缺点,而暗自警惕于心。这也算是阅读他人程序码时的一项乐趣。 

当你从视阅读他人的程序码为畏途,转变成为可以从中获取乐趣的时候,我想,你又进到了另一个境界。


我在阅读别人写下的程序码时,我会试着猜想,原作者究竟是属于那一种流派呢?每个人都有自己独特的写作模式,即便每个人的写作模式多半受到他人的影响 不论是书籍的作者,学习过程中的指导者,或一同参与专案的同侪,但每个程序人通常会融合多种风格,而成为自己独有的风格。 

对象导向的基本教义派,总是会以他心中觉得最优雅的对象导向方式来撰写程序。而阅读惯用,善用设计模式的程序人所写下的程序码时,不难推想出他会在各种常见的应用情境下,套用哪些模式。 

有些时候,在阅读之初,你并不知道原作者的习性跟喜好,甚至你也不知道他的功力。但是,在阅读之后,你会慢慢地从一个程序人所写下的程序码,开始认识他。 

你或许会在阅读他人的程序码时,发现令人拍案叫绝的技巧或设计。你也有可能在阅读的同时,发现原作者所留下的缺失或写作时的缺点,而暗自警惕于心。这也算是阅读他人程序码时的一项乐趣。 

当你从视阅读他人的程序码为畏途,转变成为可以从中获取乐趣的时候,我想,你又进到了另一个境界。

 
除了工具及技巧之外,想要阅读程序码,得先试着阅读写这个程序码的程序人的心。这句话说来十分抽象,或许也令人难以理解。 

当你在阅读一段程序码时,或许可以试着转换自己的立场,从旁观者的角度转换成为写作者的心态,揣摩原作者的心理及处境。当你试着设身处地站在他的立场,透过他的思考方式来阅读,追踪他所写下的程序码,将会感觉更加流畅。 

许多软体专案,都不是由单一程序人所独力完成。因此,在这样的专案中,便有可能呈现多种不同的风格。 

许多专案会由架构师决定主体的架构及运作,有既定实施的命名惯例,及程序设计需要遵守方针。在多人开发的模式下,越是好的软体专案,越看不出某程序码片段究竟是由谁所写下的。 

不过,有些开放原始码的专案,往往又整合了其他开放原始码的专案。有的时候,也很难求风格的统一,便会出现混杂的情况。好比之前提到的ml_pod专案,因为程序码中混合了不同的来源,而呈现风格不一致的情况。 

我在阅读非自己所写的程序码时,会观察原作者写作的习惯,借以对应到脑中所记忆的多种写作模型。在阅读的过程中,读完几行程序码,我会试着猜想原作者在写下这段程序码时的心境。他写下这段程序码的用意是什么?为什么他会采取这样的写法?顺着原作者的思考理路阅读,自己的思考才能更贴近对方写作当时的想法。 

当你短暂化身为原作者时,才能更轻易的理解他所写下的程序码。 
如果你能知道原作者的背景,程序设计时的偏好,阅读他的程序码,就更能得心应手了。 

从程序码着手认识作者独有的风格,进而见贤思齐 


我在阅读别人写下的程序码时,我会试着猜想,原作者究竟是属于那一种流派呢?每个人都有自己独特的写作模式,即便每个人的写作模式多半受到他人的影响 不论是书籍的作者,学习过程中的指导者,或一同参与专案的同侪,但每个程序人通常会融合多种风格,而成为自己独有的风格。 

对象导向的基本教义派,总是会以他心中觉得最优雅的对象导向方式来撰写程序。而阅读惯用,善用设计模式的程序人所写下的程序码时,不难推想出他会在各种常见的应用情境下,套用哪些模式。 

有些时候,在阅读之初,你并不知道原作者的习性跟喜好,甚至你也不知道他的功力。但是,在阅读之后,你会慢慢地从一个程序人所写下的程序码,开始认识他。 

你或许会在阅读他人的程序码时,发现令人拍案叫绝的技巧或设计。你也有可能在阅读的同时,发现原作者所留下的缺失或写作时的缺点,而暗自警惕于心。这也算是阅读他人程序码时的一项乐趣。 

当你从视阅读他人的程序码为畏途,转变成为可以从中获取乐趣的时候,我想,你又进到了另一个境界。


我在阅读别人写下的程序码时,我会试着猜想,原作者究竟是属于那一种流派呢?每个人都有自己独特的写作模式,即便每个人的写作模式多半受到他人的影响 不论是书籍的作者,学习过程中的指导者,或一同参与专案的同侪,但每个程序人通常会融合多种风格,而成为自己独有的风格。 

对象导向的基本教义派,总是会以他心中觉得最优雅的对象导向方式来撰写程序。而阅读惯用,善用设计模式的程序人所写下的程序码时,不难推想出他会在各种常见的应用情境下,套用哪些模式。 

有些时候,在阅读之初,你并不知道原作者的习性跟喜好,甚至你也不知道他的功力。但是,在阅读之后,你会慢慢地从一个程序人所写下的程序码,开始认识他。 

你或许会在阅读他人的程序码时,发现令人拍案叫绝的技巧或设计。你也有可能在阅读的同时,发现原作者所留下的缺失或写作时的缺点,而暗自警惕于心。这也算是阅读他人程序码时的一项乐趣。 

当你从视阅读他人的程序码为畏途,转变成为可以从中获取乐趣的时候,我想,你又进到了另一个境界。


追踪原始码时,固然可以用本来的方式,利用编辑器开启所需的档案,然后利用编辑器提供的机制阅读,但是倘若能够善用工具,阅读程序码的效率及品质都能大大提升。在本系列文章中,我们介绍了一些工具,或许你还可以在坊间找到其他更有用的工具。 
我在这一系列的文章中,实际带着大家阅读,追踪了一个名为ml_pod的开放原始码专案。它是一个AOLWinampiPod的外挂程序。在追踪的过程中,我们试着印证这一系列文中所提到的观念及方法。我们采用逐渐开展的树状结构来记录追踪的过程,并借以建立起对系统的概观认识。 

就原始码的阅读来说,之前的讨论涉及了工具面及技巧面。但还有一些主题不在这两个范畴之内,例如,善用名称赋予你的提示。名称做为隐喻(隐喻)的作用很大,好的名称能够摘要性地点出实体的作用,例如我们看到autoDetectIpod ,自然而然能够想象它的作用在于自动(自动)侦测(检测)的iPod的存在。 

我们在展开树状结构时,有时候需要预看一层,有时却不需要这么做,便可得到印证。程序人都会有惯用的名称以及组合名称的方法,倘若能够从名称上理解,便毋需钻进细节,可以省去相当多的时间。例如,当我们看到parseIpodDb )时,便可以轻易了解它是剖析(解析)的iPod的资料库( DB )的,因此便不需要立即钻进parseIpodDb )中查看底细。 

尽管如此,能否理解程序人命名的用意,和自身的经验以及是否了解原作者的文化背景,是息息相关的。 

命名本身就是一种文化产物。不同的程序人文化,就会衍生出不同的命名文化。当你自己的经验丰富,看过及接触过的程序码也多时,对于名称的感受及联想的能力自然会有不同。 

这种感受和联想的能力,究竟应该如何精进,很难具体描述。就我个人的经验,多观察不同命名体系的差异,并且尝试归纳彼此之间的异同,有助于更快地提升对名称的感受及联想力。 

转换立场,理解作者的思考方式

 
除了工具及技巧之外,想要阅读程序码,得先试着阅读写这个程序码的程序人的心。这句话说来十分抽象,或许也令人难以理解。 

当你在阅读一段程序码时,或许可以试着转换自己的立场,从旁观者的角度转换成为写作者的心态,揣摩原作者的心理及处境。当你试着设身处地站在他的立场,透过他的思考方式来阅读,追踪他所写下的程序码,将会感觉更加流畅。 

许多软体专案,都不是由单一程序人所独力完成。因此,在这样的专案中,便有可能呈现多种不同的风格。 

许多专案会由架构师决定主体的架构及运作,有既定实施的命名惯例,及程序设计需要遵守方针。在多人开发的模式下,越是好的软体专案,越看不出某程序码片段究竟是由谁所写下的。 

不过,有些开放原始码的专案,往往又整合了其他开放原始码的专案。有的时候,也很难求风格的统一,便会出现混杂的情况。好比之前提到的ml_pod专案,因为程序码中混合了不同的来源,而呈现风格不一致的情况。 

我在阅读非自己所写的程序码时,会观察原作者写作的习惯,借以对应到脑中所记忆的多种写作模型。在阅读的过程中,读完几行程序码,我会试着猜想原作者在写下这段程序码时的心境。他写下这段程序码的用意是什么?为什么他会采取这样的写法?顺着原作者的思考理路阅读,自己的思考才能更贴近对方写作当时的想法。 

当你短暂化身为原作者时,才能更轻易的理解他所写下的程序码。 
如果你能知道原作者的背景,程序设计时的偏好,阅读他的程序码,就更能得心应手了。 

从程序码着手认识作者独有的风格,进而见贤思齐 


我在阅读别人写下的程序码时,我会试着猜想,原作者究竟是属于那一种流派呢?每个人都有自己独特的写作模式,即便每个人的写作模式多半受到他人的影响 不论是书籍的作者,学习过程中的指导者,或一同参与专案的同侪,但每个程序人通常会融合多种风格,而成为自己独有的风格。 

对象导向的基本教义派,总是会以他心中觉得最优雅的对象导向方式来撰写程序。而阅读惯用,善用设计模式的程序人所写下的程序码时,不难推想出他会在各种常见的应用情境下,套用哪些模式。 

有些时候,在阅读之初,你并不知道原作者的习性跟喜好,甚至你也不知道他的功力。但是,在阅读之后,你会慢慢地从一个程序人所写下的程序码,开始认识他。 

你或许会在阅读他人的程序码时,发现令人拍案叫绝的技巧或设计。你也有可能在阅读的同时,发现原作者所留下的缺失或写作时的缺点,而暗自警惕于心。这也算是阅读他人程序码时的一项乐趣。 

当你从视阅读他人的程序码为畏途,转变成为可以从中获取乐趣的时候,我想,你又进到了另一个境界。


我在阅读别人写下的程序码时,我会试着猜想,原作者究竟是属于那一种流派呢?每个人都有自己独特的写作模式,即便每个人的写作模式多半受到他人的影响 不论是书籍的作者,学习过程中的指导者,或一同参与专案的同侪,但每个程序人通常会融合多种风格,而成为自己独有的风格。 

对象导向的基本教义派,总是会以他心中觉得最优雅的对象导向方式来撰写程序。而阅读惯用,善用设计模式的程序人所写下的程序码时,不难推想出他会在各种常见的应用情境下,套用哪些模式。 

有些时候,在阅读之初,你并不知道原作者的习性跟喜好,甚至你也不知道他的功力。但是,在阅读之后,你会慢慢地从一个程序人所写下的程序码,开始认识他。 

你或许会在阅读他人的程序码时,发现令人拍案叫绝的技巧或设计。你也有可能在阅读的同时,发现原作者所留下的缺失或写作时的缺点,而暗自警惕于心。这也算是阅读他人程序码时的一项乐趣。 

当你从视阅读他人的程序码为畏途,转变成为可以从中获取乐趣的时候,我想,你又进到了另一个境界。

 
除了工具及技巧之外,想要阅读程序码,得先试着阅读写这个程序码的程序人的心。这句话说来十分抽象,或许也令人难以理解。 

当你在阅读一段程序码时,或许可以试着转换自己的立场,从旁观者的角度转换成为写作者的心态,揣摩原作者的心理及处境。当你试着设身处地站在他的立场,透过他的思考方式来阅读,追踪他所写下的程序码,将会感觉更加流畅。 

许多软体专案,都不是由单一程序人所独力完成。因此,在这样的专案中,便有可能呈现多种不同的风格。 

许多专案会由架构师决定主体的架构及运作,有既定实施的命名惯例,及程序设计需要遵守方针。在多人开发的模式下,越是好的软体专案,越看不出某程序码片段究竟是由谁所写下的。 

不过,有些开放原始码的专案,往往又整合了其他开放原始码的专案。有的时候,也很难求风格的统一,便会出现混杂的情况。好比之前提到的ml_pod专案,因为程序码中混合了不同的来源,而呈现风格不一致的情况。 

我在阅读非自己所写的程序码时,会观察原作者写作的习惯,借以对应到脑中所记忆的多种写作模型。在阅读的过程中,读完几行程序码,我会试着猜想原作者在写下这段程序码时的心境。他写下这段程序码的用意是什么?为什么他会采取这样的写法?顺着原作者的思考理路阅读,自己的思考才能更贴近对方写作当时的想法。 

当你短暂化身为原作者时,才能更轻易的理解他所写下的程序码。 
如果你能知道原作者的背景,程序设计时的偏好,阅读他的程序码,就更能得心应手了。 

从程序码着手认识作者独有的风格,进而见贤思齐 


我在阅读别人写下的程序码时,我会试着猜想,原作者究竟是属于那一种流派呢?每个人都有自己独特的写作模式,即便每个人的写作模式多半受到他人的影响 不论是书籍的作者,学习过程中的指导者,或一同参与专案的同侪,但每个程序人通常会融合多种风格,而成为自己独有的风格。 

对象导向的基本教义派,总是会以他心中觉得最优雅的对象导向方式来撰写程序。而阅读惯用,善用设计模式的程序人所写下的程序码时,不难推想出他会在各种常见的应用情境下,套用哪些模式。 

有些时候,在阅读之初,你并不知道原作者的习性跟喜好,甚至你也不知道他的功力。但是,在阅读之后,你会慢慢地从一个程序人所写下的程序码,开始认识他。 

你或许会在阅读他人的程序码时,发现令人拍案叫绝的技巧或设计。你也有可能在阅读的同时,发现原作者所留下的缺失或写作时的缺点,而暗自警惕于心。这也算是阅读他人程序码时的一项乐趣。 

当你从视阅读他人的程序码为畏途,转变成为可以从中获取乐趣的时候,我想,你又进到了另一个境界。


我在阅读别人写下的程序码时,我会试着猜想,原作者究竟是属于那一种流派呢?每个人都有自己独特的写作模式,即便每个人的写作模式多半受到他人的影响 不论是书籍的作者,学习过程中的指导者,或一同参与专案的同侪,但每个程序人通常会融合多种风格,而成为自己独有的风格。 

对象导向的基本教义派,总是会以他心中觉得最优雅的对象导向方式来撰写程序。而阅读惯用,善用设计模式的程序人所写下的程序码时,不难推想出他会在各种常见的应用情境下,套用哪些模式。 

有些时候,在阅读之初,你并不知道原作者的习性跟喜好,甚至你也不知道他的功力。但是,在阅读之后,你会慢慢地从一个程序人所写下的程序码,开始认识他。 

你或许会在阅读他人的程序码时,发现令人拍案叫绝的技巧或设计。你也有可能在阅读的同时,发现原作者所留下的缺失或写作时的缺点,而暗自警惕于心。这也算是阅读他人程序码时的一项乐趣。 

当你从视阅读他人的程序码为畏途,转变成为可以从中获取乐趣的时候,我想,你又进到了另一个境界。

 
这一系列的文章至此已近尾声,回顾曾探讨的主题,我们首先研究了阅读程序码的动机。尤其在开放原始码的风气如此之盛的情况下,妥善利用开放原始码所提供的资源,不仅能够更快学习到新的技术,同时在原始码版权合适时,还可以直接利用现成的程序码,大幅地提高开发阶段的生产力。所以,阅读程序码俨然成为了新时代程序人必备的重要技能之一。 
接着,我们提到了阅读程序码前的必要准备,包括了对程序语言,命名惯例的了解等等。在此之后,我们反复提起了由上而下的阅读方向的重要性。 
由上而下的阅读方式,是因为我们重视架构更胜于细节。从最外层的架构逐一向内探索,每往内探索一层,我们了解系统的粒度就增加了一个等级。当你识别出系统所用的架构时,便能够轻易了解在这个架构下会有的角色,以及它们之间的动态及静态的关系。如此一来,许多资讯便不言可喻,毋需额外花费力气,便能够快速理解。 

好的名称能够摘要性地点出实体的作用 


追踪原始码时,固然可以用本来的方式,利用编辑器开启所需的档案,然后利用编辑器提供的机制阅读,但是倘若能够善用工具,阅读程序码的效率及品质都能大大提升。在本系列文章中,我们介绍了一些工具,或许你还可以在坊间找到其他更有用的工具。 
我在这一系列的文章中,实际带着大家阅读,追踪了一个名为ml_pod的开放原始码专案。它是一个AOLWinampiPod的外挂程序。在追踪的过程中,我们试着印证这一系列文中所提到的观念及方法。我们采用逐渐开展的树状结构来记录追踪的过程,并借以建立起对系统的概观认识。 

就原始码的阅读来说,之前的讨论涉及了工具面及技巧面。但还有一些主题不在这两个范畴之内,例如,善用名称赋予你的提示。名称做为隐喻(隐喻)的作用很大,好的名称能够摘要性地点出实体的作用,例如我们看到autoDetectIpod ,自然而然能够想象它的作用在于自动(自动)侦测(检测)的iPod的存在。 

我们在展开树状结构时,有时候需要预看一层,有时却不需要这么做,便可得到印证。程序人都会有惯用的名称以及组合名称的方法,倘若能够从名称上理解,便毋需钻进细节,可以省去相当多的时间。例如,当我们看到parseIpodDb )时,便可以轻易了解它是剖析(解析)的iPod的资料库( DB )的,因此便不需要立即钻进parseIpodDb )中查看底细。 

尽管如此,能否理解程序人命名的用意,和自身的经验以及是否了解原作者的文化背景,是息息相关的。 

命名本身就是一种文化产物。不同的程序人文化,就会衍生出不同的命名文化。当你自己的经验丰富,看过及接触过的程序码也多时,对于名称的感受及联想的能力自然会有不同。 

这种感受和联想的能力,究竟应该如何精进,很难具体描述。就我个人的经验,多观察不同命名体系的差异,并且尝试归纳彼此之间的异同,有助于更快地提升对名称的感受及联想力。 

转换立场,理解作者的思考方式

 
除了工具及技巧之外,想要阅读程序码,得先试着阅读写这个程序码的程序人的心。这句话说来十分抽象,或许也令人难以理解。 

当你在阅读一段程序码时,或许可以试着转换自己的立场,从旁观者的角度转换成为写作者的心态,揣摩原作者的心理及处境。当你试着设身处地站在他的立场,透过他的思考方式来阅读,追踪他所写下的程序码,将会感觉更加流畅。 

许多软体专案,都不是由单一程序人所独力完成。因此,在这样的专案中,便有可能呈现多种不同的风格。 

许多专案会由架构师决定主体的架构及运作,有既定实施的命名惯例,及程序设计需要遵守方针。在多人开发的模式下,越是好的软体专案,越看不出某程序码片段究竟是由谁所写下的。 

不过,有些开放原始码的专案,往往又整合了其他开放原始码的专案。有的时候,也很难求风格的统一,便会出现混杂的情况。好比之前提到的ml_pod专案,因为程序码中混合了不同的来源,而呈现风格不一致的情况。 

我在阅读非自己所写的程序码时,会观察原作者写作的习惯,借以对应到脑中所记忆的多种写作模型。在阅读的过程中,读完几行程序码,我会试着猜想原作者在写下这段程序码时的心境。他写下这段程序码的用意是什么?为什么他会采取这样的写法?顺着原作者的思考理路阅读,自己的思考才能更贴近对方写作当时的想法。 

当你短暂化身为原作者时,才能更轻易的理解他所写下的程序码。 
如果你能知道原作者的背景,程序设计时的偏好,阅读他的程序码,就更能得心应手了。 

从程序码着手认识作者独有的风格,进而见贤思齐 


我在阅读别人写下的程序码时,我会试着猜想,原作者究竟是属于那一种流派呢?每个人都有自己独特的写作模式,即便每个人的写作模式多半受到他人的影响 不论是书籍的作者,学习过程中的指导者,或一同参与专案的同侪,但每个程序人通常会融合多种风格,而成为自己独有的风格。 

对象导向的基本教义派,总是会以他心中觉得最优雅的对象导向方式来撰写程序。而阅读惯用,善用设计模式的程序人所写下的程序码时,不难推想出他会在各种常见的应用情境下,套用哪些模式。 

有些时候,在阅读之初,你并不知道原作者的习性跟喜好,甚至你也不知道他的功力。但是,在阅读之后,你会慢慢地从一个程序人所写下的程序码,开始认识他。 

你或许会在阅读他人的程序码时,发现令人拍案叫绝的技巧或设计。你也有可能在阅读的同时,发现原作者所留下的缺失或写作时的缺点,而暗自警惕于心。这也算是阅读他人程序码时的一项乐趣。 

当你从视阅读他人的程序码为畏途,转变成为可以从中获取乐趣的时候,我想,你又进到了另一个境界。


我在阅读别人写下的程序码时,我会试着猜想,原作者究竟是属于那一种流派呢?每个人都有自己独特的写作模式,即便每个人的写作模式多半受到他人的影响 不论是书籍的作者,学习过程中的指导者,或一同参与专案的同侪,但每个程序人通常会融合多种风格,而成为自己独有的风格。 

对象导向的基本教义派,总是会以他心中觉得最优雅的对象导向方式来撰写程序。而阅读惯用,善用设计模式的程序人所写下的程序码时,不难推想出他会在各种常见的应用情境下,套用哪些模式。 

有些时候,在阅读之初,你并不知道原作者的习性跟喜好,甚至你也不知道他的功力。但是,在阅读之后,你会慢慢地从一个程序人所写下的程序码,开始认识他。 

你或许会在阅读他人的程序码时,发现令人拍案叫绝的技巧或设计。你也有可能在阅读的同时,发现原作者所留下的缺失或写作时的缺点,而暗自警惕于心。这也算是阅读他人程序码时的一项乐趣。 

当你从视阅读他人的程序码为畏途,转变成为可以从中获取乐趣的时候,我想,你又进到了另一个境界。

 
除了工具及技巧之外,想要阅读程序码,得先试着阅读写这个程序码的程序人的心。这句话说来十分抽象,或许也令人难以理解。 

当你在阅读一段程序码时,或许可以试着转换自己的立场,从旁观者的角度转换成为写作者的心态,揣摩原作者的心理及处境。当你试着设身处地站在他的立场,透过他的思考方式来阅读,追踪他所写下的程序码,将会感觉更加流畅。 

许多软体专案,都不是由单一程序人所独力完成。因此,在这样的专案中,便有可能呈现多种不同的风格。 

许多专案会由架构师决定主体的架构及运作,有既定实施的命名惯例,及程序设计需要遵守方针。在多人开发的模式下,越是好的软体专案,越看不出某程序码片段究竟是由谁所写下的。 

不过,有些开放原始码的专案,往往又整合了其他开放原始码的专案。有的时候,也很难求风格的统一,便会出现混杂的情况。好比之前提到的ml_pod专案,因为程序码中混合了不同的来源,而呈现风格不一致的情况。 

我在阅读非自己所写的程序码时,会观察原作者写作的习惯,借以对应到脑中所记忆的多种写作模型。在阅读的过程中,读完几行程序码,我会试着猜想原作者在写下这段程序码时的心境。他写下这段程序码的用意是什么?为什么他会采取这样的写法?顺着原作者的思考理路阅读,自己的思考才能更贴近对方写作当时的想法。 

当你短暂化身为原作者时,才能更轻易的理解他所写下的程序码。 
如果你能知道原作者的背景,程序设计时的偏好,阅读他的程序码,就更能得心应手了。 

从程序码着手认识作者独有的风格,进而见贤思齐 


我在阅读别人写下的程序码时,我会试着猜想,原作者究竟是属于那一种流派呢?每个人都有自己独特的写作模式,即便每个人的写作模式多半受到他人的影响 不论是书籍的作者,学习过程中的指导者,或一同参与专案的同侪,但每个程序人通常会融合多种风格,而成为自己独有的风格。 

对象导向的基本教义派,总是会以他心中觉得最优雅的对象导向方式来撰写程序。而阅读惯用,善用设计模式的程序人所写下的程序码时,不难推想出他会在各种常见的应用情境下,套用哪些模式。 

有些时候,在阅读之初,你并不知道原作者的习性跟喜好,甚至你也不知道他的功力。但是,在阅读之后,你会慢慢地从一个程序人所写下的程序码,开始认识他。 

你或许会在阅读他人的程序码时,发现令人拍案叫绝的技巧或设计。你也有可能在阅读的同时,发现原作者所留下的缺失或写作时的缺点,而暗自警惕于心。这也算是阅读他人程序码时的一项乐趣。 

当你从视阅读他人的程序码为畏途,转变成为可以从中获取乐趣的时候,我想,你又进到了另一个境界。


我在阅读别人写下的程序码时,我会试着猜想,原作者究竟是属于那一种流派呢?每个人都有自己独特的写作模式,即便每个人的写作模式多半受到他人的影响 不论是书籍的作者,学习过程中的指导者,或一同参与专案的同侪,但每个程序人通常会融合多种风格,而成为自己独有的风格。 

对象导向的基本教义派,总是会以他心中觉得最优雅的对象导向方式来撰写程序。而阅读惯用,善用设计模式的程序人所写下的程序码时,不难推想出他会在各种常见的应用情境下,套用哪些模式。 

有些时候,在阅读之初,你并不知道原作者的习性跟喜好,甚至你也不知道他的功力。但是,在阅读之后,你会慢慢地从一个程序人所写下的程序码,开始认识他。 

你或许会在阅读他人的程序码时,发现令人拍案叫绝的技巧或设计。你也有可能在阅读的同时,发现原作者所留下的缺失或写作时的缺点,而暗自警惕于心。这也算是阅读他人程序码时的一项乐趣。 

当你从视阅读他人的程序码为畏途,转变成为可以从中获取乐趣的时候,我想,你又进到了另一个境界。


追踪原始码时,固然可以用本来的方式,利用编辑器开启所需的档案,然后利用编辑器提供的机制阅读,但是倘若能够善用工具,阅读程序码的效率及品质都能大大提升。在本系列文章中,我们介绍了一些工具,或许你还可以在坊间找到其他更有用的工具。 
我在这一系列的文章中,实际带着大家阅读,追踪了一个名为ml_pod的开放原始码专案。它是一个AOLWinampiPod的外挂程序。在追踪的过程中,我们试着印证这一系列文中所提到的观念及方法。我们采用逐渐开展的树状结构来记录追踪的过程,并借以建立起对系统的概观认识。 

就原始码的阅读来说,之前的讨论涉及了工具面及技巧面。但还有一些主题不在这两个范畴之内,例如,善用名称赋予你的提示。名称做为隐喻(隐喻)的作用很大,好的名称能够摘要性地点出实体的作用,例如我们看到autoDetectIpod ,自然而然能够想象它的作用在于自动(自动)侦测(检测)的iPod的存在。 

我们在展开树状结构时,有时候需要预看一层,有时却不需要这么做,便可得到印证。程序人都会有惯用的名称以及组合名称的方法,倘若能够从名称上理解,便毋需钻进细节,可以省去相当多的时间。例如,当我们看到parseIpodDb )时,便可以轻易了解它是剖析(解析)的iPod的资料库( DB )的,因此便不需要立即钻进parseIpodDb )中查看底细。 

尽管如此,能否理解程序人命名的用意,和自身的经验以及是否了解原作者的文化背景,是息息相关的。 

命名本身就是一种文化产物。不同的程序人文化,就会衍生出不同的命名文化。当你自己的经验丰富,看过及接触过的程序码也多时,对于名称的感受及联想的能力自然会有不同。 

这种感受和联想的能力,究竟应该如何精进,很难具体描述。就我个人的经验,多观察不同命名体系的差异,并且尝试归纳彼此之间的异同,有助于更快地提升对名称的感受及联想力。 

转换立场,理解作者的思考方式

 
除了工具及技巧之外,想要阅读程序码,得先试着阅读写这个程序码的程序人的心。这句话说来十分抽象,或许也令人难以理解。 

当你在阅读一段程序码时,或许可以试着转换自己的立场,从旁观者的角度转换成为写作者的心态,揣摩原作者的心理及处境。当你试着设身处地站在他的立场,透过他的思考方式来阅读,追踪他所写下的程序码,将会感觉更加流畅。 

许多软体专案,都不是由单一程序人所独力完成。因此,在这样的专案中,便有可能呈现多种不同的风格。 

许多专案会由架构师决定主体的架构及运作,有既定实施的命名惯例,及程序设计需要遵守方针。在多人开发的模式下,越是好的软体专案,越看不出某程序码片段究竟是由谁所写下的。 

不过,有些开放原始码的专案,往往又整合了其他开放原始码的专案。有的时候,也很难求风格的统一,便会出现混杂的情况。好比之前提到的ml_pod专案,因为程序码中混合了不同的来源,而呈现风格不一致的情况。 

我在阅读非自己所写的程序码时,会观察原作者写作的习惯,借以对应到脑中所记忆的多种写作模型。在阅读的过程中,读完几行程序码,我会试着猜想原作者在写下这段程序码时的心境。他写下这段程序码的用意是什么?为什么他会采取这样的写法?顺着原作者的思考理路阅读,自己的思考才能更贴近对方写作当时的想法。 

当你短暂化身为原作者时,才能更轻易的理解他所写下的程序码。 
如果你能知道原作者的背景,程序设计时的偏好,阅读他的程序码,就更能得心应手了。 

从程序码着手认识作者独有的风格,进而见贤思齐 


我在阅读别人写下的程序码时,我会试着猜想,原作者究竟是属于那一种流派呢?每个人都有自己独特的写作模式,即便每个人的写作模式多半受到他人的影响 不论是书籍的作者,学习过程中的指导者,或一同参与专案的同侪,但每个程序人通常会融合多种风格,而成为自己独有的风格。 

对象导向的基本教义派,总是会以他心中觉得最优雅的对象导向方式来撰写程序。而阅读惯用,善用设计模式的程序人所写下的程序码时,不难推想出他会在各种常见的应用情境下,套用哪些模式。 

有些时候,在阅读之初,你并不知道原作者的习性跟喜好,甚至你也不知道他的功力。但是,在阅读之后,你会慢慢地从一个程序人所写下的程序码,开始认识他。 

你或许会在阅读他人的程序码时,发现令人拍案叫绝的技巧或设计。你也有可能在阅读的同时,发现原作者所留下的缺失或写作时的缺点,而暗自警惕于心。这也算是阅读他人程序码时的一项乐趣。 

当你从视阅读他人的程序码为畏途,转变成为可以从中获取乐趣的时候,我想,你又进到了另一个境界。


我在阅读别人写下的程序码时,我会试着猜想,原作者究竟是属于那一种流派呢?每个人都有自己独特的写作模式,即便每个人的写作模式多半受到他人的影响 不论是书籍的作者,学习过程中的指导者,或一同参与专案的同侪,但每个程序人通常会融合多种风格,而成为自己独有的风格。 

对象导向的基本教义派,总是会以他心中觉得最优雅的对象导向方式来撰写程序。而阅读惯用,善用设计模式的程序人所写下的程序码时,不难推想出他会在各种常见的应用情境下,套用哪些模式。 

有些时候,在阅读之初,你并不知道原作者的习性跟喜好,甚至你也不知道他的功力。但是,在阅读之后,你会慢慢地从一个程序人所写下的程序码,开始认识他。 

你或许会在阅读他人的程序码时,发现令人拍案叫绝的技巧或设计。你也有可能在阅读的同时,发现原作者所留下的缺失或写作时的缺点,而暗自警惕于心。这也算是阅读他人程序码时的一项乐趣。 

当你从视阅读他人的程序码为畏途,转变成为可以从中获取乐趣的时候,我想,你又进到了另一个境界。

 
除了工具及技巧之外,想要阅读程序码,得先试着阅读写这个程序码的程序人的心。这句话说来十分抽象,或许也令人难以理解。 

当你在阅读一段程序码时,或许可以试着转换自己的立场,从旁观者的角度转换成为写作者的心态,揣摩原作者的心理及处境。当你试着设身处地站在他的立场,透过他的思考方式来阅读,追踪他所写下的程序码,将会感觉更加流畅。 

许多软体专案,都不是由单一程序人所独力完成。因此,在这样的专案中,便有可能呈现多种不同的风格。 

许多专案会由架构师决定主体的架构及运作,有既定实施的命名惯例,及程序设计需要遵守方针。在多人开发的模式下,越是好的软体专案,越看不出某程序码片段究竟是由谁所写下的。 

不过,有些开放原始码的专案,往往又整合了其他开放原始码的专案。有的时候,也很难求风格的统一,便会出现混杂的情况。好比之前提到的ml_pod专案,因为程序码中混合了不同的来源,而呈现风格不一致的情况。 

我在阅读非自己所写的程序码时,会观察原作者写作的习惯,借以对应到脑中所记忆的多种写作模型。在阅读的过程中,读完几行程序码,我会试着猜想原作者在写下这段程序码时的心境。他写下这段程序码的用意是什么?为什么他会采取这样的写法?顺着原作者的思考理路阅读,自己的思考才能更贴近对方写作当时的想法。 

当你短暂化身为原作者时,才能更轻易的理解他所写下的程序码。 
如果你能知道原作者的背景,程序设计时的偏好,阅读他的程序码,就更能得心应手了。 

从程序码着手认识作者独有的风格,进而见贤思齐 


我在阅读别人写下的程序码时,我会试着猜想,原作者究竟是属于那一种流派呢?每个人都有自己独特的写作模式,即便每个人的写作模式多半受到他人的影响 不论是书籍的作者,学习过程中的指导者,或一同参与专案的同侪,但每个程序人通常会融合多种风格,而成为自己独有的风格。 

对象导向的基本教义派,总是会以他心中觉得最优雅的对象导向方式来撰写程序。而阅读惯用,善用设计模式的程序人所写下的程序码时,不难推想出他会在各种常见的应用情境下,套用哪些模式。 

有些时候,在阅读之初,你并不知道原作者的习性跟喜好,甚至你也不知道他的功力。但是,在阅读之后,你会慢慢地从一个程序人所写下的程序码,开始认识他。 

你或许会在阅读他人的程序码时,发现令人拍案叫绝的技巧或设计。你也有可能在阅读的同时,发现原作者所留下的缺失或写作时的缺点,而暗自警惕于心。这也算是阅读他人程序码时的一项乐趣。 

当你从视阅读他人的程序码为畏途,转变成为可以从中获取乐趣的时候,我想,你又进到了另一个境界。


我在阅读别人写下的程序码时,我会试着猜想,原作者究竟是属于那一种流派呢?每个人都有自己独特的写作模式,即便每个人的写作模式多半受到他人的影响 不论是书籍的作者,学习过程中的指导者,或一同参与专案的同侪,但每个程序人通常会融合多种风格,而成为自己独有的风格。 

对象导向的基本教义派,总是会以他心中觉得最优雅的对象导向方式来撰写程序。而阅读惯用,善用设计模式的程序人所写下的程序码时,不难推想出他会在各种常见的应用情境下,套用哪些模式。 

有些时候,在阅读之初,你并不知道原作者的习性跟喜好,甚至你也不知道他的功力。但是,在阅读之后,你会慢慢地从一个程序人所写下的程序码,开始认识他。 

你或许会在阅读他人的程序码时,发现令人拍案叫绝的技巧或设计。你也有可能在阅读的同时,发现原作者所留下的缺失或写作时的缺点,而暗自警惕于心。这也算是阅读他人程序码时的一项乐趣。 

当你从视阅读他人的程序码为畏途,转变成为可以从中获取乐趣的时候,我想,你又进到了另一个境界。

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值