Какой самый эффективный рабочий процесс между людьми, которые разрабатывают алгоритмы и разработчиками? - PullRequest
3 голосов
/ 02 июня 2009

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

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

Ответы [ 5 ]

4 голосов
/ 02 июня 2009

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

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

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

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

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

3 голосов
/ 02 июня 2009

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

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

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

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

Общение, взаимоуважение и преподавание / обучение.

Коммуникация и взаимное уважение

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

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

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

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

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

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

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

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

2 голосов
/ 02 июня 2009

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

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

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

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

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

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

2 голосов
/ 02 июня 2009

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

0 голосов
/ 02 июня 2009

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

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

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

...