Lokakarya kontribusi Go di Rusia


Sudah lama merencanakan untuk mengirim tambalan ke Go, tetapi terus-menerus ditunda? Menghadapi kesulitan, tidak tahu harus mulai dari mana? Dalam artikel ini saya akan menjelaskan bagaimana kami melakukan lokakarya kontribusi Go di Kazan, tentang hasilnya, serta tentang pelajaran yang dipetik oleh penyelenggara.


Spoiler: direncanakan untuk mengulangi acara ini ketika Go masuk ke fase pengembangan aktif (keluar dari status pembekuan kode). Lihat detail di bawah potongan.


Apa itu lokakarya kontribusi Go?


Dari waktu ke waktu, pertemuan programmer Go dengan ukuran berbeda terjadi di seluruh dunia, yang tujuannya adalah untuk mempelajari bagian dalam Go dan mengirimkan perubahan mereka ke sana. Semuanya dimulai dengan GopherCon .


Seseorang datang untuk membantu orang lain mencari tahu alur kerja, mengambil masalah dan menyelesaikannya, kemudian pergi melalui ulasan dan, idealnya, sampai ke titik di mana tambalan disuntikkan ke hulu . Yang lain datang sebagai "Kontributor Pertama Kali".


Jika Anda tertarik pada salah satu dari yang berikut ini, Anda mungkin tertarik untuk berpartisipasi:


  • Benamkan diri Anda dalam detail level rendah dari Go toolchain (kompiler, tautan, assembler, ...)
  • Mempercepat beberapa fungsi dari pustaka atau runtime standar
  • Tambahkan contoh atau tes yang hilang untuk salah satu paket.
  • Refactor beberapa kode yang sangat menakutkan
  • Tingkatkan dukungan untuk arsitektur atau OS yang lebih jarang (Anda memiliki perangkat keras dan / atau OS)
  • Mengobrol dengan orang-orang yang telah berkontribusi untuk Go sejak lama

Daftarnya tidak lengkap, semua orang dapat menemukan sesuatu di sini.


Lokakarya di Rusia


Pada titik tertentu, saya memutuskan bahwa saya ingin ikut serta dalam menyelenggarakan acara semacam itu. Yang paling penting saya ingin berada dalam lingkaran orang-orang dengan minat yang sama.


Program awal sekitar 6-10 jam (kisaran kasus terbaik dan terburuk). Hackathon tampak format yang paling cocok, tetapi tidak mungkin untuk menemukan sponsor pada waktu itu. Tetapi ada kesempatan untuk melakukan kelas opsional untuk Platform Ilmiah dan Praktis IWMI & KFU , seminggu sekali selama satu setengah jam. Kelemahan yang jelas: karena jeda yang besar antara partisipasi, Anda harus meluangkan waktu ekstra. Dan tidak ada pizza. Huh


Secara tak terduga, saya ternyata menjadi tamu di podcast GolangShow (ep. 119) , di mana saya membiarkan tergelincir tentang gagasan melakukan sesuatu yang serupa untuk siswa. Beberapa saat kemudian, Elena Grakhovats menciptakan saluran #kfu-go-2018 di komunitas Go yang berbahasa Rusia . Tidak hanya siswa KFU dapat berkomunikasi di sana, tetapi juga semua orang yang tertarik untuk berpartisipasi dari jarak jauh.


Setelah itu, detail pertemuan disetujui di universitas, tanggal-tanggal tertentu diketahui. Alih-alih hackathon, mereka mendapat "Kursus bahasa pemrograman Go". Ini tidak banyak mengubah konten, tujuannya tetap sama dan itu jelas dijelaskan dalam pengumuman .


Ini diikuti oleh pemindaian pelacak untuk mencari tugas yang dapat dilakukan dalam kerangka acara setidaknya sebagian (bahkan lebih baik - sepenuhnya).


Pelajaran No. 1

Bahkan, ternyata daftar tugas itu termasuk yang menarik atau yang saya pahami secara pribadi. Ini juga diakui selama kompilasi daftar, tetapi sulit untuk mempengaruhinya.


Mungkin akan lebih baik jika daftar ini terdiri dari beberapa orang dengan profil dan minat yang berbeda.


Setiap peserta dapat pergi ke pelacak Go dan memilih apa pun, tetapi untuk tugas-tugas dari daftar, penjelasan sudah siap, dan bagi sebagian dari mereka solusi parsial.


Sebagian besar konten yang dihasilkan selama kursus tersedia di repositori kfu-go-2018 . Anda juga dapat menemukan task.org di sana .


Pertemuan pertama


Siswa datang yang belum pernah menulis di Go. Sebagian besar dari mereka bahkan belum pernah mendengar bahasa pemrograman seperti itu.


Kami menghabiskan setengah pelajaran pertama tentang membangun Go from source. Pada komputer yang berbeda ada yang berbeda, termasuk masalah yang tidak terduga. OS yang berbeda, versi kompiler sistem (seseorang tidak berniat untuk Go 1.4), dan sebagainya. ./make.bash ( make.bat untuk Windows) tidak berfungsi dengan kesalahan yang berbeda.


Ketika mayoritas memang memiliki Go yang berfungsi, Hello World pertama kami adalah untuk go tool compile pesan kanonik dalam go tool compile ketika sebuah bendera baru diberikan.


90 menit berlalu: kami berbicara tentang Go, membandingkannya dengan C ++, menyusun toolchain, membongkar proses bootstrap, dan menyusun kompiler yang diperbarui.

Pelajaran No. 2

Secara terpisah, perlu disebutkan bahwa Delus Farkhulin membantu saya. Secara empiris terungkap bahwa lebih dari empat orang untuk memimpin sendirian sangat sulit. Situasi menjadi rumit ketika tidak ada peserta, kecuali mentor, yang tahu Go. Anda harus melakukan banyak langkah tambahan. Namun, jika ada empat dari kami, itu akan jauh lebih mudah (ada 15 siswa).


Tambalan pertama dalam proyek Go


Untuk pelajaran kedua, tujuannya adalah langsung berkontribusi:


  • Kami sepakat dengan Daniel MartΓ­ bahwa itu akan tersedia pada waktu yang disepakati dan akan dapat melakukan peninjauan (cantumkan +2 jika tambalan itu sepele dan benar).
  • Ilya Tokar menyarankan repositori awal di mana lebih mudah untuk mengirim CL pertama (daftar perubahan). Memungkinkan Anda mencoba gerrit dalam pekerjaan tanpa risiko merusak sesuatu.
  • Stiker yang disiapkan untuk pengiriman ke mereka yang berhasil menyuntikkan tambalan ke Go.

Kami beruntung: repositori awal rusak. Seseorang mengirim kode yang salah ke repositori dan karena itu, trybots (tes CI) selalu gagal. Salah satu tugas yang saya siapkan adalah untuk memperbaiki apa yang menyebabkan kesalahan build.


Pada akhir pelajaran 6 tambalan dikirim:
CL105415 , CL105395 , CL105356 , CL105416 , CL105355 , CL105375 .


Semua orang punya stikernya.



180 menit berlalu: mereka membongkar proses pengembangan Go, mengeluarkan Google CLA untuk semua orang, mengatur gerrit, mengirim tambalan "hello world", memperbaiki perakitan repositori awal, dan salah satu peserta berhasil mengirim tambalan ke golang / go (penggabungan dilakukan pada hari yang sama).

Pelajaran No. 3

Untuk stiker yang baik "tepat waktu" Anda harus menghubungi pemasok tepercaya. Menyimpan di titik terdekat di mana stiker dapat dicetak tanpa memotong bukanlah ide yang baik. Dan Anda tidak dapat menggabungkan logo gopher dengan hal lain: seorang gopher dengan tanda tangan Intel melanggar semua hukum stiker yang mungkin.


Kelas yang tersisa diadakan sesuai dengan skema yang lebih longgar. Kami datang dan mengerjakan tugas-tugas kami, bertukar pengalaman dan saling membantu. Hampir setiap pertemuan semacam itu mengirimkan beberapa tambalan.


Kemudian datang pembekuan kode dan kursus berakhir logis. Pada titik ini, 17 tambalan dituangkan. Kami masih berkumpul di hari Sabtu dan mengerjakan berbagai utilitas Go ...



Kesulitan "langkah kedua"


Cara termudah adalah mengambil langkah pertama. Bagi mereka yang tidak yakin bekerja dengan git, repositori awal adalah solusi yang bagus.


Tidak terlalu sulit untuk menemukan tugas dengan volume minimal dan tidak memerlukan konteks besar. Berbagai linter membantu di sini. Jalankan " gometalinter --enable-all " pada paket dari GOROOT dan pilih yang akan diperbaiki.


Itu lebih sulit dengan tugas satu tingkat lebih tinggi. Sulit bagi saya untuk menyarankan hal itu, tetapi sulit bagi mereka untuk memilih ini. Pada saat yang sama, ada pemahaman bahwa kami telah melampaui koreksi peringatan serasah (yaitu, tantangan menghilang, untuk pelatihan yang produktif perlu mencari jenis tugas baru).


Secara teori, tugas tingkat kedua yang baik adalah meningkatkan tes di Go: meningkatkan cakupan, menambah atau memperbaiki tolok ukur, memperbaiki tes yang tidak benar atau dinonaktifkan, memeriksa tes regresi, dan banyak lagi. Ini membutuhkan beberapa perendaman dalam paket pengujian, tetapi ruang lingkup perubahan akan minimal dan cukup mudah untuk memeriksa hasilnya. Tetapi tidak semua orang suka bekerja dengan tes.


Contoh dari apa yang berhasil mereka ambil sebagai tugas tingkat 2:


  1. encoding / json: tambahkan path lengkap ke bidang di UnmarshalTypeError ( #22369 )
  2. waktu: optimalkan waktu. Waktu. Subub dan waktu. Sejak ( #17858 )
  3. cmd / kompilasi: hindari instruksi LEA versi lambat di x86 ( #21735 )

Kami memulai mereka lebih dekat ke pembekuan kode, jadi kami tidak punya waktu untuk menyelesaikannya: ada 2 Sabtu selama 90 menit, tetapi ini tidak cukup. Selain itu, semua orang mengerjakan tugas mereka. Mungkin akan lebih mudah jika setidaknya dua orang dipecah menjadi beberapa tim, misalnya, dalam kasus edisi21735 , Anda dapat memeriksa berbagai hipotesis secara paralel dan mempelajari bagian-bagian berbeda dari penyusun secara paralel, kemudian berbagi pengetahuan.


Pelajaran No. 4

Yang paling penting, perlu memperhatikan bagian khusus ini, pendalaman yang tak terhindarkan dan masalah yang mengikuti ini. Saya ragu bahwa ada orang yang tahu semua bagian dari Go sehingga dapat mendukung dengan pilihan apa pun, jadi di sini sekali lagi semuanya disebabkan oleh kurangnya ahli yang berbeda.


Workshop v2


Beberapa masalah yang dijelaskan di atas akan diselesaikan dengan format alternatif, ketika tugas yang lebih kompleks tidak memerlukan solusinya dalam waktu tiga minggu. Lokakarya berikutnya harus diadakan dalam bentuk acara yang berkelanjutan, setidaknya selama 4-5 jam, dan idealnya dengan istirahat dan lebih lama.


Biasanya, format hackathon juga menyiratkan beberapa persiapan peserta sebelum mulai, yaitu pilihan tugas dan deskripsi awal tentang cara untuk menyelesaikannya, pembentukan tim. Ini juga dapat membantu meningkatkan jumlah kontribusi yang berhasil.


Kami membutuhkan lebih banyak mentor yang dapat membantu peserta memilih dan menyelesaikan masalah secara real time.


Pilihan kota tergantung pada jumlah peserta dan distribusi geografisnya. Empat opsi yang paling dekat dengan saya: Moskow, Innopolis, Kazan, Nizhny Novgorod.


Kesimpulannya


Tidak perlu datang ke hackathon semacam itu untuk mulai berkontribusi pada Go, contoh yang memotivasi adalah artikel Marco Bagaimana kontribusi baru bagi Go . Namun, di perusahaan orang-orang yang sama tertarik, lebih mudah untuk mengatasi ketidaknyamanan dan kebingungan awal, untuk pergi dari awal hingga akhir.


Jika Anda tidak acuh pada topik ini, tetap disini , lihat golang-ru.slack . Periode selanjutnya dari pengembangan aktif Go dimulai pada Agustus 2018 : tidak terlalu jauh untuk melupakannya, dan tidak terlalu dekat untuk tidak punya waktu untuk mempersiapkan diri dengan baik.


Materi Bonus untuk Kontributor Pemula



Acara Mendatang


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


All Articles