您如何帮助其他程序员成长?


20

作为团队负责人,您如何帮助程序员成长?

我之所以这样问,是因为有几个程序员在和我一起工作,我真的很想“放开他们”,以发挥他们的最大潜力,并使他们保持快乐。

但是我不太清楚该怎么做,我是否必须

  1. 经常与他们互动,还是给他们安静的时间,让他们不受干扰?
  2. 请他们遵循编码准则,例如强制执行单元测试,编码样式,还是让他们做自己认为合适的事情?
  3. 对他们宽容。例如,是否真的不在乎他们是真正上班8个小时还是4个小时,还是需要在工作场所执行一些“纪律”?

猜猜是什么,每个职位都有自己的观点,不同的人会为不同的事情争论。这种混乱使管理人员变得更加困难。

你怎么看?


21
用甜甜圈喂它们。
SK-logic

1
每个程序员的工作方式都不一样。您应该真正告诉我们更多有关他们想要实现的目标。如果您知道,那么您要做的就是为他们提供所需的工具,与其他团队讨论他们的工作,并鼓励每个人互相帮助。即使您的团队的目标已经确定,这也是正确的,因为即使在这种情况下,他们也可以自由地实现目标。另一方面,Scrum不能很好地应对这种行为。
Thaddee Tyl 2011年

@ SK-logic:在我工作的地方,比萨是最受欢迎的方法。
Donal Fellows,

Answers:


9

这是你必须走的一条很好的路线。

最后,您做出的任何技术决策都是您将无法忍受的决策。因此,让他们尽可能少,让必须与他们生活在一起的人做出自己的选择。但是,如果您认为他们的路途不好,请务必指导他们。

另一方面,过程选择是您的。在这些决定中,让团队指导您,但最终您需要做出决定。至少起初。

阅读Roy Osherove的软件团队三个成熟阶段,看看是否可以弄清您的团队目前处于哪个阶段。这会影响您的行为方式。混乱程度越大,您必须放置的控件就越多。例如。在一个极其混乱的团队中,您需要首先检查所有提交的代码。但是,当您这样做时,请花一些时间教他们复习彼此的代码。

而且,如果您设法将一支团队从混乱中带到中年,请在那一点上改变您的行为,否则他们将不会进一步前进(这是根据个人经验得出的)。


6

是的,管理人员比管理计算机或软件无限地困难,这恰恰是因为每个人都不一样,而且我们甚至可能每天都在变化。因此,没有普遍的答案。我相信您只需要与您的开发人员进行大量交流,以了解他们并了解他们的长处/短处,他们对工作和学习的态度等。因此,您可以了解他们中的每一个,无论他喜欢还是不喜欢很多交流和研讨会,或者在一个安静的角落独自学习。

恕我直言,开发人员在正常情况下有学习的天赋(除非他们以前的糟糕工作经历使他们疲惫不堪或感到厌烦)。因此,您要做的就是了解他们想学习什么以及如何学习,并为他们提供工具和时间(当然在合理的范围内)。

例如,在我们的团队中,我们可以自由地为自己定义学习任务,只要这些任务与项目直接或间接相关即可。这些任务通常是每个冲刺几个小时到一天(尽管不是每个冲刺)。(最近的一个例子:我接受​​了一个学习和试验Scala的任务,其基础是这种方法和一般的功能方法可能有助于简化我们Java代码的复杂部分。)然后将这些优先级排序并安排到一个像常规任务一样冲刺。同时也鼓励并期望进行有关我们所学内容的演示/讲座,以将知识转移给其他团队成员(甚至可能转移给不同团队中的开发人员)。

请他们遵循编码准则,例如强制执行单元测试,编码样式,还是让他们做自己认为合适的事情?

在团队中工作时,必须遵循相同的开发过程。当然,该过程应该是可能可行的最简单的过程,而不是600页手册中描述的过程。团队应当定义过程使其不断适应实际情况。因此,如果团队同意编码标准和TDD,则他们将遵循该标准。

对他们宽容。例如,是否真的不在乎他们是真正上班8个小时还是4个小时,还是需要在工作场所执行一些“纪律”?

如果您不认识开发人员,通常更仔细地跟踪他在做什么,交付,工作节奏等。通常也可以检查她的代码(您自己或经验丰富且值得信赖的团队)会员)。一旦获得信任,她就可以逐渐获得更多自由。但是必须首先赢得信任。关于工作时间,以我的经验来看,弹性工作时间是有上限的,即最好有一个共同的约定下限,例如每天11AM到2PM之间(通常是在开发人员所在的工作区),以便他们可以提出问题或邀请他们参加会议。但是除此之外,没有一点是严格的。


3

好的,带头做项目是您的工作。因此,当开发人员希望您不理会标准时,您必须是执行标准,代码审查,索要进度报告以及所有这些事情的人。这些只是管理的要求,除了代码审查并不能真正提高员工的技能。

但是,您想帮助他们成长,这对领导者来说是一个很大的属性。

代码审查当然是第一步,它们将帮助您了解谁的能力不及出色,甚至需要改进以达到令人满意的性能。他们将帮助开发人员找到其他方式来做事,并理解他们自己所从事的工作之外的代码库的不同部分。我认为,最好在开发人员和审阅者的会议室亲自进行代码审阅(在可能的情况下,审阅者应该是另一位开发人员,而不总是由负责人审阅,审阅他人的代码也是需要开发的技能),主持人。您应记录需要更改的内容以识别趋势。您真正要寻找的不是错误或更改(可以改进每个人的代码),而是始终无法从错误中学习。不要告诉高层管理人员您保留这些说明,否则您会发现自己被迫在绩效评估过程中将其用作衡量标准,这坦率地破坏了目标。如果几个开发人员都犯了相同的错误,则可能需要进行有关如何执行X的培训课程或Wiki条目。

现在到越来越多的副手到最低限度。首先,您需要了解开发人员具备的技能,开发人员具备的技能以及对获得知识可能感兴趣的知识。您需要与他们交谈并审阅他们的简历,并了解他们的喜好和不喜欢做。

不要将所有有趣的任务只交给最熟练的人。这无助于其他人赶上新问题和新技术。除非有人抓住机会并为您分配更艰巨的工作,否则您不能从成为最初级的人到只承担最小,最不重要的任务的高级人。就是说,经验不足的人可能需要首先分配与高级人配对的程序,以获取更多的高级技能。将初级人员包括在代码审查中也将使他们接触更高级的技术。

首先给他们一个机会自己解决问题。但是有时人们会卡住并且不知道从哪里开始(特别是在新程序员中,您也需要开发该技能)或解决问题的方法。

如果您给他们几天时间来研究某些东西,但他们仍然没有方向如何做某事,那么您可能需要干预一些建议。如果您自己是技术人员,则可以给他们一些解决问题的想法。如果不是这样,与几个人开会,集思广益,可以帮助他们解决问题。或请经验丰富的人提供一些建议。您不想做的就是从他们那里拿走问题,自己解决。但是您必须权衡利用程序员的自我完成项目的能力,有时您需要按特定的方向发送它们。如果他的解决方案不好,并且需要解决,那么最糟糕的事情就是将其交给其他人,除非您打算解雇程序员。

我曾见过糟糕的程序员co之以鼻,在那里其他人必须修复他们所做的几乎所有事情。其他程序员对此表示不满,只是希望这个人脱离生活。缠结一个糟糕的程序员会导致优秀的程序员离开。您必须找到应付能力和发展能力之间的界线。如果您给某人几次机会,而他或她永远都不会好起来,那就放松他或她。

对于已经掌握了当前技能的老年人来说,事情变得容易了。通常,您只需要给他们机会做一些新的事情,他们就会学习。只要确保将有趣的机会散布开来,不要将所有的精力都交给可以解决任何问题的奇妙程序员乔。您想得到十个乔,而不仅仅是一个。

培养技能的另一种方法是每周进行一次1小时的培训。让每个开发者负责特定主题。这将帮助他们更好地进行交流,使他们能够深入研究某些事物,并使每个人都受益于他们的研究。应该将某些主题分配给与该主题不熟悉的人,以迫使他们在该主题上增加一些知识,而某些主题应该分配给您认识的与该主题相关的当地专家。主题应该是您在不久的将来或现在就需要人们擅长的事物的组合,以及一些您暂时不使用但希望人们使用的新的即将出现的新技术的覆盖范围。但必须为每个人,包括最初级的人,分配一个主题。

根据开发人员的时间计费方式(在客户计费情况下这比较困难),通常值得开发人员每周有4-8个小时来处理个人项目。他们将为此感到兴奋。最好的人会想在那里工作,他们会学到很多对将来有用的东西。bean计数器很难理解它的需求,但是这次将获得员工满意度,无人需要的新功能或软件(或将帮助完成某些繁琐工作的软件)和由于以下原因而更快开发的许多回报:学习新技术。一些开发人员将严格把这段时间用于与您的工作无关的个人项目(这很好,他们仍然会获得技能并为机会感到高兴),但是许多其他人将使用它来解决持久性问题,由于项目管理方式的本质,ndbody有时间事先进行修复。因此,您可以获得使所有人受益的重构。有些人可能编写测试以提高测试覆盖率,从而使重构更容易;其他一些人可能会探索一些新功能,这些新功能可能会使您的软件对其客户更有用。通常,如果您可以说服Bean计数器,则没有办法让它们具有这种自由度。

您必须学习如何平衡,以使人们的技能有所延伸,并使项目保持进度。开发人员经验越少,需要更多的人来检查进度,尤其是在更容易改变方向的早期。没有经验的人可能会挣扎,害怕大声疾呼。这些人倾向于在发布前离开,您会发现他们的项目部分离完成尚远。要特别注意检查经常更换工作的任何人的进度(除非他们是承包商,因为这是合同的性质)。

通常,经验丰富的人可以信任地告诉您他们何时无法找到解决方案,并且需要该领域有更多知识的人提供一些帮助,否则他们将寻找该人并获取知识。因此,在为项目学习新技能的初始阶段,无需对它们进行密切监控。他们将找到交付项目的方法。那些拥有交付跟踪记录的人通常只能被留下,只有很少的进度报告(您通常也必须向管理层报告,因此需要一些信息)。


1
+1区分做好团队领导和帮助团队成长。我唯一要添加的是确保每个成员都有机会与组织外部的其他专业人员进行交互。这可以通过研讨会,会议或其他聚会来完成。团队负责人可能无法直接实现这一目标,但他们无疑可以影响有权这么做的人。
Angelo

2
  1. 为您的团队提供具有挑战性的工作以及解决问题的工具。即使您只是因为支持旧系统而认为您的工作很平凡,也请大家推动它做得更好。
  2. 您的团队应制定编码标准。您的工作是帮助他们执行和调整标准。
  3. 与您的团队合作开发评估系统。您的工作是帮助与团队协调这项工作并提供执行。外界力量期望及时获得高质量的代码,他们并不总是有合理的要求,也无法为他们的要求提供任何逻辑。您无法逃避这一点,但是您必须管理双方。一旦您的团队树立了完成工作的声誉,每个人都将更加接受您的时间估算。他们需要知道,如果他们正在努力,您会支持他们。

当我说您的工作是执行时,我并不是要采取某种严厉的领导风格。当一群有能力的个人就他们的行为方式提出意见时,他们还必须同意不遵守规则的后果。最终由某人负责,既然您是该团队的负责人,那就是您。


1

经常与他们互动,还是给他们安静的时间,让他们不受干扰?

经常与他们互动。显然,这并不是在烦扰他们,而是在作为他们的经理时,您应该与他们定期进行交流,以了解事情的发展以及更一般的聊天。每隔几个小时大概会听到一次正确的频率,但要用耳朵播放。

请他们遵循编码准则,例如强制执行单元测试,编码样式,还是让他们做自己认为合适的事情?

您应该期望它们按照与您完全相同的标准工作。如果您进行单元测试并遵循指南,则应该这样做。他们需要学习如何良好地编码,以及您有责任教给他们。

对他们宽容。例如,是否真的不在乎他们是真正上班8个小时还是4个小时,还是需要在工作场所执行一些“纪律”?

一开始我会更受纪律,但是当他们证明自己可以信任时,我会放轻松。从一开始就给人们信任,让他们每天工作4小时就麻烦了,但是让一个经常工作到晚的有价值的员工在项目之间有一些懈怠是可以的。


5
“大约每隔几个小时听起来正确的频率” -我个人会讨厌它,如果我的经理不停地缠着我,经常...
彼得Török

1
@PéterTörök那就是为什么我说要听着玩。那对我来说是正确的水平,但我敢肯定很多人会偏爱更少
汤姆·斯奎尔斯

0

与您的三点有关:

经常与他们互动,还是给他们安静的时间,让他们不受干扰?

我要说的是,这实际上取决于您与之共事的人的类型。有些人更喜欢在固定的咖啡时间(例如上午10点左右)进行讨论,而其他人则不受干扰地独自工作。和他们在一起(好吧,我承认,我就是这样),我通常会发送电子邮件(即使它们在我附近,例如2-3米之遥),以便您在他们阅读信息时可以选择让他们选择。顺便说一句,不要问他们是否“忘了你的备忘录” :-)当然,有些“需要”更多的指导和更多的互动。

请他们遵循编码准则,例如强制执行单元测试,编码样式,还是让他们做自己认为合适的事情?

至于遵循的准则,对我来说很清楚。如果您设置了与编码风格,始终提供测试用例规则等相关的准则,那么如果您是首席开发人员,则必须执行这些准则。对于您正在管理的项目,每个开发人员都应遵循您的指导原则,即使对于“ 超级巨星 ” 也不例外。

对他们宽容。例如,是否真的不在乎他们是真正上班8个小时还是4个小时,还是需要在工作场所执行一些“纪律”?

如果您已经知道人们的工作方式和自信,那么他们可以打破纪律,这不会破坏您的信心。但是我认为对于这一点,您定义的规则(或无规则)应适用于每个人。重要的是,不应有例外。我现在很高兴为一个项目经理工作,他说:“只要您每周完成40项工作,并且工作完成,就可以了”。这样一来,您可能会在一个早晨到来,只工作6个小时,接下来的两天工作9个小时。“只要完成工作”就没有关系。我喜欢那条规则。


0

我想说,您的开发人员所拥有的经验(不仅是编程经验,还包括业务环境中的经验)是您花费多少时间的关键因素。我目前正在与一些刚离开学校的开发人员一起工作,我发现他们需要更多与他人合作的指导,不仅是文档/测试/标准方式,还包括人际关系(打电话或亲自见面,而不仅仅是发送电子邮件)。了解我们的业务也是一件很关键的事情,因为在我们的业务环境中,与在软件开发环境中,许多相同的词的用法差别很大。这是在我们使用首字母缩略词之前...


0

但是我不太清楚该怎么做,我是否必须

  1. 经常与他们互动,还是给他们安静的时间,让他们不受干扰?
  2. 请他们遵循编码准则,例如强制执行单元测试,编码样式,还是让他们做自己认为合适的事情?
  3. 对他们宽容。例如,是否真的不在乎他们是真正上班8个小时还是4个小时,还是需要在工作场所执行一些“纪律”?

我的建议是就哪种风格最适合该人进行讨论,并随着时间的推移进行微调。有些人可能想每天开会一次,以回顾事情的进展,而另一些人可能会发现每季度一次过分。有些人可能希望每月进行一次正式的绩效评估,而另一些人可能只想谈论绩效。关键是要使这种关系达到一个阶段,在此阶段您可以诚实地了解对某人有效的方法和无效的方法。

另一面是研究个人发展哲学,尽管如果有人分析不正确,这可能是一条棘手的道路。如果您想要一些此类哲学的示例,可以查看Myers-Briggs,Enneagram和Strengths Finder 2.0的一些示例。


0

您问他们,他们希望如何工作。
他们想要更改的内容,依此类推。

并非一次全部。只是...随着事物的出现。
保持自然。(否则他们会闻到恐惧)

然后... 您甚至可以向他们学习东西。如果您认为情况并非如此,(在教育和经验上的距离太远)不要真的在试图使它们长大,就只会使他们感到困惑。

(在这种特殊情况下,放弃它并用铁拳统治,这比伪造您对它们没有的兴趣更诚实

建立民主进程,投票赞成,讨论问题。

就像那里的每位总统一样,您保留最后的决定权:否决权
其余的取决于小组。


0

帮助您的员工成长的一种方法是让他们做自己最擅长的事情。

如果幸运的话,将有一个或两个程序员的个人“测试”标准比整个部门的标准严格。在这种情况下,您可以将它们放在“荣誉系统”上以解决这些问题,甚至可以采用它们的方法。

有了“弹性时间”,您就可以为生产力更高的工人留出更多的回旋余地。只要他们能完成工作,我就不用担心他们的时间了。有些人投入5-6个“不间断”小时,比其他人投入10个慢节奏的时间取得更大的成就。

但是,您作为经理的工作之一是纠正弱点。也就是说,您必须忍受那些测试标准不足或工作效率不高的草率程序员,因为他们没有花时间。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.