是财富还是陷阱?如何处理他人的代码

声明:本文大部分翻译自How do you work with other people’s code作者:Matthew Setter。可能翻译过程与原文略有不同,转载请注明出处。

我们在工作中常常也会遇到类似的问题。进入一个项目团队,接手别人的项目,开始干劲满满,但把别人做的东西拿来一看,瞬时傻眼,不知道从何入手,好不容易开始后又满满抱怨之前做项目的风格和自己现在的不同,而如何去化解这类的尴尬,就是这篇文章的主题内容。

处理其他人的代码是一个开发者的基本技能。只需一年的时间,其他人的代码就可以为你所用。

现在,我要寻找一些最有效的处理其他人代码的方法,怎样去有效的阅读遗留下来的代码。要知道这并不是一件容易的事。

为了让叙述过程更容易,我将把我的心得分成以下的方式:

  • 互动
  • 观察
  • 测试
  • 为新人设计的错误修正系统
  • 寻找可行资源
  • 使用好的IDE
  • 看书和blog
  • 编写文档
  • 推己及人

互动

谁是你们开发者的老大?他们在哪?在你办公室是否可以直接找到他们?如果ok的话,大胆去和他们交流或者Email他们。要知道他们是项目相关知识最好的来源。

你是否是远程办公或自由职业者?这个项目或公司的开发者用什么来交流,他们是用的IRC、Slack,twitter,email或者其他工具?

要确保你和项目一致。一个经常在Zend Framework 2项目受诟病的地方就是没有什么活动社区。如果日常能多使用IRC channel就不会出现这种情况。所以你要确保你和开发者和其他团队成员保持一致。

观察

当你开始一个项目时,不用太过于紧张。不要指望一开始就知道所有正确的事。一般项目时间估计都会各不相同,但是我有听说在真正可以进行代码生产之前需要3周到3个月不等的时间去了解代码库。

有人会有误导的感觉,认为不论怎样,只要你参与进去你就会可以持续的输出。有这种想法的人可能看了太多的好莱坞电影,比如《旗鱼》。

代码库就是一种思想的结晶,是创造它的开发人员的想法、信念和行事方式的集合。这是需要时间去了解和学习的,对于代码库,你还是一个新人,需要有背景知识的沉淀。

这里有5种很好的方法去开始:

  • 花时间去一步步走一遍所有代码
  • 善于提问
  • 配置测试机制
  • 尝试使用测试机制
  • 读通读懂代码注释和文档

别为难自己,好的开头是成功的一半,做好开头的准备工作。之后,你会开始对那些应用如何组合为什么组合会有更好的了解。

在这个思想下,通过咨询其他的开发者和高级的开发者你可以行动的更快。在这之前通过对代码库的整体了解,你需要列一个问题清单。

花时间向其他的开发者搞清楚你的问题。不要害羞,问问题并得到你需要的答案。

测试

图片描述
任何好的代码库都有测试。如果没有,这并不是个好的兆头。没有必要隐瞒的事,它可能只是开发者或者开发团队从来都没实施过测试。而我关心的是如果它真的没有测试。

如果有测试的话,不用多说,运行它们。能通过么?我遇到过不止一次这种情况,数据库有一套完整的测试但是没有人能真正的运行起来。所以还有一个问题,它们是否一直保持着更新?

现在你已经尝试着去运行了,并对它有很好的了解。如果是好的测试,你应该已经了解那些应用是如何工作,它们想达到的结果以及不同的组件是如何挂在一起的。确保你花了时间去做这些事,这是非常有意义的。

为新人设计的错误修正系统

另一个很简单开始的方法就是以项目的新手或者初级开发者修正bugs。有两个典型的例子Joind.In和ownCloud,在下面的截图中你可以看到这两个bug追踪器。
图片描述

通过上图你可以清楚的看到那些标签。通读他们并参与进去,虽然这些bugs并不是什么特别高技术的,但是你可以轻松的应用到项目中,树立你的自信心和知识体系。

虽然复杂的技术和荣誉可以满足你的自我,但当他们不管用或者那你完成的只是件小事时,这些只会成为你骄傲和热情的绊脚石。所以别眼高手低,用最简单的方式踏实做事,

寻找可行资源
当你接手一个代码库或加入一个老团队,能做的最好的事情就是尽可能的去收集各种资源,不知道怎么去寻找?这里有一些可以参考的意见:
你是否有权限访问邮件列表档案?
项目或者公司是否有自己的wiki?
有哪些项目文档被编制了?
你是否通读过版本控制历史?
那些贡献者是否还在持续的更新有意义的操作信息?

使用好的IDE

图片描述
一个好的IDE的含金量是众所周知的。不关你是Ruby、Python、Go、Java,PHP还是其他语言的开发者,你需要找到一个适合你语言特色的好的IDE。

我很欣赏一些人是纯粹主义者,偏向于VIM或Emacs,这是极好的。但我是一个IDE的爱好者,我的选择是PhpStorm。当然还有其他很多的IDE,比如Eclipse、TextMate、SublimeText和VisualStudio。

一旦你选择好了你的IDE,你要开始去了解和使用它提供的功能。我这里将以我的偏好PhpStorm为例,但你可以把这些原则上的东西运用到你选择的IDE上。

开始输入代码,看是否符合标准。并不需要像PHP PSRs这样一个正式的标准。但是你要知道开发者是否都遵循着一致的风格,而不是各执自己的路数。学会使用Mess detector和圈复杂度测试仪去衡量代码的质量。

是否有任何的代码文档?如果有,当你检查你的代码时,IDE应该要能使用它。接下来,使用单步调式程序,如xhprof,Xdebug或Zend调试器,运行应用程序看那看看它是如何运作的。

它做了什么?它创建和使用的数据结构是什么?它有不必要的重复代码模块吗?真正要了解的远比我在这里列举的要多,但使用IDE给你提供的功能去完成代码会使你的程序员生活更轻松。

阅读与学习

这只是我个人的想法。我们学习的越多,成长的就越多。我们并不是第一个吃螃蟹的人,在我们之前已经有很多的人犯了很多相同的错误。

给自己留点时间,去评判一些前人们的经验并从中学习,吸取经验教训。要知道许多好的开发者也兼职编辑和博主。

我最欣赏的是Martin Fowler,他写一部关于重构的伟大的书。也有其他优秀的书籍,例如《Design Patterns》和相关的网站SourceMaking.com。

帮你自己一个忙接着继续投资与这些资源。这并不是一件容易的事,但是是真真切切有益的事。

编写文档

这也是我做的不够的地方。做一个评论家很容易,坐在场边然后去评判一个代码库或框架的好坏,或者其他类型的软件项目。别做评论家,你要参与进去。

文档不是为失败的程序员、设计师或者非技术人员准备的。一些超级大项目会积极的建议文档是项目最好的开始。

从文档开始的最大的项目之一就是Linux Kernel。有什么比记录文档更好的方法去学习东西呢?毕竟,只有你能记录它,你才能真正的知道它。

因此,如果是个开源的项目,参与进去,通读代码,做笔记,然后编辑文档。如果这是一个内部的应用,第一件事就是记录文档,就算只为了你一个人。

也许最可怕的是完全就没有文档可以用,但是每个项目都要有开始的地方。当你用源代码工作时,写下你所知道的。

据我所知一些最好的开发者,例如the lovely Lorna Jane,开始使用博客的方式。他在博客中记录她所学到的东西,然后她的博客成为了最有名的PHP博客之一。

推己及人

最后一点:要体谅你正在审查和构建的开发人员的工作。你不知道他们的职业生涯和教育,或者他们写你现在加速工作的代码时所面对的限制。

更多的是,你是在什么技能水平的人?那可能对我们来说很容易,当我们年轻时候,还是新手没多少经验的时候,也会有人这么评价我们。

我们认为知己无所不知,我们的期望、概念和方法都是正确的。但事实真是如此吗?我宁愿相信,当我们变得成熟,我们也会更加的明智,变得更加能够去接受软件开发的广泛方法的存在。

我们也许不需要去赞同他们,但他们不一定是错误的。他们也可以教会我们很多,帮助我们成长。所以尝试多去体谅他人,站在他们的角度去想想。不要成为令人讨厌的新人,只会指责和埋怨。毕竟这没有任何的卵用。

个人体会:

我之前在一个游戏公司做数据分析,虽然和代码沾不上太大的边,但对这方面的苦恼也深有体会。
由于我要做数据分析,就免不了要从数据库中调用数据,经常需要把最近今天的数据和之前的数据做比较分析。这时候问题就出现了,才开始做的时候我就经常查询不到之前的数据,我问管这块的同事是不是之前就没有记录这个类别的数据或者是删掉了,但他说是有记录的而且不会删掉重要的数据。之后我就一张张的翻数据表才发现之前的数据表的类名和现在的完全不一样,甚至有的相同数据有3个不同类名。还有的活动数据表的命名也毫无规则,这就给我的工作增加了很大的负担。
所以有时候也许你的方法和命名更加科学,但尽量与之前的工作保持一致,不仅方便自己也会给后来人带来很大的便利之处。如果实在坚持你的风格,至少要留下说明文档,不仅对自己的工作负责,也是为他人负责。

目前有很多的开源项目和代码,也有更好的开发环境,但慢慢你会发现使用他人的开源项目或代码并不只是一个捷径,更多的是一种学习和自我提升的过程。
我现在所在的公司云巴就是这样一个公司,我相信很多成功的公司也是一样,站在巨人肩膀上时也要去尊重它。

posted @ 2015-09-02 17:32  云巴  阅读(363)  评论(0编辑  收藏  举报