Membuat Kontribusi Open Source Pertamamu, Bagian 3: Menavigasi Basis Kode Baru

Bagaimana kamu bisa mulai berkontribusi ke open source? Artikel ini akan membahas tentang langkah-langkah yang dapat kamu lakukan untuk memberikan kontribusi pertamamu, mulai dari mencari proyek untuk dikerjakan hingga program mentoring yang dapat membantu. Ini adalah bagian ketiga dari seri 'Membuat Kontribusi Open Source Pertamamu'.

Artikel ini adalah bagian dari seri 3 bagian berjudul “Membuat Kontribusi Open Source Pertamamu”:


Kamu sudah menyiapkan development environment, dan semuanya bekerja dengan sangat baik. Saatnya menyelami basis kodenya… kecuali …

Kamu tersesat.

Bagian ini sebagian besar adalah tentang menavigasi basis kode baru, terutama basis kode besar, jadi saran di bawah ini mungkin berlaku untuk basis kode besar & bukan hanya proyek open source. Saat kamu ingin berkontribusi pada proyek open source, mungkin perlu beberapa saat untuk menemukan proyek yang sesuai untuk kamu, dan sebagai konsekuensinya, kamu akan lebih sering bertemu basis kode baru.

Menavigasi basis kode baru yang besar bisa sangat menantang bagi seseorang yang:

a) sehari-hari nggak punya akses ke basis kode besar

b) sebagian besar bekerja dalam basis kode yang dimulai sendiri atau berukuran kecil

Sekilas, artikel ini mungkin hanya relevan dengan kontribusi yang melibatkan penulisan kode, tetapi aku secara pribadi menggunakan tip ini saat berkontribusi pada dokumentasi juga. Terkadang dokumentasi sebuah proyek (misalnya untuk library pandas) digabungkan dengan kode, sehingga kadang mustahil kamu nggak akan menyentuh basis kode proyeknya sama sekali. Selain itu, saat menulis dokumentasi untuk sepotong kode, kamu masih perlu memahami apa yang dilakukan kode & terkadang bagaimana kode itu berinteraksi dengan fungsi lain dalam proyek.

Gunakan proyeknya

Kamu mungkin menemukan proyek yang belum pernah kamu gunakan sebelumnya, tetapi kamu ingin berkontribusi, & nggak apa-apa! Faktanya, meskipun aku menggunakan library pandas setiap hari, aku nggak menggunakan semua fungsi, jadi aku menemukan diri aku mengerjakan sesuatu yang belum pernah aku gunakan sebelumnya.

Tip pertamaku adalah: gunakan proyeknya. Jika ini adalah library baru untukmu, ikuti tutorialnya atau panduan Getting Started-nya, & bermain-main sampai kamu cukup nyaman dengan proyeknya.

Jika ini adalah fungsi baru untukmu, lihat dokumentasinya, jalankan contoh atau gunakan dalam toy problem sehingga kamu bisa mendapatkan intuisi yang lebih baik tentang isu yang kamu coba selesaikan.

Meskipun itu adalah fungsi yang pernah kamu gunakan sebelumnya, kamu mungkin perlu memodifikasi bagian yang nggak kamu kenal, misalnya parameter yang belum pernah kamu gunakan sebelumnya. Jadi mungkin kamu juga bisa melakukan hal-hal yang disebutkan di atas.

Jelajahi tes-tesnya

Terkadang dokumentasi dari sebuah proyek kurang menjelaskan apa sih expected behavior dari suatu fungsi tersebut. Terkadang bahkan nggak ada dokumentasi sama sekali. Jika itu isunya, biasanya yang akan aku lakukan selanjutnya adalah menjelajahi tes-tesnya, terutama unit tests, jika ada. Unit tests sangat bagus untuk dipelajari karena dapat menunjukkan cara memanggil sebuah fungsi dengan benar, atau expected behavior dari sebuah kode.

Tes biasanya dapat ditemukan di foldernya sendiri, seperti /test.

Berikut adalah contoh dari pandas. Misalkan kamu ingin mengetahui cara menggunakan fungsi rename_categories untukCategoricalIndex & apa yang akan terjadi saat kamu menggunakannya.

Test for the rename_categories function.

Tes tersebut dapat menunjukkan bahwa apabila aku mempunyai CategoricalIndex:

CategoricalIndex(list("aabbca"), categories=list("cab"))

Dan aku aplikasikan fungsi rename_categories:

result = ci.rename_categories(list("efg")))

Aku akan mendapatkan:

CategoricalIndex(list("ffggef"), categories=list("efg"))

Temukan kata kunci dalam isu & gunakan kata kunci tersebut untuk menemukan bagian yang relevan di basis kode

Aku biasanya mengekstrak kata kunci penting dalam isu ini, mengetiknya di kotak pencarian editor kodeku (aku menggunakan VS Code) & melihat potongan kode lain apa yang muncul & di mana.

Misalnya, aku mengerjakan isu di mana aku harus memperbarui parameter indeks di to_parquet pandas. Hal pertama yang aku lakukan adalah mencari to_parquet di editor kode aku untuk melihat di mana fungsinya:

Menelusuri to_parquet di basis kode pandas.

Ada banyak hasil pencarian termasuk potongan kode lain yang memanggil fungsi to_parquet, bukan fungsi to_parquet itu sendiri. Untuk isu ini, aku nggak tertarik dengan bagian lain dari basis kode ini, jadi aku harus mempersempit pencarianku.

Aku mencari def to_parquet () sebagai gantinya. Dalam Python, kata kunci def adalah awal dari sebuah header fungsi, jadi aku bisa yakin bahwa aku akan mendapatkan lokasi dari fungsi to_parquet itu sendiri. Tentu saja bahasa pemrograman lain akan berbeda. Kuncinya di sini adalah terkadang kamu perlu memikirkan beberapa trik yang dapat membantu kamu mendapatkan hasil pencarian yang lebih baik.

Dalam kasus ini, ada dua fungsi `to_parquet` yang harus aku perbarui.

Telusuri isu & PR serupa

Orang lain mungkin telah membuat PR yang memecahkan isu yang mirip dengan yang kamu selesaikan saat ini. Kamu dapat menggunakan kata kunci dari isu tersebut untuk mencari isu & PR serupa lainnya. Beberapa hal yang dapat kamu pelajari dari membaca isu & PR lainnya:

  • Kode & file yang mungkin relevan: jika langkah sebelumnya nggak berhasil untuk kamu, ini dapat membantu. Di GitHub, kamu dapat menemukannya dengan memeriksa tab “File Changes” di PR. Berikut adalah contohnya.
  • Petunjuk tentang apa yang harus dilakukan: meskipun PR yang aku lihat nggak menyelesaikan isu yang persis sama, terkadang mereka memberikan petunjuk tentang apa yang dapat aku lakukan untuk menyelesaikan isuku, misalnya oh ternyata ada fungsi pembantu yang dapat menyederhanakan solusi aku.
  • Umpan balik dari pengelola: seringkali, pengelola meminta perubahan sebelum mereka menyetujui PR kamu. Ini biasanya terekam dengan baik di discussion thread pada pull request tersebut, & selalu ada satu atau dua hal yang dapat aku pelajari dari mereka.
  • Bugs: PR dapat memperkenalkan bug baru, yang sering ditemukan setelah PR disetujui & digabungkan. Mempelajari tentang bug ini membantu aku menyadari jenis bug yang mungkin aku perkenalkan dengan PR-ku.

Bergabunglah dengan platform komunikasi proyek & cari diskusi terkait

Sebagian besar proyek memiliki platform tempat mereka berdiskusi mengenai pengembangan proyek yang terbuka untuk umum, baik itu Slack, Gitter, milis, atau saluran lainnya. Ini biasanya tercantum di README atau di panduan kontribusi mereka. Kamu dapat mencari diskusi terkait karena mungkin saja orang lain telah mengajukan pertanyaan serupa.

Meminta bantuan

Kamu mungkin telah melakukan semua hal di atas & masih mengalami kesulitan. Nggak apa-apa! Jangan takut untuk meminta petunjuk - kamu dapat melakukannya dengan mengajukan pertanyaan di isu yang relevan atau mengajukan pertanyaan di kanal-kanal komunikasi yang telah kusebutkan sebelumnya. Kamu mungkin menganggap ini menakutkan pada awalnya, tetapi jika proyek yang kamu kerjakan memiliki Kode Etik, itu dapat menjadi pengingat bahwa perilaku yang nggak pantas, nggak akan ditoleransi.

Dari menjelajahi berbagai repositori & bergabung ke platform komunikasi, aku juga mengetahui bahwa orang-orang selalu mengajukan pertanyaan & hal itu tuh nggak apa-apa! Selama ini aku memiliki asumsi ini bahwa semua orang (kecuali aku) tahu segalanya, & ini juga yang membuatku pada menganggap open source itu mengintimidasi banget. Melihat bagaimana orang mengajukan pertanyaan & bagaimana pengelola menanggapi secara positif benar-benar membantu menghancurkan asumsiku yang nggak realistis itu.

Menyelami basis kode baru bukanlah hal yang sepele, jadi jika kamu merasa kesulitan membuat kemajuan, itu benar-benar normal. Bahkan programmer paling berpengalaman pun masih perlu waktu untuk memahami basis kode baru.

Catatan akhir

Satu hal terakhir yang ingin aku tekankan: kontribusi pertamamu nggak harus sempurna.

Kontribusi pertama kamu — atau yang setelahnya bahkan — nggak harus berupa PR yang menyediakan fitur utama dengan perubahan ribuan baris kode. PR pertama kamu nggak harus bebas dari kesalahan — terkadang kamu mengacaukan repositori kamu sampai-sampai satu-satunya solusi yang dapat kamu pikirkan adalah menghapus repositori & mengulangi pekerjaan kamu (ini kita semua pasti pernah ngalamin nggak sih, haha). Nggak apa-apa jika kamu lupa menulis pesan commit kamu dengan prefiks yang benar sesuai konvensi. Nyatanya, kamu mungkin menemukan bahwa hal-hal ini masih terjadi pada kontribusi kamu yang kedua, ketiga, keempat… keseratus. Kamu akan menemukan bahwa ini bukanlah akhir dari dunia. Kamu akan belajar, dan kamu akan tetap terus berkontribusi.

Hal terpenting adalah memulai, & kuharap rangkaian 3 bagian ini membantumu melakukan hal itu. :)

February 03, 2020

Open Source