Masalah algoritma di frontend. Contoh dan kompetisi Yandex

Kemarin, Yandex.Blitz baru diluncurkan - kali ini kompetisi akan menarik bagi pengembang antarmuka. Untuk pemegang tempat pertama hingga kelima, kami akan menawarkan Anda untuk mendatangi kami sesuai dengan skema yang disederhanakan: satu bagian wawancara, bukan empat. Dengan demikian, Blitz tetap menjadi cara tercepat untuk sampai ke Yandex.

Tugas-tugas dari kompetisi sekali lagi dekat dengan tugas-tugas produksi pertempuran - Anda akan membutuhkan tidak hanya keterampilan front-end, tetapi juga pengetahuan tentang algoritma. Daftar di sini untuk mengikuti babak kualifikasi.



Blitz adalah alasan yang baik untuk berbicara tentang sejarah masalah algoritmik yang muncul di front-end industri, dan bagaimana mereka berbeda dari yang ada di kompetisi.

Tentang Tugas


Tugas yang secara jenuh secara algoritmik dalam pengembangan antarmuka di Yandex selalu muncul. Saya dapat mengingat contoh dari 2005-2006. Salah satu tugas ini adalah sistem bekerja dengan peristiwa abstrak. Itu perlu untuk membuat kernel yang akan memungkinkan melampirkan penangan (ditentukan oleh fungsi) untuk peristiwa yang sewenang-wenang (ditentukan oleh string), setelah itu akan memicu peristiwa tertentu dan menghapus ikatan penangan. Komplikasi tambahan adalah bahwa tiga operasi utama yang terdaftar harus dilakukan secepat mungkin. Tentang ini bahkan ada bagian di salah satu laporan lama .

Tugas menarik lainnya adalah lokasi thumbnail di Yandex. Gambar hasil pencarian. Itu perlu untuk menyelaraskan aliran benda persegi panjang dengan ketinggian yang sama dan lebar yang berbeda di tepi kanan. Dalam kasus umum, masalah ini tidak memiliki solusi, sehingga diizinkan untuk mengubah ukuran gambar asli (perkecil dan potong), tetapi agar hilangnya informasi tidak melebihi beberapa ambang batas yang wajar dalam persentase.

Ada juga tugas yang terkait dengan pengembangan mesin template Yandex, dikenal dengan kata kunci XJST dan BEMTHML. Kesulitan utama adalah membuatnya cukup cepat, sambil mempertahankan ekspresif semantik yang diinginkan. Detail tentang ini dapat ditemukan di banyak laporan. Berikut adalah beberapa laporan pertama dengan rincian: events.yandex.ru/lib/talks/43 dan events.yandex.ru/lib/talks/329 , ada banyak lainnya.

Segala macam sistem pemrosesan real-time, misalnya, ketika menggulir dan menyeret dengan mouse, juga sering dipaksa untuk berefleksi. Anda harus datang dengan trik algoritmik yang berbeda untuk membuat antarmuka - setidaknya secara subjektif bagi pengguna - terlihat cepat jika tindakan nyata dilakukan secara objektif untuk waktu yang lama.

Misalnya, dalam salah satu versi Yandex.Mail pertama, dimungkinkan untuk menyeret hampir semua elemen kunci satu sama lain: huruf ke folder, label pada huruf, huruf pada label, dan bahkan folder pada huruf. Dalam prosesnya, ketika pengguna memegang objek "di tangannya" dan dia menggerakkannya di sekitar layar, perlu untuk menyoroti elemen-elemen yang memungkinkan untuk "mengatur ulang" itu. Realisasi naif "di dahi" melambat menjadi tidak mungkin.

Perbedaan antara tugas nyata dan kompetitif


Tugas-tugas di dalam Yandex, sebagai aturan, diselesaikan dalam mode tim. Manusia tidak dibiarkan sendiri, seperti dalam sebuah kontes. Dia bisa mendapatkan bantuan dari rekan kerja dan harus mencocokkan jalan keputusannya dengan kepentingan peserta lain dalam proses tersebut.

Mungkin ternyata Anda menulis versi cepat, tetapi sebagian besar kolega Anda menganggap kode itu terlalu sulit untuk dipahami, dikembangkan, dan didukung di masa mendatang. Dalam kasus seperti itu, kompromi harus dicari. Paling sering, interaksi tim dirancang sebagai tambahan berurutan untuk solusi atau sebagai proses simultan pemrograman pasangan. Kami hampir tidak pernah melakukan hal yang sama secara paralel, untuk kemudian membandingkan dan memilih yang terbaik.

Perbedaan penting lainnya adalah bahwa kode nyata yang kita tulis ada dan terus didukung untuk waktu yang lama. Ini bukan proses "jangan-lupakan" dan jika hanya tes yang lulus. Penting untuk diingat bahwa kode Anda dapat terus hidup - tidak hanya dieksekusi, tetapi juga diedit - selama bertahun-tahun setelah menulis.

Tentang kontes frontend lainnya


Anda dapat dengan mudah menemukan di situs Internet dengan tugas murni dalam JavaScript. Ini pada dasarnya adalah pemrograman olahraga yang sama, hanya dalam bahasa tertentu. Selain itu, ada format "kode dalam gelap", ketika tata letak diberlakukan tanpa melihat hasilnya, secara membabi buta, Anda hanya melihat kode. Persaingan seperti kita tidak terlalu luas, karena - karena spesifiknya pengembangan antarmuka - sangat sulit untuk mengambil tugas yang baik dan melakukan pemeriksaan otomatis untuk mereka. Yandex secara historis mengembangkan sekolah kuat pengujian otomatis front-end, termasuk menggunakan perbandingan tangkapan layar dari browser nyata. Berdasarkan perkembangan ini, kami berusaha melakukan pemeriksaan tugas dalam kompetisi. Ini juga merupakan eksperimen bagi kami, tetapi kami yakin itu akan berhasil, dan kami sudah bersiap untuk mengembangkan topik lebih lanjut.

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


All Articles