Я согласен с Макачем.
Пусть ребята, которые создают алгоритмы, используют инструменты, с которыми они наиболее знакомы. Потому что есть две отдельные (и одинаково важные) задачи для работы в этом проекте. Во-первых, это создание эффективного, элегантного и подходящего математически обоснованного алгоритма, а затем сложная задача по переводу его на язык CPU. Математики должны сосредоточиться на своей первой задаче и, чтобы им было легче, разрешить им использовать тот тосл, который им удобен. С точки зрения человеко-часов, это гораздо более эффективное использование их времени для написания кода MATLAB, чем то, чтобы они изучали новый язык программирования.
Ваша задача состоит в том, чтобы раскопать (предположительно) блестящую математику, скрытую в коде тарабарщины.
Эта часть - всего лишь перспектива рассматриваемой проблемы. Вот фактический ответ.
Общение, взаимоуважение и преподавание / обучение.
Коммуникация и взаимное уважение
Вы должны часто общаться с ними. Работайте в тесном контакте с ними и задавайте им вопросы, когда сталкиваетесь с чем-то, в чем вы не уверены. Это гораздо проще, когда есть взаимное уважение, а это значит, что если вы будете тратить все свое время на критику своих кодовых способностей, то они будут вынуждены тратить все свое время на критику ваших математических способностей. Вместо этого попробуйте быстрые учебные занятия. («Обед и учись» - довольно распространенная тактика)
Обучение / Обучение
Первая и самая важная мудрость, которую они передают, - это комментировать. Пусть они прокомментируют дерьмо из своего кода. Скажите им, что комментарии намного важнее, чем качество кода, и что, если их комментарии верны, они могут оставить остальное вам, ребята. Потому что они могут. Им не нужно, чтобы их код выглядел красиво, потому что они самые быстрые, им просто нужно, чтобы они имели смысл для вас, ребята.
Чтобы продолжить этот сценарий взаимного обучения, если вы заметите некоторые очень простые и распространенные ошибки, которые они делают (ничего более сложного, чем многопоточность), просто дайте им быстрое понимание. «Этот способ работает (или не работает), но вот способ сделать это немного по-другому, но он сделает вашу жизнь намного проще». Призовите их ответить взаимностью, пытаясь заметить, с какими нюансами или частями их алгоритмов возникли трудности у вас и вашей команды, и преподать небольшое руководство по этому вопросу.
Как только вы, ребята, наладите общение, вам будет легче и проще приспособить их стиль кодирования к тому, что лучше для вашей команды, и им также будет легче понять, почему вы не видите это так как они делают.
Также, как упомянул Kekoav, убедитесь, что они предоставляют несколько полностью загруженных тестовых случаев.
Это значит что-то вроде
A -> B -> C -> D -> Решение
Они предоставят вам все значения для A, затем, как оно выглядит в B, затем, как оно выглядит в C и так далее. Так что вы можете быть уверены, что это не только правильно в конце, но и правильно на каждом этапе пути. Постарайтесь, чтобы они предоставили примеры, которые являются регулярными, а также некоторые из них, которые являются необычными, чтобы вы могли быть уверены, что ваш код покрывает крайние случаи.