47

有人对如何指导初级程序员有任何建议吗?如果您指导过某人,您是否遵循了任何流程,还是非常非正式的?

如果您过去曾接受过指导,您觉得哪种事情对您最有帮助?

4

12 回答 12

48

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

编辑:另外,如果您无法花这么多时间与您的初级人员共同审查,那么您可能不应该指导他们,而是看看其他人是否有允许这样做的时间表。辅导的重点是积极帮助学生的专业发展,如果不给予适当的关注和指导,他们就不会学到很多东西。

于 2008-08-24T14:14:25.510 回答
18

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

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

但是,在那段时间之后,我们可以处理实际项目本身。这也是我们开始一起接受指导的时刻,以类似于结对编程的风格,除了我们三个人(2 名实习生和 1 名“教练”)。

我们从他那里学到了很多东西,但都是非正式的,他的行为不像“全知的听我说”的人。当我们有建议时,他会倾听并与我们一起思考它们是否有好处。或者就为什么一个想法不应该那样做给出他的看法......现在我想到了,他积极鼓励我们提出建议,并考虑更好的做事方式,而不是仅仅坐在那里“接受”来自可能比你更清楚该做什么的人的命令。

简而言之:

  • 让初级程序员(大部分)自己工作以研究手头的材料,给他一个小 TODO 的列表,例如查找信息或构建小型演示。
  • 定期检查他所做的工作,并建议他是否有更好的方法来做事。还要指出他实际上做得好的项目,这样他以后会记住的。
  • 让他从事一个真正的项目,并通过在同一个项目中一起工作来指导他,当他有问题时给他建议。
  • 努力必须来自两个方向:鼓励他提出问题,挑战“目前的做法”。问他他认为应该如何做的问题,并给他你的意见。
  • 让它“愉快”——不要让它看起来像你在发号施令。
于 2008-08-24T14:37:46.890 回答
14

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

  • 可信:导师有 8 年以上的经验和丰富的背景,可以在领导和培训方面借鉴。他经历过不同的挑战,在不同的环境中工作,所以他有很好的视角。
  • 正版:导师鼓励了导师,但没有正式到使其成为通过议案的练习。导师想指导,我希望有人可以学习。
  • 热情:导师热爱他所在的领域、他正在解决的问题以及他正在使用的技术。当我来到他的翅膀下时,我发现这具有传染性。
  • 敏锐而清晰:导师批判性地处理问题并简明扼要地提出问题。我们的讨论没有太多的模糊性。我们找到了问题的根源,他指导我解决问题和采取行动的明智路线。
  • 有意义:我和导师一起做的工作是有意义的工作,而不仅仅是保持忙碌或提高技能的练习。通过共同完成一项对组织有切实帮助的任务,这有​​助于集中我的兴趣并使指导过程合法化。
于 2008-08-24T20:48:22.693 回答
6

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

于 2010-02-01T02:42:56.323 回答
3

我想我会成为大三学生:) 我认为我会重视一种非正式的方法。这可能很大程度上取决于你和你的学员的性格,但我想说,如果你没有自负,你学得最好。打破僵局,确保双向反馈。诸如代码审查(两种方式?)和偶尔的结对编程之类的事情可能会起作用,如果有一个很好的匹配,它也可能会很有趣!

于 2008-08-24T14:16:36.487 回答
3

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

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

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

于 2008-12-24T17:45:09.310 回答
3

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

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

于 2010-02-01T02:27:03.170 回答
2

这是我的短名单:

结对编程——这对很多事情都有帮助,比如加强各种想法和实践。当您与经常使用它的人配对时,习惯 Resharper 会容易得多。

非正式聊天 - 这是我们去喝一杯、出去找人抽烟休息、一起吃午饭等的地方。离开办公桌时,讨论可能与立即完成的工作有关,也可能是抽象的哲学内容,可以帮助将某人的游戏提升一两个档次。谈论各种即将到来的技术或即将到来的变化可能会令人兴奋,也有助于建立联系。

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

因此,其中一部分仅仅是激励他人并试图引导他们,因为当有人为自己想出一些东西时,这可能是一种授权和启发性的体验。“我做到了!没错,moi,真的是你的!” 当它发生时,那种自言自语是相当不错的。

于 2009-12-01T17:11:07.587 回答
2

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

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

于 2012-04-15T16:57:38.713 回答
1

我建议您开始分配您的部分实际作业,并让一切都能够使用他的代码。换句话说,将他训练为自己的替代品。

通过这种方式,您将致力于分配时间与 Junior 一起工作,他将能够看到“真实生活”。通过处理真实的任务并听取生动的反馈,他将能够让 p 更快地加快速度。

这种方法的缺点是它可能会过于狭隘地关注您的特定项目。因此,一定要向学员展示可能的替代方案,并鼓励进行权衡分析以拓宽他的专业视野。

于 2008-08-24T14:52:52.017 回答
1

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

这种指导方式对我非常有效,所以我计划对我们的新同事做同样的事情。

于 2008-08-24T15:06:25.683 回答
0

我以前曾指导过我手下的几个初级人员。我的方法因人而异,略有不同,具体取决于他们的学习方式。

简而言之,我尽可能给初级人员一些小的、独立的项目,并给他们一个相对固定的时间来完成任务。任务完成后,我将审查他们的方法、代码和解决方案,并提出改进建议或更好的解决问题的方法。我认为这样他们就不会因为参与一个更大的项目而感到不知所措。

希望这个对你有帮助。

于 2008-08-24T14:37:16.750 回答