作为软件工程师,阅读他人的代码有多重要?


25

我是一个崭露头角的软件工程师(现在是二年级学生,CS专业),我真的很难理解别人的程序。我想知道这个技能(或缺乏)是否会对我不利,如果可以,那么我该如何发展呢?


1
当您向您解释代码时,您是否还理解代码?或者您只是通过反复试验而学习?
JeffO

1
为什么标记为“编码样式”?您是因为格式不正确而无法读取代码的原因吗?能够读取代码并不意味着您需要能够理解格式很差或混淆不清的代码。如果有帮助,请先通过格式化工具运行代码。
布兰丁

今天早上刚读了一篇使我想起这个问题的文章。为什么在Chrome上工作使我开发了一种用于读取源代码的工具
Eric King

这是一个很好的问题!我有一个后续问题:如果您主要是自己编写自己的代码(例如,作为一个小项目的科学程序员),那么如何找到要阅读的优质代码?之前有人问过这个问题:softwareengineering.stackexchange.com/questions/69892/…–
Gaurav

Answers:


49

这是必不可少的。

开发它的方式是通过编写自己的代码(很多),是的,通过阅读别人的代码而苦苦挣扎。

当然,问题在于,并非每个人都以自己的方式思考。很久以前,我刚上一年级Java课,我们得到了一份作业。与我的看法相反(答案将集中在三个或四个常见的解决方案上),班上的每个人对作业都有独特的解决方案。

因此,您应该阅读良好的代码。

这是“设计模式”如此受欢迎的原因之一,也是为什么您应该研究它们。设计模式为程序员提供了交流的通用词汇,并为解决计算问题的“更好”方法而调动了您的思维。

您还应该研究算法和数据结构。

结论: 您应该始终努力编写其他开发人员可以轻松理解的代码。


7
推论:从简单的开始通过努力写代码,可以很容易地理解:-)
gnasher729

4
通常,这是一个很好的答案,除了有关模式的部分。大多数GoF模式(人们使用该术语时都会想到的)是过度设计的,过于精细的,过于面向对象的或仅仅是普通的反模式。然后人们出现在这里,问他们应该使用哪种模式进行解决。拜托,永远不要劝告开发者在模式上浪费时间。
David Arno

对于小问题(例如,反转列表中的数字),可能的答案应收敛于少数可能的解决方案。好的作业需要解决许多此类问题,并以某种方式安排这些问题的解决方案,因此,针对该作业的可能解决方案的总数将非常快地增长。
布兰丁

15

重要。

一旦毕业并走向世界,您将要从事的大多数项目将已经有其他人贡献的代码。幸运的是,程序员可以将所有的时间都花在绿地项目上!

它是通过实践和耐心获得了技能,而且在许多情况下,它是一种技能,许多人并不真正得到直到太多的机会的工作,他们毕业并找到第一份工作。放松!

(不过,如果你的学校有一个带薪实习项目,这将让你预先毕业经验上大多是由其他人编写的大型项目它可以让你的学分!奔头到,如果可用)


7

这是一项重要技能,具体取决于您工作地点的细节,它甚至可能比编写代码本身更为重要。

与其他技能一样,练习非常完美!尝试阅读其他程序员的代码,对其进行调试,这对我个人有帮助,它是重构或改进少量代码,然后从那里扩展。


此外,了解您使用的开源项目并尝试了解内部代码的工作方式可能会有所帮助
RMalke

4

阅读和编写代码都有不同的技能。

  • 一种是语法。知道方法声明的样子。
  • 另一个是意图。知道为什么使用该方法及其用途。

至于阅读还是写作。是的,阅读是必不可少的。
可以帮助我们许多人的一些准则是:

  • 每次写入代码至少要读取10次。
  • 经常有人在读代码……将来我会读代码。
  • 我不会为一年多以前的代码风格辩护,从那时起它已经有所改进。

好。太好了。现在,转到您可能遇到的情况。

OMG,这吓坏与数百个长着疯狂的依赖,每次行的行源代码和类数以万计的庞大的代码库我尝试按照东西,我必须保持10个水平在我的头上,等等,等等
听起来熟悉?是的 深呼吸。放松。这是正常的。这就是生产系统的构成。人们在这些看似不可理解的情况下得以生存(和发展),因为:

  • 测试(希望如此)已经存在,它们还可以帮助记录系统。
  • 程序员结对,往往带来两倍以上的结果。
  • 优秀的程序员善于说他们直到理解才明白。
  • 更改通常只是一两行代码,有助于隔离测试内容
  • 代码库需要几个月甚至几年才能熟悉

最后,优秀的程序员在将更改提交到源版本控制系统中时会编写有意义的提交消息。(请随时添加答案)
rwong

1

这些答案大部分都集中在代码阅读对自我完善的重要性上。我完全同意并赞同。

还有一个角度要提防-即使您是一个不能从阅读其他方法中受益的神童(不可能,但是为了论证...),您仍然需要知道如何阅读代码,因为这个概念在大学环境中基本上不存在:绝大多数行业项目是棕色项目(即在现有的代码库中或与之集成)。

仅仅为了理解现有代码库和过程而阅读代码的需求是真实的。总是可以向其他开发人员询问有关代码的问题,但这只会花很长时间。人们离开,切换项目,或者只是时间流逝。低级细节从内存中消失,维护程序员可以应用补丁。在某些时候,除了代码本身之外,没有别的真理来源。

良好的代码卫生,样式指南,代码审查和文档帮助,但在某些时候,代码是发生情况的真相,唯一找到答案的方法就是亲自获取答案。除了在自我开发中的用途外,读取代码的能力与编写代码是明显不同的技能。


0

了解他人的代码是您无法逃避的事情,因为即使您不在团队中,您也很可能在团队中工作,您会在Google上搜索其他内容,并且您必须了解示例代码。所以是的,这是必须的。

我的感觉是,每个人在开始时都会感觉比其他人少一些,您对代码的理解比其他代码更好,因为与其他代码相比,您花费更多的时间在编写自己的代码上,因为您不仅在阅读,编写和结构化方面在你的脑海中。如果您开始将更多时间花在其他人的代码上,并且首先尝试查看正在使用哪种类型的结构/流程,那么这肯定会使您更好地理解代码。

为了使我的观点更具说服力,如果您有一年前编写的某些代码,请再次理解它,我可以肯定地说,与其他代码相比,您将花费更多的时间,但花费的时间更少,因为您对如何构造自己的代码有所了解码。

希望这个帮助,不要失望,这是完全正常的。花更多的时间来编写代码,最终您将获得它。


0

好吧,我刚刚得到了一个项目,该项目由另一个国家的团队编写,包含大约100,000行代码,在接下来的几个月中,我必须对他们的代码副本进行一些非常重要的更改,同时保留尽可能多的代码尽可能的共同。

您告诉我如何在没有快速阅读他人代码的情况下完成工作。如果您看不懂别人的代码,那么您将完全陷入困境。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.