2009-06-01 74 views
3

我们正在开发视频模式识别软件。我们有7位正在创建算法的数学家。此外,我们有2个开发人员使用这些算法维护/开发应用程序。问题在于数学家正在使用不同的开发工具来创建像Matlab,C,C++这样的算法。另外,因为他们不是开发人员,所以不要太在意内存管理或多线程。这是应用程序的原因之一。有很多错误。开发算法和开发人员的人员之间最有效的工作流程是什么?

如果在贵公司你有类似的情况,你如何处理它?建议您创建算法的最佳工具是什么?数学家和开发者之间应该进行什么沟通?您认为最有效的工具是使用高级工具吗?

+3

开发人员是否在翻译数学家的作品,或者是否接触数学家的代码? – Svante 2009-06-01 20:23:33

回答

3

我同意Makach。

让创建算法的人使用他们最熟悉的工具。因为在这个项目中有两个独立的(同样重要的)任务。首先,创建一个高效,优雅和适当的数学声音算法,然后将其转化为CPU说话的任务非常困难。数学家应该把重点放在他们的第一项任务上,并让他们更容易,让他们使用他们感到舒服的托辞。在工作时间方面,编写MATLAB代码比用他们的时间更有效地利用他们的时间,而不是让他们学习一种新的编程语言。

你的任务是挖掘的(大概)辉煌数学是埋在杂乱的代码中。

这部分只是关于手头问题的一个观点。这是实际的答案。

沟通,相互尊重和教学/学习。

通信&相互尊重

你必须与他们经常通信。与他们密切合作,并在遇到你不确定的事情时向他们提问。当相互尊重时这更容易,这意味着如果你花时间批评自己的编码能力,那么他们将被迫花时间批评你的数学能力。相反,尝试快速学习会话。 (“午餐&学习”是一个相当普遍的战术)

教/学

第一个也是最重要的棋子智慧传授给他们的评论。让他们评论他们的代码废话。告诉他们这些评论比代码质量更重要,只要他们的评论是正确的,他们可以将其余部分留给你们。因为他们可以。他们不需要让他们的代码看起来很漂亮,因为速度最快,他们只需要让它们对你们有意义。

要继续这种相互学习的情况下,如果你注意到他们正在一些很简单很常见的错误,(什么几乎一样复杂的多线程),只是给他们一个快速的抬起头来。 “这种方式可行(或不),但这是一种有点不同的方式,但它会让你的生活变得容易得多。”鼓励他们通过试图注意你和你的团队遇到的困难或算法中的哪些细微差别,并教一些关于它的小教程来回报他们。

一旦你们的沟通流畅起来,你会发现将自己的编码风格塑造成最适合你的团队的方式会更容易,也更容易理解,为什么你看不到它他们也是这样。另外,正如Kekoav所提到的,确保他们提供了几个完全加载的测试用例。 这意味着这样的事情

甲 - >乙 - “ç - > d - >解决方案

他们会为您提供了一个所有的值,那么它是什么样子,在B,那么它是什么样子在C等等。所以你可以肯定的是,它不仅最终是正确的,而且它的每一步都是正确的。试着让他们提供经常使用的例子,还有其中一些不寻常的例子,这样你就可以确定你的代码覆盖了边缘情况。

+0

谢谢,很明显,你制定自己比我好得多。 – Makach 2009-06-02 06:10:13

2

我建议devs花费几个小时习惯Matlab,特别是Matlab调试器。如果他们的背景是CS,那么他们已经在理论上已经熟悉向量和矩阵,如果不是实际的话。除矩阵是默认的数据结构外,Matlab非常类似C语言,并且很容易解释为翻译成另一种语言。

2

我最近和一位物理教授一起工作,并且对此有一点经验(虽然我承认我不是专家)。我不得不将许多Matlab代码翻译成另一种语言。这很困难,因为很多(大部分)操作都不存在,包括涉及到精度和处理矩阵和向量。需要找到一个好的数学图书馆,或者根据您的需求进行创建。

,我发现最好的办法是做到以下几点:

  1. 获取算法在新的语言正常工作。
  2. 创建一些测试以验证算法是否正在生成所需的输出。让您的数学家验证您的转换后的解决方案实际上是否有效,并且您已通过测试覆盖了所有基础。
  3. 然后在工作之后,你可以相信你的测试,优化算法,使其成为良好的编码风格,具有良好的设计和性能特征。使用你的回归测试来确保你没有破坏任何东西。

我通常从他们算法的逐字拷贝开始到另一种语言,然后从那里开始工作,不管我做了很多测试。

首先获得工作副本非常重要,以免性能确实不是问题,并且您需要转移到其他方面并稍后再回来以使其更快。

0

这是你的工作。您如何处理这个问题就是将您标识为系统开发人员。

与你的同事沟通。绘制和解释,召开会议,商定和制定标准要求,遵循您的计划并与您的项目经理交谈。确保你的相关同事参加会议。有1-1谈话等等等等

你不能怪数学家为开发人员创建错误。担心实施是他们的工作,而不是数学家。

4

我不确定你的开发人员是否正在重写数学家的东西,或者如果你只是需要接口,所以我不确定我的答案是否有用。

不过:我与机器学习库一群博士生和博士后的共同努力,是学生自己。在那个过程中,我将大量的算法从python/numpy翻译成C++/blas。

这个过程可能是相当乏味 - 尤其是与数字和随机算法,它是很难找到的bug。

因此,这里是我做过什么:获取一些样本输入和计算与Python代码的结果。为C++生成单元测试,然后开始用C++编写它们。

检查与输出混凝土样品输入是在该设定必不可少

+0

+ 1用于混凝土样本输入。这就像一份合同,并提供一些测试 – 2009-06-01 20:50:16

相关问题