
Parfois, il me semble que plus je regarde l'industrie informatique, plus l'image globale devient primitive dans ma tête. C'est comme si l'informatique était une science sérieuse ou un autre service qui "vous permet de * faire autre chose * en un seul clic". Et au-delà de la portée de cette présentation, il y a encore des activités non touchées par les nouvelles technologies. Allez chez le même dentiste - eh bien, où est-il?
Quelle erreur c'est.
Aujourd'hui, le dentiste prescrit un traitement, et derrière sa décision peut être le travail de plusieurs centaines d'ingénieurs à travers le monde. Programmeurs, mathématiciens, techniciens, analystes, spécialistes du ML, gestionnaires, usines avec imprimantes 3D - tout cela pour le sourire étincelant d'Hollywood.
Pourquoi y a-t-il tant de gens, de quoi s'occupent-ils exactement et comment les mathématiciens et les experts C ++ aident-ils à rendre les dents égales?
Align Technology Inc. Sur My Circle, elle a reçu une note moyenne de 4,5 de ses employés, qui ont surtout évalué l'entreprise pour des tâches intéressantes, un package social, des conditions confortables et pour avoir contribué à rendre le monde meilleur!
- Quel genre de chose fais-tu?-
Andrey Maksimov : Il s'agit d'un traitement orthodontique. Pour le dire simplement, nous nous engageons à déplacer nos dents dans la bonne position.
Toute personne présente des défauts: malocclusion ou dents dentelées. Pour résoudre le problème, vous pouvez mettre, par exemple, des accolades. Nous avons trouvé une manière différente de résoudre ce problème - en utilisant des avions de ligne invisibles. Il s'agit d'un tel protège-dents, qui est fait pour une personne spécifique. Elle exerce une pression sur les dents nécessaires et les dents bougent.

Nous, en tant qu'entreprise, fournissons une solution pour la fabrication de casquettes. Au début du traitement, le médecin prend une empreinte dentaire ou scanne avec un scanner 3D intra-oral, nous envoie les données et nous les transformons en modèle 3D.
"Quel type de scanner avez-vous?"Sergey Valiev: Imaginez une brosse à dents électrique. Il a une tête qui tourne et se brosse les dents. Au lieu de cette tête, nous avons une caméra vidéo haute résolution. Sur la base de son témoignage, un modèle 3D est construit. La principale difficulté est que cela doit être fait avec précision et rapidité - après tout, le patient est allongé, la bouche ouverte sur la chaise. La numérisation prend environ 3 à 5 minutes.

Il y a toujours des difficultés à embuer l'appareil photo, avec des éclaboussures, des liquides. Et maintenant, les ingénieurs sont engagés dans ces subtilités.
- Comment obtenir un modèle 3D à partir d'une vidéo? Est-ce de la photogrammétrie?-
AM : Nous utilisons une méthode confocale pour obtenir des scans 3D, c'est-à-dire que nous utilisons un laser et une méthode optique pour obtenir des informations.

Lorsqu'une empreinte digitale ou un scan nous parvient, nous la traitons avec des algorithmes spéciaux. Le programme comprend où se trouvent les dents, où tout le reste est. Grâce à notre programme ClinCheck, le médecin peut regarder le modèle 3D des dents du patient et également les déplacer virtuellement dans la bonne position. Le programme dispose également d'outils de mesure et de diagnostic intégrés.
- Quels algorithmes comprenez-vous comment cela devrait être après le traitement?-
AM: Il existe des normes orthodontiques selon lesquelles les dents doivent être placées. Nous avons une base énorme de la position correcte des dents, et avec son aide, nous suggérons cela aux médecins. En fait, nous automatisons leur travail.
- Juste une comparaison des dents du patient avec comment elles devraient être selon le manuel?-
AM: Les gens n'ont que 32 dents et doivent se tenir debout pour ne pas interférer les uns avec les autres. En conséquence, à l'aide d'algorithmes, nous les exposons d'une certaine manière. Le médecin vérifie, fait des ajustements et s'il aime tout, il approuve le plan de traitement et nous commençons le processus de fabrication des doublures.
- Comment fonctionne ce processus?Mikhail Matrosov: Pour nos employés spécialement formés (techniciens), nous créons le programme Treat, dans lequel ils préparent des doublures pour l'impression en fonction des données des médecins. Voici un technicien qui reçoit des données avec la mâchoire du patient et les recommandations du médecin sur la façon de traiter chaque cas. Et le concept de «guérison» est informel et les cas sont très différents.

Le programme lui-même est un système de CAO 3D. Il montre l'état initial des dents du patient. Ensuite, vous pouvez former l'état souhaité après le traitement et calculer les étapes intermédiaires - comment les dents du patient passeront de l'état initial à l'état souhaité. Enfin, le programme peut indiquer que le patient doit attacher des renflements invisibles («attachements») à certaines dents, ce qui aidera le paquebot à développer la force correcte. Sans eux, par exemple, il serait presque impossible de retirer des dents des gencives.

Chacune de ces étapes est effectuée en mode semi-automatique. Le technicien définit les paramètres nécessaires conformément aux souhaits du médecin et le programme génère le résultat. Chaque étape a sa propre équipe de développement.
Après le système CAO, vient la FAO (fabrication assistée par ordinateur). Il calcule le modèle complet des mâchoires du patient à chaque étape (intermédiaire et finale). Ces modèles pour chaque étape sont imprimés sur une imprimante 3D. Ensuite, un film est étiré sur les formes imprimées, un segment de ce film est tracé le long d'une trajectoire complexe avec un laser, et un aliner est obtenu. Et pour toutes les étapes, vous avez besoin de beaucoup de logiciels développés dans Align. C'est pourquoi nous avons besoin de tant de programmeurs.
AM: Nous fabriquons 300 000 revêtements uniques par jour. Aucun des concurrents n'a atteint une telle échelle, car il s'agit essentiellement d'un processus manuel. Et d'énormes virages manuels ne peuvent en aucun cas être atteints.
- Où sont produits ces trois cent mille liners?- AM: dans des usines au Mexique et en Chine. Ils sont fabriqués en plastique spécial, qui est également en cours de développement chez Alain. Il existe une formule chimique spéciale, car des tests de biocompatibilité ont été effectués. Le matériel est aussi un savoir-faire, il affecte les résultats du traitement.

Après cela, un kit prêt à l'emploi est envoyé au médecin, il invite le patient et explique comment les utiliser. Les Aliners portent presque tout le temps, même la nuit, et ne décollent qu'avec de la nourriture. Toutes les deux semaines, le capuchon est remplacé par un nouveau.
Dents et apprentissage automatique
Certains dentistes ne connaissent pas aussi bien l'orthodontie que de rares spécialistes. Par conséquent, nous les aidons à résoudre certains cas simples. Si les dents doivent être légèrement déplacées, nous leur suggérons d'utiliser notre traitement automatique.
Pour que le médecin comprenne s'il peut traiter certains cas ou non, nous reconnaîtrons la situation avec un programme spécial, ferons quelques diagnostics et émettrons une conclusion - peut-être ou non. Et pour de telles tâches, nous avons besoin de beaucoup de spécialistes - en ML, C ++. Puisque nous avons l'automatisation, nous avons besoin de spécialistes du backend.
Au début, les gens ont fait l'opération d'évaluation des cas et l'intelligence artificielle a été formée. Aujourd'hui, près de 100% de ces opérations sont effectuées par la machine. Nous avons essayé de nombreuses approches. Les gars ont essayé de faire un modèle 3D à partir de la photo et ont trouvé des écarts. Cela n'a pas très bien fonctionné.
Il y a un an et demi, la première itération du modèle ML a été publiée. Pour autant que je sache, l'équipe a utilisé Python et TensorFlow. L'évaluation se fait en plusieurs catégories de ce que le médecin traite. Le patient peut avoir des dents serrées, ou vice versa, lorsqu'il diverge sur les côtés. Ce sont des problèmes différents avec les dents et différents modèles fonctionnent pour eux. Ce sont les plus courants et nous avons commencé avec eux, puis nous sommes passés à des cas plus privés.
Dans la prochaine version, nous déploierons des modèles pour tous les types de problèmes de dents possibles. Pendant un certain temps, nous allons suivre tous les cas problématiques et analyser les erreurs. Il y aura une réserve de l'équipe d'évaluation manuelle pour cela.
Le processus complet de formation du modèle a duré environ deux ans.
L'apprentissage automatique est également utilisé pour travailler avec des photos. Nous essayons de montrer à la personne à quoi ressemblera son sourire après le traitement. Pour ce faire, nous prenons une photo du patient, rendons un modèle 3D de ses dents, puis le programme tente, d'une manière proche de la réalité, de l'intégrer dans la photo afin que la personne voie à quoi son sourire sera beau.

Comment Align est apparu en Russie
- AM: il y a environ 15 ans. Les gens de Moscou ont étudié en Californie et pendant leurs études, ils ont trouvé un emploi au bureau Align. À l'époque, c'était une petite entreprise. Une fois leurs études terminées, ils sont retournés à Moscou, mais les relations contractuelles avec eux sont restées. Ils étaient juste de très bons programmeurs. Et pour leur faciliter le travail, un petit bureau a été ouvert à Moscou. Ensuite, il est devenu très important. Aujourd'hui, il y a plus de 400 personnes.

À Novossibirsk, le bureau a ouvert de la même manière qu'à Moscou. Un homme qui a fait ses preuves est venu de là et a décidé de retourner dans sa ville. Il a proposé de travailler à distance, mais il a été chargé de créer un petit bureau. Il y a maintenant une quarantaine de personnes.
SV: Fait intéressant, il y a un an à Moscou, il y avait environ 200 personnes. Nous avons presque doublé en un an.
- Comment vos collaborateurs sont-ils répartis entre tous ces projets?- AM: Nous avons une équipe d'ingénieurs qui s'occupe du backend. Une équipe est impliquée dans le programme ClinCheck pour les médecins. La plus grande équipe est engagée dans les logiciels destinés aux techniciens, qui ne sont utilisés qu'en interne. Il existe des équipes distinctes d'assurance qualité et de développement. L'équipe iTero crée un logiciel de numérisation.
- Quelle est l'indépendance technique des équipes?- AM: Les tâches commerciales des équipes proviennent du marketing, mais les décisions techniques sont prises indépendamment ici à Moscou. Ils n'ont pas besoin d'autorisations spéciales du siège. Si nous changeons d'architecture entre les systèmes, nous devrions au moins en parler et obtenir un accord. Mais au niveau fonctionnel, nous avons une totale indépendance.
Andrey Zaitsev: Nous avons un processus appelé Conseil d'examen de l'architecture. Même si nous sommes suffisamment libres pour choisir, nous devons le justifier auprès des meilleurs architectes.
Par exemple, nous avons maintenant le langage de développement principal - Java. Mais l'équipe a exprimé un grand intérêt pour Kotlin. Un de nos développeurs depuis six mois a préparé des présentations avec une justification, prenant en compte les risques d'embauche, les risques de fuite de données, les problèmes de langage. Il a fait une présentation à un conseil d'architecture, nous avons obtenu une mise à niveau et l'équipe a obtenu un langage de développement supplémentaire. Maintenant, pour les nouveaux micro-services, nous utilisons Kotlin au lieu de Java. Autrement dit, nous sommes libres, mais tout doit être justifié. Vous ne pouvez pas tout à coup passer à un Haskell.
- Et comment se construit la communication avec les autres bureaux?- AM: Il n'y a aucune difficulté avec l'interaction. Nous nous rendons constamment au bureau de R&D de Raleigh en Caroline du Nord, aux États-Unis, et à notre siège social à San Jose.
- AZ: Nous avons six équipes SCRUM dans le backend. L'un est situé dans le bureau israélien de Tel Aviv, l'autre à Raleigh, le reste à Moscou. Nous synchronisons deux fois par semaine, les chefs d'équipe discutent du processus actuel, des versions à venir, des interactions entre les équipes, des nouvelles solutions techniques, des changements dans les modules communs. Et donc - la communication d'entreprise standard. Nous avons toutes les équipes Microsoft, si nécessaire, vous pouvez recruter n'importe quel collègue et lui parler.
Il y avait un problème avec le bureau de San Jose dans le fuseau horaire opposé à Moscou, et quand ils viennent travailler, nous partons. Par conséquent, les réunions ont généralement lieu tard dans la soirée. Avec un bureau à Raleigh plus facile, avec eux les rassemblements commencent vers quatre heures du soir à Moscou.
- AM: Puisque mon équipe développe un programme pour les médecins, nous devrions montrer des démos aux médecins qui travaillent dans notre entreprise à la fin des sprints. Ils sont assis à San Jose, aux États-Unis, donc parfois vous devez commencer les manifestations au plus tôt à sept heures du soir.
Quelles technologies rendent les dents uniformes
- Dites-moi, qui fait quoi en utilisant quoi?- AM: ClinCheck, que mon équipe développe, existe sous deux formes. Le premier est une application de bureau. Il est réalisé en C ++ et Qt pour l'interface utilisateur. Le bureau a été écrit il y a très longtemps. Le problème avec lui est le suivant: les médecins ne sont pas du tout des informaticiens. Malgré le fait qu'ils soient de bons spécialistes dans le domaine de l'orthodontie, il leur est très difficile de maintenir l'ordinateur en bon état. Et lorsque nous publions la mise à jour, de nombreuses difficultés techniques commencent.
Le deuxième problème est que la moitié des orthodontistes utilisent des Mac, et notre bureau est uniquement pour Windows. Si le médecin veut utiliser le programme, il doit installer une machine virtuelle. Ce n'est pas pratique - ils ne gèrent pas bien un ordinateur, et encore moins gèrent une machine virtuelle en général.
Par conséquent, nous traduisons l'application sur le Web pour qu'elle fonctionne partout. Vrai en termes de fonctionnalités, il n'a pas encore rattrapé la version de bureau. Dès qu'il rattrapera son retard, nous effondrerons le bureau.
En développement, nous utilisons TypeScript et ReactJS. Le script a été choisi principalement en raison de la possibilité de vérification de type statique. Fait intéressant, certains des périphériques frontaux sont passés de C ++, il y avait donc un désir de continuer à utiliser la saisie statique.
- Mais écrivez-vous d'autres services en JavaScript?- AM: Oui, l'équipe qui crée le portail Web commercial l'écrit en JS et TypeScript.
- Lorsque vous avez décidé de prendre TypeScript, on ne vous a pas dit que puisque la société utilise déjà JS, serait-il préférable pour vous de le prendre?- AM: Naturellement, nous avons dû défendre le choix, mais nous avons expliqué que TypeScript présente plusieurs avantages. Tout ici était exactement le même que dans le cas de Kotlin.
- AZ: l’équipe d’Andrey fait le front, ce que les médecins voient. Mon équipe fait un backend pour cela afin qu'il y ait où stocker et traiter les données. Nous avons commencé à fabriquer notre système en 2014. À cette époque, la société possédait plusieurs grands systèmes d'entreprise, mais ils se développaient lentement, étaient monolithiques, avec des cycles de publication très longs, devaient beaucoup tester et toutes les versions n'étaient pas réussies.
À ce moment, l'approche microservice est devenue très populaire, et nous avons essayé de la mettre en œuvre avec notre équipe. Autrement dit, nous développons de petites applications avec un objectif clairement défini, un domaine de responsabilité clair.
Notre pile principale est Java. Nous utilisons Spring comme cadre et de nombreuses choses qui sont sous son égide - la sécurité, le travail avec la base de données, divers services cloud pour assurer la fiabilité, la gestion des erreurs. On le connaît bien, on aime tout et on ne va pas encore le changer. Nous l'utilisons comme le cœur de nos services.
Maintenant, nous avons environ 20-25 services. Ils sont répartis entre six équipes, et dans le domaine de responsabilité de chacune, 3-5 microservices sont obtenus. Nous ne dépensons pas de ressources pour réécrire Java sur Kotlin, mais nous écrivons tous les nouveaux services et tests dans Kotlin. Maintenant, le rapport est d'environ 95/5. Jusqu'à présent, seuls trois services sont écrits en Kotlin, car nous n'avons commencé à l'utiliser activement qu'à partir de la fin de l'année dernière.
- Comment l'équipe perçoit-elle la transition? Est-ce que tout le monde le veut?- AZ: Dans l'ensemble, ils sont perçus positivement, les gars sont heureux de comprendre. Il y a, disons, plusieurs champions de Kotlin - ceux qui ont vraiment beaucoup écrit, et ils aident le reste avec une révision de code.
J'aimerais développer une compréhension exacte du fonctionnement de l'API sur Kotlin, afin qu'il ne soit pas simplement réécrit automatiquement. Et les gars essaient de développer un certain archétype, qui sera ensuite utilisé partout.
En général, nous essayons de reproduire les bonnes décisions. Puisque nous avons deux douzaines de services, certaines choses, telles que la sécurité, travailler avec la base de données, travailler avec les fournisseurs de cloud, ils sont répétés partout, nous avons donc une base de code commune. Il existe différents modules qui fouillent entre les composants, ce qui vous permet de lever un microservice vide sans fonctionnalité métier en une journée. Et il y a tout ce dont vous avez besoin pour travailler. Cela aide beaucoup à avancer.
Au niveau de base, nous prenons généralement Postgress ou une sorte de noSQL. Il existe des tests Python pour bdd. Pour diverses demandes de téléchargement de données, nous écrivons des scripts dessus.
Tous les services sont déployés dans le cloud. La chose principale est Amazon. Nous prenons l'application, la plaçons dans le conteneur Docker, puis la déployons dans l'un des orchestrateurs. Il y a quelques années, nous avons choisi Rancher et nous l'utilisons maintenant.
- Lorsque vous êtes arrivé pour la première fois, vous n'avez pas constaté que le projet a un héritage vaste et complexe. Pourtant, c'est un produit qui a commencé à la fin des années 90.- AZ: Nous avons abordé la lutte contre les grands monstres hérités de la manière suivante: au début, nous avons écrit un certain proxy qui enveloppe des microservices avec une interface REST, et seulement ensuite nous avons essayé de le casser à l'intérieur et de le refactoriser. Autrement dit, je n'ai pas eu à m'asseoir pendant des semaines pour déterminer la base de code pour deux cent mille lignes.
Nous écrivons beaucoup de choses à partir de zéro, nous en réécrivons quelques-unes. Sur les nouveaux projets, nous essayons de maintenir la qualité du code. L'équipe est déjà en cinquième année, et il me semble que nous nous débrouillons assez bien jusqu'à présent.
Embauche de mathématiciens et d'experts C ++
- Avez-vous besoin de comprendre l'orthodontie?- AM: Pas du tout. Il n'est pas réaliste de trouver des gens qui ont une telle expérience. Dans le travail lui-même, il faut étudier d'une manière ou d'une autre. Différentes équipes ont besoin d'une compréhension différente. L'équipe de ClinCheck est plus parce que nous parlons avec des médecins et nous devons au moins comprendre leurs mots.
Mais dans les interviews, nous ne posons jamais de questions à ce sujet - nous recherchons des personnes qui sont principalement versées en programmation.
"Que regarderez-vous pour comprendre cela?"- AM: Dans un premier temps, nous regardons le CV, évaluons l'expérience. Ensuite, nous organisons un entretien téléphonique qui dure environ 30 minutes et nous posons des questions simples sur la technologie, avec quoi et comment elle a fonctionné. Et si une personne s'est bien montrée, nous l'invitons au bureau.
Là, nous donnons généralement une tâche de programmation. Ce n'est pas académique, vous n'avez pas besoin d'écrire toutes sortes d'algorithmes de tri. Nous donnons une tâche pratique, par exemple, comment implémenter une application telle que Twitter. Une personne écrit un code pendant 20 à 30 minutes, puis nous posons des questions sur ce code.
La formulation du problème contient plusieurs écueils qu'une personne devrait essayer de contourner. S'il est expérimenté, il voit immédiatement ces problèmes et soit les résout dans le code, soit nous en parle. S'il ne le remarque pas, nous lui disons et voyons aussi comment il décidera.
En général, l'entretien dure environ deux heures. Et toute la location de et vers prend environ deux semaines.
MM: Pour l'embauche de services internes, nous regardons principalement le C ++ et les mathématiques. Selon l'équipe, il y a un décalage dans un sens ou dans l'autre. L'équipe qui construit le modèle de répartition des forces sur le paquebot est bien sûr principalement mathématique.
L'équipe de la plateforme 3D dans laquelle je travaille ne s'occupe pas des problèmes de produits (il y en a beaucoup), mais supporte le moteur système, crée des bibliothèques C ++. Là, tout d'abord, le C ++ et la connaissance des algorithmes.
- Peut-être est-il difficile de rechercher des personnes dans une telle équipe?Oui et non. C'est difficile car vous avez besoin d'une bonne connaissance des pros, d'une compréhension du fonctionnement des logiciels et du matériel. Mais un peu plus facile, car au moins nous n'avons pas tellement besoin des mathématiques. - , — , , .
: , . . , , , . , .
— C++ , ?, C++ , , , . , .
. , — , , , , , . , , . - , , .
— ?. . , , . . — . 5-6 .
— , , « - , »?: — « ». , , — - - — , .