提高编程能力的靠谱方法

简介: 正如每个人都知道的那样,写更多的代码是提高编程能力最显著方法。但是我所确信的另外一种可以提高编程能力的方法是与写代码完全相反的。让我们一起来分享这个方法。

【编者按】起初我是在20105月为Fuel Your Coding网站写的这篇文章。然后这个网站现在已经不存在了,为了让爱好编程的人们能够继续受益,所以在这里重新发表这篇文章。我考虑过是否要按照现如今的情况来对这篇文章进行修改,但是我认为它已经足够经得住检验了。只有少许的部分可能不尽人意。尽情的欣赏这篇文章吧。


正如每个人都知道的那样,写更多的代码是提高编程能力最显著方法。但是我所确信的另外一种可以提高编程能力的方法是与写代码完全相反的。我将要尽可能清楚的陈述这种方法。


只有大量的阅读别人的代码才能显著的提高你自己的编程能力。


不论你是否相信,但是我觉得你可以试一下,你会觉得自己所花的时间是完全值得的。


在这篇文章里我将会教你如何选择阅读的内容以及教会你如何阅读。如果你已经知道如何阅读代码,或许你已经发现通过你的努力可以获取更多。如果你还不知道如何很好的阅读代码,那么请一定继续往下看。


读什么

 

我们很难决定阅读什么样的代码,也很难给别人建议。我不会简单的给你指出你应该读什么样的代码,因为它最终还是取决于你喜欢读什么。我会给你提供一些参考,使得你能够有所侧重的去选择阅读什么代码。


阅读你信赖的代码

 

你已经在使用的插件或者库会是很好的选择。

 

一个你十分喜欢的WordPress plugin

一个你已经发现很有用处的Ruby gem

一个你会经常回顾的jQuery plugin

 

这些都是极其不错的可以作为候选的地方。如果你已经对其公开的APIs十分的熟悉,那么理解其内在的工作原理已经不再是一件困难的事情。另外,作为一个代码的使用者,你有机会为其添加文件,实现一个新的功能,或者对原来的项目提出修改的建议。


阅读那些能够让你眼前一亮的代码

 

我还记得第一次看 280 Slides 的时候就心想这些代码让我眼前一亮。随后我迅速发现这个网站的源代码是Cappuccino的开源项目。当这一信息在我的大脑深处徘徊的时候我猛然想起另外一个让我印象深刻的软件是运行在Cappuccino上的,这时候我知道了有一个我可以学习到很多东西的项目了。有什么是让你最近印象深刻的?它是一个开源项目吗?如果是的话,那么它将会是一个值得你去读的代码,因为这些代码会像最终的应用一样吸引你。


读那些你认为是大牛所写的代码


如果你已经用开源项目的软件编程了一段时间,

bc1828bfd3abd7e7c9b6fe199360faf9c86a46e7

那么肯定有发现其他能够让你印象深刻的程序员。

我的脑海中有那么几个能够写出让我十分羡慕的代码的程序员。


如果你的印象里还没有这样的开发者,只要你愿意的话是很容易找到一个的。他/她或许在过去已经写了属于以下2个类型中的代码。(一种是你所依赖的,另一种是令你印象深刻的)


读那些你可以意会的代码

 

如果你勇于冒险的话,那么有可能会考虑深入研究类似Ruby on Rails, Drupal, 或者 jQuery的大项目。我建议你现在最好不要接触类似的项目,除非你在阅读代码方面已经很有经验了。

 

大的项目有很多可以移动的模块,你可能会纠结于很多概念而无法及时学到很多知识。疑惑会令人泄气,在阅读大的项目的过程中更加容易产生疑惑和泄气的负面情绪。从一个小的项目入手的好处在于整个程序的完整逻辑可以在脑海中浮现。剩下的就是去探索其细节并从中学习。

 

如何阅读代码

 

既然你已经选择了一些要读的代码,那么什么是最好的阅读方式呢?我在过去阅读了许多的代码,因此可以给你推荐一些可以最大化投资回报率的方法。

 

下面请看这张大图

 

4cbb216010937af192e8b5db1ae0f4a9aa02d8c8假设你已经在阅读代码方面达到了一个突出的水平了。如果没有,那么建议你去查看项目的网站、使用说明书、文件或是任何除了代码外帮助你理解的内容。

 

那么,我首先建议的是使自己的脑海里有这个项目清晰的框架。其工作量是基于你所选取的代码库的大小。但是只要是大于一个文件的项目都会消耗一定的时间。

 

首先对文件的结构加以注释。如果一个编者的文件具有像TextMate一样的可视化视图结构将会极大的帮助这一步骤的完成。譬如这里有一个Twitter Ruby gem的完美概要。

 

这一步骤的目标是为了让你更加的熟悉代码。找出那些文件包含/需要/加载其他的文件,以及代码主题的位置,是否用过命名空间,或是其他诸如此类的东西。如果你已经了解了大的架构,那么你就可以深入去关注其细节了。

 



记录下你所发现的东西

 

阅读代码应该是一个主动的行为。我鼓励你根据自己的想法增加一些评论,当你理解程序的流程的时候记录下你的假设以及自己的结论。那么刚开始的时候你的评论可能是这样的:

3205e466f8c1fd4cc4fc3bfa28d00396ec4f65cb

当你的理解不断的进步的时候你会减少那些碎片化的评论并且能够增加一些更加有意义或权威的评论,这些评论或许能够对完善原来的项目有所帮助。

 

使用测试,Luke

 

但愿你选择的项目有测试的套件,如果没有的话你可以完全跳过这一部分(或者重新选择一个有的项目)。

 

测试是一个很好的地方能够让你随时阅读别人的代码因为它们记录了这些代码需要实现的功能。一些测试能够提供很多的信息,但是不论写的有多好,你在测试里可以比在执行里更好的发现作者的意图。在你阅读代码的时候尽量让其测试的套件成功运行。这会让你的开发环境得到合理的配置,也会让你更加自信的去做出一些改变。

 

执行,调整,再执行

 

谁说看代码的时候就不能执行代码?只有将一切东西拆解再将其恢复原样才能真正的理解其本质。还记得那些你所经历的测试吗?在失败后,增加一些代码,或者在不破坏的前提下改变其执行的情况。尝试增加一些你觉得很酷的小属性,或者在项目范围内增加一些记录,这样你就可以在编写代码的不同阶段打印输出。这些还仅仅是阅读代码吗?

 

这是毫无疑问的,但是从这个角度看更像是一段奇妙的经历而不是阅读一篇神秘的小说。这是一件非常好的事情。

 

冲洗和重复

 

一旦你阅读完一个代码库,立即选取另外一个并重复之前的步骤。你只有阅读足够多的代码,才能提高阅读新的代码的效率。你会发现你的投入产出比在不断的上升并且发现这是一个十分有趣的学习过程。

 

从哪里开始

 

在我的代码阅读资源中,GitHub是对我影响最大的。在这个网站里,你能够很快找到新项目以及其作者,如果你不使用这个网站那么对你来说是一个很大的损失。我建议先从GitHub上开始直到你能够找到一个可以学习的项目。记住下面这段话并开始阅读吧。

 

你是怎么看的?你是把阅读代码当成一种学习的手段吗?你会给别人推荐哪些项目?最近是否阅读过很好的代码?


因为The Wayback Machine的缘故你可以阅读到原来的文章


作者介绍:Jerod SantoChangelog Media的主编和合伙人。他联合主编了旗舰博客—The Changelog,他领导了所有使得Changelog变得更加酷炫的项目。他也经营着自己的订制软件公司Object Lateral。


数十款阿里云产品限时折扣中,赶紧点击领劵开始云上实践吧!

本文由北邮@爱可可-爱生活 老师推荐,阿里云云栖社区组织翻译。


文章原标题《One Sure-Fire Way to Improve Your Coding》,作者:Jerod Santo

文章为简译,更为详细的内容,请查看原文


相关文章
|
8月前
|
设计模式 算法 程序员
程序员为何需要反复修改Bug?探寻代码编写中的挑战与现实
作为开发者,我们在日常开发过程中,往往会遇到反复修改bug的情况,而且不能一次性把代码写的完美无瑕,其实开发项目是一项复杂而富有挑战性的任务,即使经验丰富的程序员也难以在一次性编写完美无瑕地完成代码,我个人觉得一次性写好代码是不可能完成的事情。虽然在设计之初已经尽力思考全面,并在实际操作中力求精确,但程序员仍然需要花费大量时间和精力来调试和修复Bug。那么本文就来分享程序员需要反复修改Bug的原因,以及在开发中所面临的复杂性与挑战。
194 1
程序员为何需要反复修改Bug?探寻代码编写中的挑战与现实
|
4月前
|
算法 程序员 测试技术
探索编程之美:从代码中寻找创造力与解决问题的灵感
在这个数字时代,编程不仅仅是计算机科学的核心,更是一种激发创造力和解决复杂问题的强有力工具。本文将分享一些编程中的感悟,展示如何通过编写代码来实现创新,并提供一些实用的技巧和方法来克服编程中的挑战。
57 0
|
2月前
|
算法 编译器 程序员
深入调查研究尾递归优化
【10月更文挑战第21天】
41 1
|
大数据 程序员 API
|
缓存 负载均衡 NoSQL
如何做一个靠谱的发号器
如何做一个靠谱的发号器
214 0
|
程序员 开发者
如何做一个看起来靠谱的人
如何做一个看起来靠谱的人
如何做一个看起来靠谱的人
|
机器学习/深度学习 IDE Java
写出一手烂代码的 19 条准则!
「代码写得好」是对机器学习研究者及开发者最好的赞扬。其第一层意思是说,你的模型非常好,有自己的理解与修正;第二层意思是说代码的结构、命名规则、编写逻辑都非常优秀。
266 0
写出一手烂代码的 19 条准则!
|
机器学习/深度学习 移动开发 算法
如何在黎曼流形上避开鞍点?本文带你了解优化背后的数学知识
在一篇名为《Escaping from saddle points on Riemannian manifolds》的论文中,来自华盛顿大学、加州大学伯克利分校的研究人员深入探索了优化问题的细节,这对理解机器学习底层的数学知识非常重要。本文是对该论文的解读。
240 0
如何在黎曼流形上避开鞍点?本文带你了解优化背后的数学知识
|
编解码 前端开发 rax
攻城狮都应当知道的——编译器的工作过程
源码要运行,必须先转成二进制的机器码。这是编译器的任务。 比如,下面这段源码(假定文件名叫做test.c)。
202 0
攻城狮都应当知道的——编译器的工作过程
|
存储 算法 程序员
手把手:四色猜想、七桥问题…程序员眼里的图论,了解下?(附大量代码和手绘)
长文预警!本文作者Vardan Grigoryan是一名后端程序员,但他认为图论(应用数学的一个分支)的思维应该成为程序员必备。 本文从七桥问题引入,将会讲到图论在Airbnb房屋查询、推特推送更新时间、Netflix和亚马逊影片/商品个性化推荐、Uber寻找最短路线中的应用,附有大量手把手代码和手绘插图,值得收藏。
3438 0