3

我们正在开发视频模式识别软件。我们有 7 位数学家正在创建算法。另外,我们有 2 名开发人员使用这些算法维护/开发应用程序。问题是数学家正在使用不同的开发工具来创建像 Matlab、C、C++ 这样的算法。同样因为他们不是开发人员,所以不会过多关注内存管理或多线程。这是应用程序的原因之一。有很多错误。

如果你的公司有类似的情况,你会怎么处理?您可以推荐哪些用于创建算法的最佳工具?数学家和开发人员之间应该进行什么样的交流?您认为使用高级工具最有效的方法是什么?

4

5 回答 5

4

我不确定您的开发人员是否正在重写数学家的东西,或者您是否只需要与之交互,所以我不确定我的答案是否有用。

但是:我与一群博士候选人和博士后一起在机器学习库上工作,我自己也是一名学生。在那个过程中,我开始将很多算法从 python/numpy 翻译成 C++/blas。

这个过程可能非常乏味——尤其是对于数值和随机算法,很难找到错误。

所以这就是我所做的:获取一些示例输入并使用 python 代码计算结果。用这些为 C++ 生成单元测试,然后开始用 C++ 对它们进行编码。

在此设置中,检查具体的样本输入和输出是必不可少的。

于 2009-06-01T20:46:08.180 回答
3

我同意马卡赫的观点。

让创建算法的人使用他们最熟悉的工具。因为在这个项目中有两个独立的(同样重要的)任务需要处理。首先,创建一个高效、优雅和适当的数学上合理的算法,然后是把它翻译成 CPU 语言的艰巨任务。数学家应该专注于他们的第一个任务,为了让他们更容易,让他们使用他们熟悉的工具。就工时而言,编写 MATLAB 代码比让他们学习一门新的编程语言更有效地利用他们的时间。

你的任务是发掘隐藏在乱码中的(大概)出色的数学。

那部分只是对手头问题的看法。这是实际的答案。

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

沟通与相互尊重

你必须经常与他们交流。与他们密切合作,并在遇到不确定的事情时向他们提问。当相互尊重时,这会容易得多,这意味着如果你把所有的时间都花在批评他们的编码能力上,那么他们将被迫把所有的时间都花在批评你的数学能力上。相反,尝试快速学习课程。(“午餐和学习”是一种相当常见的策略)

教学/学习

传授给他们的第一个也是最重要的智慧是评论。让他们评论代码中的废话。告诉他们评论比代码质量重要得多,只要他们的评论是对的,剩下的就交给你们了。因为他们可以。他们不需要让他们的代码看起来很漂亮,因为要最快,他们只需要它对你们有意义。

为了继续这个相互学习的场景,如果你注意到他们犯了一些非常简单非常常见的错误,(没有什么像多线程那么复杂),请快速提醒他们。“这种方式有效(或无效),但这是一种有点不同的方式,但它会让你的生活更轻松。” 鼓励他们通过尝试注意您和您的团队在算法的哪些细微差别或部分中遇到困难并教一些关于它的小教程来回报。

一旦你们的沟通顺畅,你会发现将他们的编码风格塑造成最适合你的团队的方式变得越来越容易,他们也会更容易理解为什么你不以他们的方式看待它.

此外,正如 Kekoav 所提到的,确保它们提供了一些完全加载的测试用例。这意味着像

A -> B -> C -> D -> 解决方案

他们会为您提供 A 的所有值,然后是 B 的样子,然后是 C 的样子等等。这样你就可以确定它不仅在最后是正确的,而且在每一步都是正确的。尝试让他们提供常规示例,以及其中一些不寻常的示例,以便您可以确定您的代码涵盖了边缘情况。

于 2009-06-01T22:47:53.957 回答
2

我建议开发人员花几个小时习惯 Matlab,尤其是 Matlab 调试器。如果他们的背景是 CS,那么他们在理论上已经熟悉向量和矩阵,如果不是实践的话。除了作为默认数据结构的矩阵之外,Matlab 类似于 C 并且很容易解释为另一种语言的翻译。

于 2009-06-01T20:13:32.503 回答
2

我最近一直在和一位物理学教授一起工作,并且对此有一点经验(尽管我承认我不是专家)。

我不得不将很多 Matlab 代码翻译成另一种语言。这很困难,因为很多(大多数)操作都不存在,包括在精度方面,以及使用矩阵和向量时。需要找到或创建一个好的数学库以满足您的需求。

我发现的最好方法是执行以下操作:

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

我通常从将他们的算法逐字复制到另一种语言开始,然后从那里开始工作,无论我是否进行大量测试。

首先获得一个工作副本很重要,以防性能真的不是问题并且您需要继续做其他事情并且可以稍后再回来以使其更快。

于 2009-06-01T20:20:39.667 回答
0

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

与您的同事沟通。绘图和解释,开会,商定并设定标准要求,按照你的计划和你的项目经理交谈。确保您的相关同事参加会议。进行1-1会谈等

您不能将其归咎于开发人员创建错误的数学家。担心实施是他们的工作,而不是数学家。

于 2009-06-01T20:20:46.857 回答