如何指导初级程序员

时间:2008-08-24 14:05:32

标签: language-agnostic

有没有人对如何指导初级程序员有什么建议?如果你曾指导某人,你是否遵循了任何流程,还是非常非正式的?

如果您过去曾被指导过什么样的事情,那么您认为哪些事情最有帮助?

12 个答案:

答案 0 :(得分:44)

尝试每天留出30-60分钟来一起审核他们的代码。如果你不能这样做,那么除非它是非常基本的,否则每当他们进行代码提交时,都会尝试聚在一起审查他们的代码。让他们解释为什么他们选择他们采取的方法来代替其他人。这样的过程有助于建立良好的关系,并且真正激发学生自己思考并能够捍卫他们的决定。学生不仅最终会找到一个他们可以信任的人,而且你会发现他们的代码和逻辑质量几乎立即得到了提高。

编辑:另外,如果您无法花费这么多时间与您的大三学生共同审核,那么您可能不应该指导他们,而是看看是否有其他人有一个时间表会允许的。指导的全部意义在于积极地帮助学生的专业发展,如果没有给予他们适当的关注和指导,他们就不会学到很多东西。

答案 1 :(得分:18)

我有机会在一家小型软件公司担任实习生(两人之一),并有机会参与他们所拥有的“几乎全新”的项目。他们让我设置了所需的一切,并向我介绍了项目实际上是什么(基本的东西,如需求是什么等)。

起初我们做了一些小任务,比如研究对项目很重要的事情(他们给了我们一个主题列表)。我认为,这是为了看看我们能够处理多少事情,因为我们需要查看和研究的事情并不是那么微不足道,而且需要花费2周左右的时间(计算我们必须为它创建的基本演示) 。实际上,测试阶段确实没有太多“指导”。

然而,在那段时间之后,我们可以在实际项目本身上工作。这也是我们开始以pair programming的方式开始一起训练的那一刻,除了我们三个人(2个实习生和1个'教练')。

我们从他身上学到了很多东西,但这是以非正式的方式,而且他的行为并不像“无所不知 - 倾听我”。当我们提出建议时,他会倾听并与我们一起思考他们是否有任何好处。或者说出为什么不应该以这种方式完成一个想法...现在我想到了,他积极地鼓励我们提出建议,并考虑更好的做事方式,而不仅仅是坐在那里那些可能知道该怎么做比你好的人的命令。

简而言之:

  • 让初级程序员(主要)独自工作,研究手边的材料,给他一个小的TODO列表,比如查找信息或构建小型演示。
  • 检查他经常做的工作,并告诉他是否有更好的办法。同时指出他实际上做得很好的项目,这样他以后就会记住那些。
  • 让他参与一个真实的项目,并在同一个项目中共同指导他,在他有疑问的时候给他建议。
  • 努力必须来自两个方向:鼓励他提问,挑战'目前的做法'。向他询问他认为应该如何做的问题并给他你的意见。
  • 让它“愉快” - 不要让它看起来像是在发号施令。

答案 2 :(得分:13)

在一家拥有大量内部IT的大型公司实习期间,我与一名导师配对。这种做法无疑在技术技能和商业技能方面帮助了我的职业发展。以下是指导如此成功的一些原因:

  • 可信:导师拥有8年以上的经验,并且在领导和培训方面有着丰富的背景。他经历过不同的挑战,在不同的环境中工作,所以他有很好的视角。
  • 正版:导师鼓励导师,但不是那么正式,以使其成为通过动议的练习。导师想要指导,我希望有人可以学习。
  • 激情:导师喜欢他所在的领域,他正在解决的问题,以及他正在使用的技术。当我走到他的翅膀下时,我发现这具有传染性。
  • 锐利和清晰:导师批判性地处理问题并简明扼要地勾勒出来。我们的讨论中没有太多的模糊性;我们找到了问题的根源,并指导我解决问题和行动的明智课程。
  • 有意义:我和导师一起做的工作是有意义的工作,而不仅仅是一项保持忙碌或提高技能的练习。通过联合开展有形帮助组织的任务,这有​​助于集中我的兴趣并使指导过程合法化。

答案 3 :(得分:6)

在我的第一个工作地点,有一个非常耐心的家伙,总能帮助我解决我当前的问题,然后教我一些重要的基本原则。我喜欢这个,因为他会教我如何成为一个更好的程序员,帮助我保持高效。

答案 4 :(得分:3)

我想成为大三学生,我想:)我认为我非常重视非正式的方法。它可能在很大程度上取决于你和你的被指导者的角色,但是如果你没有自负的话,我会说你学得最好。打破僵局,确保两个方向都有反馈。像代码审查(两种方式?)和偶尔的结对编程之类的东西都可以工作,如果有一个很好的匹配,它也可能很有趣!

答案 5 :(得分:3)

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

我通过阅读书籍学到最好的东西,所以在对 Unix for Dummies 轻笑之后(是的!我不是唯一一个认为这有点晦涩难懂的人)我开始用 Unix在一个坚果壳和Sobell的 Linux命令实用指南。之后我打印出Vim文档并开始浏览它。然后我浏览了几本关于Python的书,这是我第一个项目的语言。我得到了所有的时间,我需要对这些事情感到舒服(这是真正的问题,正如我现在所理解的那样),然后开始为之前的合作项目添加功能。

我现在意识到,如同Kamikaze Mercenary所说,每天或每两天与某人会面以进行代码审查会非常棒。

答案 6 :(得分:2)

这是我的短名单:

结对编程 - 这对许多事情很有帮助,比如加强各种想法和实践。当你经常使用它时,习惯使用Resharper会更容易。

非正式聊天 - 这是我们去喝酒,去外面找人抽烟,一起吃午饭等等。在离开办公桌时,讨论可能与工作立即或它可能是抽象的哲学东西,可以帮助将某人的游戏提升一两个档次。谈论各种即将到来的技术或即将发生的变化可能会令人兴奋,并有助于形成联系。

反馈和建议 - 这是上述两种情况中发生的情况。 Dale Carnegie的“如何赢得朋友和影响人”等书籍可以帮助理解各种人际关系动态,虽然这听起来很技术性,但实际上只是关于如何以各种方式激励他人。这里的一个关键点是要知道如何留下一些面包屑来获取一些实践,比如在暗示某些事情之后给出提示而不仅仅是给出答案。我有各种各样的数学老师,因为我开发了一些这样的技能,所以有一个礼物。

因此,这部分仅仅是激励对方并试图引导他们,因为当有人为自己解决问题时,这可能是一种赋权和启发性的体验。 “我做到了!那是对的,莫伊,你的!”当它发生时,那种自我对话是相当不错的。

答案 7 :(得分:2)

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

永远不要用勺子喂它们。而是将它们指向有价值的东西,并让它们利用他们正在使用的项目中学习的新信息。如果不付诸实践,知识就毫无用处。所以鼓励你的被指导者编写代码,编码。

答案 8 :(得分:2)

询问他们接下来会尝试完成任务的内容。这可以让我们知道从“我不知道该做什么”到“嗯,我会尝试这个但是......”的类别是他们有自己的想法可能对起点有用

快速浏览一下他们想做什么并提供提示,以便他们找出问题所在。这不是给出答案,“只需取出这行代码,”建议他们看看那里有什么,这是必要的

答案 9 :(得分:1)

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

通过这种方式,你将承诺分配时间与大三学生一起工作,他将能够看到“现实生活”。通过真正的作业和听取生动的反馈,他将能够快速获得速度。

这种方法的缺点是它可能会过于狭隘地关注您的特定项目。因此,请务必向受训者展示可能的替代方案,并鼓励权衡利弊分析,以拓宽他的专业视野。

答案 10 :(得分:1)

几年前,我在一家小公司工作,第一天我收到了一份完成小任务的清单 - 在代码中做一些小改动,找到并修复项目中的一个小错误。这真的帮助我向我的导师提出了正确的问题并熟悉了环境,代码库。这些任务很容易完成,所以在转向更大的任务之前,我有一点自信。

这种辅导方式对我很有帮助,所以我打算和我们的新同事一样。

答案 11 :(得分:0)

我曾经指导过几个初级人员。根据他们学习的方式,我的方法略有不同。

简而言之,我尽可能地为初级人员提供了小型,自成一体的项目,并给他们一个相对固定的时间来完成任务。任务完成后,我会检查他们的方法,代码和解决方案,并提出改进建议或更好的方法来处理问题。我认为这样他们就不会感到不知所措,成为一个更大的项目的一部分。

希望这有点帮助。