
A veces me parece que cuanto más miro a la industria de TI, más primitiva se vuelve la imagen general en mi cabeza. Es como si TI es una ciencia de cohetes seria u otro servicio que "le permite * hacer otra cosa * con solo un clic". Y más allá del alcance de esta presentación, todavía hay actividades que las nuevas tecnologías no han tocado. Ir al mismo dental - bueno, ¿de dónde viene?
Qué error es esto.
Hoy, el dentista prescribe el tratamiento, y detrás de su decisión puede estar el trabajo de varios cientos de ingenieros en todo el mundo. Programadores, matemáticos, técnicos, analistas, especialistas en ML, gerentes, fábricas con impresoras 3D, todo por el bien de las brillantes sonrisas de Hollywood.
Por qué hay tanta gente, con qué están exactamente ocupados y cómo los matemáticos y los expertos en C ++ ayudan a hacer los dientes, hablamos con Align Tech, una gran empresa internacional que produce masivamente protectores bucales para el tratamiento de ortodoncia.
Align Technology Inc. En My Circle, recibió una calificación promedio de 4.5 por parte de sus empleados, quienes calificaron a la compañía sobre todo por tareas interesantes, paquete social, condiciones cómodas y por ayudar a hacer del mundo un lugar mejor.
- ¿Qué tipo de cosa estás haciendo?-
Andrey Maksimov : Este es un tratamiento de ortodoncia. En pocas palabras, estamos comprometidos a mover nuestros dientes a la posición correcta.
Cualquier persona tiene defectos: maloclusión o dientes dentados. Para resolver el problema, puede poner, por ejemplo, llaves. Se nos ocurrió una forma diferente de resolver este problema: usar aviones invisibles. Este es un protector bucal, hecho para una persona específica. Ella ejerce presión sobre los dientes necesarios, y los dientes se mueven.

Nosotros, como empresa, ofrecemos una solución para la fabricación de tapas. Al comienzo del tratamiento, el médico toma una impresión dental o escanea con un escáner 3D intraoral, nos envía los datos y los convertimos en un modelo 3D.
"¿Qué tipo de escáner tienes?"Sergey Valiev: Imagina un cepillo de dientes eléctrico. Tiene una cabeza que gira y se cepilla los dientes. En lugar de esta cabeza, tenemos una cámara de video de alta resolución. Basado en su testimonio, se construye un modelo 3D. La principal dificultad es que esto debe hacerse con precisión y rapidez; después de todo, el paciente se acuesta con la boca abierta en la silla. El escaneo tarda unos 3-5 minutos.

Todavía hay dificultades para empañar la cámara, con salpicaduras, líquidos. Y ahora los ingenieros se dedican a estas sutilezas.
- ¿Cómo se obtiene un modelo 3D de un video? ¿Es esta fotogrametría?-
AM : Utilizamos un método confocal para obtener escaneos 3D, es decir, usamos un láser y un método óptico para obtener información.

Cuando nos llega una huella digital o un escaneo, lo procesamos con algoritmos especiales. El programa comprende dónde están los dientes, dónde está todo lo demás. A través de nuestro programa ClinCheck, el médico puede ver el modelo 3D de los dientes del paciente y también moverlos virtualmente a la posición correcta. El programa también tiene herramientas integradas de medición y diagnóstico.
- ¿Qué algoritmos entiendes cómo debería ser después del tratamiento?-
AM: Existen normas de ortodoncia por las cuales se deben colocar los dientes. Tenemos una gran base de la posición correcta de los dientes y, con su ayuda, sugerimos esto a los médicos. De hecho, automatizamos su trabajo.
- ¿Solo una comparación de los dientes del paciente con cómo debería ser de acuerdo con el libro de texto?-
AM: las personas tienen solo 32 dientes y deben pararse para no interferir entre sí. En consecuencia, con la ayuda de algoritmos los exponemos de cierta manera. El médico verifica, hace ajustes y, si le gusta todo, aprueba el plan de tratamiento y comenzamos el proceso de fabricación de revestimientos.
- ¿Cómo funciona este proceso?Mikhail Matrosov: Para nuestros empleados (técnicos) especialmente capacitados, estamos creando el programa Treat, en el que preparan liners para imprimir según los datos de los médicos. Aquí hay un técnico que recibe datos con la mandíbula del paciente y las recomendaciones del médico sobre cómo tratar cada caso. Y el concepto de "cura" es informal, y los casos son muy diferentes.

El programa en sí es un sistema CAD 3D. Muestra el estado inicial de los dientes del paciente. Luego puede formar el estado deseado después del tratamiento y calcular las etapas intermedias: cómo pasarán los dientes del paciente del estado inicial al deseado. Finalmente, el programa puede indicar que el paciente debe colocar protuberancias invisibles ("accesorios") en ciertos dientes, lo que ayudará al revestimiento a desarrollar la fuerza correcta. Sin ellos, por ejemplo, sería casi imposible sacar algunos dientes de las encías.

Cada uno de estos pasos se realiza en modo semiautomático. El técnico establece las configuraciones necesarias de acuerdo con los deseos del médico, y el programa genera el resultado. Cada paso tiene su propio equipo de desarrollo.
Después del sistema CAD viene CAM (fabricación asistida por computadora). Calcula el modelo completo de las mandíbulas del paciente en cada etapa (intermedia y final). Estos modelos para cada etapa se imprimen en una impresora 3D. Luego se estira una película sobre las formas impresas, se dibuja un segmento de esta película a lo largo de una trayectoria compleja con un láser, y se obtiene un revestimiento. Y para todas las etapas necesita una gran cantidad de software desarrollado dentro de Align. Por eso necesitamos tantos programadores.
AM: Hacemos 300 mil revestimientos únicos por día. Ninguno de los competidores ha alcanzado tal escala, porque básicamente todo esto es un proceso manual. Y manualmente no se pueden alcanzar grandes giros de ninguna manera.
- ¿Dónde se producen estos trescientos mil revestimientos?- AM: En fábricas en México y China. Están hechos de plástico especial, que también se está desarrollando en Alain. Existe una fórmula química especial, ya que se realizaron pruebas de biocompatibilidad. El material también es know-how, afecta el resultado del tratamiento.

Después de esto, se envía un kit preparado al médico, él invita al paciente y le explica cómo usarlos. Los alineadores se usan casi todo el tiempo, incluso de noche, y se quitan solo con la comida. Cada dos semanas, la tapa se reemplaza por una nueva.
Dientes y aprendizaje automático
Algunos dentistas no están tan versados en ortodoncia como los especialistas poco comunes. Por lo tanto, les ayudamos a resolver algunos casos simples. Si los dientes necesitan moverse ligeramente, sugerimos que usen nuestro tratamiento automático.
Para que el médico comprenda si puede tratar algunos casos o no, reconoceremos la situación con un programa especial, haremos algunos diagnósticos y emitiremos una conclusión, tal vez o no. Y para tales tareas, necesitamos muchos especialistas, en ML, C ++. Como tenemos automatización, necesitamos especialistas en backend.
Al principio, las personas hicieron la operación de evaluación de casos y se capacitó a la inteligencia artificial. Ahora casi el 100% de tales operaciones son realizadas por la máquina. Intentamos muchos enfoques. Los chicos intentaron hacer un modelo 3D a partir de la foto y encontraron algunas discrepancias. Esto no funcionó muy bien.
Hace un año y medio, se lanzó la primera versión del modelo ML. Hasta donde yo sé, el equipo usó Python y TensorFlow. La evaluación se realiza en varias categorías de lo que trata el médico. El paciente puede tener dientes apretados, o viceversa, cuando divergen hacia los lados. Estos son diferentes problemas con los dientes y diferentes modelos funcionan para ellos. Son los más comunes y comenzamos con ellos, luego pasamos a casos más privados.
En la próxima versión, implementaremos modelos para todos los tipos posibles de problemas con los dientes. Durante algún tiempo realizaremos un seguimiento de todos los casos problemáticos y analizaremos los errores. Habrá una reserva del equipo de evaluación manual para esto.
El proceso completo de capacitación modelo tomó aproximadamente dos años.
El aprendizaje automático también se utiliza para trabajar con fotos. Estamos tratando de mostrarle a la persona cómo se verá su sonrisa después del tratamiento. Para hacer esto, tomamos una fotografía del paciente, renderizamos un modelo 3D de sus dientes, y luego el programa intenta, de una manera cercana a la realidad, incrustarlo en la fotografía para que la persona vea cómo su sonrisa se verá hermosa.

Cómo apareció Align en Rusia
- AM: Hace unos 15 años. La gente de Moscú estudió en California, y mientras estudiaban, consiguieron un trabajo en la oficina de Align. En aquellos días, era una pequeña empresa. Cuando terminaron sus estudios, regresaron a Moscú, pero las relaciones contractuales con ellos se mantuvieron. Simplemente eran muy buenos programadores. Y para facilitarles el trabajo, se abrió una pequeña oficina en Moscú. Luego creció a una escala muy grande. Ahora hay más de 400 personas.

En Novosibirsk, la oficina se abrió de la misma manera que en Moscú. Un hombre que demostró ser muy bueno vino de allí y decidió regresar a su ciudad. Se ofreció a trabajar de forma remota, pero se le asignó la tarea de crear una pequeña oficina. Ahora hay unas cuarenta personas.
SV: Curiosamente, hace un año en Moscú había unas 200 personas. Casi nos duplicamos en un año.
- ¿Cómo se distribuye tu gente entre todos estos proyectos?- AM: Tenemos un equipo de ingenieros que se ocupa del backend. Hay un equipo que participa en el programa ClinCheck para médicos. El equipo más grande se dedica al software para técnicos, que se usa solo internamente. Hay equipos independientes de control de calidad y DevOps. El equipo de iTero fabrica software de escáner.
- ¿Cuán independientes son los equipos técnicamente?- AM: Las tareas comerciales para los equipos provienen del marketing, pero las decisiones técnicas se toman de forma independiente aquí en Moscú. No necesitan permisos especiales de la sede. Si cambiamos la arquitectura entre sistemas, al menos deberíamos hablar de ello y llegar a un acuerdo. Pero a nivel funcional, tenemos total independencia.
Andrey Zaitsev: Tenemos un proceso llamado tablero de revisión de Arquitectura. Incluso si somos lo suficientemente libres como para elegir, debemos justificarlo ante los principales arquitectos.
Por ejemplo, ahora tenemos el lenguaje de desarrollo principal: Java. Pero el equipo expresó gran interés en Kotlin. Uno de nuestros desarrolladores durante medio año preparó presentaciones con una justificación, teniendo en cuenta los riesgos de contratación, los riesgos de pérdida de datos, los problemas en el idioma. Hizo una presentación en un consejo de arquitectura, obtuvimos una actualización y el equipo obtuvo un lenguaje de desarrollo adicional. Ahora para los nuevos micro servicios usamos Kotlin en lugar de Java. Es decir, somos libres, pero todo debe justificarse. No puedes cambiar de repente a algunos Haskell.
- ¿Y cómo se construye la comunicación con otras oficinas?- AM: No hay dificultades con la interacción. Viajamos constantemente a la oficina de I + D en Raleigh en Carolina del Norte, EE. UU., Y a nuestra sede en San José.
- AZ: Tenemos seis equipos SCRUM en el backend. Uno se encuentra en la oficina israelí en Tel Aviv, el otro en Raleigh, el resto en Moscú. Sincronizamos dos veces por semana, los líderes de los equipos discuten el proceso actual, los próximos lanzamientos, las interacciones entre los equipos, las nuevas soluciones técnicas, los cambios en los módulos comunes. Y así, comunicación corporativa estándar. Tenemos todos los equipos de Microsoft, si es necesario, puede reclutar a cualquier colega y hablar con él.
Solía haber un problema de que la oficina en San José se encuentra en la zona horaria opuesta a Moscú, y cuando vienen a trabajar, simplemente nos vamos. Por lo tanto, las reuniones generalmente se realizaban tarde en la noche. Con una oficina en Raleigh más fácil, con ellos las manifestaciones comienzan alrededor de las cuatro de la tarde en Moscú.
- AM: Como mi equipo está desarrollando un programa para médicos, debemos mostrar demostraciones a los médicos que trabajan en nuestra empresa al final de los sprints. Se sientan en San José, EE. UU., Así que a veces hay que comenzar las manifestaciones no antes de las siete de la tarde.
¿Qué tecnologías hacen que los dientes incluso
- Dime, ¿quién está haciendo qué usando qué?- AM: ClinCheck, que mi equipo está desarrollando, existe en dos formas. La primera es una aplicación de escritorio. Está hecho en C ++ y Qt para la interfaz de usuario. El escritorio fue escrito hace mucho tiempo. El problema con él es este: los médicos no son personas de TI en absoluto. A pesar de que son excelentes especialistas en el campo de la ortodoncia, es muy difícil para ellos mantener la computadora en buenas condiciones. Y cuando lanzamos la actualización, comienzan muchas dificultades técnicas.
El segundo problema es que la mitad de los ortodoncistas usan Mac, y nuestro escritorio es solo para Windows. Si el médico quiere usar el programa, debe instalar una máquina virtual. Esto es inconveniente: no manejan bien una computadora, y mucho menos administran una máquina virtual en general.
Por lo tanto, traducimos la aplicación en la web para que funcione en todas partes. Cierto en términos de funcionalidad, aún no se ha puesto al día con la versión de escritorio. Tan pronto como se ponga al día, colapsaremos el escritorio.
En desarrollo usamos TypeScript y ReactJS. El script fue elegido principalmente debido a la posibilidad de verificación de tipo estático. Curiosamente, algunos de los dispositivos front-end cambiaron de C ++, por lo que hubo un deseo de continuar usando la escritura estática.
- ¿Pero escribes otros servicios en JavaScript?- AM: Sí, el equipo que hace el portal web comercial lo escribe en JS y TypeScript.
- Cuando decidió tomar TypeScript, no le dijeron que, dado que la compañía ya usa JS, ¿sería mejor que lo tome?- AM: Naturalmente, tuvimos que defender la elección, pero explicamos que TypeScript tiene varias ventajas. Todo aquí era exactamente igual que en el caso de Kotlin.
- AZ: El equipo de Andrey hace el frente, lo que ven los médicos. Mi equipo hace un back-end para esto para que haya dónde almacenar y procesar los datos. Comenzamos a hacer nuestro sistema en 2014. En ese momento, la compañía tenía varios sistemas grandes de nivel empresarial, pero se desarrollaron lentamente, eran monolíticos, con ciclos de lanzamiento muy largos, tuvieron que probar mucho y no todas las compilaciones tuvieron éxito.
En ese momento, el enfoque de microservicio se hizo muy popular e intentamos implementarlo con nuestro equipo. Es decir, desarrollamos pequeñas aplicaciones con un objetivo claramente definido, un área clara de responsabilidad.
Nuestra pila principal es Java. Usamos Spring como marco y muchas cosas que están bajo su paraguas: seguridad, trabajo con la base de datos, varios servicios en la nube para garantizar la confiabilidad, manejo de errores. Lo conocemos bien, nos gusta todo y todavía no lo vamos a cambiar. Lo usamos como el núcleo de cualquiera de nuestros servicios.
Ahora tenemos unos 20-25 servicios. Se dividen en seis equipos, y en el área de responsabilidad de cada uno, se obtienen 3-5 microservicios. No gastamos recursos para reescribir Java en Kotlin, pero escribimos todos los nuevos servicios y pruebas en Kotlin. Ahora la proporción es de aproximadamente 95/5. Hasta ahora, solo tres servicios están escritos en Kotlin, porque comenzamos a usarlo activamente solo desde fines del año pasado.
- ¿Cómo percibe el equipo la transición? ¿Todos quieren?- AZ: En general, se perciben positivamente, los chicos están felices de entender. Hay, digamos, varios campeones de Kotlin, aquellos que realmente escribieron mucho y ayudan al resto con una revisión del código.
Me gustaría desarrollar una comprensión exacta de cómo debería funcionar la API en Kotlin, de modo que no solo se reescriba el código automáticamente. Y los chicos están tratando de desarrollar un cierto arquetipo, que luego se usará en todas partes.
En general, tratamos de replicar buenas decisiones. Como tenemos dos docenas de servicios, ciertas cosas, como la seguridad, trabajar con la base de datos, trabajar con proveedores de la nube, se repiten en todas partes, por lo que tenemos una base de código común. Existen diferentes módulos que hurgan entre los componentes, lo que le permite levantar un microservicio vacío sin funcionalidad comercial, literalmente en un día. Y hay todo lo que necesitas para trabajar. Ayuda mucho avanzar.
En el nivel base, generalmente tomamos Postgress o algún tipo de noSQL. Hay algunas Python para pruebas bdd. Para varias solicitudes de carga de datos, escribimos scripts en él.
Todos los servicios se implementan en la nube. Lo principal es Amazon. Tomamos la aplicación, la empaquetamos en el contenedor Docker y luego la implementamos en uno de los orquestadores. Hace unos años, elegimos Rancher y ahora lo usamos.
- Cuando llegó por primera vez, no encontró el hecho de que el proyecto tiene un legado grande y complejo. Aún así, este es un producto que comenzó a finales de los 90.- AZ: Nos acercamos a la lucha contra los grandes monstruos heredados de esta manera: al principio escribimos un cierto proxy que se ajusta en microservicios con una interfaz REST, y solo entonces tratamos de romperlo y refactorizarlo. Es decir, no tuve que sentarme durante semanas para averiguar la base del código para doscientas mil líneas.
Escribimos muchas cosas desde cero, reescribimos algunas. En proyectos nuevos, tratamos de mantener la calidad del código. El equipo ya está en quinto año, y me parece que lo estamos haciendo bastante bien hasta ahora.
Contratación de matemáticos y expertos en C ++
- ¿Necesitas entender la ortodoncia?- AM: en absoluto. No es realista encontrar personas que tengan esos antecedentes. En el trabajo mismo, uno tiene que estudiar de una forma u otra. Diferentes equipos necesitan una comprensión diferente. El equipo de ClinCheck es más porque estamos hablando con médicos y necesitamos al menos entender sus palabras.
Pero en las entrevistas, nunca preguntamos sobre esto: estamos buscando personas que estén principalmente versados en programación.
"¿Qué mirarás para entender esto?"- AM: En la primera etapa, miramos el currículum, evaluamos la experiencia. Luego organizamos una entrevista telefónica, que dura unos 30 minutos. Hacemos preguntas simples sobre la tecnología, con qué y cómo funcionó. Y si una persona se ha mostrado bien, lo invitamos a la oficina.
Allí solemos dar una tarea de programación. No es académico, no necesita escribir todo tipo de algoritmos de clasificación. Le damos una tarea práctica, por ejemplo, cómo implementar una aplicación como Twitter. Una persona escribe un código durante 20-30 minutos y luego hacemos preguntas sobre este código.
La formulación del problema contiene varias trampas que una persona debería tratar de sortear. Si tiene experiencia, inmediatamente ve estos problemas y los resuelve en el código o nos lo cuenta. Si no se da cuenta, le decimos y también vemos cómo decidirá.
En general, la entrevista dura aproximadamente dos horas. Y toda la contratación desde y hasta lleva unas dos semanas.
MM: Para contratar servicios internos, nos fijamos principalmente en C ++ y matemáticas. Dependiendo del equipo, hay un desplazamiento en una dirección o en la otra. El equipo que construye el modelo de distribución de fuerzas en el revestimiento es, por supuesto, principalmente matemática.
El equipo de la plataforma 3D en la que trabajo no se ocupa de los problemas del producto (hay muchos), pero admite el motor del sistema y crea bibliotecas C ++. Allí, en primer lugar, C ++ y conocimiento de algoritmos.
- ¿Quizás es difícil buscar personas en un equipo así?Si y no Es difícil porque necesita un buen conocimiento de los profesionales, una comprensión de cómo funcionan el software y el hardware. Pero un poco más fácil, porque al menos no necesitamos tanto las matemáticas. - , — , , .
: , . . , , , . , .
— C++ , ?, C++ , , , . , .
. , — , , , , , . , , . - , , .
— ?. . , , . . — . 5-6 .
— , , « - , »?: — « ». , , — - - — , .