我的同事不了解他的工作。该怎么办?[关闭]


13

我花了3天的时间在我的同事制作的一个库中调试了一个非常模糊的错误,该错误很少发生。毕竟,我发现此错误是由于对没有任何锁的对象的跨线程访问而发生的。实际上,这并不是此类错误,以前也有类似的错误。他只是运行单元测试,并且如果发生故障则将锁定。而且,如果一切顺利,嗯,那么他的代码就是完美的。看来他对线程安全性一无所知。我100%肯定还有许多尚未出现的类似错误。看来PM也不了解线程内容。
问题是,他在公司工作的时间比我多。无论如何,我不能只说“这个人在这个领域没有能力”,因为这总是显示您是“坏团队成员”,等等。


这是哪个国家

这是国际公司。
tika 2012年

2
如果这确实是一个大问题,并且您100%确信您的同事犯了一个错误,那么首先要礼貌地指出这一点,以免他受到威胁。第二件事是,如果您的同事不听话,只是指出现金可能造成的损失。这是所有经理都听的,而且要非常小心。遇到您所描述的线程问题可能非常有害,并且除非您100%地确定自己的陈述,否则请继续进行。
NB

可能属于Project Management SE网站。
伯纳德

1
Project Management SE网站没有此问题应具有的“多线程”标签。
RalphChapin 2012年

Answers:


13

说服项目经理避免这种错误,应该改进团队关于线程处理的知识,并告诉他们您愿意组织有关研讨会或演示的内容。在您和您的同事之间不要把它当作私人的事情。


恐怕这家伙不会欢迎他,因为他认为他在这方面专业(可以自己教每个人)。但是我可以尝试。
tika 2012年

是的,还有一个大问题-英语不是我的母语,我的英语说得不太好。
tika 2012年

如果您的同事和PM都对穿线知识和穿线安全性都知之甚少,那么培训绝对是最好的方法。这不是一个人的无能-问题在于团队的能力。
boisvert 2012年

1
研讨会是大家可以投入他们的知识的地方,并且所有人都应该从中学到一些东西。如果您的同事认为他对穿线有所了解,也许您也可以从他那里学到一些东西。
Doc Brown

8

编写一个显示该错误的单元测试,并要求他修复它。


1
他已经意识到此错误。他只是找不到原因。
tika 2012年

在三天的调试会话中,您没有找到原因吗?还是我看错了你的问题?

1
@scarfridge取决于平台。对于Java,您可以使用字节码检测工具或面向方面的编程在问题所在的地方插入确切的等待(或使用JVMTI来控制执行)。有可能做!

1
这不仅是顺序问题。许多其他因素参与-这内核执行代码,当GC发生,以及它如何移动对象,如何更改从一个核心的缓存到另一个等传播
蒂卡

1
实际上,这只是重复调用数十亿次的一组方法。但这无关紧要。真正的原因是从2个线程无锁访问字典对象(即没有内存屏障)。线程A创建它,线程B读取它。
tika 2012年

4
  • 审查他的代码并提出改进建议是高级开发人员的工作。
  • 您不在那里检查他的工作,我个人讨厌如果有人重新检查我的所有更改以查看是否有任何损坏
  • 如果他不接受您的建议,那么解决沟通问题是PM的工作。
  • 单元测试中的线程问题使我怀疑该测试是否实际上是单元测试,而不是集成测试或组件测试。

我明白你的想法。遵守您的命令。
tika 2012年

2
将显示问题的测试称为“单元测试”或“集成测试”有什么关系?整个情况保持不变。
Doc Brown

1
我担心的是,他的同事可能不知道单元测试和组件测试之间的区别,因此可能需要进一步培训以解决此问题。
CodeART 2012年

@CodeRush-我认为您不相信同行评审?使您真正意识到别人在重新检查您的代码(而不是仅仅在生产中崩溃),您将需要什么?

我知道这个主意,但是我在以前的工作中没有看到它有效地工作。我认为高级开发人员的评论是一种更好的反馈机制。
CodeART 2012年

-5

我认为您的公司不应该使用多线程。

在完成一个大型多线程项目之后,我发现两种技术对于使事情正常运行至关重要。 首先,必须正确编写代码。必须手动检查每个字段,以确保正确声明了该字段,并在引用的任何地方正确同步了该字段。(警告:我在这里做了一些简化,以使答案简短(或至少要缩短)。) 其次,必须通过在单核多核计算机上完全运行代码来测试代码-使用100%的很多分钟每个核心。(而且,如果像我通常那样只使用每个内核的2%,那也是一个错误。)

您也许可以管理它,但是您的组织却不能。即使他们了解问题,但他们没有,他们也没有专业知识。

大多数语言都提供了避免这种情况的方法。如果您有一个套接字读取器,该套接字读取器通常具有自己的线程,则应使其尽可能快且简单地将信息获取到主线程。更好的是,寻找可以为您处理读数的螺纹部分的系统类/函数。像大多数GUI API一样,使用一个一个接一个运行“事件”的队列。(为此,请使用GUI API的事件队列本身。)如果需要并行处理,则可能会找到某种“工作线程”,该数据将使您将数据/字段保留在单个线程中,从而为您处理所有传输。

强调多线程的所有危险。(可怕的故事:我最喜欢的错误涉及几行,如: int i = 5; i = i * i;,结果i值为35。我看到的很多东西是:if (thing != null) thing.reset();抛出空指针异常。)我认为您唯一的希望就是让他们理解它们踏入一个全新的,陌生的世界,也许他们应该向后退一步。

我不是真正的多线程肯定如何处理。如果可以把工作交给一个人,如果失败了,他们所做的一切都会被扔掉,很好。但是一个团队只会和最弱的成员一样强大,即使是一个优秀的程序员也将无法使用成熟的多线程。我希望语言使用者会找到一种确保安全的方法。我已经看到了一些有用的软件。但是我认为最好避免多线程,除非执行时间很关键并且有一个好的程序员或一个成熟的团队可用。


2
您不知道这是什么公司,或者他们在做什么,因此“您可能能够管理它,但您的组织却无法做到”这样的评论有点毫无根据-就您所知,tika可以在Microsoft工作。无论他们是谁,多线程都是解决他们问题的最佳方法。有很多适合的情况。抛开所有这些,问题不是关于多线程的问题,而是关于处理由于缺乏专业知识而导致问题的同事的问题。
anaximander

@anaximander:多线程产生的错误很难重现,因此很难被追踪。要生产可用的,可修复的MT软件,您至少需要让程序员和管理人员意识到危险。Tika的组织显然无法处理这种情况。我已经看到测试/质量保证人员通过大量测试并要求对每个错误进行修复来迫使程序员编写声音代码。这不适用于MT。如果同事缺乏能力,兴趣和动力,请让他远离MT。
RalphChapin 2013年

@anaximander:您在Microsoft方面的经验一定比我有过。公平地说,我从未见过任何看起来像是多线程错误的东西。...。感谢您的评论。
RalphChapin 2013年

1
无论如何,当问题是“如何处理缺乏专业知识的同事?”时,我都不认为“您的公司在构建软件时错了”。在任何组织中,无论多么庞大和知识渊博,总是会有知识空白的人。不知道谁是谁的组织或软件在做什么,我认为您无法可靠地判断公司不知道他们在做什么,或者他们的问题可以在没有多线程的情况下解决。
anaximander
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.