杰洛德·桑托 (Jerod Santo) 写于 2016年12月19日

编者按:我原先曾在2010年5月,为“编程加油站”网( Fuel Your Coding )写过这个话题。很不幸,那家网站现已关闭了,所以我重新在本网站发表这篇文章,以飨后来的读者。我原本打算更新些许应时的内容,而今想想保持原样也就足够了。没更新的那些部分也许看上去有些可笑,不过,呵呵,希望您乐在其中!


众所周知,提高编程水平最显著的方法是多写代码。不过,我敢向你保证,提高编程水平的另一种举措,同多写代码完全相反。我将尽我所能,简明扼要地阐述这个问题。

如果你想不断提高编程技巧,你需要阅读他人的代码。不管你信不信,假如你愿意一试,我相信你会收获颇丰。

在本文,我将帮你挑选应该阅读哪些代码,也会给你些如何阅读的实战建议。如果你已经是一位代码阅读者,你通过努力,能找到很多方法让自己获益良多。如果你还不是一位代码阅读者,你绝对必须往下看。

阅读什么

这是个难以给出建议的大议题。我不会简单地指出你该阅读哪些代码,因为很难判断你是归属哪种类型的程序员。但是,我会提供些指南,以便帮你挑选应该阅读哪些代码。

1. 阅读你所依赖的代码

一个主要的着手点是你已经使用的插件程序和库文件。

  • 你喜欢的一个处理 WordPress 插件。

  • 你找到的一款有用的 Ruby gem 。

  • 你打算复用的一段 jQuery 插件。

所有这些都是用来学习的好素材。因为你已经很熟悉这些程序的公开 API 接口,所以你对其内部运行机制理解起来也会比较容易。另外,作为代码使用者,你还可以添个技术文档,实现一些功能,或者进行某些反向工程。

2. 阅读给你印象深刻的代码

记得第一次见到 280 幻灯 ( 280 Slides )网站时,我就暗自思量,“真是令人印象深刻啊。”  我很快意识到,驱动该网站的代码来自于开源项目卡布基诺( Cappucino )。我将这些知识深深地印入脑海。终于,当我偶遇另一个基于卡布基诺运行的应用并为止打动时,我知道我有个可以从中学到很多东西的项目了。最近让你印象深刻的是什么?它是开源的吗?如果答案是肯定的,那就去读吧,因为代码会和应用程序一样给你深刻印象。

3. 阅读你所膜拜的牛人写的代码

如果你已经从事开源软件开发有些时日了,大概会有数个程序员能博得你的敬佩。我认为在我之上有几个高水平的开发者,他们写的代码太令人羡慕了。假如你脑海中尚无某个值得推崇的开发者,现找一位也不是难事。他 / 她可能拥有符合先前两种情况之一的代码(你所依赖的,或者给你印象深刻的)。

4. 阅读那些你真正心领神会的代码

如果你是那种闯劲十足的程序员,你可能会考虑深入诸如 Ruby on Rails 、rupal 或者 jQuery  这类大项目。在你成为一名有经验的代码阅读者之前,我建议你避免参加这样的项目。

大型项目有很多变动的构件,你最终可能纠缠于弄清概念而不是直接价值本身。迷茫会挫伤你的积极性,而你通常会在阅读大型项目代码时感到迷茫和泄气。挑选小型项目的好处在于,你可以立刻在脑海里抓住整个程序的逻辑。如此这般便于你集中思想探究细节,并从中学到东西。

如何阅读

现在你已经挑选了一些代码准备阅读,那么阅读的最佳途径有哪些呢?我已经阅读过大量代码,所以我会提供若干最大化投资回报率的建议。

1. 众览全局

我假设你至少在宏观层面非常了解你已阅读过的代码。如果不是这样,我建议你在阅读代码之前,先通览项目网站,熟读教程、文档以及所有他人提供的资料。好,搞清楚上述问题后,我建议第一步,让项目结构充斥你整个大脑。其工作量的多寡取决于你挑选的基础代码量,不过,挑选一个以上的文件,必会多耗费你些时间。首先,注解文件结构。这步需要使用具有文件夹层次结构视图的编辑器,比如 TextMate 。这里举个例子,推特 Ruby gem 程序概览。本步骤的目标就是熟悉源代码。找出哪个文件 include/require/load 其他文件,大量的代码在哪里,用到的命名空间是什么,诸如此类。一旦你有了整张蓝图,即可转到挖掘细节的工作中去。

2. 记录你的发现

阅读代码不应该是一项被动的工作。随着你开始理解程序流程,我鼓励你边阅读边添加注释,记录下你的设想和总结。你最初的注释看上去可能如下所示:

1

2

3

4

5

# 我认为本函数在初始化后调用

# 该表达式用来做什么的?

# 第17行后,该变量作用域肯定失效了

随着你对代码的深入理解,你可以删除那些给自己看的琐碎浅显的评论,进而换做有意义的、权威性的评论,兴许可以回馈到项目中去。

3. 使用测试

希望你选择的项目拥有测试套件。如果没有,你可以略过本节(或者你另找个带测试套件的项目)。

当你阅读他人代码时,进行各种测试是个不错的起始点。因为这些测试记录了代码会完成哪些程序构想。有些测试比其他测试包含更多信息。但不管代码写得如何棒,你会常常发觉,从测试中了解程序员的意图,比从实现中了解容易得多。阅读代码时,你要尽力成功运行测试套件。这能保证你的开发环境配置正确,从而让你在做某些变更时更有信心。

4. 执行,变更,执行

谁说阅读代码时禁止动手的?你只有能够将整个代码化整为零,而后还能拼装回去,你才算真正开始熟悉这堆代码。还记得你通过的那些测试吗?让程序出错,添加点东西,或者改变实现而不破坏原程序。试着加个你认为很酷的小功能,或者设置整个项目的日志,以便在代码运行的不同阶段得到打印输出。这还仅仅是阅读吗?就这点来说,你绝对选择了远超悬疑小说的冒险历程。多美妙的事情啊!

待你阅读完成一个代码库,再挑个新的,重复上述过程。你阅读得越多,你理解得越透彻,进而你能花更少时间收获更多成果。你会发现,这样做的投资回报率增长相当迅速,这确实是一条快乐无比的学习之路。

从哪里起步

我倚重的代码阅读来源是 GitHub 。在该网站里,你很容易找到新的项目和编程大牛,如果你不好好利用它,吃大亏的定是你自己。我建议一开始在 GitHub 上在线阅读代码,直到你发现一个你认为能学到东西的项目。把你找到的小宝贝克隆到你本地再行阅读。

怎么样哥们?你是否将阅读代码作为一件学习工具?你会向别人推荐哪些项目?最近读过什么好的代码吗?


LinuxStory 小编温馨提示:更多信息请访问原文链接。

原文链接:https://changelog.com/posts/one-sure-fire-way-to-improve-your-coding

本文链接:https://linuxstory.org/one-sure-fire-way-to-improve-your-coding

form: http://mp.weixin.qq.com/s?__biz=MzA5MDA3ODI2Nw==&mid=2649954473&idx=1&sn=da0b7f66d24e62388faa27cf750d3f95&chksm=881695fdbf611ceb66c6b2ff7ddda5dff7826def470b9b79772f34607ac15ff8bcf0f1602019&mpshare=1&scene=23&srcid=0228Fy69zFJ1D2oKHIGm1Uaa%23rd

提升编程水平的靠谱方法相关推荐

  1. 程序员一般都浏览这些网站,不仅仅提升编程水平!

    程序员作为一个经常和互联网打交道的人群,他们喜欢浏览那些网站呢?不爱敲代码的程序猿整理了以下网站供大家参考,排名不分先后: 0. Google https://google.com 这个不用多说了吧. ...

  2. 简单的一道 SQL 题,谈如何提高编程水平

    点击蓝色"有关SQL"关注我哟 加个"星标",天天与12238人一起快乐成长 前两天发了一篇<SQL的3列4种对比方法>,近500 阅读.一个月没更 ...

  3. 解决不了bug先放着,这里有40条提升编程技能小妙招

    选自Medium 作者:Kesk 机器之心编译 参与:魔王 这 40 个小贴士,或许可以帮你提升编程技能. 如何提高编程技能?恐怕很多开发者思考过这个问题.最近,拥有将近 15 年开发经验的软件工程师 ...

  4. 听说玩这些游戏能提升编程能力?

    游戏 == 编程 >>> True 电子游戏和编程充满联系.从雅达利兴盛的年代开始,游戏就已经开始影响一代又一代程序员.他们开发游戏,在游戏过程中获得快乐.随着机器学习的兴起,程序员 ...

  5. 从一个实例看编程水平的步步提高

    很久很久前就想写这个话题的文章了,但是,总是找不到合适的例子.例子简单不足于说明问题,例子复杂可读性就会降低,就会达不到文章的目的.两难总让人激发解决问题的斗志,于是乎自己试着写写这个例子吧.这个例子 ...

  6. 你做过的最有效的提高你的编程水平的一件事情是什么

    最近在 stackexchange 网站上看到了一个非常好的问答,有人问:你做过的最有效的提高你的编程水平的一件事情是什么? 回首作为一个程序员这些年来的生活和职业道路,我使用了很多种不同的方法来提高 ...

  7. 心态和想法,是提高编程水平的关键

    你是否有时候会觉得自己的技术水平停滞不前,想突破但又找不到门路?最近在stackexchange上看到了一个非常好的问答.有人问:你做过的最有效的提高你的编程水平的一件事情是什么? 回首作为一个程序员 ...

  8. 提高python代码能力_解决不了bug先放着,这里有40条提升编程技能小妙招

    点击上方 "Python人工智能技术" 关注,星标或者置顶 22点24分准时推送,第一时间送达 来自:公众号 机器之心 | 编辑:真经君 Python人工智能技术(ID:coder ...

  9. VS Code竟然能约会,找对象不看脸,看编程水平

    晓查 发自 凹非寺  量子位 报道 | 公众号 QbitAI VS Code现在居然可以用来谈恋爱了. 为了用最硬核的方式找到男(女)朋友,23岁的程序员Ben Awad在VS Code里打造一个约会 ...

最新文章

  1. Hadoop Pig学习笔记 各种SQL在PIG中实现
  2. 一个关于Remoting的简单例子
  3. Elastic全球用户大会Elastic{ON}首次落地北京
  4. Oracle 怎么开启,关闭归档
  5. vi下的查找替换命令
  6. kafka 并发数配置过程中踩到的坑 InstanceAlreadyExistsException Error registering AppInfo mbean
  7. Quantum Machine Learning——QML学习记录00
  8. matlab已知热敏电阻数据,Matlab在热敏电阻特性测量实验中的应用
  9. js跨域问题 ajax跨域问题?
  10. 服务器光纤存储系统,光纤存储服务器 配置
  11. 串口通信校验方式(even,odd,space,mark)UART数据波形分析
  12. CMU 15213:attack实验
  13. 《Android Studio从入门到精通》读后感,电子书PDF百度网盘下载
  14. fgetc函数踩过的坑
  15. DebugView无法显示调试信息问题
  16. 递归、迭代、分治、回溯、动态规划、贪心算法
  17. vuejs 配置路由
  18. lua string
  19. 数据库之MySQL大全
  20. PrimeTime PX(Power Analysis) userguide阅读笔记

热门文章

  1. NMAP - A Stealth Port Scanner--reference
  2. 金融风控实战——特征工程上
  3. 【SQL】数据库的SQL查询,涉及多个数据库
  4. lightgbm简易评分卡制作
  5. 笨办法学python47详解_练习 47 - 自动化测试 - 笨办法学Python3
  6. 算法与数据结构(希尔排序)
  7. MySQL - 高效的设计MySQL库表
  8. linux shell mysql备份_linux shell 备份mysql 数据库
  9. 项目实战-本地自动化部署
  10. 【新星计划】MATLAB绘制图形