为什么高级开发人员教学生

Veeam,我们有一个教育项目,它的名字叫Veeam Academy 。 它致力于C#开发实践。 如果您不讲细节,那么本质就是:我们招收了高年级学生,并在三个月内根据周围的现实情况,带给他们纯粹的理论知识。 这是通过讲座的帮助来完成的,在讲座中他们展示了他们设法在大学中给他们带来的无聊理论的实际含义,并在一个共同的项目的帮助下,在整个培训过程中参与了他们的发展。



在学院首次成立的路上,我们面临着许多有趣的问题,包括组织和法律方面的问题。 (如果有人不知道,培训是一项许可活动,因此即使您确实愿意,也不能只是开始学习一些东西,以免增加监管机构对您自己的兴趣。)


但是,您问学生从哪里获得这些相同的实践技能? 答案在于我们的开发人员,他们完全自愿地充当顾问,为孩子编写代码审查并简单地分享他们的经验。 此外,只有高级开发人员才能参加此活动。 我们决定与他们一起(从学院毕业3次)来发现:


  • 他们为什么将宝贵的时间花在学生身上?
  • 成为新手导师感觉如何?
  • 如何/为什么/为什么要使用遗留代码?
  • 现代教育中缺少什么?
  • 人们为什么要去开发盒装产品?

我们进行了一系列以Dud风格进行的视频采访,然后将摘录一些最有趣的答案。 现在已经发布了两个完整的采访(它们在文章中),但是不久将发布另外三个。


演员:


Alexander Baranov -Veeam备份和复制开发经理。
Artyom Grigoriev-经验丰富的开发人员。
Dmitry Babushkin-高级开发人员。
Kirill Lukyanov -Hyper-V开发部负责人,以简单的方式担任项目负责人。
Philip Guzeev-经验丰富的开发人员。


Veeam学院的想法是如何诞生的?


亚历山大 -这个想法是联合的。 在无数次面试过程中,人们对失踪的候选人有了了解。 许多初级人员来到我们这里(初级开发人员)。 通常,这些人是最近刚从该研究所毕业的,只有大约1年的工作经验或根本没有工作经验。 通常,他们缺乏实践。 这意味着需要做一些事情,以便如果不能完全消除这一缺陷,那么至少将填补主要空白。 我们开始考虑如何将我们现有的经验纳入为期两个或三个月的简明课程中-这才是开始。


在数学系教授的算法和数据结构课程本身并不差。 问题在于它们通常与开发中的实际应用隔离开来,因此它们吸收得不是很好。 我们正在尝试对这种知识进行一些整理,并使其实际运作。 不仅是“技术如何运作”,还包括整个流程如何运作:团队如何运作,任务如何分配,团队成员如何同步等等。


您是如何到达学院的?


Artyom-他们提出以评论员的身份参加该学院,我想:“为什么不呢?”,与此同时,我将刷新自己的知识并获得演讲的经验。 这是我几乎是大学的第一次经历,所以我很担心。


另一方面,学院是一个雇用更多员工的机会,无论如何,这都是一次有趣的经历,也是了解知识转移的一种机会。


菲利普 -根据建议,立即同意。 看到人们有什么思维方式,注意到自己的新事物总是很有趣。 分享知识总是很有用的。


西里尔 -当项目开始时,吸引开发人员参与该过程只是一个想法。 这是有道理的,因为 我们在实践中经常遇到特定的技术问题,并且我们知道很多方面可以分享。 我自发地同意了一个建议,当我开始更加认真地处理这个问题时,已经有了目标和实现这些目标的愿望。



你在学院做了什么?


德米特里(Dmitry) -为在线测试准备了问题,参与了对学生的选择和访谈,还担任了某些学生的导师。


亚历山大 -我一开始就按照我的想法和计划进行了工作,我们应该做些什么并告诉他们-以及我们(在候选人中)所缺少的,这对来这所学院的人来说很有趣。


菲利普(Philip) -在学院期间,我曾经是一个导师,并且是一个修改学生代码并指导他们走上真正道路的人,并提供各种建议。


不后悔花了时间吗?


德米特里 -不,当然。 我帮助雇用了三个才华横溢的人,甚至在邻近部门,但最终,如果您愿意,我们有一个大团队,一个家庭。 下一个部门的人越多,他们为我们完成任务的次数就越少=)


西里尔 -我想-这是提高我的社交能力和公开演讲技能的好机会。 我们都知道,这个主题对许多开发人员来说都是可怕的,因此我克服了恐惧。
结果,我雇用了两个学生,他们正在顺利地工作。


你为什么成为导师?


德米特里(Dmitry) -我喜欢朝各个方向发展,这是一个证明自己在所有事情上都很好的机会。 在年轻的暴力时代,思想虽然渗入了教学法,但尽管有一定的经验,但并未奏效。


菲利普 -什么都没有发生。 例如,人们不仅会像这样来到学院,而且例如为了稍后在团队中占有一席之地。 指导的作用尤其是选择团队中的有效人员。


现代学生缺乏什么?


德米特里(Dmitry) -很多有才华的人来了都很好,但是不幸的是,进展缓慢。 他们还没有实践经验,他们的大脑还没有为编程而重建。 他们无法快速找到任何解决方案;他们需要安静地坐下来,在舒适的氛围中思考。 当您在家解决一些学术问题时,这不是问题,但是当这些问题合并到工作过程中时,这些人可能根本就不愿意。


西里尔(Cyril) -如果您指定大型主题,那么大学之后的主要知识空白就是多线程编程。 根据对我们测试任务的分析来看,这可能是最灾难性的领域。


但是,我认为这是缺乏实践的结果。 周围有足够多的理论,但通常,在大学中,他们只提供单方面的理论。 例如,在C#中,它们执行任务,异步调用并解析它们。 这种机制很方便,但不允许您深入了解。 学生本人必须去了解,但几乎没有人知道。 好奇心是件好事,但往往没有足够的时间来做。



学生代码审查有何有趣之处?


Artyom-原则上,看看其他人的代码本身很有趣。 我们在工作流程中没有使用很多创新,所以我什至学到了一些相对新颖的技术。


学生们分别在第十七工作室的第七个锐器上写作,有些时候我还没有在实践中遇到过。 例如异步/等待。


可以说,代码审查是编写好的代码的实践。 当您自己编写它时,您会不由自主地想:“好吧,您可以得到它,这里更好,这里更糟,然后我会重做,等等。” 而且,当您查看其他人的代码时,便没有限制,您需要在午餐前修复10个错误。 您可以从容地钻研坏处,可以做得更好的地方以及完全重做的地方。 这有助于从外部查看代码编写的过程,并且将来在解决如何进行调用方案,类责任等方面将更容易解决。



您希望学生接受面试吗?


德米特里 -我想看看他的做法。 人们来,说他们读例如里希特。 我没看过里希特,但是当您开始与他们交谈时,很明显他们发现了他们自己问题的解答,仅此而已- 他们没有[认真地]读过它。 他们翻阅了一本书,但对他写的内容不感兴趣,对.Net Framework的内部结构不感兴趣。 如果您是专业人士,这是一种有效的方法。 但是,如果您在第一年就看到了C#,并开始研究一些实现细节,以及如何将所有内容安排在后台,这可以确保您开始踏入耙子。 而且,如果此时您进入团队项目,那将不可避免地影响您的结果。 每个人都会责骂您,您的动力会下降,并且会出现有关进一步工作的问题。


有空闲时间的另一方面。 即使他的[学生]眼睛在灼痛,但他将花两个小时在去学院的路上,加上他的兼职工作,加上生活上的麻烦和家里饿了的猫,很明显他没有空闲时间,他会像火柴一样燃烧三个月的学习。


教导如何“根据需要正确地”编写代码难吗?


菲利普 -您不能说“您做对或错。” 没有这样的事情。 您制作受支持的代码或制作不受支持的代码。 假设您有一项任务是在5个小时的黑客马拉松中起草一个项目。 而且,当然,您不会考虑架构的美和代码的美。 “您搞砸了”才能工作-正确的是。 另一方面,如果您在(一家大公司的)企业中工作,则您已分配了时间来完成任务和代码的某些要求,这就是我们正在努力追求的目标。


亚历山大 -有两种情况。 如果一个人已经在另一家食品公司做过类似的事情,那么他将相对容易地倒入。 市场使流程标准化。
另一件事是当您已经有经验,但是您做了其他一些事情时。 这就提出了一个问题,“您想如何进一步发展?” 如果您的目标是在一家大公司工作,然后转移到另一个国家,那么您将不得不忍受一段艰难时期。 就像是乘公共交通工具后的私家车(反之亦然):起初既痛苦又悲伤,但后来变得非常舒适和方便。


德米特里(Dmitry) -实际上,如果一个人具有最低技能水平,则不必“打破”它。 但是,当有经验的程序员来时,他们已经有了一套自己的实践,一套自己的代码风格,可以与我们的代码风格有所不同-对话开始了:“为什么您禁止我使用vars? 我有这么好的代码,没有一个单一的类型是可见的,一切都与函数式编程中应该的一样。” 但是有了这样的人,那就更困难了。
如果这是一名学生,即使是去年的学生,在github上有十几个项目,那么他根本就没有时间学习任何恶性行为。 好吧,和完全“纯”的人一起工作是一件乐事。


学生可以惊喜吗?


Artyom-可以说,有时候您会打开代码,并且到处都是从未见过的构造。 我不得不和他们坐下来,弄清楚如何正确使用它们。 碰巧我本人第一次没有正确理解。



Veeam学院对您个人有用吗?


德米特里 -是的,当然。 像往常一样-当您告诉某人如何做时,首先,您会了解如何做。 其次,您将自己的知识系统化,甚至在授课过程中,您也会找到一些困扰您的问题的答案。 因此,与他人分享您的知识是发展自己的好方法。


亚历山大(Alexander) -首先,很清楚人们的期望,包括未来工作的期望。 当您身为领导者时,您会在业务发展中做饭。 在情况较为非正式的地方,例如在学院里,很清楚什么能使人们动起来,他们想要什么以及他们的利益是什么。


您会学到很多关于自己的知识,这是最重要的。


例如,您了解许多事情需要简化。 当您在一个区域中长时间工作时,眼睛变得模糊不清,其他人(尤其是初学者)对您显而易见的事物完全无法理解。


菲利普(Philip) -当您不断地在某个级别的开发人员中间做饭时,您会开始使用某种只有您自己可以理解的语言进行交谈。 当一个刚进入这个环境的人到达时,您开始用一些简单的词来解释一切,您学会了以一种更加结构化的方式传达信息。


与学生一起工作,您还将学习耐心,某种同情心和理解力=)但随后您开始看到他本人知道但忘记了的一些东西。 您必须更深入地研究技术,才能更好地向人们传达正在发生的事情的含义。 相反,为什么这样做更好的含义,但是最好不要这样做。



企业发展总是关于遗产吗?


西里尔 -绝对正确的陈述。 当一个项目已经编写了10年并且不断发展时,一定比例的遗留代码将包含在其中。


另一个问题是不同的公司如何才能做到这一点。


在模块正常工作时,我们尽量不要进入该模块。 它在5年前进行了调试,并且有多个发行版一直在稳定运行。 另一个问题是,当您获得需要不断更改某些内容的代码时。 在这种情况下,我们禁止逐步改进它:重构等。 10年前,存在另一种语言标准,即其他词汇构造。 没有人会费心采取,重构和转移到新设计。


代码逐渐恢复活力,但一切都在开发人员手中。 您可以锤击螺栓,解决当前的问题,也许对公司而言就足够了,因为 以工作产品的形式实现最终目标。 好吧,里面有什么...互联网上有很多故事,尤其是关于gamedev的兴起,当只有类出现在C ++中时……您打开代码-有些类,每个类都有很多包含在内。 显然,现在他们将其称为一个非常特定的词。


但是总的来说,使用遗留代码,您必须能够生存。 不必害怕他。


德米特里(Dmitry) -遗留代码,当然是存在的,当然,您需要以某种方式使用它。 但是您并不会因为绝望而与他同住,而是因为触摸他没有任何意义。 多数情况下,旧代码是一些已经调试的组件,即使是用某种.Net 2.0编写的,它们也已经使用了很多年,没有新功能需要添加到它们中-如果它们可以正常工作,为什么还要触摸它们?


在某些情况下,您会看到旧代码中的错误已通过多个发行版,但突然被触发。 那就是当您开始重写旧代码时,也许用单元测试覆盖它,以免破坏任何内容。 或者您只是无限地信任测试人员。 即 您当然会花好时间,当然,不是为了发布-而是为此而发明的各种beta。


至于学院,这个项目也使我们能够与时俱进。 新手来了,他们积极关注C#、. Net等世界的新闻。 他们喜欢一些新结构,即最新版本的“句法糖”。 而且,实际上,通过他们的团队负责人,他们将这些设计强制(推广)到项目中。 是的,它会引起抵抗,人们可能不会立即接受它,但这只是暂时的,如果新框架中引入了真正有用的功能,它将进入流程。


菲利普 -我必须处理十年前写的东西。 您将一无所获。 自然,我们努力更新堆栈,但是我们有180个项目正在开发中,这段时间已编写了几百万行代码,很难跳过它。 我们必须理解并以某种方式接受这一点。


亚历山大(Alexander) -我曾经看过梅赛德斯·奔驰(Mercedes Benz)的演讲,内容为何他们如此保守并在介绍技术方面存在一定滞后。 答案很简单:所有不利于客户的东西都“付诸东流”。 企业发展遵循相同的原则。 新技术的第一个“受害者”应该是分析师,开发人员,测试实验室或任何人,但不能是客户。 产品中出现的任何技术都必须先通过。 从外部看,它看起来像是遗产,但从内部看却不是。 只是我们必须先对“猫”进行测试的所有现代事物,然后才能应用到生活中。


Artyom-是和否。 我们的产品已有10年的历史了,因此我们拥有许多遗产,但这并不意味着我们盲目地拖动旧组件,而对它们不做任何事情。 碰巧我们完全重写了它。



那么如何引入新功能呢?


亚历山大 -首先,请说明您要解决的问题。 如果您带来了月球车项目-这当然很棒,但是请解释为什么需要它。 , , , , .


— , — .. . - , . , , , .


- - . , , . , ? .


?


— - , - . ( ) — , . , “” , , . , , “ ”.


— , , , -, . -, , , .
, , — , . .


— . , , . , , .


, , . , . , . , , . , , .


?


— -, , . “-”, , . . .
legacy . . , . 不行 , enterprise, . [ — .], [ — .].


— . backlog [ , — .], , . , - , , - .


-, . , , , .



, , ?


— Enterprise- , . , , , . , “ ”, “”. , enterprise[-]. , , , , . , Veeam 5 , SMB [small & medium businesses — .] Enterprise. enterprise[-], , , . , , .


. , enterprise. : , enterprise “”, . , , . , enterprise, . : - 5 ( ) , , , . , .


. , . , . , , .


— . , , - , , .
[.. — .] . , .


? , , . , , — . : , . .


, 2-3 . , . , Veeam, , - , - . — .. , , .


— , . , . , enterprise- , .


, , , . , Amazon , Facebook , , .
, enterprise. , .


— “, , ” , . . , . , , - , , , . , .


, , . , , .. , . . , , .


enterprise?


— , . , , , “ ”, .


— . - - . - , “”. . 8 , , . , .


— , enterprise. , , , . , , ..


— , — . , , .



?


— , . , . - , , .


, . — , . , , , . , . -, , , “” [ — .]. , , . .


?


— , . .


— , , .


— . -, . 15 - , , , [Microsoft Visual Studio — .], , - .


— , .


— , , . , , , . , , , .



, , , .

Source: https://habr.com/ru/post/zh-CN436358/


All Articles