我们正在开发具有视频模式识别功能的软件。我们有7位数学家正在创建算法。此外,我们有2名开发人员使用这些算法维护/开发应用程序。问题是数学家正在使用不同的开发工具来创建像Matlab,C,C ++这样的算法。另外,因为他们不是开发人员,所以不要过多关注内存管理或多线程。这个app的原因之一。有很多错误。
如果您公司有类似情况,您如何处理?您可以推荐哪些最佳工具来创建算法?数学家和开发人员之间应该进行什么样的沟通?您认为使用高级工具最有效的是什么?
答案 0 :(得分:4)
我不确定你是否正在重写数学家的东西,或者你是否只需要与它接口,所以我不确定我的答案是否有用。
但是:我和一群博士候选人和博士后一起在机器学习库上工作,我自己也是学生。在这个过程中,我开始将许多算法从python / numpy转换为C ++ / blas。
这个过程非常繁琐 - 尤其是数值和随机算法,很难找到错误。
所以这就是我所做的:获取一些示例输入并使用python代码计算结果。为C ++生成单元测试,然后用C ++开始编码。
在此设置中,检查具有输出的具体样本输入必需。
答案 1 :(得分:3)
我同意Makach。
让创建算法的人使用他们最熟悉的工具。因为在这个项目中有两个独立的(同样重要的)任务。首先,创建一个高效,优雅和适当的数学上合理的算法,然后将翻译成CPU说话的任务非常困难。数学家应该专注于他们的第一项任务,并使他们更容易,让他们使用他们感到舒适的toosl。就工时而言,编写MATLAB代码比使用它们学习新的编程语言更有效。
你的任务是发掘埋藏在乱码中的(可能是)精彩的数学。
这部分只是对手头问题的看法。这是实际答案。
沟通,相互尊重和教学/学习。
通讯&相互尊重
您必须经常与他们沟通。与他们密切合作,并在遇到您不确定的事情时向他们提问。当相互尊重时,这会更容易,这意味着如果你把所有时间花在批评他们的编码能力上,那么他们将被迫花费所有时间来批评你的数学能力。相反,尝试快速学习 - 会话。 (“午餐和学习”是一种相当常见的策略)
<强>教学/学习强>
传授给他们的第一个也是最重要的智慧是评论。让他们评论他们的代码废话。告诉他们评论比代码质量更重要,只要他们的评论是正确的,他们就可以把剩下的评论留给你们。因为他们可以。他们不需要让他们的代码看起来很漂亮,因为速度最快,他们只需要让它们对你们有意义。
要继续这种相互学习的方案,如果你注意到他们正在犯的一些非常简单的常见错误,(几乎没有多线程那么复杂)只是给他们一个快速的提升。 “这种方式有效(或没有),但这是一种方法,这有点不同,但它会让你的生活更容易。”鼓励他们通过尝试注意您和您的团队遇到困难的算法的哪些细微差别或部分内容来回报,并教一些关于它的教程。
一旦你们进行了沟通,你会发现将编码风格塑造成最适合你团队的方式更容易,也更容易理解为什么你看不到它们一样他们这样做的方式。
另外,如Kekoav所述,请确保它们提供了一些满载的测试用例。 这意味着类似
A - &gt; B - &gt; C - &gt; D - &gt;溶液
他们会为你提供A的所有值,然后是B的样子,然后是C的样子等等。这样你就可以确定它不仅在最后是正确的,而且在每一步都是正确的。尝试让他们提供常规的示例,以及其中一些不常见的示例,以便您可以确定您的代码涵盖边缘情况。
答案 2 :(得分:2)
我建议开发人员花几个小时习惯Matlab,尤其是Matlab调试器。如果他们的背景是CS,那么他们在理论上已经熟悉了矢量和矩阵,如果不是实际的话。除了作为默认数据结构的矩阵之外,Matlab与C类似,并且易于翻译成另一种语言。
答案 3 :(得分:2)
我最近一直在和物理学教授一起工作,并且对此有一点经验(尽管我承认我不是专家)。
我不得不将很多Matlab代码翻译成另一种语言。这很困难,因为很多(大多数)操作都不存在,包括精确度,以及使用矩阵和向量。需要找到一个好的数学库,或者根据您的需要创建一个好的数学库。
我找到的最好方法是执行以下操作:
我通常从他们的算法的逐字副本开始到另一种语言,然后从那里工作,无论我是否做了很多测试。
首先获取工作副本非常重要,以防性能确实不是问题,您需要继续处理其他事情,并且可以稍后再回来使其更快。
答案 4 :(得分:0)
这是你的工作。如何处理这个问题是您作为系统开发人员的标志。
与同事沟通。绘制并解释,召开会议,达成一致并制定标准要求,遵循计划并与项目经理交谈。确保您的相关同事参加会议。有1-1会谈等
你不能责怪开发人员创建错误的数学家。担心实施是他们的工作,而不是数学家。