3 Stimmen

Wie sieht der effektivste Arbeitsablauf zwischen Leuten, die Algorithmen entwickeln, und Entwicklern aus?

Wir entwickeln Software zur Mustererkennung in Videos. Wir haben 7 Mathematiker, die Algorithmen entwickeln. Außerdem haben wir 2 Entwickler, die die Anwendung mit diesen Algorithmen pflegen/entwickeln. Das Problem ist, dass die Mathematiker verschiedene Entwicklungswerkzeuge wie Matlab, C, C++ verwenden, um Algorithmen zu erstellen. Da sie keine Entwickler sind, machen sie sich auch keine Gedanken über Speicherverwaltung oder Multithreading. Dies ist einer der Gründe, warum die Anwendung eine Menge Fehler aufweist.

Wenn Sie in Ihrem Unternehmen eine ähnliche Situation haben, wie gehen Sie damit um? Welche Werkzeuge können Sie für die Erstellung von Algorithmen am besten empfehlen? Wie sollte die Kommunikation zwischen Mathematikern und Entwicklern aussehen? Was ist Ihrer Meinung nach die effektivste Methode, um mit High-Level-Tools zu arbeiten?

4voto

bayer Punkte 6687

Ich bin mir nicht sicher, ob ihr Entwickler das Zeug des Mathematikers umschreibt oder ob ihr nur eine Schnittstelle dazu habt, also bin ich nicht sicher, ob meine Antwort von Nutzen ist.

Wie auch immer: Ich arbeite zusammen mit einer Reihe von Doktoranden und Postdocs an einer Bibliothek für maschinelles Lernen und bin selbst Student. In diesem Prozess musste ich viele Algorithmen von Python/Numpy nach C++/Blas übersetzen.

Dieser Prozess kann recht mühsam sein - insbesondere bei numerischen und stochastischen Algorithmen ist es schwierig, Fehler zu finden.

Ich habe also Folgendes getan: Einige Beispieleingaben erhalten und die Ergebnisse mit dem Python-Code berechnen. Generieren Sie daraus Unit-Tests für C++ und beginnen Sie dann, sie in C++ zu kodieren.

Die Überprüfung konkreter Beispieleingaben mit den Ausgaben ist Wesentlich in dieser Umgebung.

3voto

DevinB Punkte 8160

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.

2voto

Shea Punkte 10819

Ich würde den Entwicklern empfehlen, ein paar Stunden damit zu verbringen, sich in Matlab einzuarbeiten, insbesondere in den Matlab-Debugger. Wenn sie einen CS-Hintergrund haben, sind sie bereits mit Vektoren und Matrizen vertraut, wenn auch nicht in der Praxis. Abgesehen davon, dass die Matrix die Standarddatenstruktur ist, ist Matlab C-ähnlich und leicht genug zu interpretieren, um es in eine andere Sprache zu übersetzen.

2voto

Kekoa Punkte 26946

Ich habe in letzter Zeit mit einem Physikprofessor zusammengearbeitet und verfüge über ein wenig Erfahrung in diesem Bereich (obwohl ich zugegebenermaßen kein Experte bin).

Ich musste eine Menge Matlab-Code in eine andere Sprache übersetzen. Das war schwierig, weil viele (die meisten) Operationen nicht vorhanden sind, auch was die Genauigkeit und die Arbeit mit Matrizen und Vektoren betrifft. Es muss eine gute mathematische Bibliothek gefunden oder erstellt werden, die Ihren Bedürfnissen entspricht.

Die beste Methode, die ich gefunden habe, ist, wie folgt vorzugehen

  1. Bringen Sie den Algorithmus dazu, in der neuen Sprache korrekt zu funktionieren.
  2. Erstellen Sie einige Tests, um zu überprüfen, ob der Algorithmus die gewünschte Ausgabe erzeugt. Lassen Sie Ihre Mathematiker überprüfen, ob Ihre konvertierte Lösung tatsächlich funktioniert und ob Sie mit Ihren Tests alle Grundlagen abgedeckt haben.
  3. Wenn er dann funktioniert und Sie Ihren Tests vertrauen können, optimieren Sie den Algorithmus so, dass er einen guten Kodierungsstil, ein gutes Design und gute Leistungsmerkmale aufweist. Verwenden Sie Ihre Regressionstests, um sicherzustellen, dass Sie nichts kaputt machen.

Normalerweise beginne ich mit einer wortwörtlichen Kopie ihrer Algorithmen in die andere Sprache und arbeite dann von dort aus, unabhängig davon, ob ich viele Tests durchführe.

Es ist wichtig, zuerst eine funktionierende Kopie zu erstellen, falls die Leistung wirklich kein Problem darstellt und Sie sich anderen Dingen zuwenden müssen und später zurückkommen können, um sie schneller zu machen.

0voto

Makach Punkte 7140

Das ist Ihre Aufgabe. Wie Sie damit umgehen, macht Sie als Systementwickler aus.

Kommunizieren Sie mit Ihren Kollegen. Zeichnen und erklären Sie, halten Sie Besprechungen ab, vereinbaren Sie Anforderungen und legen Sie Standards fest, verfolgen Sie Ihre Pläne und sprechen Sie mit Ihrem Projektleiter. Sorgen Sie dafür, dass Ihre zuständigen Kollegen an den Sitzungen teilnehmen. Führen Sie 1:1-Gespräche etc.

Sie können nicht die Mathematiker dafür verantwortlich machen, dass die Entwickler Fehler verursachen. Es ist ihre Aufgabe, sich um die Implementierung zu kümmern, nicht die der Mathematiker.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X