2009-06-01 1 views
3

Мы разрабатываем программное обеспечение с распознаванием образов в видео. У нас есть 7 математиков, которые создают алгоритмы. Кроме того, у нас есть 2 разработчика, которые поддерживают/разрабатывают приложение с помощью этих алгоритмов. Проблема в том, что математики используют различные средства разработки для создания алгоритма, такого как Matlab, C, C++. Кроме того, поскольку они не являются разработчиками, не уделяйте много внимания управлению памятью или многопоточности. Это одна из причин, почему приложение. имеет много ошибок.Каков наиболее эффективный рабочий процесс между людьми, разрабатывающими алгоритмы и разработчики?

Если у вас сложилась схожая ситуация, как вы справляетесь с этим? Каковы лучшие инструменты, которые вы можете рекомендовать для создания алгоритмов? Какое общение должно быть между математиками и разработчиками? Что, по вашему мнению, наиболее эффективно для работы с инструментами высокого уровня?

+3

Делают ли разработчики _translate_ то, что создавали математики, или вы _interface_ для кода математиков? – Svante

ответ

3

Я согласен с Макач.

Пусть ребята, которые создают алгоритмы, используют инструменты, с которыми они наиболее знакомы. Потому что в этом проекте есть две отдельные (и не менее важные) задачи. Во-первых, существует создание эффективного, изящного и подходящего математически обоснованного алгоритма, тогда есть трудная задача перевести его в CPU-говорить. Математики должны сосредоточиться на своей первой задаче и сделать их более удобными для них, позволить им использовать то, что им удобно. Что касается человеческих часов, гораздо более эффективное использование их времени для написания кода MATLAB, чем это было бы, если бы они изучали новый язык программирования.

Ваша задача состоит в том, чтобы раскрыть (предположительно) блестящую математику, погребенную в коде табелки.

Эта часть - это просто перспектива проблемы. Вот реальный ответ.

Связь, взаимное уважение и обучение/обучение.

Связь & взаимоуважение

Вы должны общаться с ними часто. Работайте с ними и задавайте им вопросы, когда вы сталкиваетесь с чем-то, о чем не знаете. Это намного проще, когда есть взаимное уважение, а это означает, что если вы все время критикуете свои способности кодирования, то они будут вынуждены тратить все свое время на критику ваших математических способностей. Вместо этого попробуйте выполнить быстрые обучающие сессии. («Обед & Learn» является довольно распространенной тактикой)

Обучение/Обучение

Первая и самая важная часть мудрости, чтобы придать им комментируют. Попросите их прокомментировать дерьмо из своего кода. Скажите им, что комментарии гораздо важнее, чем качество кода, и что пока их комментарии верны, они могут оставить остальных для вас, ребята. Потому что они могут. Им не нужно, чтобы их код выглядел красиво, потому что это был самый быстрый, они просто нуждаются в этом, чтобы иметь смысл для вас, ребята.

Чтобы продолжить этот сценарий взаимного обучения, если вы заметили некоторые очень простые очень распространенные ошибки, которые они делают, (ничего не так сложно, как многопоточность), просто дайте им быстрый хэдз-ап. «Этот способ работает (или нет), но вот способ сделать это немного иначе, но это сделает вашу жизнь намного проще». Поощрите их ответить взаимностью, пытаясь заметить, какие нюансы или части их алгоритмов, с которыми вы и ваша команда испытываете трудности, и преподаете немного учебника об этом.

Как только вы, ребята, получите сообщение, вам будет легче и легче сформировать свой стиль кодирования в соответствии с тем, что лучше для вашей команды, и им также будет легче понять, почему вы не видите его То же самое происходит.

Также, как упоминалось в Kekoav, убедитесь, что они предоставляют несколько полностью нагруженных тестовых случаев. Это означает что-то вроде

A -> B -> C -> D -> Решение

Они обеспечат вам все значения для А, то, что он выглядит на B, то, как он выглядит на C и так далее. Чтобы вы могли быть уверены, что это не только правильно, но и на каждом шагу. Постарайтесь, чтобы они приводили примеры, которые являются регулярными, а также некоторые из них необычны, так что вы можете быть уверены, что ваш код охватывает крайние случаи.

+0

Спасибо, очевидно, вы сформулируете себя намного лучше, чем я. – Makach

2

Я бы рекомендовал разработчикам потратить несколько часов на то, чтобы привыкнуть к Matlab, особенно отладчику Matlab. Если их фон CS, то они уже будут знакомы с векторами и матрицами теоретически, если не практически. Помимо матрицы, являющейся структурой данных по умолчанию, Matlab является C-подобным и достаточно простым для интерпретации перевода на другой язык.

2

В последнее время я работаю с профессором физики, и у меня есть небольшой опыт в этом (хотя, по общему признанию, я не эксперт).

Мне пришлось перевести много кода Matlab на другой язык. Это было трудно, потому что многие (большинство) операций отсутствуют, в том числе, когда речь идет о точности, и работа с матрицами и векторами. Хорошая математическая библиотека должна быть найдена или создана в соответствии с вашими потребностями.

Лучший способ, который я нашел, чтобы сделать следующее:

  1. Получить алгоритм для корректной работы на новом языке.
  2. Создайте несколько тестов, чтобы убедиться, что алгоритм создает желаемый результат. Попросите ваших математиков убедиться, что ваше преобразованное решение действительно работает, и что вы накрыли все базы вашими испытаниями.
  3. Затем, после того, как он работает, и вы можете доверять своим тестам, оптимизировать алгоритм, чтобы быть хорошим стилем кодирования, иметь хорошие характеристики дизайна и производительности. Используйте свои регрессионные тесты, чтобы убедиться, что вы ничего не нарушаете.

Обычно я начинаю с дословной копии своих алгоритмов на другой язык, а затем работаю оттуда, независимо от того, выполняю ли я много тестов.

Важно сначала получить рабочую копию, если производительность действительно не проблема, и вам нужно перейти к другим вещам и вернуться позже, чтобы сделать ее быстрее.

0

Это ваша работа. Как вы справляетесь с этим, это то, что идентифицирует вас как разработчика системы.

Общайтесь со своими коллегами. Нарисуйте и объясните, проводите встречи, соглашайтесь и устанавливайте требования стандартов, следуйте своим планам и поговорите со своим менеджером проекта. Убедитесь, что ваши соответствующие коллеги присоединяются к собраниям. Переговоры 1-1 и т. Д. И т. Д.

Вы не можете обвинять его в математике разработчикам, создающим ошибки. Их задача - беспокоиться о реализации, а не о математиках.

4

Я не уверен, переписывают ли вы разработчики математики или если вам просто нужно взаимодействовать с ним, поэтому я не уверен, что мой ответ будет полезен.

Тем не менее: я работаю вместе с группой кандидатов и постдоков в библиотеке машинного обучения и сам студент. В этом процессе я пришел, чтобы перевести множество алгоритмов из python/numpy в C++/blas.

Этот процесс может быть довольно утомительным - особенно с числовыми и стохастическими алгоритмами, трудно найти ошибки.

Итак, вот что я сделал: Получите некоторые входы образцов и вычислите результаты с помощью кода python. Создайте единичные тесты из них для C++, а затем начните их кодирование на C++.

Проверка входов образца образца с выходами существенная в этой настройке.

+0

+ 1 для ввода конкретных образцов. Это похоже на контракт и дает что-то для теста –

Смежные вопросы