Ich stimme mit Makach überein.
Lassen Sie die Leute, die die Algorithmen erstellen, die Werkzeuge verwenden, mit denen sie am besten vertraut sind. Denn bei diesem Projekt gibt es zwei getrennte (und gleichermaßen wichtige) Aufgaben zu bewältigen. Zum einen geht es um die Erstellung eines effizienten, eleganten und angemessenen mathematisch fundierten Algorithmus, zum anderen um die verdammt schwierige Aufgabe, ihn in CPU-Sprache zu übersetzen. Die Mathematiker sollten sich auf die erste Aufgabe konzentrieren, und um es ihnen leichter zu machen, sollten sie die Sprache verwenden, mit der sie vertraut sind. Was die Arbeitsstunden angeht, so ist es viel effizienter, MATLAB-Code zu schreiben, als eine neue Programmiersprache zu lernen.
Ihre Aufgabe ist es, die (vermutlich) brillante Mathematik ausfindig zu machen, die in dem Kauderwelsch-Code verborgen ist.
Dieser Teil ist nur eine Sichtweise auf das vorliegende Problem. Hier ist die eigentliche Antwort.
Kommunikation, gegenseitiger Respekt und Lehren/Lernen.
Kommunikation und gegenseitiger Respekt
Sie müssen häufig mit ihnen kommunizieren. Arbeiten Sie eng mit ihnen zusammen und stellen Sie ihnen Fragen, wenn Sie auf etwas stoßen, bei dem Sie sich nicht sicher sind. Das ist viel einfacher, wenn gegenseitiger Respekt herrscht. Wenn Sie also die ganze Zeit damit verbringen, ihre Programmierfähigkeiten zu kritisieren, werden sie gezwungen sein, die ganze Zeit damit zu verbringen, Ihre mathematischen Fähigkeiten zu kritisieren. Versuchen Sie es stattdessen mit schnellen Lernsessions. ("Lunch & Learn" ist eine recht gängige Taktik)
Lehren/Lernen
Die erste und wichtigste Weisheit, die man ihnen vermitteln sollte, ist die des Kommentierens. Lassen Sie sie ihren Code bis zum Gehtnichtmehr kommentieren. Sagen Sie ihnen, dass die Kommentare viel wichtiger sind als die Qualität des Codes und dass sie, solange ihre Kommentare richtig sind, den Rest Ihnen überlassen können. Denn das können sie. Ihr Code muss nicht schön aussehen, er muss nicht der schnellste sein, er muss nur für euch einen Sinn ergeben.
Um dieses Szenario des gegenseitigen Lernens fortzusetzen, geben Sie ihnen einen kurzen Hinweis, wenn Sie einige sehr einfache und häufige Fehler bemerken, die sie machen (nichts, was auch nur annähernd so kompliziert wäre wie Multithreading). "So funktioniert es (oder auch nicht), aber hier ist eine etwas andere Methode, die euch das Leben sehr viel einfacher machen wird." Ermuntern Sie sie, sich zu revanchieren, indem Sie versuchen, die Nuancen oder Teile ihrer Algorithmen zu erkennen, mit denen Sie und Ihr Team Schwierigkeiten haben, und eine kleine Anleitung dazu geben.
Wenn die Kommunikation erst einmal in Gang gekommen ist, wird es Ihnen immer leichter fallen, den Programmierstil so zu gestalten, dass er für Ihr Team am besten geeignet ist, und es wird ihnen auch leichter fallen zu verstehen, warum Sie es nicht so sehen wie sie.
Wie bereits von Kekoav erwähnt, sollten Sie außerdem sicherstellen, dass sie einige vollständig geladene Testfälle bereitstellen. Das bedeutet für etwas wie
A -> B -> C -> D -> Lösung
Sie würden Ihnen alle Werte für A liefern, dann wie es bei B aussieht, dann wie es bei C aussieht und so weiter. So können Sie sicher sein, dass es nicht nur am Ende richtig ist, sondern auch bei jedem einzelnen Schritt des Weges. Versuchen Sie, Beispiele zu finden, die regelmäßig vorkommen, aber auch einige, die ungewöhnlich sind, so dass Sie sicher sein können, dass Ihr Code auch Randfälle abdeckt.