代码之家  ›  专栏  ›  技术社区  ›  Vadim

算法开发人员和开发人员之间最有效的工作流程是什么?

  •  3
  • Vadim  · 技术社区  · 17 年前

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

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

    5 回复  |  直到 17 年前
        1
  •  4
  •   bayer    17 年前

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

    然而,我和一群博士生和博士后一起在一个机器学习图书馆工作,我自己也是一名学生。在这个过程中,我将许多算法从python/numpy翻译成C++/blas。

    这个过程可能相当乏味——特别是对于数值和随机算法,很难找到bug。

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

    检查具体的样本输入和输出是必要的 本质的 在这种情况下。

        2
  •  3
  •   DevinB    17 年前

    我同意马卡的观点。

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

    你的任务是挖掘(大概)隐藏在乱七八糟代码中的精彩数学。

    这一部分只是对当前问题的一种看法。这是实际的答案。

    沟通、相互尊重和教学。

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

    为了继续这个相互学习的场景,如果您注意到他们正在犯一些非常简单、非常常见的错误,(没有什么比多线程更复杂的了),请快速提醒他们。“这种方法可行(或不可行),但这里有一种方法有点不同,但它会让你的生活更轻松。”鼓励他们做出回应,试着注意你和你的团队在算法的哪些细微差别或部分方面遇到困难,并教他们一些相关的指导。

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

    这意味着像

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

        3
  •  2
  •   Shea    17 年前

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

        4
  •  2
  •   Kekoa    17 年前

    我最近一直在和一位物理教授合作,在这方面我有一些经验(尽管我不是专家)。

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

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

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

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

    首先获得一份工作副本是很重要的,以防性能确实不是问题,您需要继续进行其他工作,并且可以稍后回来以加快速度。

        5
  •  0
  •   Makach    17 年前

    这是你的工作。您如何处理这一问题是您作为系统开发人员的身份所在。

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

    你不能因为开发人员制造bug而责怪数学家。他们的工作是担心实现,而不是数学家。

    推荐文章