code学习

软件开发实习生的入职流程

软件开发实习生的入职流程

通过这几年的工作经历中,我学到了很多关于招聘、管理和培训的知识,而且已经通过反复试验,总结出了一套相对比较合理的软件开发实习生入职流程。我希望通过与你分享我的经验和来之不易的经验教训,你可以简化公司软件开发实习生的入职流程。

正式培训

当我第一次开始实习计划时,我有一些期望,但没有正式的。由于每个实习生都有不同的任务和技能,我认为他们都需要一个定制的培训计划。

现实甚至没有达到我的预期!无论员工在部门内从事什么工作,他们都需要相同的“核心知识”——如何使用工具、协作、获得帮助、进行更改、提供反馈、提交工作、查找文档等等。

去年年初,我与助理首席开发人员一起创建了一份实习清单,其中列出了要完成的 20 项具体任务。对于每一个,我们详细说明了期望和学习目标。

我们还需要为培训期的持续时间设定一个明确的时间框架。我们的实习计划持续 240 小时,每周 6 小时(因为我们与全日制大学生一起工作),大约一年。你的公司可能有非常不同的需求(全职员工不应该需要一年的时间!),但你应该确定培训产生最大影响所需的最短时间。

然而,这 240 小时并不是所有的结构化培训。其中大部分实际上都花在了实际工作上。

我从未见过任何人喜欢无聊的“强制性培训”视频和课程,这就是为什么(除了一些书面教程)我不会在这些技术上浪费时间。正式培训应该适合正常的工作量,永远不要取代它。将其传播到更长的时间段(可能是一个月)可以使培训有机地适应员工的新的常规职责。

许多工作旨在介绍我们公司的工具或方法。你只需让员工体验特定资产提供的好处;一旦他们知道它的存在,他们通常会以对他们有利的方式将其整合到自己的工作流程中。归根结底,你不应该培训员工“只做他们的工作”——你应该让他们有能力在他们部门的任何地方工作。

例如,我们的一些实习清单任务是......

  • 在你的项目的任务/错误跟踪器上创建五个任务。
  • 使用提交前审查工具审查其他人的代码。
  • 对公司 wiki 做出三个有意义的贡献(每个贡献至少更改/添加 5 个句子)。

在这些任务中,我们允许实习生将任务分散开,并在他们的正常工作过程中完成。

总之,培训应该标准化,有机地融入“正常”工作中。

验证培训

为了配合正式培训,您需要建立一种验证培训的方法。例如,我公司的每个人都必须阅读Scott Rosenberg 的《Dreaming in Code》(我相信每个有脉搏的程序员都应该阅读它。)但是,在 2020年的某个时候,我意识到这并没有发生:

  • 一些实习生读过它。
  • 一些实习生略读或只读了一部分。
  • 几个实习生没有意识到他们需要阅读它。

因此,我开始要求实习生回答关于这本书的三个“论文问题”。这让我可以判断他们是否读过这本书,并了解他们从中学到了什么。

对于每一个正式的训练目标,都需要有一些目标完成的证明。有时这很容易,例如编辑 wiki 页面。其他时候,这可能很困难,例如证明某人阅读了公司的编码标准。

前两周

我相信前两周是任何新工作中最让人迷失方向的。受训者不只是习惯了公司的正式政策和工具;他们正在与同事会面并适应公司文化以及随之而来的一切:期望、潜规则、行话、内部笑话……总之,新人总是会经历文化冲击。

在这一点上你能做的最糟糕的事情就是把他们停在他们的隔间里,告诉他们去上班!

前两周留给适应和探索。我们有五个非常具体的任务要完成:

  • 阅读实习介绍文章。
  • 设置你的开发环境。
  • 阅读社区规则(因为我们有一个开源社区)。
  • 阅读官方标准。
  • 阅读并签署 wiki 的“入门”页面。

第一项特别值得注意。我创建了一个教程,引导新员工完成设置并熟悉他们的常规工具和工作流程的整个过程。

除了这些任务,新人还可以自由探索。我们在会议期间花更多时间介绍自己并回答问题,并鼓励新员工更多地了解我们的项目——即使是他或她没有从事的项目!

对于贵公司来说,这两周的正式任务可能会有所不同(并且可能更长),但请记住,前两周应该让新人有时间适应,而不会承受全部的工作压力。文化冲击压力够大!

两周结束后,新员工对自己的角色更加满意。他们(希望)感觉自己是团队的一员,并且他们有最初的信心提升来推动他们完成第一个“真正的”任务。

相信我,他们会需要它...

将他们丢入困境

一旦员工度过了最初的两周适应期,你能做的最好的事情就是立即开始像对待普通员工一样对待他们。

让新人“轻松”进入他们的新工作可能很诱人,但我亲身了解到,这是你能为他们做的最糟糕的事情,原因有两个。

(1)首先,“放松”员工进入他们的日常工作会贬低他们的能力。你雇佣了一个聪明、能干的人(我希望)!他们既不需要也不希望他们的手被握住。开始一个不熟悉的项目就像进入一个冰冷的游泳池一样:慢慢降低自己只会延长折磨。跳进去把它抖出来!

(2)其次,“缓和”设置了错误的预期标准。这会阻止尽职尽责的新员工建立让他们成功的自我控制习惯,并且让冷漠有机会在不那么尽职尽责的员工中滋生。

实际上实习生并没有什么不同:实习的全部目的是展示真正的行业工作是什么样的。

总之,两周的适应期一结束,我就把新开发者丢入困境,教他们如何生存。学习代码的唯一方法是阅读它,学习一门语言的唯一方法是在其中编写代码,而学习一份工作的唯一方法就是去做。我已经编程多年了,我在新项目中的迷失感丝毫不亚于我还是菜鸟时的感觉。

也就是说,你不会在没有支持的情况下将它们丢进困境!我们鼓励所有员工提出问题并寻求同事的帮助。那些拒绝寻求帮助的人根本无法持久:团队的生死取决于他们的协作能力!

记录你的工具

到此为止,我基本上可以在睡梦中工作(我想我已经做过几次了)。我们所有的方法、标准和工具都被编程到我的自动驾驶仪中。不幸的是,这也意味着我忘记了新人没有记住这些东西。这对他们来说是全新的!

为了节省时间,并确保每个人都可以访问我们的工具和方法的相同知识,我实际上为我们的开发网络编写了文档。不开玩笑:真正的散文文档,用 Sphinx 手写,在存储库中跟踪,并发布在我们的服务器上。在其中,我从字面上详细说明了所有内容:

  • 如何创建和管理任务,
  • 如何提交代码以供审核,
  • 如何从存储库构建,
  • 如何在电脑上从零开始搭建开发环境,
  • 如何使用我们的 IRC 房间机器人,

……等等。

这具有使外部贡献者在同一页面上的额外好处。

我应该提到,清楚地记录这些工具不会为员工不使用它们留下任何借口。正确和定期使用开发工具是成功协作的关键组成部分。让团队中的每个成员都清楚这一期望!同时,留出空间让员工就他们正在使用的工具和流程提供反馈。方法论是为开发人员而存在的,而不是相反!

我已经在我们的开发文档上投入了很多时间,而且我知道我将来会在上面投入更多的时间。为公司中的每一种工具、每一种方法和每一个工作流程拥有一份规范的、最新的指南是值得的。

等待问题

一旦你清楚地陈述了期望,确定了如何完成工作,并获得了自由提问和获得帮助的许可,就让新员工独立。

当我第一次开始实习计划时,我觉得我需要干预出现的每一个问题。我不希望我的实习生陷入沮丧的任何砖墙。然而,我很快发现,我并没有真正帮助他们。令人沮丧的问题、烦人的结、顽固的错误——这些都是编码员工作的重要组成部分。我从解决一个特别困难的问题中学到的东西比我从大学整个学期的编程课程中学到的要多得多!

我学会了给我的实习生一个犯错的空间,让我只有在被问到时才参与进来。员工从他们挖的洞里爬出来比从你挖的洞里爬出来要容易得多。如果他们搞砸了,请客气地指出他们可以从这种情况中学到什么,并鼓励他们再试一次。

相反,当员工确实寻求帮助时,通过教他们如何自己解决问题来响应电话。分享你自己的经验,将他们指向文档和现有代码,但让他们拥有解决方案。

概括

  • 创建一个适合并补充正常工作量的正式培训计划。
  • 前两周用于初步适应 - 了解团队,熟悉工具,探索公司的项目。
  • 让每位员工有权提出问题并寻求你和其他同事的帮助。
  • 头两周后,不要让新人“轻松”进入他们的工作;用他们新的正常工作量把他们扔到最深处,教他们游泳。
  • 为你公司的所有工具和常见工作流程维护清晰、友好和详尽的书面文档。
  • 等到员工向你寻求帮助后再介入(除非你有管理方面的理由介入)。让他们自己犯错误。

继续阅读