声明:本文大部分翻译自How do you work with other people’s code做者:Matthew Setter。可能翻译过程与原文略有不一样,转载请注明出处。程序员
咱们在工做中经常也会遇到相似的问题。进入一个项目团队,接手别人的项目,开始干劲满满,但把别人作的东西拿来一看,瞬时傻眼,不知道从何入手,好不容易开始后又满满抱怨以前作项目的风格和本身如今的不一样,而如何去化解这类的尴尬,就是这篇文章的主题内容。数据库
处理其余人的代码是一个开发者的基本技能。只需一年的时间,其余人的代码就能够为你所用。数据结构
如今,我要寻找一些最有效的处理其余人代码的方法,怎样去有效的阅读遗留下来的代码。要知道这并非一件容易的事。框架
为了让叙述过程更容易,我将把个人心得分红如下的方式:工具
互动
观察
测试
为新人设计的错误修正系统
寻找可行资源
使用好的IDE
看书和blog
编写文档
推己及人学习
谁是大家开发者的老大?他们在哪?在你办公室是否能够直接找到他们?若是ok的话,大胆去和他们交流或者Email他们。要知道他们是项目相关知识最好的来源。测试
你是不是远程办公或自由职业者?这个项目或公司的开发者用什么来交流,他们是用的IRC、Slack,twitter,email或者其余工具?网站
要确保你和项目一致。一个常常在Zend Framework 2项目受诟病的地方就是没有什么活动社区。若是平常能多使用IRC channel就不会出现这种状况。因此你要确保你和开发者和其余团队成员保持一致。spa
当你开始一个项目时,不用太过于紧张。不要期望一开始就知道全部正确的事。通常项目时间估计都会各不相同,可是我有据说在真正能够进行代码生产以前须要3周到3个月不等的时间去了解代码库。翻译
有人会有误导的感受,认为不论怎样,只要你参与进去你就会能够持续的输出。有这种想法的人可能看了太多的好莱坞电影,好比《旗鱼》。
代码库就是一种思想的结晶,是创造它的开发人员的想法、信念和行事方式的集合。这是须要时间去了解和学习的,对于代码库,你仍是一个新人,须要有背景知识的沉淀。
这里有5种很好的方法去开始:
花时间去一步步走一遍全部代码
善于提问
配置测试机制
尝试使用测试机制
读通读懂代码注释和文档
别为难本身,好的开头是成功的一半,作好开头的准备工做。以后,你会开始对那些应用如何组合为何组合会有更好的了解。
在这个思想下,经过咨询其余的开发者和高级的开发者你能够行动的更快。在这以前经过对代码库的总体了解,你须要列一个问题清单。
花时间向其余的开发者搞清楚你的问题。不要害羞,问问题并获得你须要的答案。
任何好的代码库都有测试。若是没有,这并非个好的兆头。没有必要隐瞒的事,它可能只是开发者或者开发团队历来都没实施过测试。而我关心的是若是它真的没有测试。
若是有测试的话,不用多说,运行它们。能经过么?我遇到过不止一次这种状况,数据库有一套完整的测试可是没有人能真正的运行起来。因此还有一个问题,它们是否一直保持着更新?
如今你已经尝试着去运行了,并对它有很好的了解。若是是好的测试,你应该已经了解那些应用是如何工做,它们想达到的结果以及不一样的组件是如何挂在一块儿的。确保你花了时间去作这些事,这是很是有意义的。
另外一个很简单开始的方法就是以项目的新手或者初级开发者修正bugs。有两个典型的例子Joind.In和ownCloud,在下面的截图中你能够看到这两个bug追踪器。
经过上图你能够清楚的看到那些标签。通读他们并参与进去,虽然这些bugs并非什么特别高技术的,可是你能够轻松的应用到项目中,树立你的自信心和知识体系。
虽然复杂的技术和荣誉能够知足你的自我,但当他们无论用或者那你完成的只是件小事时,这些只会成为你骄傲和热情的绊脚石。因此别眼高手低,用最简单的方式踏实作事,
寻找可行资源
当你接手一个代码库或加入一个老团队,能作的最好的事情就是尽量的去收集各类资源,不知道怎么去寻找?这里有一些能够参考的意见:
你是否有权限访问邮件列表档案?
项目或者公司是否有本身的wiki?
有哪些项目文档被编制了?
你是否通读过版本控制历史?
那些贡献者是否还在持续的更新有意义的操做信息?
一个好的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个不一样类名。还有的活动数据表的命名也毫无规则,这就给个人工做增长了很大的负担。
因此有时候也许你的方法和命名更加科学,但尽可能与以前的工做保持一致,不只方便本身也会给后来人带来很大的便利之处。若是实在坚持你的风格,至少要留下说明文档,不只对本身的工做负责,也是为他人负责。
目前有不少的开源项目和代码,也有更好的开发环境,但慢慢你会发现使用他人的开源项目或代码并不仅是一个捷径,更多的是一种学习和自我提高的过程。
我如今所在的公司云巴就是这样一个公司,我相信不少成功的公司也是同样,站在巨人肩膀上时也要去尊重它。