Terinspirasi oleh produksi dan bola basket: bagaimana Yandex mempersiapkan kejuaraan pemrograman

Pada akhir Mei, kejuaraan pemrograman kami akan dimulai. Ini akan berlangsung secara online dan akan memungkinkan Anda untuk menguji diri Anda di salah satu dari empat bidang: pengembangan backend atau frontend, pembelajaran mesin, atau analisis data. Tugas-tugas untuk bagian dikembangkan dalam manajemen kecerdasan mesin dan penelitian, pencarian, dan geoservices.

gambar

Semua peserta pertama-tama harus mengatasi babak kualifikasi. Setelah mendaftar, Anda akan memilih kapan harus mengambilnya. Kualifikasi adalah 4 jam dan termasuk dari 4 hingga 6 tugas. Kami akan mengundang yang terbaik untuk berpartisipasi di final, yang akan diadakan pada 1 Juni, juga online. Hasilnya akan diumumkan pada 5 Juni. Pemenang di setiap arah akan menerima 300 ribu rubel, tempat kedua - 150 ribu rubel, ketiga - 100 ribu. Pendaftaran terbuka dan akan berlangsung hingga hari terakhir putaran kualifikasi - 26 Mei, tetapi lebih baik untuk mengirim aplikasi lebih awal.

Dalam posting ini kami akan berbagi pengalaman mengadakan kompetisi tersebut - dalam hal penonton dan persiapan masalah algoritmik yang kompleks.

* * *

Kejuaraan ini merupakan pengembangan dari ide yang kami terapkan pada 2017-2018 dalam seri Yandex.Blitz. Perbedaannya adalah bahwa Blitz hanyalah serangkaian kontes terpisah dalam arah yang berbeda. Mereka disatukan hanya oleh format, dan mereka terjadi pada waktu yang sangat berbeda. Pastikan untuk membaca habrastati dengan analisis tugas untuk setiap kompetisi: dalam pembelajaran mesin , backend , frontend , dan pengembangan ponsel .

Dalam mempersiapkan kejuaraan dan jabatan ini, kami banyak berbicara dengan mereka yang menempati posisi tinggi di Blitz dan kemudian mendapat pekerjaan di Yandex. Penting untuk mempertimbangkan pengalaman nyata dari para pemain, pandangan dari peserta, untuk membuat kompetisi menjadi lebih transparan dan menarik.

Mengapa itu layak untuk diikutsertakan?


Kejuaraan, seperti Blitz sebelumnya, adalah jalan pendek ke perusahaan: peserta dari atas akan dapat datang kepada kami untuk bekerja sesuai dengan skema wawancara yang disederhanakan. Tapi kami menunggu tidak hanya untuk mereka yang mencari pekerjaan dan mempertimbangkan Yandex. Kami berharap kompetisi ini akan diikuti oleh perwakilan dari dua kategori pengembang lagi. Kategori pertama adalah mereka yang tertarik pada algoritma, terlibat dalam pemrograman olahraga, dan juga banyak berpartisipasi (atau berpartisipasi) dalam olimpiade dan kompetisi lainnya. Kami akan menawarkan orang-orang seperti itu layak untuk tugas tingkat mereka dan pengalaman menarik di celengan.

Kategori kedua adalah programmer dan analis berpengalaman. Mereka akan memiliki kesempatan untuk menunjukkan pengalaman dan latar belakang mereka. Faktanya adalah kami telah menyusun tugas yang sangat beragam. Ini membedakan kejuaraan dari kompetisi di Kaggle - bukan untuk yang lebih baik atau lebih buruk, hanya Kaggle memberikan beberapa kemungkinan lain. Di sana, para penyusun biasanya memberikan kondisi dan data yang memungkinkan Anda menguji diri sendiri di area tertentu (jika diinginkan, peserta punya waktu untuk mempelajarinya). Putaran kejuaraan kami berlalu dalam hitungan jam dan catat pengetahuan saat ini. Anda tidak dapat memahami, misalnya, dalam teknologi suara atau visi komputer, tetapi tunjukkan pemikiran seperti itu sehingga di masa depan akan memungkinkan Anda untuk dengan cepat terjun ke topik apa pun. Tentu saja, perbandingan dengan Kaggle hanya relevan untuk trek ML kejuaraan.

Seperti produksi


Jadi, ide utama tetap tidak berubah: untuk menawarkan kepada para peserta tugas-tugas yang dekat dengan tugas militer - tugas-tugas yang benar-benar dihadapi oleh para pengembang dan analis Yandex. Jadi, Anda dapat memahami tingkat dan kekhususan tugas-tugas ini, lihat masalah apa yang harus Anda hadapi dalam pekerjaan Anda jika Anda mendapatkan pekerjaan di perusahaan. Selain itu, tugas yang kami siapkan untuk kontes akan membantu peserta menilai seberapa baik mereka memompa di area tertentu, apakah mereka memiliki ide yang benar-benar dapat dikonversi menjadi layanan dan aplikasi yang ditingkatkan.

Mereka yang mengambil bagian dalam Blitz 2017 dan 2018 melihat bahwa tugas sebagian ditentukan oleh kode sumber mereka dari proyek pertempuran. Tetapi nada tempur pengembangan dalam sebuah perusahaan seringkali terletak pada kebutuhan untuk memahami algoritma - bahkan di bidang yang, pada pandangan pertama, jauh dari algoritma, seperti pengembangan front-end dan mobile. Jadi, kontes yang didedikasikan untuk kedua topik ini sering dinilai oleh para peserta sebagai yang dekat dengan pertempuran. Tetapi dua kontes lainnya - dalam pemrograman algoritmik dan pembelajaran mesin - akan membutuhkan pemahaman tentang algoritma, bahkan tanpa subteks "pertarungan". Mereka juga memiliki subteks seperti itu, tetapi tidak selalu mungkin untuk membedakannya sesuai dengan kondisi tugas. Namun, ini tidak menghentikan peserta untuk berkompetisi, tetapi bagi kami - untuk mengimplementasikan ide utama Blitz.

Gagasan ide


Ketika tugas untuk kompetisi dalam pemrograman olahraga tidak dikompilasi sendiri, tetapi berdasarkan tugas yang sebenarnya muncul dalam layanan, proses penyusunannya benar-benar berbeda. Alasannya adalah bahwa dalam layanan seorang manajer atau kolega membawa tugas kepada pengembang dalam formulasi yang berbeda, dalam konteks yang berbeda dari ketika kondisi tersebut berasal dari penyelenggara kompetisi kepada peserta mereka. Seorang programmer penuh waktu atau bahkan seorang magang, terutama jika dia bekerja di perusahaan untuk beberapa waktu, jauh lebih dalam terbenam dalam proses departemennya daripada pengembang eksternal (bahkan sangat berbakat). Mereka tidak dapat merumuskan masalah dengan cara yang sama, terutama karena penawar diharuskan untuk memberikan solusi dalam waktu yang jauh lebih sedikit. Lingkungan pengembangannya juga berbeda: hanya ada file input dan output, dan karyawan bekerja di repositori, di antarmuka internal, dengan semua alat, dll.

Kondisi "pembersihan"


Jadi kami mengambil tugas dari lingkungan militer, tetapi kemudian kami selalu bertanya pada diri sendiri - akankah para peserta memahami? Kadang-kadang ternyata: untuk membuat kondisi ini dapat dimengerti oleh banyak pengembang, Anda harus menulis basa-basi besar untuk itu, memperkenalkan terminologi yang telah lama dikenal oleh para spesialis di perusahaan, dll. Pendekatan seperti itu tidak selalu berhasil: dalam sebuah kompetisi, penting bahwa kondisi itu luas. sehingga Anda dapat dengan cepat membacanya dan pergi ke hal yang paling penting - untuk mengembangkan solusi. Oleh karena itu, dalam kasus di mana, bersama dengan pembukaan, kondisinya akan menjadi terlalu rumit, kami mencoba untuk merumuskannya kembali dan menghilangkan kebutuhan akan pembukaan. Kata-kata lain sering diperlukan juga karena tugas aslinya berisi informasi Yandex internal yang tidak boleh diungkapkan di luar perusahaan. Akibatnya, tugas itu bisa menjadi lebih abstrak, tidak lagi mirip dengan analog dalam produksi pertempuran.

Sangat menarik bahwa situasi yang berlawanan - ketika kondisi itu segera mampu merumuskan dengan ringkas dan tidak kehilangan kedekatan dengan produksi - sering mengarah pada fakta bahwa tugas ternyata menjadi sulit. Sebagai contoh, ini terlihat di akhir Blitz of machine learning, dalam tugas-tugas yang berkaitan dengan pengenalan gambar. Kejuaraan tahun ini tidak terkecuali. Peserta, antara lain, sedang menunggu tugas-tugas tentang terjemahan mesin - diformulasikan dengan baik, sulit untuk diterapkan dan benar-benar diambil dari proyek pertempuran (Yandex.Translate).

Apa yang kami periksa


Timbul pertanyaan - membuat tugas abstrak dibandingkan dengan produksi, apakah kita tidak menyederhanakannya? Di satu sisi, ya, kami menyederhanakannya - untuk menyelesaikannya tidak lagi membutuhkan pengalaman dengan infrastruktur internal Yandex, serta komunikasi awal dengan kolega. Kita tidak perlu terbiasa dengan proses peninjauan kode, kita tidak perlu membuat kode itu indah, dll. Tetapi kita menjaga bagian paling informatif dari setiap tugas yang membutuhkan pemikiran algoritmik. Dan jika Anda menyelesaikannya, bahkan dalam bentuk yang agak disederhanakan, itu masih akan berarti bahwa Anda adalah programmer yang sangat baik. Dan seorang programmer yang baik akan dengan cepat berkenalan dengan infrastruktur internal, akan mempelajari proses peninjauan kode dan beralih dari mode olahraga menulis kode ke yang industri. Ini seperti dalam bola basket: hal utama bagi pemain adalah dimensi dan pemahaman yang baik tentang permainan, dan lemparan dapat diajarkan.

Kami menyebutkan pemikiran algoritmik - dalam arti Anda harus dapat mengimplementasikan algoritma yang diinginkan menggunakan bahasa pilihan Anda: tanpa perpustakaan tambahan. Kemungkinan besar, dalam pekerjaan nyata (baik sebelum dan sesudah kontes) Anda akan menggunakan berbagai perpustakaan tambahan yang cukup memanggil algoritma yang diperlukan dan sangat mengurangi jumlah kode. Kemampuan untuk menghubungkan mereka hanya dari kategori apa yang “dapat diajarkan”. Lebih menarik bagi kami untuk memastikan bahwa ketika Anda menelepon beberapa perpustakaan, Anda memahami apa dan bagaimana fungsinya. Mengetahui algoritma dari dalam, Anda akan lebih efektif menerapkannya - sudah tanpa perlu menerapkannya sendiri.

Persaingan analitik


Berbicara tentang tujuan kejuaraan di pos ini, kita sering mengingat Yandex.Blitz. Tapi sekarang, peserta dapat memilih arah analisis data, di mana kami tidak melakukan Blitz. Ini adalah trek baru dengan spesifiknya sendiri. Jika Anda memilihnya, maka pengetahuan tentang algoritma juga akan menjadi nilai tambah, tetapi pada tingkat yang lebih rendah daripada pembelajaran mesin atau trek pengembangan backend.

Gagasan umum di sini adalah sama dengan di bidang lain: untuk memeriksa keterampilan yang digunakan oleh spesialis di Yandex. Jadi pertanyaannya adalah, keterampilan apa yang bisa berguna?

Keterampilan kunci seorang analis yang baik di Yandex adalah kemampuan untuk menghasilkan hipotesis, untuk mengekstrak sinyal yang berguna dari kondisi tugas fuzzy, data ambigu atau berisik. Analis kami biasanya menulis dengan Python dan bekerja dengan aliran data yang besar, misalnya, dengan log Yandex.Metrica, sesi pengguna, log teknis server, dll.

Untuk memecahkan masalah analitis dalam kerangka kejuaraan, serta untuk pekerjaan lebih lanjut di Yandex, sangat berguna untuk mengetahui dasar-dasar statistik matematika dan teori probabilitas. Ini adalah pengetahuan dasar yang membantu membuat kesimpulan yang benar dan berbasis data tentang proses.

Source: https://habr.com/ru/post/id449602/


All Articles