如何使新员工加快现有项目的进度?
我的老板从CompSci那里聘请了一个新开发人员,将其转入了具有相当多技术债务的项目。这是我的任务,要尽快使这个人快速发展并做出可观的贡献。关于如何最好地做到这一点的任何建议?是否有不亲身经历的第一手经验?
我的直觉是对他要替换的开发人员编写的代码进行一些代码审查,对我正在编写的新代码进行配对编程,或者与他一起为要继承的代码编写单元测试。
解决方案
回答
当我开始第一份工作时,我被一些小任务直接投入了火炉。这包括创建作为项目辅助的次要控件,但是仍然需要我使用与团队其他成员一起使用的一些更高级的技术(ORM访问等)。我还获得了一些数据库清理任务,这些任务使我对如何处理该项目必须处理的所有数据都在数据库中进行了很好的理解。
我建议不要让他除了阅读文档或者进行大量代码审查之外什么都不做。他会很无聊,可能无论如何也不会记得他在两周内所做的很多事情。记住,他申请这份工作是因为他想编写代码。太多的维护工作将把他推开。
回答
在他的第一天,与他坐在一起,并帮助他建立自己的开发环境。如果他刚大学毕业,他可能不熟悉IDE,使用版本控制,正在使用的任何应用程序框架等。
第二天,让他闲逛些我们认为值得学习的东西。例如,我们说我们希望他进行单元测试,如果他还没有做单元测试,那么请利用第二天让他加快速度。
第三天,让那个男孩上班。通过实践学习。至少在头几周内,一定要对他写的每件事进行代码审查,然后从那里拿走。
回答
第一手经验在这里。不要只是将它们自己发送出去以阅读文档。这可能是一项非常艰巨的任务,尤其是在项目规模很大的情况下。
最好的办法是让他实际上跳入代码并开始使用它。
回答
给他一个升级现有代码的任务。该任务应该不是很困难,但是它需要代码知识。可以提出问题,但不要告诉员工如何去做。在对修补程序进行编码之后,请与程序员坐下来讨论解决方案。
允许程序员在编写能完成此工作的代码方面有一定的自由是很好的。这可能会在系统中引入新方法,这些方法将成为更好的程序员。
只要确保帮助新手学习贵公司的一些编码标准即可。这些总是很难学。
回答
在我目前的工作中,我的首要任务是更新用于构建和部署我们的Web应用程序的工具。实际上,出于以下几个原因,这确实是一个好主意:
- 现有工具已经过时,并且仍然需要一些新功能。
- 我了解了各种项目和代码库的组织方式。
- 它给了我一个适应公司编码风格和实践的机会。
是的,我想我不是马上就开发真正的产品,这有点令人失望,但我认为这绝对是正确的方法。
我确信那里的每家公司都有一些低优先级的工具或者项目,没有其他人有时间进行研究。将这个项目交给新手,给他机会编写一些新代码,然后看看一切如何进行。最坏的情况是该项目失败了,但没有破坏生产代码。
回答
同行指导是一种很好的方式,可以加快新员工的工作速度,查看网站和相关书籍以了解更多信息。该技术是由微软开发的(我相信),并且也已被其他公司所采用。
我目前正在阅读这本书,其中包含一些有趣的想法,这些想法旨在考虑自己和学徒(新员工)如何进行交流,并设置一个轻量级且简单的过程即可做到这一点。
编辑:我与这本书的作者没有关系,我只是喜欢他的想法,并由我的现任雇主介绍给他。
回答
我不建议我们阅读文档(除非我们有一个不错的简短文档,对系统设计有一个全面的了解),代码审查或者我最喜欢的"熟悉代码库"之类的东西。
当我们是项目的新手时,所有这些事情真的很难集中精力。没有系统的一些先验知识,代码审查就没有用。
理想情况下,我会给他一个非常小的本地化任务,他可以自己完成任务并根据需要提出问题。这使他在编写实际代码时开始进行开发过程,源代码控制等工作。
如果我们已经知道任务的解决方案,那就更好了,这样我们就已经知道他可能提出的任何问题的答案,并迅速对其做出回应。
为他将继承的代码编写单元测试也是一个好主意,他将开始编写代码并熟悉事物应该如何工作。
回答
Bug修复。
到目前为止,这是学习代码库的最佳方法。是的,很烂,但这是学习的好方法。
回答
要做的最有用的事情之一就是浏览他将要维护的程序并解释系统的工作方式。确保解释业务流程是第一天要讨论的首要任务之一。无论代码如何工作(或者不工作),我们都需要了解它应该完成的工作。
回答
其中很多是关于学习组织流程的。这不仅仅是学习代码的工作原理。
去年我们雇用了两个新手。我们确保有真实的任务要执行,这使他们可以接触版本控制,错误数据库,Wiki等,并根据他们的要求给予他们尽可能多的监督和帮助,然后再多一点检查他们所要执行的任务做到了,到了两个星期,我们对他们感到非常满意,并相信他们可以完成工作。随着时间的流逝,它们为我们现有的流程做出了贡献并对其进行了改进。
我们在今年进行了一次实习,并给予了他更多的监督,包括仔细地检查他的第一段代码,并反复检查直到正确为止。三个月后,他偶尔仍需要一些帮助,但知道何时提出要求,并已成长为团队中有用的成员。
如果我们决定雇用他们,那么我们已经决定信任他们。给他们一个指导者(可能是我们),逐渐将他们介绍给系统和代码库,然后从那里开始工作。
回答
我同意这里的许多答案,尤其是边做边学。我通过雇用新员工来尝试了许多不同的方法:
- 进行辅助项目以适应环境
- 修补程序,让他们随着时间的推移慢慢地解决问题,并进行连续的代码审查
- 在实际从事项目工作时,与团队的不同成员轮流进行配对编程
我的想法是,如果我是某建筑公司的新员工,并受命在现有房屋中建造隔离墙,但在此房屋开发的前6个月中从未去过那里,则涉及的风险是和我一起做正确的事。但是,如果在第一天(以及之后的几天),他们将我与知道会发生什么的某人配对,我会感到更加自在,并且我确信该公司知道我正在向某人学习,就会感到更加自在之前...并正确地做到了。
从各种尝试中,没有任何一项能像结对编程那样成功。似乎没有替代品可以帮助人们学习system / tools / language / project / etc的内容。实际上,他们在做什么并不重要……它是新功能,修复错误,辅助项目,构建系统等。实际告诉我们事情的工作方式与向我们展示如何工作的人之间存在很大的差异。
回答
在这种情况下,我最近是新员工……尽管我以前有过"现实世界"的经验。
我的老板和她的代理人总是说"玩系统"或者"阅读文档"。我觉得这真烦人。我完成了自己的任务,即设置我知道会被击中的断点,然后在系统上进行一个简单但尚未完成的核心操作,然后从摇篮到坟墓逐步过渡。
当我这样做时,我绘制了伪设计图,说明谁在用什么打电话给谁-基本上是对这些东西进行逆向工程。然后,我会请其他开发人员中的一个与我坐在一起,并纠正我,而我又将他/她的言语交还给他/她,我认为每个班级的责任是什么,以及他在做什么。
除此之外,如果我们没有为新手/ gal做任何繁琐的工作,我会尝试发明一些并非琐碎的忙碌工作的短期项目,但有实际工作的经验会有所帮助为他/她做。
当然,如果有短期但有意义的工作可用,请从此开始。底线是给出目标明确的任务。否则,如果他们像我一样,他们将提出自己的任务和目标,以防止自杀无聊。