菜鸟好文推荐(二十三)——成为一名更好的程序员:如何阅读源代码

阅读源代码有许多益处。你会发现新的架构(construct)和库,与其他的代码维护者产生共鸣,但最重要的是学会如何组织代码,避免因内部极其复杂而变得不可维护。

但是也有一个不好的地方,那就是阅读源代码太困难了。每当我看到一个新的代码库(code base)时,这种让人眩晕的感觉就充斥了我的大脑。我的内心告诉我压根不想趟眼前这趟浑水。

这是(希望是)正常的反应。当我们的大脑接触过多的新东西,就会产生排斥。造物主赋予我们的这台强大的模式匹配机器根本找不到规律。所有的抽象(abstraction)都是之前没见过的,类的名称也毫无印象。程序又到底是从什么地方开始执行的?

对此,我能给出的一般性建议如下:1. 寻找并建立自己能够理解的初步基础,通常就是主要的入口点(main entry point)。2. 从这个基础开始,逐步探索主要功能。3. 记录下自己的见闻。

从头开始

窍门就是给自己一个起点。我是这样做的。我通过-h选项运行程序,并调用help命令。之后我复制其中一条help文档字符串,以此为检索词搜索一遍代码库,找到这个帮助文档所在地方。通常情况下,调用help命令之后你会发现离程序的主入口点很近了。

辨明轮廓

找到主入口点之后,我会运行几个文档中提供的示例。然后,我会试着追踪主要的代码块,大致了解下每个部分是如何连接起来的。

我会问自己,是否存在一个管理程序,负责调用一堆帮助函数和类?是不是有一些类是平级关系,相互之间轮流交换控制权?是不是有一个程序逐步执行的主任务队列?

了解全局有助于你理清小细节。如果你没有理解程序的主流程就闷头读下去,那你很可能会被细枝末节搞得焦头烂额。

勤做笔记

我习惯直接在代码中做笔记。做笔记的时候,我会使用特殊的注释符(例如,使用#=>,而非常用的#),这样可以将我自己的笔记与原作者注释区分开来。

如果碰到巧妙的技巧、不易理解的流程、编程架构(construct)的漂亮使用方式或者是其他任何你想牢记的内容,务必要做笔记。如果你读不下去了,你也可以做个记录,提醒自己之后要回去再读看不懂的部分。

通过写下你的思绪,你实际上是在把那块代码变成你自己写的。慢慢地,你就会开始在工作中自然地用上新掌握的那些架构(construct)。

融汇贯通

学习编程,是一个反复读代码和写代码的持续过程。只要你愿意接触不同的风格、代码,最终你会形成自己的独特视角和思维。

原文链接:http://www.codeceo.com/article/read-code-be-better-programmer.html

时间: 2024-10-13 22:00:58

菜鸟好文推荐(二十三)——成为一名更好的程序员:如何阅读源代码的相关文章

Java已五年1—二本物理到前端实习生到Java程序员「回忆贴」

关键词:郑州 二本 物理专业 先前端实习生 后Java程序员 更多文章收录在码云仓库:https://gitee.com/bingqilinpeishenme/Java-Tutorials 前言 没有正式复工,就一直在老家待着,已经很长时间没有在三月份时候待在老家了,好久好久,从08年去县城上高中开始,在外多,在家少,一直没有机会好好停下来看看家乡. 坐的时间越长,回忆越多,想的越多,就想要整理一下这些年的经历,尤其是从事Java至今,算是一种回忆,也算是一种复盘. 分享给朋友们一张杨花. 大学

推荐Python程序员进阶阅读的书籍(2015版)

列一下自己过去一年阅读的Python相关书籍,评论是在本人阅读完书籍并完成书中所有测试用例的基础上编写的: <Python Cookbook 3rd>5星 ,绝对值得阅读!直接看英文版吧,中文翻译的如何不太清楚.对于高手就当是复习功课了,总有一些地方记得不是很清楚. <Cython - A Guide for Python Programmers> 5星 by Kurt W. Smith, O'Reilly 2015 如果你想封装一个C的库,或者别人封装的C库在你的平台下不能够使用

程序员经常说的二十多句话,吐槽吧程序员!

我们来看看程序员经常说的话. 1.明明在我的电脑上是运行正常的啊,为何就.... 2.不可能出现这种情况的啊 3.快了,已经完成了90%. 4.这个很简单的,我一个礼拜就能完成了 5.昨天程序运行明明是正常的,但不知道为啥今天就不行了. 6.只是改一行代码,不会对整个程序造成影响的,放心. 7.如果有bug出现,一定不会是我程序的原因,要不考虑一下硬件问题? 8.审查代码时:当时写这个程序的时候只有上帝和我知道我为啥这样写,现在只有上帝知道了. 9.这个功能我会在下个版本修正....到下个版本的

菜鸟学Java(二十三)——Java内存分析

我们常说的Java内存主要分为四大块(寄存器不在考虑之内,我们无法用代码来操控它):stack(栈).heap(堆).data segment(数据区).code segment(代码区).它们的主要用途如下图所示: 而在上面四个当中,我们经常谈论的是右边那两个家伙--stack和heap.今天我们就来聊聊Java代码在运行的过程中,在stack和heap中到底是什么样子的吧. 我们先看下面一段代码: public static void main(String[] args) { TestRe

国外一 名 40 岁 ” 老 “ 程序员 的 反思 | 转文

  本文是国外一位 40 岁“老”程序员对职业生涯的思考,他认为从长远来看,应该多投资一些不容易过期.衰竭期较长的知识领域中.译文大意如下:   我是一名程序员,几个月前刚过完四十岁生日.   某个星期六的早晨,我参加了一个 React Native 技术交流会,演讲者正在竭力说服我们为什么它会成为移动开发领域真正的下一个大事件.但对我来说,它有点像十五年前的 jsp ,将所有的逻辑都放在演示代码里面.但我“老”了,我认为这是因为自己还没有完全理解它.   演讲者展示完 ppt 后,现场进行编码

给程序员推荐一些提高工作效率的工具

转载: IT江湖 2014年12月03日 于 IT江湖 发表 http://www.itjhwd.com/gcxytjyg-3/ 前几天给大家推荐了一些好用的软件,但是还有很多不错的软件,大家也都反馈了不少,下面我将继续为大家推荐一些高效率的软件,也欢迎大家补充.再次 声明,这些软件我都亲身用过,不喜欢的,或者觉得这些软件菜鸟才用的,那请你把鼠标移到右上角(windows)OR左上角(Mac)点击关闭,谢谢 给程序员推荐一些提高工作效率的工具(一) 给程序员推荐一些提高工作效率的工具(二) Be

JAVA程序员必看的15本书-JAVA自学书籍推荐

作为Java程序员来说,最痛苦的事情莫过于可以选择的范围太广,可以读的书太多,往往容易无所适从.我想就我自己读过的技术书籍中挑选出来一些,按照学习的先后顺序,推荐给大家,特别是那些想不断提高自己技术水平的Java程序员们.此外,大家可以加入457036818交流群,互相分享一下关于JAVA方面的知识.一.Java编程入门类 对于没有Java编程经验的程序员要入门,随便读什么入门书籍都一样,这个阶段需要你快速的掌握Java基础语法和基本用法,宗旨就是"囫囵吞枣不求甚解",先对Java熟悉

菜鸟程序员怎么才能提高自己的技术--(献给自己共勉)

菜鸟程序员,这里很明确,主体是两种人,一是初学者,二是刚刚走上工作岗位的程序员.那我就来讲讲吧,不一定适合所有人,也就是我的隔热经验罢了. 夯实基础 首先,就我个人经历而言,我认为初学者应该特别注意这个点,要注重基础,夯实语言,应该不能急于求成,欲速则不达,好像和快速提高自己的技术这个题目有点冲突.要想真正的快速提高,必须要以慢打快,才能更快.因为对于初学者而言,基础知识,编程语言必须要夯实,只有真正懂了基础,才能举一反三. 我的总结是:再快不能快基础,再烂不能烂语言. 记笔记,写博客 其次,学

告别手写接口文档时代,比Swagger功能更强大的LKADocument接口文档管理框架诞生了!

更详细的更全面的教程请观看作者亲自录制的视频教程,地址: https://edu.51cto.com/sd/9cb7fLKADocument视频教程 一.介绍 在前后端分离,分工更加明细化的今天,为了减少前端和后台开发人员的沟通成本,能够让他们做到并行开发,同时也能保证前端和后端开发人员所看到的接口文档的一致性,即时性,以此来大大提高工作效率.所以出现了一些非常优秀的接口管理工具,具有代表性的像Swagger,因为它能够通过注解或yml和JSON描述文件来自动生成接口文档.但是我觉得它不管是在配