如何处理未记录其工作的明星开发人员?

时间:2009-02-10 13:35:29

标签: collaboration

有一位同事认真地了解他的东西,他是我曾经合作过的最聪明的人之一,但他:

  • 在他的主目录的小区域中工作,而不是在公共CVS存储库
  • 中工作
  • 记录他的代码
  • 不会评论他的代码,例如3,500 SLOC的C没有评论,也没有空行来解决问题
  • 经常使事情过于复杂,例如使用三个shell脚本相互调用来完成一个简单的shell脚本可以完成的工作。

也许这可能是那些认为“如果我是唯一知道这一点的人,他们无法摆脱我”的人之一?

有关该怎么做的任何建议?

BTW管理层了解情况并试图改变一切。

40 个答案:

答案 0 :(得分:123)

在我看来,像你上面所描述的做某些愚蠢事情的人不可能成为明星开发者!对我来说,似乎他故意让事情变得更复杂,所以除了他自己以外没有其他人可以维护代码。这让自己比实际更重要! 跟他说话。他必须改变它!如果他不这样做,请用真正的明星开发者替换他!

我保证,即使是半年,他也不会知道自己的代码是如何运作的!解雇他,你可以节省大量的时间和金钱。

答案 1 :(得分:46)

CVS部分很容易 - “意外”硬盘驱动器故障会教他一生的教训(确保你有备份,所以你不会丢失代码)

答案 2 :(得分:26)

这听起来像是一个艰难的情况。

就个人而言,我会让他离开。他可能是明星开发者,但他不是团队合作者。如果你想制作一个好的产品,你需要有一个团结一致的团队,可以一起工作。

答案 3 :(得分:19)

无法记录是确保工作安全的一种(非常糟糕的)方式。

你可以做几件事来解决这个问题:

  • 添加文档作为个人绩效评估的要求。
  • 不接受未记录的软件。
  • 与开发人员说了一句话,找出他没有记录的原因。
  • 购买很酷的文档工具。

答案 4 :(得分:16)

播放您在电影中看到的坏警察/好警察草图。让管理层成为坏警察,你就是好警察。让管理人员要求他的工作过度杀戮文档和每分钟ZIP备份。但是你提供适度的文档(例如doxygen)和通常的源代码控制签到...

答案 5 :(得分:11)

跟他说话?

如果他真的是“明星开发者”,他会注意到你说的话。

它可能不会在一夜之间改变他,但可能是他完全没有意识到其他人不像他那样得到它。


编辑:

现在改变可能有点晚,但在制定解决方案时需要更多信息。这里的任何人都不可能实际建议让这个人单独根据这些要点去做。如果你去年一直告诉那个人他需要改变或者他不在这里,那么你可以让他离开。但是,我没有看到这方面的证据。

可以教导出色的开发人员使用源代码控制,评论和文档。如果你在这里花费精力,那么你真的会有一位明星开发者。

答案 6 :(得分:10)

您可能会关注错误的区域,为您提供机会,让您了解流程中的一些弱点。

  
      
  • 在他的主目录中的小区域工作,而不是在常见的CVS存储库中工作
  •   

简单的聊天可能就足够了,版本控制的好处不言而喻,任何“聪明”的人都可能对这些好处充满热情。然而,它也可能是一个很好的机会来研究更容易使用和灵活性的替代版本控制系统(看看bzr和git)。更好的是,让他参与选拔过程,如果他真的是一个“明星”,他可能会有很好的投入并且更多地投入其使用。

  
      
  • 未记录他的代码
  •   

听起来不像文档是您的过程的一部分。人们会拒绝做额外的工作,如果没有明确的流程那么你就会谈论很多额外的工作。真的需要文档吗?如果是,是否有为创建它而定义的流程?你应该有一个完全致力于它的人吗?你是否应该至少有一个工具来促进它(可能像mediawiki一样简单)?

  
      
  • 不会评论他的代码,例如3,500 SLOC of C没有任何评论,也没有空白线条
  •   

三个字:同行代码审查。除了明显的引人注目的好处之外,这也可以提供一些同伴压力,这是一种强大的力量,可以是一件好事。希望被同行认识得好,自我产生所有权和质量。

  
      
  • 经常使事情过于复杂,例如使用三个相互调用的shell脚本来完成一个简单的shell脚本可以完成的工作。
  •   

再次,同行代码审查。你提到管理层知道这个程序员的不足之处。他呢?如果他们不认识到他们做事的方式存在问题,那么人们就很难改变和改进。

而且,或许最重要的是,通过提出改善开发过程的计划(这不仅可以改善你的“明星”,而且可以改善团队中的其他人)你可以从管理层中获得一些金星。

答案 7 :(得分:9)

对我来说听起来不像一个明星程序员。所有优秀的程序员都知道代码格式化和源代码控制的使用很重要。听起来虽然他自己取得了很好的进步,但他阻碍了其他团队成员的进步,这可能对完成的工作产生净负面影响。和他说话,如果他拒绝改变他的做法,就让他走吧。

答案 8 :(得分:8)

如果他真的那么聪明并且你无法改变他的方式,你也不想失去他,但你仍然希望你的代码被记录和评论,那么我的建议是让经验不足的开发人员进行记录和评论为了他。 就个人而言,如果我是一名明星开发人员,如果有人对我的代码进行评论,我会觉得很愚蠢,我最终会自己开始做。与此同时,虽然没有发生这种情况,但经验不足的开发人员可能会学到一两件事。

答案 9 :(得分:7)

成为一名明星开发人员不仅仅是一名优秀的程序员。如果他没有团队技能并故意无视团队标准,则需要将其提交给他。如果他在与管理层交谈后拒绝遵守这些规定,那么他可能不适合贵公司。

答案 10 :(得分:6)

这个问题让我很紧张,因为虽然你所描述的人听起来很恶劣,但我可以在他身上看到一点点。

我认为我是一名相当不错的球员,我很幸运能够成为一支非常优秀的球队。但是,我确实使用了我的同事不理解的方法,尽管我已经非常努力地解释它们。只有相当大的经验差距,这对我们任何人都没有反映。

文档是一个广泛而棘手的主题。我试着遵循DRY(不要重复自己)格言。与代码分开的文档可能相当于重复自己,因此它可能会过时,除非您放慢脚步以使其保持最新状态。我通常的做法是随后进行修改。

我正在处理的问题通常是如此棘手,以至于我可以提升计划并记录我想要的所有内容,但是当谈到代码时,我经常发现我错了,必须重新考虑它。因此,我认为你可以提前记录内容,然后按照这一点,只适用于非常简单的问题,在我看来。

无论如何,我认为这是一个很好的问题,答案并不简单。

答案 11 :(得分:5)

这家伙真的是摇滚明星吗?真的吗?想想它一秒钟。他是聪明的,但是没有完成任务,或者他是否聪明并且能够完成任务?

想想真的很难。

如果他真的是摇滚明星,那么也许你不应该惹他。他用他自己的过程制作了令人难以置信的令人敬畏的东西。只是因为有一种不同的做事方式最适合你,并不意味着这将使他能够创造出最好的作品。而不是试图让他屈服于你的过程,这很可能会杀死他所有的精彩,你应该尝试找到一种方式来适应他的工作方式。

如果他真的像你说的一样好,你不应该介意这样做。如果不值得努力那么做,那么他真的不是那么好。在这种情况下,你没有摇滚明星,你只是有一个不喜欢玩规则的平庸程序员。那些家伙,你应该摆脱。然而,一个气质摇滚明星通常值得痛苦,因为他或她可以产生的质量。那些人,你应该竭尽全力保留。

答案 12 :(得分:4)

听起来像一个对他的工作感到厌倦的明星程序员,并且过于复杂化使得它更具挑战性。他很快就能找到更好的东西。

答案 13 :(得分:3)

“Hi Star Developer,

只是一点非正式的提醒告诉你,从下周开始,我们将需要代码文档,并在代码中提供有用的评论 - 这将是公司政策,并且没有例外“< / p>

从那时起,你只是处理那个失败,就像处理未能按时完成,未能在工作期间停止放松一样,等等。底线是如果老板说文件,你记录或者你没有正确地完成你的工作。

答案 14 :(得分:3)

如果他这样工作,他不是明星开发者 - 优秀的软件开发人员明白可维护性非常重要。从长远来看,你可能会为此付出高昂的代价,我会非常直接地告诉他这是多么严重,如果他无法开始调整就让他离开。我以前见过这么多次,这是一个定时炸弹。

说实话,我见过很多像这样的开发者,除非他们刚刚失学,否则他们不会改变。我说现在削减你的无损,它只会越来越难以解雇他,因为他继续喷出更多不可维护的代码:)

答案 15 :(得分:3)

试图改变一切?你更喜欢什么,一个记录不完整的工作软件或记录良好的垃圾?有些人能够编写几乎不需要评论的软件,这不是质量的可靠指标。

我担心你会失去一个好的开发者。

答案 16 :(得分:2)

您还可以添加自动质量检查,以防止他在完整记录之前签入他的代码。

那就是说你可以说服他先办理登机手续! (这是ESSENTIAL,imo)

答案 17 :(得分:2)

在代码审核通过代码审核之前不要让代码发布,只有在他为当前功能/项目编写的代码有足够的注释和/或文档时才允许代码通过。

编辑在评估中提出。他的“改进领域”可以提供文件/评论代码。

: - )

答案 18 :(得分:2)

+1到ocdecio - 如果他是一名明星开发人员,那么他的代码应该基于如此高质量的设计,以便自己记录。

话虽如此,令人沮丧的是,尽管他在技术要求高的领域非常出色,但他并没有擅长提供功能 - 只有你知道这对你来说是否有问题。组织。

拥有一个“大师”可以是一个绝对的救星 - 或者至少它曾经是,或者StackOverflow使这个角色变得多余?

答案 19 :(得分:2)

这里有很多人对“没有评论,那又怎么样?”赶时髦的人在这里。没有评论的识字代码是完全可能的,但仅仅因为某人聪明且不评论并不一定意味着他们正在编写有文化的代码。

所以让我们澄清一下。您已经说过他根本没有记录他的代码,无论是在评论中还是单独的文档中,他都没有使用任何源代码控制。怎么样:

  • 尽管缺乏评论,他的代码是否可以理解?
  • 您的团队是否使用他参与的任何类型的问题跟踪(例如FogBugz,Bugzilla等)?
  • 他的代码是否正在接受测试?
  • 团队中是否有其他人至少在某种程度上熟悉他的代码是如何工作的?
  • 他是否愿意至少承认他能够对与团队其他成员合作的方式做出一些改变?

如果所有这些问题的答案都是“不”,那么你就有一个大问题。只是聪明并不一定能使某人成为一种资产。你有保证他明天不会离开你的公司,或被公共汽车撞到吗?如果发生这种情况,你会变得多么紧张?值得冒风险吗?

答案 20 :(得分:2)

我认为这在任何环境中都非常典型。你如何让某人做你想做的事?这正是“如何赢得朋友,影响人们”的全部意义所在。戴尔卡内基不是在操纵,而是管理人。

听起来我只是缺乏经验,需要一些经验和指导。

你认为你可以坐下来和他谈谈这些问题吗?告诉别人他们做错事常常是错误的事情(特别是在今天的西方社会,我们不想伤害他人的感受)但我认为你可以通过冷静和诚实地解释问题而走得很远。通过谈论他们。如果这个人尊重你和你的意见,这是有帮助的,这是另一个问题,并在上​​面提到的书中讨论过。确保他明白这些是严重的问题。此外,在任何未来的开发工作中,他都会被要求做这些事情,所以现在练习它们是个好主意。

我不认为等到下一次绩效评估是个好主意。堆积一堆负面反馈并一次性完成所有这些只是一个坏主意,我真的不喜欢这样做。

答案 21 :(得分:2)

球队可以成功解雇他吗?如果是这样推动问题并拒绝接受任何未正确记录或不符合其他标准的代码。希望这会得到重点但它可能只会让他生气并导致他退出。如果球队无法取得成功,那么你就会失去运气,直到你可以训练替补达到他的技术水平,这可能不值得花时间和精力。

答案 22 :(得分:2)

代码文档被高估了。 CVS培训很容易。

一个优秀的班级应该通过其方法和属性来揭示其目的。

在应用程序之外记录模型也更容易理解。

我会引起他的注意,如果你不能解决它看起来你会失去一位明星开发者。

编辑: 糟糕 - 使用CSV而不是CVS,对许多导入使用svn heh。

答案 23 :(得分:2)

如果他真的很聪明,管理层就不太可能摆脱他。

当然,整个项目可能会被关闭,但无论如何都不会在CVS和文档中使用。

没有管理层会雇佣一名优秀的程序员来招聘一名不好的人。

告诉他,只要他愿意,就可以帮助摆脱管理。

他想改变工作是什么?他可以告诉管理层:“好的,人们,一切就像你问我一样:签入,记录并掌控。我完成了我的工作,我打包并离开”。

答案 24 :(得分:1)

我一直是那个的家伙。

睁开眼睛的是促销活动。一个非常聪明的老板让我成为“团队领导者”,说他认可我的编码能力,并且他希望我帮助团队的其他成员达到我的标准(他是一个说话流畅的酒吧管家)。然后,他给了我一套目标,没有明确包括“文档”,“评论”等等 - 但这不可避免地推动了我朝这个方向发展。一旦我的工作是告诉团队的其他人如何完成他们的工作,我不可能不自己做。

目标是“当新开发者加入时,他需要在5天内充分发挥作用”; “部署必须少于3天”,“代码必须通过我们的外部审计团队审核”,并“实施持续集成和单元测试”。

答案 25 :(得分:1)

可能是他“知道他的东西”的原因是因为它正是 - “他的东西”。最好的代码是其他程序员可以自信地理解和修改的代码。

令人印象深刻的编码人员不指导他人并只编写他们理解的代码是恕我直言的责任 - 特别是在他们回答了足够多的问题之后,你知道如何重写他们的代码并将其发送给其他人。

答案 26 :(得分:1)

虽然在某些情况下个人成就可能是重要且有用的,但是团队合作以及所有参与者和利益相关者之间的良好合作将最终使大多数项目成功。

文档是协作过程的一部分。如果你的“明星开发者”没有把重点放在这个话题上,那么请告知他并将其放入他的评论中。

记录您的“明星开发者”因缺乏文档而导致的问题。通过这些问题的例子向高层管理人员提出这个问题,并确保他理解后果。如果他在这方面继续失败,那么就像任何其他失败一样对待它......终止是最后一道菜。

最重要的是,让他意识到这个问题并给他一个改进的机会。如果你在约定的时间内没有看到任何改善,那么他就不愿意改善自己,并且球队。你知道必须做什么!

祝你好运! 安德烈

答案 27 :(得分:1)

当我3年多前开始现在的工作时,我们遇到了类似的问题,我们的首席开发人员是牛仔。他非常聪明但非常不稳定,他的一些东西都有很好的记录,但是过于复杂以至于无法进行维护,或者先编码并弄清楚他后来要建立什么,他会抛出代码来看看会有什么结果。

他在大约2年半前离开了,当我们发现他的一些旧代码时,它仍然困扰着我们,而在他的辩护中,这里的开发商店是如何运行的,在过去的3年里,我一直在在十字军东征上改变这种心态。

当你成为一名明星开发者时,你不再了解你对系统,代码,框架,架构等的了解程度以及更多关于

的信息。
     
  1. 编写优雅,可维护,灵活,可读的代码
  2.  
  3. 与团队的其他成员合作:使用源代码管理,以身作则,等等。
  4.  
  5. 记录每个方法,类,对象等正在做什么
  6.  
  7. 为自己和团队研究新的更好的方法
  8. 如果你没有在某种程度上关注所有这四个你不是明星开发者,那么如果你拒绝尝试/学习使用它们更是如此,那么它应该找到其他就业机会,我听到了挨饿艺术家很受人们这个时代的欢迎(整个误解天才的事情)

答案 28 :(得分:1)

在我看来,你需要放弃这个人。听起来他的代码是不可读的,他绝对不是一个团队,也不是一个安全的玩家。

允许某人将自己视为不可或缺的做法也是一种非常糟糕的做法。如果你让他继续这样做,他的做法会变得更糟,而不是更好。当他离开时,对于每个人来说,你将面临纠结码的巨大麻烦。如果他不能成型,你需要减少你的损失。

最后,保持这位开发人员没有统治他就是初级开发人员的一个不好的例子。如果你强迫他们正常工作,你可能会因为“为什么他而不是我”的人群而产生怨恨。如果你不这样做,你会得到一堆像你的“明星”一样工作的黑客。

简而言之,除非他非常迅速地塑造,否则是时候放弃他了,为了整个开发人员的健康和理智。

答案 29 :(得分:1)

我同意大多数人的观点。让他成为热点的一种方法是获得团队代码评论。

对于第一次代码审核会议,请选择已打开并接受建议的团队成员的代码。 “明星”开发人员将有机会看到代码审查的工作原理,然后您可以安排他的代码接下来进行审核。给他一些时间为下次会议做准备,到那时他应该至少评论他的代码。

代码审查的目的不是为了让人感到羞耻,而是为了协作确定问题和需要改进的地方,但这将是让明星开发者处于尴尬境地的好方法。

答案 30 :(得分:1)

根据您的描述,这位研究员明显一位明星开发者。编程是一项团队运动,那些与其他人不能很好地合作的人不会为项目增加太多价值。

就个人而言,我可能不记得我在6个月或更久以前写过的代码,并且非常重视某种源代码管理中的更改历史。

如果你经常与这个人进行代码审查,我认为你会发现他并不像你认为的那样对开发人员有所了解。

答案 31 :(得分:1)

结对编程。找到hima对,将根据您刚刚列出的要求“完成”他。你将解决一个问题,源控制,文档,质疑他的每一个动作,等等。你也通过使用第一个人的力量训练其他人

答案 32 :(得分:1)

  1. 让他使用自动执行验证工具。 (请参阅我在“How to ask questions to an obsructionist?”的回答)

  2. 如果他过度复杂并且不使用SCC,那么他是一位优秀的开发人员 - 这些都是软件工程的重要组成部分。

  3. 在非常不可思议的事件中,他在算法等领域有一些不可替代的才能,让他在该领域工作,例如,定义算法,并让真正的程序员进行编码。

    < / LI>
  4. 使用静态分析代码来理解和清理他的代码。

答案 33 :(得分:1)

你不能因为没有按照你的建议去杀人。 他只是与众不同。

if(developer.IsHuman())
{
    developer.IsUnique = true;
}

我和写垃圾的人一起工作(并称之为代码)。我也这样做。有时。 但是,正如您已经感觉到的那样,当您知道自己的工作会影响他人时,不要改变不良习惯。试着说服他更多。

而且,除非你是“经理”,否则我认为你在这种情况下不会做太多。

答案 34 :(得分:0)

  

经常使事情过于复杂,例如   使用三个调用一个的shell脚本   另一个做一个简单的工作   shell脚本可以做。

这听起来并不像他正在为我编写有文化的自我记录代码,而是相反。似乎他选择过于复杂的解决方案会为文档创建一个异常大的需求,并且还会使缺少文档成为一个更严重的问题。

答案 35 :(得分:0)

我认为团队成员应该了解彼此的责任,即DBA有责任与DB合作,您不要求QA应用数据库补丁。 DBA不能拒绝这样做,因为这是他/她的责任。每个人都应该清楚,团队成员的责任之一是编写其他团队成员可以轻松理解的代码。我认为从这个角度来看,应该从他报告的人那里解决。

如果您的DBA不能使用DB,而是执行其他操作(例如构建UI),则他/她不会执行其工作。与你的同事一样 - 如果他生成了其他团队成员无法理解的代码 - 他就不会做他的工作。

编写他的同事无法理解的代码不应被视为完成任务。编写不在CVS中的代码,以便其他团队成员无法审核,直到为时已晚 - 也不应被视为完成任务。写3个脚本而不是1个应该被认为是浪费时间。

如果管理层无法理解并仍然认为他是摇滚明星程序员 - 考虑改变管理层。

我还要强调,目标不是自己写评论。应该是可以理解的代码,易于维护。我个人认为评论是最后的手段,使我的代码可以理解 - 我更喜欢干净的设计和首先命名。

答案 36 :(得分:0)

将他的代码交给他并告诉他修理它或者他被解雇了。

答案 37 :(得分:0)

失败代码审核。

答案 38 :(得分:0)

除了许多其他建议之外,这是你可以尝试的另一种机智:

您似乎已经预先考虑过,无论出于何种原因,您的开发人员的行为和方法都很糟糕。假设你已经与他讨论过,并且他没有为你的满意(或愿意改变)提供理由,我会说你有两个明显的选择:摆脱他,或者忍受它。我建议,在这种情况下,你对你如何编写代码的要求非常关注,让他选择接受或离开它。

作为一个例子,我有一个前雇主(在管理层改组之后)决定不再允许开发人员在代码中使用“断言”,因为他们认为这不必要的混乱并且不符合现有的风格“负责”组(编写非常直接的低级C风格代码,没有断言或防御性编程技术)。管理层和我进行了直接讨论,他们告诉我,我需要适应他们的风格或离开,我决定离开。总的来说,我认为这对双方来说都是最好的。

并非所有人都会对编码,代码指南或开发流程持有相同的意见,并且在一天结束时,付钱的人会制定规则(与实际生产事物的需求相平衡)。关于你需要的东西越多越好,开发人员的怨恨就越少。

答案 39 :(得分:0)

不会?如果你已经尝试了其他一切,那么可能是时候提醒他签署他的薪水了。

认真!

一位明星开发者在被公共汽车撞倒后5年后对你不利,而其他人则需要处理他的代码。

不使用CVS?在我工作的一家公司,我们因不办理入住而罚款,三次罚款,你被解雇了。您的源代码是您的业务,您丢失了丢失业务的源代码。我再次提醒这个人,他的薪水取决于遵循公司标准。