Hari ini kami menerbitkan kisah transisi Andrei Vukolov ke TI. Antusiasme masa kecil untuk ruang pernah membawanya ke ilmu roket di MSTU. Realitas yang keras membuat saya melupakan mimpi itu, tetapi semuanya ternyata lebih menarik. Mempelajari C ++ dan Python memungkinkan kami melakukan pekerjaan yang tidak kalah menarik: memprogram logika sistem kontrol robot.
Mulai
Saya beruntung sepanjang masa kecil saya untuk rave tentang ruang. Karena itu, sepulang sekolah, saya tidak ragu-ragu untuk pergi ke mana untuk belajar, dan memasuki Universitas Teknik Negeri Moskow. Bauman, ke departemen propulsi roket. Namun, cabang kursus itu sendiri - mesin bubuk atau cairan roket ruang angkasa - tidak harus dipilih sama sekali: pada tahun 2001, komisi fakultas khusus mendistribusikan kelompok sasaran pelamar. Saya mendapat "dalam tong mesiu."
Pada saat itu, "booming roket" hanya ada dalam rencana, para insinyur menerima gaji yang sedikit dan bekerja di biro desain tertutup khusus dan lembaga penelitian yang praktis tidak memiliki prospek untuk pertumbuhan karir dan profesional. Meski begitu, roket serbuk di Rusia adalah produk murni militer.
Sekarang arah ini sangat diminati, tetapi selama studi saya, saya menyadari bahwa dalam ilmu roket kegiatan apa pun atas inisiatif saya sendiri hampir tidak mungkin. Sebenarnya, ini adalah dinas militer. Sebagai contoh, bekerja di industri roket, saya akan benar-benar kehilangan kesempatan untuk mengembangkan perangkat lunak sendiri, bahkan untuk diri saya sendiri, karena kegiatan ini diatur secara ketat.
Semua produk perangkat lunak dikembangkan secara eksklusif berdasarkan pesanan khusus dan dengan persetujuan komite privasi (sekarang merupakan divisi dari FSTEC). Pengembang di sana diharuskan mendaftar dan melisensikan setiap baris kode secara harfiah. Semua perangkat lunak pada awalnya rahasia di tingkat tugas. Ini sebagian menjelaskan mengapa perangkat lunak yang saat ini digunakan untuk melatih siswa roket dikembangkan pada tahun 90-an maksimum abad kedua puluh.
Pada saat saya lulus, saya berhasil bekerja di Departemen Teori Mekanik dan mulai mengembangkan simulator pelatihan proses teknis di C ++, jadi saya punya contoh untuk perbandingan, dan saya bisa mempertimbangkan semua pro dan kontra. Pilihannya jelas, dan saya secara bertahap mulai melayang ke arah IT dan robot. Dalam mekanika terapan, itu jauh lebih menyenangkan daripada dalam ilmu roket: banyak masalah yang belum terpecahkan, lingkungan terbuka, kurangnya industri pengembangan, dan kebutuhan mendesak akan perangkat lunak simulasi. Dalam robotika - arsitektur perangkat lunak umum yang tidak stabil dan kebutuhan untuk berulang kali mengimplementasikan algoritma yang kompleks, termasuk logika fuzzy dan permulaan AI. Karena itu, setelah program pertama saya untuk memproses data eksperimental, saya hampir tidak kembali ke roket (dengan pengecualian proyek kelulusan).
Akibatnya, saya mendapat kesempatan untuk bekerja di bidang khusus hanya empat bulan sebelum lulus di pabrik struktur komposit untuk industri dirgantara di dekat Moskow. Di akhir pelatihan, saya bahkan tidak harus mencari pekerjaan - saya segera datang untuk mengajar mekanik yang diterapkan di Fakultas Robotika.
Dari mengajar hingga pemrograman
Pada Kongres Dunia IFTOMM dengan mahasiswa - anggota kelompok penelitian (saya di sebelah kanan)Di MSTU, di fakultas probotechnical, saya bekerja selama 10 tahun, mengajar mata kuliah teori mekanisme. Dia menerbitkan makalah ilmiah (lihat bagian akhir artikel), secara bertahap beralih dari mekanika menuju CAD dan robotika. Dan pada akhirnya, dia memutuskan untuk berhenti mengajar. Untuk menggambarkan dengan jelas alasan keputusan ini, saya akan mengatakan bahwa selama satu dekade, program studi yang saya baca tidak berubah oleh koma. Meskipun mekanika terapan, dilihat dari publikasi, berjalan sangat, sangat sukses.
Selain itu, pekerjaannya semakin menyerupai birokrat - laporan, program, standar, dan banyak kertas. Dalam kondisi seperti itu, kesenangan mengajar digantikan oleh laporan tentang penerimaan kesenangan ini, dan ini lebih dari tidak menyenangkan bagi dokter spesialis.
Dan akhirnya saya sampai pada robotika seperti ini: pada 2007-2009, bersama dengan profesor A. Golovin dan N. Umnov, kami mulai menyiapkan karya ilmiah pertama. Di sana saya harus menggunakan algoritma untuk menentukan lintasan objek sesuai dengan fotografi stroboskopik. Dari topik ini - satu langkah ke visi mesin, OpenCV dan Sistem Operasi Robotic (walaupun saya bahkan tidak memikirkan skala seperti itu). Setelah itu, saya akhirnya fokus pada mekanika dan robotika terapan dalam penelitian, dan pengembangan menjadi kegiatan tambahan.
Namun, untuk mencari pekerjaan baru dalam robotika, perlu untuk meningkatkan dan menambah pengetahuan pemrograman saya. Bagaimanapun, IT, kecuali untuk program universitas satu tahun (ObjectPascal dan Borland VCL dalam C ++), tidak pernah dipelajari di mana pun, dan mengandalkan matematika dalam aspek teoritis pengembangan.
Pada awalnya saya mempertimbangkan pilihan untuk kursus penuh waktu di institut asli saya. Benar, dengan cepat menjadi jelas bahwa menggabungkan studi seperti itu dengan pekerjaan di departemen praktis tidak mungkin karena jadwal yang sobek dan pekerjaan yang sering di luar jadwal sendiri (penggantian, dll.). Jadi secara bertahap muncul dengan ide untuk menyelesaikan kursus berbayar dari jarak jauh. Dia bergabung dengan GeekBrains atas rekomendasi para profesor dari pusat pelatihan Technopark Mail.ru yang berlokasi di Baumanka dan terdaftar dalam kursus Python Programmer.
Kursus tidak menimbulkan kesulitan, satu masalah - terus-menerus harus digabungkan: dengan pekerjaan di departemen, karya ilmiah dan acara. Tidak ada cukup waktu sehingga saya harus mengorbankan (untungnya, sementara) sebagian besar koneksi sosial di luar rumah.
Mengatasi beban seperti ini: menyelesaikan masalah di jalan. Keterampilan ini, yang dikembangkan oleh banyak perjalanan bisnis, ternyata sangat berguna, karena tanpanya saya bahkan tidak bisa menyelesaikan semua pekerjaan rumah saya (dan itu juga menggantikan meditasi ...). Saya terbiasa pemrograman saat bepergian menggunakan laptop, smartphone, dan keyboard nirkabel untuk smartphone.
Saya memiliki laptop Dell Latitude 3470, dan smartphone apa pun dengan diagonal 5,5 inci atau lebih yang dipasangkan dengan keyboard Logitech K 810 BT akan dilakukan. Secara umum, saya merekomendasikan produk Logitech kepada semua orang, ini sangat dapat diandalkan dan dapat bertahan dalam kondisi penggunaan yang sangat keras (dan ini tidak pernah merupakan iklan).
Keyboard Logitech K810Python sangat nyaman dengan pekerjaan seperti itu - dengan editor yang baik. Retasan pemrograman lain: gunakan koneksi jarak jauh ke desktop atau runtime. Saya menyelesaikan beberapa tugas menggunakan server web aman yang menjalankan Django di komputer rumah saya. Dia bekerja pada saat yang sama dari kereta, perangkat lunak yang digunakan PyDroid, DroidEdit, Maxima.
Mengapa python
Secara singkat, saya mencoba menggunakan PHP sebagai bahasa scripting sistem. Python awalnya secara independen dan sedikit demi sedikit dipelajari "untuk dirinya sendiri". Dia memutuskan untuk serius belajar setelah dia mengetahui tentang adanya koneksi yang efektif antara Python dan C ++ di tingkat modul - tampaknya menarik untuk memisahkan algoritma dan prosedur yang dioptimalkan untuk mempersiapkan data dalam satu bahasa.
Contoh paling sederhana: ada sistem kontrol drive kuat non-standar yang diimplementasikan pada mesin tertanam dengan prosesor RISC, di C ++. Manajemen melalui API eksternal yang bergantung pada mesin yang mendukung, misalnya, komunikasi antar subsistem melalui jaringan. Pada tingkat tinggi, algoritma operasi drive tidak debugged atau tidak konstan (memuat berbagai algoritma diperlukan tergantung pada proses kerja).
Salah satu cara terbaik untuk mendapatkan sistem seperti itu adalah dengan menggunakan subsistem API C ++ khusus mesin sebagai dasar dari rangkaian kelas Python yang digunakan pada interpreter lintas platform. Dengan demikian, pengembang tingkat atas tidak perlu mempertimbangkan fitur-fitur mesin yang disematkan dan OS-nya, ia hanya akan bekerja dengan kelas-kelas Python, yang bertindak sebagai "pembungkus" API tingkat rendah.
Saya harus belajar mengikat C ++ dan Python dari awal. Pemahaman dengan cepat datang bahwa fitur berorientasi objek pada level tinggi jauh lebih penting daripada pada level rendah. Karena itu, saya harus sepenuhnya mengubah pendekatan untuk merancang dan mengimplementasikan API, memilih kelas di tingkat Python dan berbagi data global dalam C / C ++. Biasakan pembuatan kode: misalnya, kerangka kerja ROS itu sendiri menghasilkan nama dan objek dengan Python, jadi Anda harus memperhitungkan perbedaan dalam bahasa, terutama dalam mengetik, mendesain antarmuka Anda.
Bekerja di masa sekarang: Python dan logika sistem kontrol robot
Sekarang saya bekerja sebagai programmer dalam Python dan C ++ di pusat penelitian dan pelatihan "Robotics" di MSTU. Kami menerapkan proyek penelitian dan perangkat lunak yang ditugaskan oleh departemen pemerintah: kami mengembangkan manipulator dengan sistem visi terintegrasi dan algoritma kontrol otomatis tingkat tinggi yang tidak tergantung pada sistem.
Sekarang saya sedang memprogram dalam Python logika tingkat tinggi dari sistem kontrol robot, bahasa ini menghubungkan modul yang sangat optimal yang ditulis dalam C ++, assembler dan Go.
Dalam pemrograman algoritma kontrol robot, dua kelompok besar algoritma digunakan. Yang pertama diimplementasikan langsung pada peralatan, pada tingkat rendah - ini adalah firmware dari pengontrol drive, konsentrator jalur komunikasi, subsistem interaksi dengan operator.
Algoritma di sini dirancang untuk kecepatan eksekusi yang dapat diandalkan dan keandalan yang melebihi kinerja robot secara keseluruhan. Yang terakhir diperlukan, karena keamanan seluruh sistem tergantung pada perangkat lunak kontrol tingkat rendah.
Kelompok kedua algoritma menentukan operasi robot secara keseluruhan. Ini adalah program tingkat tinggi, penekanan dalam pengembangan yang pada pemahaman dan kecepatan implementasi algoritma, seringkali cukup kompleks. Selain itu, perangkat lunak tingkat tinggi pada robot sangat sering mengalami perubahan dalam proses commissioning dan pengujian. Bahasa tujuan umum yang dapat diinterpretasikan sangat diperlukan untuk pengembangan semacam itu.
Pengetahuan apa yang dibutuhkan untuk pekerjaan seperti itu
Diperlukan pembelajaran tentang bahasa template C ++, fitur berorientasi objek dari Python. Keahlian yang hampir tak tergantikan adalah kemampuan untuk merancang dan mendokumentasikan API. Tidak akan berlebihan untuk mempelajari kapabilitas perpustakaan khusus, seperti Boost :: Python. Mereka yang bekerja dengan perangkat lunak tingkat rendah pasti harus berurusan dengan multithreading (apalagi, pada tingkat kernel), panggilan sistem Linux / UNIX / QNX. Untuk meningkatkan pemahaman tentang prinsip-prinsip membangun robot, sangat berguna untuk membiasakan diri dengan kerangka Sistem Operasi Robotic.
Saya mencoba untuk memiliki setidaknya satu kompilasi dan satu bahasa pemrograman yang ditafsirkan dalam aset, pengembangan dan permintaan. Ini adalah strategi kemenangan untuk bekerja di bidang teknik, di mana Anda terus-menerus perlu mengembangkan algoritma yang sangat khusus (baca: tidak biasa) dan mengimplementasikannya dalam bahasa kompilasi. Tugas menyiapkan data untuk perangkat lunak semacam itu jauh lebih baik untuk diselesaikan dengan menggunakan bahasa yang ditafsirkan. Awalnya, set saya termasuk C ++, Pascal dan BASIC, kemudian PHP dan BASH ditambahkan.
Bagaimana alat pengembangan dapat berguna dalam pembelajaran siswa
Rencana utama untuk pengembangan profesional sekarang adalah mencoba membawa dasar ilmiah untuk penggunaan alat pengembangan perangkat lunak profesional dalam pedagogi, untuk mengembangkan dan menguji metode pengajaran.
Pada 2016, saya memulai percobaan besar tentang memperkenalkan alat pengembangan - bahasa pemrograman, IDE, generator dokumentasi, sistem kontrol versi - ke dalam praktik pedagogis di pendidikan tinggi. Sekarang kami telah berhasil memperoleh hasil yang cocok untuk generalisasi kualitatif.
Misalnya, pengenalan versi materi ke dalam proses pendidikan secara signifikan meningkatkan kualitas pekerjaan siswa, namun, hanya dalam kondisi bahwa siswa bekerja bersama dalam proyek bersama. Pengembangan metode untuk mengajar disiplin ilmu menggunakan alat pengembangan perangkat lunak profesional sekarang secara aktif dilakukan oleh kekuatan kelompok penelitian saya, yang terdiri dari siswa, pelamar dan siswa program pendidikan tambahan MSTU.
Ngomong-ngomong, saya tidak meninggalkan praktik mengajar - saya mengembangkan kursus pribadi langsung penulis tentang perangkat dan administrasi Linux untuk Institute of Advanced Studies MSTU, dan saya sendiri mengajar.
Karya ilmiah
Pekerjaan awalMasalah perencanaan gaya berjalan dalam desain sistem berjalan empat kaki menggunakan gaya berjalan kuda sebagai contoh (2010)
Pada masalah kinematika dan pemuatan elemen pendukung kaki depan kuda dalam tahap mendekati dukungan sebagai komponen dari siklus tugas propulsi empat kaki (2012)
Dari yang terakhirAplikasi 3D untuk mensimulasikan produksi roda gigi untuk mengajarkan teori mekanisme dan mesin (2019)
Pengakuan hambatan struktural dan penerapannya dalam mencari objek bantuan (2018)
Karya-karya lain yang diindeks oleh database kutipan sains dapat dilihat di profil
ResearchGate saya. Sebagian besar artikel dikhususkan untuk pergerakan mesin, ada karya pedagogi teknik dan perangkat lunak pendidikan.