↑ 点击上方蓝字关注我们,和小伙伴一起聊技术!
随着越来越多的公司使用敏捷开发,能够阅读别人的代码比以往显得更重要。这就需要学习一些如何提高这项技能的技巧。本文提供了7种提高代码阅读技巧的方法,以下是译文。
在软件开发人员的职位描述中有阅读源代码。然而,这体验并不总能令人愉悦。不是每个人都喜欢阅读别人的代码,因为他们觉得那很乏味,甚至有时令人感到沮丧。有些案例中,你开始阅读别人的代码,最终会产生一种痛苦的感觉,因为你不能理解这些代码,或者说代码写得不好。大多数开发人员希望把重点放在编写代码上而不是阅读代码上,他们没有意识到阅读代码也是一项重要技能。
可以说,阅读源代码有很多的益处。阅读代码的受益是巨大的。可以把编码与文学相比较。大多数作家在他们写作的时候注重阅读名著。原因是你不能在真空中创造出任何东西(闭门造车)。你必须从不同的来源吸取精华, 在此基础上去工作,才能创造出你自己的杰作。编写代码亦是如此。
要想能写出好的代码,你必须读很多好的代码。通过这种方式,你可以了解其他开发人员是如何思考的,以及如何解决特定的问题的,还可以发现他们的不足之处。你可以从阅读别人的代码中获取不同的想法、风格和模式,让你的知识逐渐增长。
一言以蔽之—— 代码阅读技巧提高编码能力。
提高阅读技巧有许多方法。在这篇文章中,我想提些许几点。
1. 运行代码——是的,这是阅读代码的第一步。这可能不会给你过多关于项目的细节,但是,你将知道如何构建它并运行它,你将了解它使用的库、它所依赖的开发框架等等,这是提高你对某个特定项目理解的好方法。如果你想编写与你正在探究的特定项目类似的自己的软件,你可能会对你应该使用的框架或库有一些想法。
2. 找到高层次的逻辑——当你开始阅读一个项目的代码时,你可能会陷入到每一个细节当中。这是有问题的,相反的,你应该专注于高层次的结构。要找到切入点,并从那里开始,大部分的软件项目都有一个主要的方法,就从那里开始。此外,如果这是一个web应用程序,请开始查看不同的包,比如业务逻辑存放在何处、UI代码保存在哪里、控制器在何处等等。大致来说,就是浏览整个项目并获得一个基本的想法,然后问自己想专注于什么地方,就先从那个部分读起。你可以不读完整的代码库,而只是读它可能会引起你兴趣的一部分。当你找到你的切入点,你可以通过方法调用,看它引领你到何处,从而了解项目的业务逻辑。
3. 使用/了解工具——有很多工具可以用来阅读和探究源代码,有助于可视化代码。例如,IntelliJIdea工具具有导航源代码的功能,允许你通过单词、单词的一部分,甚至是单词的缩写来搜索。你也应该学习键盘快捷键。用鼠标导航源代码可能会相当枯燥和缓慢,用键盘快捷键可以更快地跳转。你可以快速地从源代码的一部分跳转到另外一部分。
还有一个阅读代码的好软件,叫Sourcegraph,这是由两个斯坦福大学的毕业生创建的,他们是Quinn Slack 和 Beyang Liu,他们在花费时间去查看缺少文档说明的代码以后,决定开发一个工具来帮助他们更好地阅读和理解代码。
4. 了解语言/约定——深入了解某个特定语言有助于提高代码阅读技能。每种语言都有自己的一套约定、样式和语法。这些知识帮助你快速地熟悉一个特定的代码。例如,在java语言中,方法名以小写字母开头,而在C#语言中,方法名以一个大写字母开头。知道这个区别可以帮助你从源代码中识别方法。
5. 阅读最佳实践/设计模式——你正在阅读的代码,或者它的某个结构,可能看起来很晦涩,或者你可能不熟悉它,这是很自然的。有许多良好的实践和设计模式,人们用它来正确地和最佳地做事。例如,有一种模式称为Singleton,它的构造函数保持私有。你可能会问,究竟为什么有人想保持构造函数私有呢。我一直认为它是公有的,否则,我如何创建一个类的实例。嗯,这背后有一个原因。Singleton模式防止你不止一次地实例化一个类,其中有许多实际的应用案例。如果你了解这种模式,你就不会为此而头撞南墙了。因此,对于某些模式的了解,例如,Gang of Four(Erich Gamma, Richard Helm, Ralph Johnson,John Vlissides软件设计领域的四位世界顶级大师.)有23种有文档说明的设计模式,可以显著地帮助你提高代码阅读能力。
6. 代码审查——软件开发是一个非常讲究协作的工作。没有人可以单独构建一个大型的或重要的软件。每个软件都是由一个团队构建的。在一个团队中,每个人都贡献自己的一份力量去塑造这个项目。在项目结束的那一天,每个人的贡献都会合并成一份对用户真正有价值的工作。除了做实际的编码以外,现在每一个团队都有另外一种做法,那就是在进行观察、建议和相互学习时,互相审查对方的代码。这是一个构建代码库知识的强有力的工具,在团队中建立牢固的纽带,提高代码质量,从而减少系统中的错误,并使客户满意。
做代码检查,你不得不阅读团队中其他人的代码,最终会提高你的代码阅读能力。
7. 临时重构——临时重构也可以帮助您提高代码阅读技能。你可以找取一段长的方法代码,然后不断地把方法细分成多个部分。持续分解,直到你了解这一大段方法代码背后真正的意义。之后,你可以对这些方法做些注释,然后回滚这些更改。
这可以帮助你理解方法的架构,也可以增加你代码重构的知识。
原文:7 Ways to Improve Your Code Reading Skills
作者: A. N. M. Bazlur Rahman
翻译:无阻我飞扬
长按识别二维码享更多精彩
Hyperf初体验 定时任务项目开发难免会用到定时任务去执行一些简单的操作,学习hyperf也避免不了要去学习定时任务,写这篇文章也是参考官方文档给出的教程,希望能给一起学习的人提供帮助,如有不足欢迎指正。hyperf/crontab 组件为您提供了一个 秒级 定时任务功能,只需通过简单的定义即可完成一个定时任务的定义。使用hyperf定时任务,需要安装定时任务组件,通过composer安装,命令如下:安装sudo composer require hyperf/crontab使用启用任务调
<el-form ref="selectCheckboxForm" :model="selectCheckboxForm" class="w-p100" label-width="120px" label-position="left"> <div class="flex1 jc-fs" v-for="(item,index) in ecologicalList" :key="index"> <el-form-item :label="i..
问题提出:char a[10]; 怎么给这个数组赋值呢?字符数组用字符串赋值的三种可行形式:1、定义的时候直接用字符串赋值 char a[10]="hello";【注意】不能先定义再给它赋值,如char a[10]; a[10]="hello";这样是错误的,一个字符怎么能容纳一个字符串?况且a[10]也是不存在的!再如char a[10]; a="hello";//这种情...
uart2axi_master_intf程序源码:/**************************************************** Module Name : uart2axi_master_intf * Engineer : Huangruigui* Target Device : * Tool versions : * Create Date :* Revision : v1.0* Description : ****************
这种情况我也遇到了好几次了,就是突然什么软件都卡死,然后重启后基本上什么软件都打不开(一般是更新系统完后),也没有做备份和还原,网上大多数说的方法都是注册表之类的问题,没用就只能重装系统,后来也终于在网上找到了方法,不知道对你们适不适用1、按下Win+X组合键(或者鼠标在左下的win菜单右键),在菜单中点击选择“命令提示符(powershell)(管理员)”,2、在出现的“管理员:命令提示符”界...
1.在APP中添加互斥量HANDLE m_hMutex;2.然后在InitInstance()中添加m_hMutex=::CreateMutex(NULL,FALSE,_T("应用程序名字(带App的例如CCSerPcieApp)")); if (GetLastError()==ERROR_ALREADY_EXISTS) { // AfxMessageBox("已经运行
opencv基础入门——ROI与泛洪填充 | 一、ROI | 二、泛洪填充
本文是我在 iteye 找到的的一篇,评价比较高,所以我就转载了,原文地址如下:http://zmx.iteye.com/blog/1846181在Java Web开发中,Session为我们提供了很多方便,Session是由浏览器和服务器之间维护的。Session超时理解为:浏览器和服务器之间创建了一个Session,由于客户端长时间(休眠时间)没有与服务器交互,服务器将此Ses
通常情况下,gradle会使用系统默认的仓库(repo.maven.apache.org/maven2/)下载项目所需依赖包,下载速度非常的慢,因此有必要修改gradle默认的仓库地址。导致下载依赖包慢的原因在于,gradle系统默认配置的依赖仓库都在国外,因此解决的办法是使用网络距离近的仓库,或者是在不急于使用之前就将国外的仓库尽可能的全量缓存到局域网,使用的时候将会会非常快。目前阿里已经...
转自:https://blog.csdn.net/u011817406/article/details/79417052本文内容摘自于仕琪老师写的《opencv入门教程》示例程序如最下面所示: 在读取矩阵元素时,以及获取矩阵某行的地址时,需要指定数据类型。这样首先需要不停地写“&lt;uchar&gt;”,让人感觉很繁琐,在繁琐和烦躁中容易犯错,如下面代码中的错误,用 at()获取...
习题5-4使用函数求素数和(20分)本题要求实现一个判断素数的简单函数、以及利用该函数计算给定区间内素数和的函数。素数就是只能被1和自身整除的正整数。注意:1不是素数,2是素数。函数接口定义:int prime( int p );int PrimeSum( int m, int n );其中函数prime当用户传入参数p为素数时返回1,否则返回0;函数PrimeSum返回区间[m,n]内所有素数的和。题目保证用户传入的参数m≤n。裁判测试程序样例:#include ...
计算机专业在公务员考试中的招录职位还是比较多的,因此该专业考公务员还是不错的选择,女生喜欢稳定的工作可以考公务员。一、如果基础很差,建议可以去京佳试听一下课程,了解授课风格和服务,选择一个适合自己的辅导班学习一下。二、公务员考试涉及面较广,没有其它考试所谓的知识点,如果有时间,参照考试大纲和习题,系统的坚持每天练习,掌握各个类型题目的答题方法是最重要的,还有就是注意时间,公务员考试题量较大,要充分...