关于不可知的语言:如何指导初级程序员

关于不可知的语言:如何指导初级程序员

How to mentor a junior programmer

有没有人对如何指导初级程序员有任何建议? 如果您曾指导过某人,您是否遵循了任何程序?

如果您过去曾接受过指导,那么您觉得哪种方法最有帮助?


尝试每天搁置30至60分钟,以便一起检查他们的代码。如果您无法做到这一点,那么只要他们提交代码,就尝试聚在一起检查他们的代码,除非这是非常基本的。让他们解释为什么选择替代他人的方法。这样的过程有助于建立良好的关系,并真正激发学生独立思考并能够捍卫自己的决定。学生不仅结识了一个值得信赖的平易近人,而且您几乎会立即注意到他们的代码和逻辑质量得到改善。

编辑:另外,如果您不能花那么多时间与下级进行共同审核,那么您可能不应该指导他们,而要看看其他人是否有允许这样做的时间表。指导的全部目的是积极地帮助学生的专业发展,如果没有给予他们适当的关注和指导,他们就不会学到很多东西。


我有机会在一家小型软件公司中担任实习生(两个)之一,并有机会从事他们拥有的"几乎是新的"项目。他们让我设置了所需的一切,并向我介绍了项目的实际含义(诸如需求等基本内容)。

最初,我们要做一些次要的任务,例如研究与项目有关的事物(它们为我们提供了主题列表)。我认为,这是为了看看我们能应付多少事情,因为我们需要查找和研究的东西并不那么琐碎,并且花费了大约2周的时间(算上我们必须为此创建的基本演示) 。该测试阶段实际上是在没有太多"指导"的情况下完成的。

但是,在那之后,我们可以进行实际项目本身。这也是我们开始结对教练的那一刻,采用与结对编程类似的方式,除了我们三个人(两名实习生和一名"教练")。

我们从他那里学到了很多东西,但这是非正式的,他的举止不像"全知听我"这个家伙。当我们有建议时,他会倾听并与我们一起思考它们是否有好处。或就为什么不应该以这种方式提出想法。...现在我想到了,他积极鼓励我们提出建议,并思考做事的更好方法,而不仅仅是坐在那里订单"来自某个可能比您更好的人。

简而言之:

  • 让初级程序员(大部分)靠自己工作来研究手头的材料,给他一些次要的TODO东西,例如查找信息或构建小型演示。
  • 检查他定期做的工作,并建议他是否有更好的做事方法。还要指出他实际上做得很好的项目,这样他以后就会记住它们。
  • 让他从事一个真实的项目,并通过在同一项目中一起工作来指导他,并在他有疑问时给他建议。
  • 努力必须来自两个方向:鼓励他提出问题,挑战"目前的工作方式"。向他询问有关他认为应该如何做的问题,并给他您的意见。
  • 使其"令人愉快"-不要让它看起来像您在下订单。


在一个有大量内部IT的大公司实习期间,我与一位导师结为一对。无论从技术技能还是业务技能上,这种实践无疑对我的职业发展都有帮助。以下是指导如此出色的一些原因:

  • 可信:这位导师具有8年以上的经验,并且在领导和培训方面有丰富的经验可供借鉴。他经历过不同的挑战,在不同的环境中工作,因此他有很好的见解。
  • 真诚:指导受到上司的鼓励,但并不正式,以至于无法通过动议进行。导师想指导,我希望有人可以向他学习。
  • 热情:导师喜欢他所处的领域,他正在解决的问题以及他正在使用的技术。当我来到他的翅膀下时,我发现这具有传染性。
  • 敏锐而清晰:导师认真地处理问题,并简洁地加以表述。我们的讨论中没有太多的模糊性;我们找到问题的根源,他指导我解决问题和采取行动的明智路线。
  • 有意义的:我正在与导师一起做的工作是有意义的工作,而不仅仅是锻炼自己以保持忙碌或提高技能的能力。通过共同完成一项对组织有实际帮助的任务,这有??助于集中我的兴趣并使指导过程合法化。

在我的第一份工作中,有一个真正耐心的家伙,总是会帮助我解决眼前的问题,然后教给我一些重要的基本原理。我之所以喜欢它,是因为他会帮助我保持生产力,同时教会我如何成为一个更好的程序员。


因为我不得不在面试中解释为什么我要合作(除了需要钱),所以经理确保我的第一个项目允许我从事我认为是薄弱的领域的工作:很少有Linux经验(我选择了一个仅限Linux的研发团队,因此我将不得不学习),不知道有用的文本编辑器(我真的很想学习Vim),以及如何学习另一种编程语言(与学习编程语言不同的方法) 。他告诉我,我得到了一段时间的学习报酬。

我通过阅读书籍学得最好,所以在为Dummies笑了Unix之后(是的!我不是唯一一个有时认为它晦涩难懂的人),我首先从Unix和Sobell的Linux命令实用指南着手。之后,我打印了Vim文档并开始阅读。然后,我浏览了几本关于Python的书籍,这是我的第一个项目的语言。一直以来,我总是需要对这些事情感到满意(据我所了解,这是个真正的问题),然后开始为以前的合作社项目添加功能。

正如Kamikaze Mercenary所说,我现在意识到每天或每两天与某人见面进行代码审查真是太棒了。


我想我会是大三学生:)我认为我很看重非正式的方法。这可能在很大程度上取决于您和您的受训者的性格,但是我想说,如果您没有自负的话,您将学得最好。破冰,确保双向都有反馈。诸如代码审查(两种方式都可以)和偶尔的配对编程之类的工作可能会起作用,而且如果匹配得当,它也可能会很有趣!


问他们接下来将如何尝试完成任务。从"我不知道该怎么做"到"好吧,我会尝试一下,但是..."这一类可以给出一个概念,使他们认为自己的想法可能对起点有用。

快速查看他们想要做什么并提供提示,以便他们找出问题所在。这不是给出"仅删除这一行代码"的答案,而是建议他们查看其中存在的内容以及所有必要的内容


根据我的经验,在指导某人时,让受训者真正想要了解更多信息非常重要。

永远不要用勺子喂它们。而是将他们指向有价值的事物,并让他们在正在使用的项目中利用他们正在学习的新信息。如果不付诸实践,知识是无用的。因此,鼓励您的受训者编写代码,代码,代码。


这是我的简短列表:

结对编程-这对很多事情都很有帮助,例如增强各种想法和实践。当您与经常使用Resharper的人结对时,适应它会容易得多。

非正式聊天-在这里,我们可以去喝酒,到外面让别人抽烟,一起吃午饭等。在离开办公桌的同时,讨论可能与立即完成工作有关,或者可能是可以帮助某人的游戏提升一两个等级的抽象哲学知识。谈论即将到来的各种技术或即将发生的变化可能会令人兴奋,也有助于形成纽带。

反馈和建议-这是在上述两种情况下都发生的情况。戴尔·卡耐基(Dale Carnegie)的著作《如何赢得朋友并影响人们》可帮助理解各种人际关系动态,虽然听起来很技术性,但实际上只是关于如何以各种方式激励他人。这里的关键点是要知道如何留下面包屑来学习一些实践,例如在提示某事后提示而不是仅仅给出答案。我有很多数学老师因我如何发展这种技能而对此有天赋。

因此,其中的一部分仅仅是激励他人,并试图引导他们,因为当某人自己解决某件事时,这可能是一种赋权和启发性的体验。 ,"我做到了!没错,莫伊,您的确是真的!"发生这种情况时,自言自语非常好。


几年前,我在一家小型公司工作,在第一天,我得到一份要完成的小任务清单-对代码进行一些小的更改,查找并修复项目中的一个小错误。它确实帮助我向导师提出正确的问题,并使自己熟悉环境和代码库。这些任务很容易完成,因此在转向更大的任务之前,我有一点自信。

这种指导方式确实对我非常有效,因此我打算与我们的新同事一起做。


我建议开始提供您所拥有的部分实际作业,并尽一切可能使用他的代码。换句话说,训练他替代自己。

这样,您将致力于分配时间与小学生一起工作,他将能够看到"现实生活"。通过处理实际的作业并听到生动的反馈,他将能够使p更快地提高速度。

这种方法的缺点是,它可能对您的特定项目过于狭narrow。因此,一定要向受训者展示可能的替代方案,并鼓励进行权衡分析以扩大其专业视野。


我以前曾指导过我下面的几个下辈子。我的方法因人而异,略有不同,取决于他们的学习方式。

简而言之,我会尽可能地给下属小型的,独立的项目,并给他们一个相对固定的时间来完成任务。任务完成后,我将回顾他们的方法,代码和解决方案,并提出改进建议或更好的解决问题的方法。我认为通过这种方式,他们不会感到不知所措,无法参与更大的项目。

希望这个对你有帮助。


推荐阅读