
Kadang-kadang tampak bagi saya bahwa semakin saya melihat industri TI, semakin primitif gambaran keseluruhan menjadi di kepala saya. Seolah-olah itu adalah ilmu roket yang serius, atau layanan lain yang "memungkinkan Anda * melakukan sesuatu * hanya dengan satu klik." Dan di luar cakupan presentasi ini, masih ada kegiatan yang tidak tersentuh oleh teknologi baru. Pergi ke gigi yang sama - yah, di mana IT?
Apa kesalahan ini?
Hari ini, dokter gigi meresepkan perawatan, dan di belakang keputusannya mungkin merupakan karya beberapa ratus insinyur di seluruh dunia. Programmer, matematikawan, teknisi, analis, spesialis dalam ML, manajer, pabrik dengan printer 3D - semuanya demi senyum Hollywood yang berkilau.
Mengapa ada begitu banyak orang, apa sebenarnya yang sibuk dengan mereka, dan bagaimana ahli matematika dan ahli C ++ membantu membuat gigi lebih merata, kami berbicara dengan Align Tech - sebuah perusahaan internasional besar yang secara besar-besaran menghasilkan pelindung mulut untuk perawatan ortodontik.
Align Technology Inc. Di My Circle, ia menerima nilai rata - rata 4,5 dari karyawannya, yang menilai perusahaan terutama untuk tugas-tugas menarik, paket sosial, kondisi nyaman dan untuk membantu menjadikan dunia tempat yang lebih baik!
- Apa yang kamu lakukan?-
Andrey Maksimov : Ini adalah perawatan ortodontik. Sederhananya, kami berkomitmen untuk menggerakkan gigi ke posisi yang benar.
Setiap orang memiliki cacat: maloklusi atau gigi bergerigi. Untuk mengatasi masalah, Anda dapat menempatkan, misalnya, kawat gigi. Kami datang dengan cara berbeda untuk menyelesaikan masalah ini - menggunakan pesawat yang tidak terlihat. Ini adalah pelindung mulut, yang dibuat untuk orang tertentu. Dia memberi tekanan pada gigi yang diperlukan, dan gigi bergerak.

Kami, sebagai perusahaan, memberikan solusi untuk pembuatan topi. Pada awal perawatan, dokter mengambil impresi gigi atau memindai dengan pemindai 3D intraoral, mengirimkan data kepada kami, dan kami mengubahnya menjadi model 3D.
"Pemindai seperti apa yang Anda miliki?"Sergey Valiev: Bayangkan sikat gigi listrik. Ia memiliki kepala yang berputar dan menyikat giginya. Alih-alih kepala ini, kami memiliki kamera video resolusi tinggi. Berdasarkan kesaksiannya, model 3D dibangun. Kesulitan utama adalah bahwa ini harus dilakukan secara akurat dan cepat - setelah semua, pasien berbaring dengan mulut terbuka di kursi. Pemindaian memakan waktu sekitar 3-5 menit.

Masih ada kesulitan dengan fogging kamera, dengan cipratan, cairan. Dan sekarang para insinyur terlibat dalam seluk-beluk ini.
- Bagaimana Anda mendapatkan model 3D dari video? Apakah fotogrametri ini?-
AM : Kami menggunakan metode confocal untuk mendapatkan pemindaian 3D, yaitu, kami menggunakan laser dan metode optik untuk mendapatkan informasi.

Ketika sidik jari atau pemindaian sampai kepada kami, kami memprosesnya dengan algoritma khusus. Program ini memahami di mana letak gigi, di mana segalanya berada. Melalui program ClinCheck kami, dokter dapat melihat model 3D gigi pasien dan juga memindahkannya ke posisi yang benar. Program ini juga memiliki alat pengukur dan diagnostik bawaan.
- Algoritma apa yang Anda mengerti bagaimana seharusnya setelah perawatan?-
AM: Ada norma ortodontik dimana gigi harus ditempatkan. Kami memiliki dasar yang sangat besar pada posisi gigi yang benar, dan dengan bantuannya, kami menyarankan ini kepada dokter. Bahkan, kami mengotomatiskan pekerjaan mereka.
- Hanya perbandingan gigi pasien dengan bagaimana seharusnya sesuai dengan buku teks?-
AM: Orang-orang hanya memiliki 32 gigi, dan mereka harus berdiri agar tidak saling mengganggu. Dengan demikian, dengan bantuan algoritma, kami mengeksposnya dengan cara tertentu. Dokter memeriksa, membuat penyesuaian, dan jika dia menyukai semuanya, dia menyetujui rencana perawatan, dan kami memulai proses pembuatan liner.
- Bagaimana proses ini bekerja?Mikhail Matrosov: Untuk karyawan (teknisi) kami yang terlatih khusus, kami membuat program Treat, di mana mereka menyiapkan liner untuk dicetak sesuai dengan data dari dokter. Berikut adalah teknisi yang menerima data dengan rahang pasien dan rekomendasi dokter tentang cara merawat setiap kasus. Dan konsep "penyembuhan" bersifat informal, dan kasusnya sangat berbeda.

Program itu sendiri adalah sistem CAD 3D. Ini menunjukkan keadaan awal gigi pasien. Kemudian Anda dapat membentuk keadaan yang diinginkan setelah perawatan dan menghitung tahap-tahap peralihan - bagaimana gigi pasien akan beralih dari keadaan awal ke yang diinginkan. Akhirnya, program ini dapat menunjukkan bahwa pasien harus memasang tonjolan yang tidak terlihat ("attachment") ke gigi tertentu, yang akan membantu aliner mengembangkan kekuatan yang benar. Tanpa mereka, misalnya, hampir tidak mungkin untuk menarik beberapa gigi keluar dari gusi.

Setiap langkah ini dilakukan dalam mode semi-otomatis. Teknisi menetapkan pengaturan yang diperlukan sesuai dengan keinginan dokter, dan program menghasilkan hasilnya. Setiap langkah memiliki tim pengembangan sendiri.
Setelah sistem CAD datang CAM (manufaktur berbantuan komputer). Ini menghitung model lengkap rahang pasien di setiap tahap (menengah dan akhir). Model-model ini untuk setiap tahap dicetak pada printer 3D. Kemudian sebuah film direntangkan ke dalam bentuk-bentuk yang dicetak, suatu segmen dari film ini ditarik sepanjang lintasan kompleks dengan laser, dan sebuah aliner diperoleh. Dan untuk semua tahap Anda membutuhkan banyak perangkat lunak yang dikembangkan di dalam Align. Itu sebabnya kami membutuhkan begitu banyak programmer.
AM: Kami membuat 300 ribu liner unik per hari. Tidak ada pesaing yang mencapai skala seperti itu, karena pada dasarnya semua ini adalah proses manual. Dan belokan besar secara manual tidak dapat dicapai dengan cara apa pun.
- Di mana tiga ratus ribu liner ini diproduksi?- AM: Di pabrik-pabrik di Meksiko dan Cina. Mereka terbuat dari plastik khusus, yang juga sedang dikembangkan di Alain. Ada formula kimia khusus, sejak pengujian biokompatibilitas dilakukan. Materi juga pengetahuan, itu mempengaruhi hasil pengobatan.

Setelah ini, kit yang sudah jadi dikirim ke dokter, ia mengundang pasien dan menjelaskan cara menggunakannya. Aliner memakai hampir sepanjang waktu, bahkan di malam hari, dan lepas landas hanya dengan makanan. Setiap dua minggu, tutupnya diganti dengan yang baru.
Pembelajaran gigi dan mesin
Beberapa dokter gigi tidak berpengalaman dalam ortodontik seperti spesialis langka. Karena itu, kami membantu mereka menyelesaikan beberapa kasus sederhana. Jika gigi perlu sedikit digerakkan, kami sarankan mereka menggunakan perawatan otomatis kami.
Agar dokter memahami apakah ia dapat mengobati beberapa kasus atau tidak, kami akan mengenali situasinya dengan program khusus, membuat beberapa diagnosa dan mengeluarkan kesimpulan - mungkin atau tidak. Dan untuk tugas-tugas seperti itu, kami membutuhkan banyak spesialis - dalam ML, C ++. Karena kami memiliki otomatisasi, kami memerlukan spesialis backend.
Pada awalnya, orang melakukan operasi penilaian kasus, dan kecerdasan buatan dilatih. Sekarang hampir 100% dari operasi tersebut dilakukan oleh mesin. Kami mencoba banyak pendekatan. Orang-orang mencoba membuat model 3D dari foto dan menemukan beberapa perbedaan. Ini tidak bekerja dengan baik.
Setahun setengah yang lalu, iterasi pertama model ML dirilis. Sejauh yang saya tahu, tim menggunakan Python dan TensorFlow. Evaluasi dilakukan dalam beberapa kategori tentang apa yang dirawat oleh dokter. Pasien mungkin memiliki gigi yang padat, atau sebaliknya, ketika mereka menyimpang ke samping. Ini adalah masalah yang berbeda dengan gigi dan model yang berbeda bekerja untuk mereka. Mereka adalah yang paling umum dan kami mulai dengan mereka, kemudian pindah ke kasus yang lebih pribadi.
Dalam rilis berikutnya, kami akan meluncurkan model untuk semua kemungkinan jenis masalah dengan gigi. Untuk beberapa waktu kami akan melacak semua kasus yang bermasalah dan mengurai kesalahan. Akan ada cadangan dari tim penilaian manual untuk ini.
Proses pelatihan model lengkap membutuhkan waktu sekitar dua tahun.
Pembelajaran mesin juga digunakan untuk bekerja dengan foto. Kami berusaha menunjukkan kepada orang itu bagaimana senyumnya akan terlihat setelah perawatan. Untuk melakukan ini, kami mengambil foto pasien, memberikan model 3D giginya, dan kemudian program mencoba, dengan cara yang dekat dengan kenyataan, untuk menanamkannya di foto sehingga orang tersebut melihat bagaimana senyumnya akan terlihat indah.

Bagaimana Align muncul di Rusia
- AM: Sekitar 15 tahun yang lalu. Orang-orang dari Moskow belajar di California, dan saat belajar, mereka mendapat pekerjaan di kantor Align. Pada masa itu, itu adalah perusahaan kecil. Ketika mereka selesai studi, mereka kembali ke Moskow, tetapi hubungan kontraktual dengan mereka tetap ada. Mereka hanya programmer yang sangat baik. Dan agar lebih mudah bagi mereka untuk bekerja, sebuah kantor kecil dibuka di Moskow. Kemudian tumbuh menjadi skala yang sangat besar. Sekarang ada lebih dari 400 orang.

Di Novosibirsk, kantor dibuka dengan cara yang sama seperti di Moskow. Seorang pria yang membuktikan dirinya sangat baik datang dari sana dan memutuskan untuk kembali ke kotanya. Dia menawarkan untuk bekerja dari jarak jauh, tetapi dia ditugaskan untuk membuat kantor kecil. Sekarang ada sekitar empat puluh orang.
SV: Menariknya, setahun lalu di Moskow ada sekitar 200 orang. Kami hampir berlipat ganda dalam setahun.
- Bagaimana orang-orang Anda didistribusikan di antara semua proyek ini?- AM: Kami memiliki tim insinyur yang menangani backend. Ada tim yang terlibat dalam program ClinCheck untuk dokter. Tim terbesar terlibat dalam perangkat lunak untuk teknisi, yang hanya digunakan secara internal. Ada tim QA dan DevOps yang terpisah. Tim iTero membuat perangkat lunak pemindai.
- Seberapa independen tim secara teknis?- AM: Tugas bisnis untuk tim berasal dari pemasaran, tetapi keputusan teknis dibuat secara independen di Moskow. Mereka tidak memerlukan izin khusus dari kantor pusat. Jika kita mengubah arsitektur antar sistem, kita setidaknya harus membicarakannya dan mendapatkan persetujuan. Tetapi pada tingkat fungsional, kami memiliki independensi penuh.
Andrey Zaitsev: Kami memiliki proses yang disebut papan peninjau arsitektur. Bahkan jika kita cukup bebas untuk memilih, kita harus membenarkannya kepada arsitek terkemuka.
Misalnya, kami sekarang memiliki bahasa pengembangan utama - Jawa. Tetapi tim menyatakan minat besar pada Kotlin. Salah satu pengembang kami selama setengah tahun menyiapkan presentasi dengan justifikasi, dengan mempertimbangkan risiko perekrutan, risiko kebocoran data, masalah dalam bahasa. Dia membuat presentasi di dewan arsitektur, kami mendapat peningkatan, dan tim mendapat bahasa pengembangan tambahan. Sekarang untuk layanan mikro baru kami menggunakan Kotlin, bukan Jawa. Artinya, kita bebas, tetapi semuanya perlu dibenarkan. Anda tidak bisa tiba-tiba beralih ke beberapa Haskell.
- Dan bagaimana komunikasi dengan kantor lain dibangun?- AM: Tidak ada kesulitan dengan interaksi. Kami terus-menerus bepergian ke kantor R&D di Raleigh di North Carolina, AS, dan ke kantor pusat kami di San Jose.
- AZ: Kami memiliki enam tim SCRUM di backend. Satu terletak di kantor Israel di Tel Aviv, yang lain di Raleigh, sisanya di Moskow. Kami menyinkronkan dua kali seminggu, pemimpin tim mendiskusikan proses saat ini, rilis mendatang, interaksi antar tim, solusi teknis baru, perubahan dalam modul umum. Dan - komunikasi perusahaan standar. Kami memiliki semua tim Microsoft, jika perlu, Anda dapat merekrut kolega mana pun dan berbicara dengannya.
Dulu ada masalah bahwa kantor di San Jose berada di zona waktu yang berlawanan dari Moskow, dan ketika mereka mulai bekerja, kami pergi begitu saja. Karena itu, pertemuan biasanya berlangsung sore hari. Dengan kantor di Raleigh lebih mudah, dengan mereka unjuk rasa dimulai sekitar pukul empat sore di Moskow.
- AM: Karena tim saya sedang mengembangkan program untuk dokter, kami harus menunjukkan demo kepada dokter yang bekerja di perusahaan kami di akhir sprint. Mereka duduk di San Jose, AS, jadi kadang-kadang Anda harus memulai demonstrasi tidak lebih awal dari jam tujuh malam.
Teknologi apa yang membuat gigi rata
- Katakan padaku, siapa yang melakukan apa menggunakan apa?- AM: ClinCheck, yang dikembangkan tim saya, ada dalam dua bentuk. Yang pertama adalah aplikasi desktop. Itu dibuat di C ++ dan Qt untuk antarmuka pengguna. Desktop sudah ditulis sejak lama. Masalahnya adalah ini: dokter sama sekali bukan orang IT. Terlepas dari kenyataan bahwa mereka adalah spesialis keren di bidang ortodontik, sangat sulit bagi mereka untuk menjaga komputer dalam kondisi baik. Dan ketika kami merilis pembaruan, banyak kesulitan teknis dimulai.
Masalah kedua adalah separuh dari ortodontis menggunakan Mac, dan desktop kita hanya untuk Windows. Jika dokter ingin menggunakan program, ia harus menginstal mesin virtual. Ini merepotkan - mereka tidak dapat mengatasi komputer dengan baik, apalagi mengelola mesin virtual secara umum.
Karena itu, kami menerjemahkan aplikasi di web sehingga berfungsi di mana-mana. Benar dalam hal fungsionalitas, itu belum menyusul versi desktop. Segera setelah berhasil, kami akan menutup desktop.
Dalam pengembangan kami menggunakan TypeScript dan ReactJS. Script dipilih terutama karena kemungkinan pemeriksaan tipe statis. Menariknya, beberapa perangkat front-end beralih dari C ++, jadi ada keinginan untuk terus menggunakan pengetikan statis.
- Tetapi apakah Anda menulis layanan lain dalam JavaScript?- AM: Ya, tim yang membuat portal web komersial menulisnya dalam JS dan TypeScript.
- Ketika Anda memutuskan untuk mengambil TypeScript, Anda tidak diberitahu bahwa karena perusahaan sudah menggunakan JS, apakah lebih baik bagi Anda untuk mengambilnya?- AM: Secara alami, kami harus mempertahankan pilihan, tetapi kami menjelaskan bahwa TypeScript memiliki beberapa keunggulan. Semua yang ada di sini persis sama dengan yang ada di Kotlin.
- AZ: Tim Andrey yang memimpin, apa yang dokter lihat. Tim saya melakukan backend untuk ini sehingga ada tempat untuk menyimpan dan memproses data. Kami mulai membuat sistem kami pada tahun 2014. Pada saat itu, perusahaan memiliki beberapa sistem tingkat perusahaan besar, tetapi mereka berkembang perlahan, bersifat monolitik, dengan siklus rilis yang sangat lama, harus menguji banyak hal, dan tidak semua bangunan berhasil.
Saat itu, pendekatan layanan mikro menjadi sangat populer, dan kami mencoba menerapkannya dengan tim kami. Artinya, kami mengembangkan aplikasi kecil dengan tujuan yang jelas, area tanggung jawab yang jelas.
Tumpukan utama kami adalah Java. Sebagai kerangka kerja kami menggunakan Spring dan banyak hal yang ada di bawah payungnya - keamanan, bekerja dengan database, berbagai layanan cloud untuk memastikan keandalan, penanganan kesalahan. Kami mengenalnya dengan baik, kami menyukai segalanya dan belum akan mengubahnya. Kami menggunakannya sebagai inti dari layanan kami.
Sekarang kami memiliki sekitar 20-25 layanan. Mereka dibagi antara enam tim, dan dalam bidang tanggung jawab masing-masing, 3-5 layanan mikro diperoleh. Kami tidak menghabiskan sumber daya untuk menulis ulang Jawa di Kotlin, tetapi kami menulis semua layanan dan tes baru di Kotlin. Sekarang rasionya sekitar 95/5. Sejauh ini, hanya tiga layanan yang ditulis di Kotlin, karena kami mulai menggunakannya secara aktif hanya sejak akhir tahun lalu.
- Bagaimana tim memahami transisi? Apakah semua orang mau?- AZ: Secara keseluruhan, mereka dianggap positif, para pria senang untuk mengerti. Ada, katakanlah, beberapa juara Kotlin - mereka yang benar-benar menulis banyak, dan mereka membantu sisanya dengan ulasan kode.
Saya ingin mengembangkan pemahaman tentang bagaimana seharusnya API di Kotlin berfungsi, sehingga bukan hanya kode yang ditulis ulang secara otomatis. Dan para lelaki berusaha mengembangkan pola dasar tertentu, yang kemudian akan digunakan di mana-mana.
Secara umum, kami mencoba meniru keputusan yang baik. Karena kami memiliki dua lusin layanan, hal-hal tertentu, seperti keamanan, bekerja dengan database, bekerja dengan penyedia cloud, mereka diulang di mana-mana, jadi kami memiliki basis kode yang sama. Ada beberapa modul berbeda yang mengaduk-aduk komponen, yang memungkinkan Anda untuk mengangkat microservice kosong tanpa fungsi bisnis dalam sehari. Dan ada semua yang Anda butuhkan untuk bekerja. Ini sangat membantu untuk bergerak maju.
Pada level dasar, kita biasanya menggunakan Postgress atau semacam noSQL. Ada beberapa Python untuk tes bdd. Untuk berbagai permintaan unggah data, kami menulis skrip di atasnya.
Semua layanan dikerahkan di cloud. Yang utama adalah Amazon. Kami mengambil aplikasi, mengemasnya dalam wadah Docker, dan kemudian menggunakannya di salah satu orkestra. Beberapa tahun yang lalu, kami memilih Rancher dan sekarang menggunakannya.
- Ketika Anda pertama kali tiba, Anda tidak menemukan fakta bahwa proyek tersebut memiliki warisan yang besar dan kompleks. Meski begitu, ini adalah produk yang dimulai pada akhir 90-an.- AZ: Kami mendekati perang melawan monster legacy besar seperti ini: pada awalnya kami menulis proxy tertentu yang membungkus layanan microser dengan antarmuka REST, dan baru kemudian kami mencoba memecahnya di dalam dan refactor. Artinya, saya tidak perlu duduk selama berminggu-minggu untuk mencari tahu basis kode untuk dua ratus ribu baris.
Kami menulis banyak hal dari awal, kami menulis ulang beberapa. Pada proyek-proyek baru, kami berusaha menjaga kualitas kode. Tim ini sudah tahun kelima, dan bagi saya tampaknya kita sudah cukup baik sejauh ini.
Mempekerjakan ahli matematika dan ahli C ++
- Apakah Anda perlu memahami ortodontik?- AM: Tidak sama sekali. Tidak realistis menemukan orang yang memiliki latar belakang seperti itu. Dalam pekerjaan itu sendiri, seseorang harus belajar satu atau lain cara. Tim yang berbeda membutuhkan pemahaman yang berbeda. Tim ClinCheck lebih karena kita berbicara dengan dokter, dan setidaknya kita perlu memahami kata-kata mereka.
Tetapi dalam wawancara, kami tidak pernah bertanya tentang ini - kami mencari orang-orang yang terutama berpengalaman dalam pemrograman.
"Apa yang akan kamu lihat untuk memahami ini?"- AM: Pada tahap pertama, kami melihat resume, mengevaluasi pengalaman. Kemudian kami mengatur wawancara telepon, yang berlangsung sekitar 30 menit. Kami mengajukan pertanyaan sederhana tentang teknologi, dengan apa dan bagaimana cara kerjanya. Dan jika seseorang telah menunjukkan dirinya dengan baik, kami mengundangnya ke kantor.
Di sana kami biasanya memberikan tugas pemrograman. Ini bukan akademis, Anda tidak perlu menulis semua jenis algoritma pengurutan. Kami memberikan tugas praktis, misalnya, bagaimana menerapkan aplikasi seperti Twitter. Seseorang menulis kode selama 20-30 menit dan kemudian kami mengajukan pertanyaan pada kode ini.
Perumusan masalah mengandung beberapa jebakan bahwa seseorang harus mencoba untuk berkeliling. Jika dia berpengalaman, dia segera melihat masalah ini dan menyelesaikannya dalam kode, atau memberi tahu kita tentang hal itu. Jika dia tidak memperhatikan, kami memberi tahu dia dan juga melihat bagaimana dia akan memutuskan.
Secara umum, wawancara berlangsung sekitar dua jam. Dan seluruh perekrutan dari dan ke memakan waktu sekitar dua minggu.
MM: Untuk menyewa layanan internal, kami terutama melihat C ++ dan matematika. Tergantung pada tim, ada offset baik di satu arah atau di lain. Tim yang membangun model distribusi kekuatan di aliner, tentu saja, terutama matematika.
Tim platform 3D tempat saya bekerja tidak menangani masalah produk (ada banyak sekali), tetapi mendukung engine sistem, membuat perpustakaan C ++. Di sana, pertama-tama, C ++ dan pengetahuan tentang algoritma.
- Mungkin sulit mencari orang di tim seperti itu?Ya dan tidak Ini sulit karena Anda membutuhkan pengetahuan yang baik tentang pro, pemahaman tentang bagaimana perangkat lunak dan perangkat keras bekerja. Tetapi sedikit lebih mudah, karena setidaknya kita tidak terlalu membutuhkan matematika. - , โ , , .
: , . . , , , . , .
โ C++ , ?, C++ , , , . , .
. , โ , , , , , . , , . - , , .
โ ?. . , , . . โ . 5-6 .
โ , , ยซ - , ยป?: โ ยซ ยป. , , โ - - โ , .