3 votes

Quel est le flux de travail le plus efficace entre les personnes qui développent des algorithmes et les développeurs ?

Nous développons un logiciel de reconnaissance des formes dans les vidéos. Nous avons 7 mathématiciens qui créent des algorithmes. De plus, nous avons 2 développeurs qui maintiennent / développent l'application avec ces algorithmes. Le problème est que les mathématiciens utilisent différents outils de développement pour créer des algorithmes comme Matlab, C, C++. De plus, comme ils ne sont pas développeurs, ils ne se préoccupent pas beaucoup de la gestion de la mémoire ou du multithreading. C'est l'une des raisons pour lesquelles l'application comporte de nombreux bogues.

Si vous êtes confronté à une situation similaire dans votre entreprise, comment la gérez-vous ? Quels sont les meilleurs outils que vous pouvez recommander pour créer des algorithmes ? Quelle doit être la communication entre les mathématiciens et les développeurs ? À votre avis, quel est le moyen le plus efficace de travailler avec des outils de haut niveau ?

4voto

bayer Points 4202

Je ne sais pas si vous, les développeurs, réécrivez le travail du mathématicien ou si vous devez simplement vous interfacer avec lui, donc je ne suis pas sûr que ma réponse soit utile.

Cependant, je travaille avec un groupe de doctorants et de post-doctorants sur une bibliothèque d'apprentissage automatique et je suis moi-même étudiant. Dans ce processus, j'ai été amené à traduire beaucoup d'algorithmes de python/numpy en C++/blas.

Ce processus peut être assez fastidieux - surtout avec les algorithmes numériques et stochastiques, il est difficile de trouver des bogues.

Voici donc ce que j'ai fait : Obtenir quelques échantillons d'entrées et calculer les résultats avec le code python. Générer des tests unitaires pour C++ à partir de ces données et commencer à les coder en C++.

Vérifier les entrées de l'échantillon concret avec les sorties est essentiel dans ce contexte.

3voto

DevinB Points 5960

Je suis d'accord avec Makach.

Laissez les personnes qui créent les algorithmes utiliser les outils qu'elles connaissent le mieux. Car il y a deux tâches distinctes (et tout aussi importantes) à accomplir dans le cadre de ce projet. Tout d'abord, il y a la création d'un algorithme efficace, élégant et approprié du point de vue mathématique, puis il y a la tâche difficile et tordue de le traduire en langage CPU. Les mathématiciens devraient se concentrer sur leur première tâche, et pour leur faciliter la tâche, leur permettre d'utiliser le toosl avec lequel ils sont à l'aise. En termes d'heures de travail, il est beaucoup plus efficace d'utiliser leur temps pour écrire du code MATLAB que de leur faire apprendre un nouveau langage de programmation.

Votre tâche consiste à déterrer les mathématiques (vraisemblablement) brillantes qui sont enfouies dans le code charabia.

Cette partie est juste un point de vue sur le problème en question. Voici la vraie réponse.

Communication, respect mutuel et enseignement/apprentissage.

Communication et respect mutuel

Vous devez communiquer avec eux souvent. Travaillez en étroite collaboration avec eux et posez-leur des questions lorsque vous rencontrez quelque chose dont vous n'êtes pas sûr. Cela est beaucoup plus facile lorsqu'il y a un respect mutuel, ce qui signifie que si vous passez tout votre temps à critiquer leurs capacités de codage, ils seront obligés de passer tout leur temps à critiquer vos capacités en mathématiques. Essayez plutôt des sessions d'apprentissage rapides. ("Lunch & Learn" est une tactique assez courante)

Enseignement/apprentissage

La première et la plus importante des sagesses à leur transmettre est le commentaire. Faites-leur commenter leur code. Dites-leur que les commentaires sont bien plus importants que la qualité du code, et que tant que leurs commentaires sont corrects, ils peuvent vous laisser faire le reste. Parce qu'ils le peuvent. Ils n'ont pas besoin que leur code soit beau, qu'il soit le plus rapide, ils ont juste besoin qu'il ait du sens pour vous.

Pour poursuivre ce scénario d'apprentissage mutuel, si vous remarquez des erreurs très simples et très courantes qu'ils font (rien d'aussi compliqué que le multithreading), prévenez-les rapidement. "Cette façon de faire fonctionne (ou ne fonctionne pas) mais voici une façon de faire qui est un peu différente mais qui vous rendra la vie beaucoup plus facile". Encouragez-les à rendre la pareille en essayant de remarquer les nuances ou les parties de leurs algorithmes avec lesquelles vous et votre équipe avez des difficultés et donnez un petit tutoriel à ce sujet.

Une fois la communication établie, il vous sera de plus en plus facile d'adapter leur style de codage à ce qui convient le mieux à votre équipe, et ils comprendront aussi plus facilement pourquoi vous ne voyez pas les choses de la même manière qu'eux.

En outre, comme l'a mentionné Kekoav, assurez-vous qu'ils fournissent quelques cas de test entièrement chargés. Cela signifie que pour quelque chose comme

A -> B -> C -> D -> Solution

Ils vous fourniront toutes les valeurs pour A, puis ce qu'il en est pour B, puis ce qu'il en est pour C et ainsi de suite. Ainsi, vous pouvez être certain que non seulement le résultat est correct à la fin, mais qu'il l'est également à chaque étape du processus. Essayez de leur demander de fournir des exemples réguliers, mais aussi quelques-uns qui sont inhabituels, afin que vous puissiez être certain que votre code couvre les cas limites.

2voto

Arnshea Points 6270

Je recommande aux développeurs de passer quelques heures à s'habituer à Matlab, en particulier au débogueur Matlab. Si leur formation est en CS, ils seront déjà familiers avec les vecteurs et les matrices, en théorie sinon en pratique. En dehors du fait que la matrice est la structure de données par défaut, Matlab ressemble à du C et est suffisamment facile à interpréter pour être traduit dans un autre langage.

2voto

Kekoa Points 11545

J'ai travaillé avec un professeur de physique récemment, et j'ai un peu d'expérience dans ce domaine (bien que je ne sois pas un expert).

J'ai dû traduire beaucoup de code Matlab dans une autre langue. Cela a été difficile parce que beaucoup (la plupart) des opérations sont absentes, notamment en ce qui concerne la précision et le travail avec les matrices et les vecteurs. Une bonne bibliothèque mathématique doit être trouvée, ou créée pour répondre à vos besoins.

Le meilleur moyen que j'ai trouvé est de faire ce qui suit :

  1. Faire en sorte que l'algorithme fonctionne correctement dans la nouvelle langue.
  2. Créez quelques tests pour vérifier que l'algorithme produit le résultat souhaité. Demandez à vos mathématiciens de vérifier que votre solution convertie fonctionne effectivement et que vous avez couvert toutes les bases avec vos tests.
  3. Puis, une fois qu'il fonctionne et que vous pouvez faire confiance à vos tests, optimisez l'algorithme pour qu'il ait un bon style de codage, une bonne conception et de bonnes caractéristiques de performance. Utilisez vos tests de régression pour vous assurer que vous ne cassez rien.

Je commence normalement par copier mot à mot leurs algorithmes dans l'autre langue, puis je travaille à partir de là, même si je fais beaucoup de tests.

Il est important d'obtenir d'abord une copie de travail, au cas où les performances ne seraient pas vraiment un problème et que vous deviez passer à autre chose et revenir plus tard pour l'accélérer.

0voto

Makach Points 1726

C'est votre travail. C'est la façon dont vous gérez cela qui vous identifie en tant que développeur de systèmes.

Communiquez avec vos collègues. Dessinez et expliquez, organisez des réunions, mettez-vous d'accord sur les exigences des normes et fixez-les, suivez vos plans et parlez à votre chef de projet. Assurez-vous que vos collègues concernés participent aux réunions. Ayez des entretiens individuels, etc.

Vous ne pouvez pas reprocher aux mathématiciens que les développeurs créent des bugs. C'est à eux de s'occuper de l'implémentation, pas aux mathématiciens.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X