如何指导一个初级程序员
有没有人有任何build议如何指导一个初级程序员? 如果你辅导过某人你有没有遵循任何程序,或者是非常非正式的?
如果你曾经受过指导,你认为哪些事情最有帮助?
尽量在30-60分钟之间放置一天,一起审查他们的代码。 如果你不能做到这一点,那么当他们做代码提交的时候,尽量一起来检查他们的代码,除非它是非常基本的。 让他们解释他们为什么select他们取代别人的方法。 这样的过程有助于build立良好的关系,并且真正激发学生独立思考,并能够捍卫自己的决定。 学生不仅最终得到了他们可以信任的人,而且他们几乎立即就会注意到他们的代码和逻辑质量的提高。
编辑 :另外,如果你无法花这么多时间与你的小辈进行共同评估,那么你可能不应该对他们进行指导,而是看看是否有其他人有一个允许的时间表。 导师的整个目的是积极协助学生的专业发展,如果不给予适当的关注和指导,他们不会学到太多东西。
我曾有机会在一家小型软件公司当实习生(两人中的一员),并有机会在一个“几乎是新的”项目上工作。 他们让我设置了所需的一切,并介绍了项目的实际情况(基本的东西,如要求等)。
起初,我们要做一些小任务,比如研究与项目有关的事情(他们给了我们一个主题列表)。 我认为,这是我们能够处理好自己的事情,因为我们需要查找和研究的东西并不是那么微不足道,花了两个星期左右的时间(算上我们必须为之创build的基本演示) 。 实际上,testing阶段实际上没有太多的“指导”。
但是,在这段时间之后,我们可以在实际的项目上工作。 除了我们三个人(两个实习生和一个“教练”)之外,这也是我们开始一起进行教练的时刻,与编程编程类似。
我们从他身上学到了很多东西,但是却是一种非正式的方式,他不像“全知道听我说”的人。 当我们有build议的时候,他会听我们的想法,看他们是否有什么好处。 或者说为什么一个想法不应该这样做……现在我想起来,他积极地鼓励我们提出build议,想办法做更好的事情,而不是坐在那里“命令“的人可能知道什么做得更好,然后你。
所以简而言之:
- 让初级程序员自己工作(主要是)自己研究手头的资料,给他一些小的TODO的东西,比如查询信息,或者build立一些小的演示。
- 检查他经常做的工作,并告诉他是否有更好的方法来做事情。 同时指出他实际上做得很好的项目,这样他就会记住这些。
- 让他在一个真正的项目上工作,并在同一个项目中一起工作,在他有问题时给他build议。
- 这个努力必须来自两个方面:鼓励他提出问题,挑战“目前的做法”。 问他如何认为应该做的问题,并给他你的意见。
- 让它“愉快” – 不要让它看起来像你正在发出的命令。
在一家拥有大量内部IT的大公司实习期间,我与一位导师配对。 这种做法绝对有助于我的职业发展,无论是在技术和业务技能方面。 以下是指导工作如此成功的一些原因:
- 可信 :导师拥有8年以上的经验和成功的背景,可以在领导和培训中使用。 他经历了不同的挑战,在不同的环境中工作,所以他有一个很好的视angular。
- 正版 :导师鼓励导师,但不是那么正式,以至于不能通过议案进行练习。 导师想要导师,我想要一个人学习。
- 激情 :导师喜欢他所在的领域,他正在解决的问题以及他所使用的技术。 当我来到他的边缘时,我发现这是有传染性的。
- 尖锐和清晰 :导师严谨地接近问题,简洁地构思。 我们的讨论中没有太多的模糊性。 我们find了问题的根源,他指导我解决问题和行动的明智的课程。
- 有意义的 :我所做的工作与导师是有意义的工作,而不仅仅是一个保持忙碌或加强技能的练习。 通过共同致力于有效帮助组织的任务,帮助集中我的兴趣并使指导过程合法化。
在我的第一个工作岗位上,有一个真正耐心的家伙,总能帮助我解决眼前的问题,然后教我一些重要的基本原理。 我喜欢这个,因为他会帮助我保持高效,同时教会我如何成为一个更好的程序员。
我会是初中,我猜想:)我想我会重视一种非正式的方法。 这可能很大程度上取决于你和你的受训者的angular色,但是如果你没有自尊的话,我会说你学得最好。 打破冰块,确保有双向的反馈。 像代码审查(两种方式?)和偶尔的结对编程可能会起作用,如果匹配得很好,也可能是很有趣的!
因为我不得不解释为什么在面试时我想合作(除了需要钱),所以我的经理确信我的第一个项目允许我在我所认定的弱点领域工作:非常less的Linux经验(我select了只有Linux的研发团队,所以我会被迫学习),不知道一个有用的文本编辑器(我真的想学习Vim),以及如何学习另一种编程语言(与学习编程语言的学习方式非常不同) 。 他告诉我,我有一段时间的学习。
通过阅读书籍,我学到了最好的东西,所以在笑谈了Unix for Dummies之后 (我不是唯一一个认为这是晦涩难懂的人)我开始在Unix中使用Unix和Sobell的Linux命令实用指南 。 之后,我打印出Vim文档并开始浏览它。 然后,我翻阅了几本关于Python的书,这是我第一个项目的语言。 我总是需要对这些事情感到满意(这是我现在所了解的真正的问题),然后开始为以前的合作社项目添加function。
我明白现在每个或两个人跟代码审查会面是非常棒的,Kamikaze Mercenary说。
询问他们接下来会做什么来完成任务。 这可以从“我不知道该做什么”到“呃,我会尝试这个,但是……”这个类别,从这个angular度来看,他们有自己的想法,可能对于一个起点有用。
快速看看他们想做什么,并提供提示,以便他们找出问题。 这不是给出“只要拿出这行代码”的答案,而是build议他们看看那里有什么,这是否是必要的
我会build议开始给你的真实任务的一部分,并尽一切可能使用他的代码。 换句话说,训练他是为了替代你自己。
这样你就可以投入时间与大三的工作,他将能够看到“现实生活”。 通过在真实的任务上工作,听到活泼的反馈,他将能够快速地获得速度。
这种方法的缺点是它可能会把你的重点放在你特定的项目上。 所以一定要向受训者展示可能的select,并鼓励权衡分析来拓宽他的专业视野。
几年前,我曾经在一家小公司工作,在第一天,我得到了一个小任务完成列表 – 在代码中做一些小的修改,find并修复项目中的一个小错误。 这真的帮助我向导师提出正确的问题,并熟悉环境和代码库。 这些任务很容易完成,所以我有一点自信,在转向更大的任务之前。
这种指导方式对我来说真的很有用,所以我打算对我们的新同事也这样做。
这将是我的短名单:
结对编程 – 这对许多事情都有帮助,比如强化各种想法和做法。 当你与经常使用Resharper的人配对时,习惯Resharper更容易。
非正式的聊天 – 这是我们去喝酒的地方,去外面让别人喝烟,一起去吃午饭等等。当离开办公桌时,讨论可能与立即完成的工作有关,或者可能是抽象的哲学东西,可以帮助把一个人的游戏一两个。 谈论即将到来的各种技术或改变即将到来的事情可能会令人兴奋,并帮助形成债券。
反馈意见和build议 – 这是以上两种情况发生的情况。 像戴尔·卡耐基(Dale Carnegie)的“如何赢得朋友和影响人们”这样的书籍可以帮助理解各种人际关系的dynamic,而这听起来相当技术性的,其实就是如何以各种方式激励别人。 这里的一个关键点是要知道如何留下一些面包屑来select一些做法,比如提示一些事情之后给出暗示,而不是仅仅给出答案。 我有各种各样的math老师为我如何发展了这个技能而赠送了这个礼物。
所以这一部分只是激励对方,试图引导他们,就像有人为自己想出一些东西一样,这可能是一种赋予权力和启发性的经验。 “我做到了!没错,你的确是!” 发生这种自我对话是相当不错的。
根据我的经验,在指导某人时,对于导师来说,真正需要了解更多信息是非常重要的。
永远不要喂它们。 相反,将它们指向有价值的东西,让它们利用他们正在使用的项目中学到的新信息。 如果不付诸实践,知识就毫无用处。 所以鼓励你的mentoree编码,编码,编码。
之前我曾经辅导过几个年轻人。 根据他们的学习方法,我的方法稍微有点不同。
简而言之,我尽可能地给初中人员一些小型的,自给自足的项目,并给他们一个相对固定的时间来完成任务。 一旦任务完成,我会审查他们的方法,代码和解决scheme,并提出改进build议或更好的方法来处理这个问题。 我想这样,他们不会感到不知所措,成为一个更大的项目的一部分。
希望这个对你有帮助。