Mengapa tidak ada ikhtisar kode untuk proyek sumber terbuka? [Tutup]

60

Ada proyek open source yang sangat kompleks di luar sana, dan bagi beberapa dari mereka saya pikir saya dapat memberikan kontribusi, dan saya berharap saya bisa, tetapi penghalang untuk masuk terlalu tinggi untuk satu alasan: untuk mengubah satu baris kode pada proyek besar Anda harus memahami semua itu.

Anda tidak perlu membaca semua kode (bahkan jika Anda membaca, itu tidak akan cukup) dan memahami semua setiap baris melakukannya dan mengapa, karena kode mungkin dimodulasi dan dikotak-kotakkan, sehingga ada abstraksi di tempat, tetapi bahkan kemudian Anda perlu mendapatkan gambaran umum proyek sehingga Anda dapat mengetahui di mana modul-modulnya, di mana satu modul saling berhubungan dengan modul lainnya, apa sebenarnya yang dilakukan setiap modul dan mengapa , dan di mana direktori dan file masing-masing hal ini terjadi.

Saya menyebut tinjauan umum kode ini , sebagai nama bagian yang dapat dimiliki proyek open source di situs web atau dokumentasi yang menjelaskan kode mereka kepada orang luar. Saya pikir itu akan menguntungkan kontributor potensial , karena mereka akan dapat mengidentifikasi tempat-tempat di mana mereka dapat membangun, coders utama yang sebenarnya terlibat, karena mereka akan dapat, sambil menulis semuanya, mengatur ulang pikiran mereka, dan akan membantu pengguna , seperti mereka akan menjadi bantuan untuk memahami dan melaporkan bug yang lebih baik yang mereka alami dan bahkan mungkin menjadi kontributor.

Tapi saya masih belum pernah melihat salah satu dari "tinjauan kode" ini. Mengapa? Apakah ada hal-hal seperti ini dan saya kehilangan mereka? Hal-hal yang melakukan pekerjaan yang sama dengan yang saya jelaskan? Atau apakah ini ide yang sama sekali tidak berguna, karena semua orang, kecuali saya, dapat memahami proyek dengan ribuan baris kode dengan mudah?

fiatjaf
sumber
7
Maksud Anda dokumen desain? Saya telah melihat proyek langka dengan deskripsi masing-masing paket tapi itu biasanya sudah API.
ratchet freak
14
Mengapa? Karena ada beberapa proyek yang pengelolanya ingin menginvestasikan upaya untuk menulis dan memelihara dokumentasi berkualitas tinggi, dan seringkali mereka mungkin juga tidak memahami manfaatnya.
Alex D
9
Dokumentasi bisa ketinggalan zaman atau tidak akurat relatif terhadap perilaku aktual. Kode tidak bisa. Jadi sebagian besar proyek lebih suka kode.
Paul Draper
5
Juga mudah untuk meremehkan seberapa banyak Anda dapat belajar tentang suatu proyek jika Anda mengatur timer dapur selama 2 jam atau lebih dan Just Read It (tm).
Kos
43
Selamat datang di dunia yang didorong oleh komunitas: jika itu tidak dilakukan, itu karena Anda belum melakukannya :)
mgarciaisaia

Jawaban:

60

Karena ini merupakan upaya ekstra untuk membuat dan memelihara dokumen seperti itu, dan terlalu banyak orang tidak memahami manfaat yang terkait.

Banyak programmer yang bukan penulis teknis yang baik (walaupun banyak yang); mereka jarang menulis dokumen hanya untuk konsumsi manusia, oleh karena itu mereka tidak memiliki praktik dan tidak suka melakukannya. Menulis tinjauan kode membutuhkan waktu yang tidak dapat Anda habiskan untuk pengkodean, dan manfaat awal untuk sebuah proyek selalu lebih besar jika Anda dapat mengatakan "Kami mendukung ketiga varian penyandian" daripada "Kami memiliki penjelasan yang sangat rapi tentang kode kami!" Gagasan bahwa dokumen semacam itu akan menarik lebih banyak pengembang sehingga dalam jangka panjang lebih banyak kode akan ditulis tidak persis asing bagi mereka, tetapi dianggap sebagai pertaruhan yang tidak pasti; Akankah teks ini benar-benar membuat perbedaan antara menjepit kolaborator atau tidak? Jika saya terus mengkode sekarang , selesaikan hal ini.

Dokumen tinjauan kode juga dapat membuat orang merasa defensif; sulit untuk menggambarkan keputusan tingkat yang lebih tinggi tanpa merasa perlu untuk membenarkannya, dan sangat sering orang membuat keputusan tanpa alasan yang "terdengar cukup baik" ketika sebenarnya ditulis sendiri. Ada juga efek yang terkait dengan yang disebutkan di atas: karena memperbarui teks yang sesuai dengan kode perubahan menyebabkan upaya tambahan, ini dapat mencegah perubahan besar pada kode. Terkadang stabilitas ini adalah hal yang baik, tetapi jika kode benar-benar membutuhkan penulisan ulang tingkat menengah, itu berubah menjadi kewajiban.

Kilian Foth
sumber
6
Yah, sepertinya jawabannya adalah ya: gnunet.org/gnunet-source-overview
fiatjaf
5
Jika Anda ingin itu ada, sukarela untuk menulisnya. Inti dari proyek open source adalah bahwa orang dapat dan harus berkontribusi apa yang mereka bisa, tunduk pada komunitas yang setuju bahwa itu layak untuk diintegrasikan.
keshlam
8
@keshlam - masuk akal jika Anda sudah menjadi kontributor proyek ... tetapi jika Anda adalah kontributor potensial yang mencoba untuk mendapatkan ide dasar tentang bagaimana kode bekerja, Anda adalah orang terburuk yang mungkin menulis dokumen itu ....
Jon Story
13
@JonStory Poin Anda bagus, tetapi dalam praktiknya terkadang saya menemukan yang sebaliknya juga benar. Dalam beberapa proyek saya akhirnya menulis banyak dokumentasi berdasarkan catatan yang saya buat saat mempelajari basis kode tidak berdokumen. Itu dokumentasi yang lebih baik karena saya harus mulai dari API yang bisa saya lihat dan kemudian menggali lebih dalam dan lebih dalam. Pengembang yang telah menulis kode sudah memiliki model kode di kepala mereka, dan begitu banyak asumsi tentang apa yang sudah diketahui seseorang. Dokumentasi oleh seseorang yang baru dalam proyek ini dapat menjadi dokumentasi yang lebih baik bagi seseorang yang baru dalam proyek tersebut.
Joshua Taylor
6
@JonStory: Jika Anda terlibat dalam proyek yang kurang terdokumentasi dengan sempurna, Anda harus mulai memikirkannya. Membuat catatan Anda bagian dari proyek membantu menyelamatkan pekerjaan orang berikutnya. (Saya tidak tahu bahwa ada orang yang akan menggunakan ada atau tidaknya dokumen sebagai faktor penentu apakah akan berkontribusi.) Cukup meningkatkan komentar javadoc (atau yang setara) dapat menjadi cara yang berharga untuk mulai berkontribusi. Serius, itulah prinsip dasar di balik open-source: Jika Anda melihat sesuatu yang perlu dilakukan, lakukan itu daripada menunggu orang lain melakukannya.
keshlam
14

Kebenaran yang kering dan keras?

Dokumentasi tidak dibuat karena proyek dapat dilakukan tanpanya.

Bahkan proyek open source sering menghadapi persaingan yang ketat. Sebagian besar proyek semacam itu tidak dimulai dengan pundak besar, mereka memulai sebuah ide cemerlang, seringkali ide cemerlang satu orang.

Karena itu, mereka tidak mampu membayar waktu dan biaya untuk menyewa pendokumentasi manusia, bahkan jika mereka menawarkan untuk bekerja sama secara gratis. Sebuah proyek yang terdokumentasi, infact, biasanya telah melewati beberapa iterasi awal terlebih dahulu. Ini sering dimulai dengan 1-3, mungkin 5 orang menuliskan ide novel mereka dan menunjukkannya kepada dunia sebagai bukti konsep. Jika gagasan terbukti baik maka "pengikut" dapat menambahkan, mereka cenderung mulai meminta ekstensi, opsi baru, terjemahan ... Pada titik ini kode tersebut masih berupa prototipe, biasanya dengan opsi dan pesan yang dikodekan secara keras.

Tidak semua proyek open source melampaui fase ini, hanya proyek yang mematahkan "massa kritis" yang diperlukan untuk menarik minat publik. Selain itu, salah satu pengembang awal harus "berpikir besar dan jauh" dan merencanakan ekspansi dan sebagainya. Dia mungkin juga menjadi "penginjil" proyek dan kadang-kadang juga "manajer proyek" (kadang-kadang orang yang berbeda). Itu adalah langkah yang diperlukan untuk meningkatkan proyek, dari pembuktian konsep menjadi kenyataan yang ditetapkan industri.

Bahkan kemudian, manajer proyek dapat memilih untuk tidak membuat dokumentasi.

Proyek yang dinamis dan berkembang akan diperlambat dan dokumentasi akan benar-benar tertinggal di belakang kode sementara itu ditingkatkan sangat keras, untuk mengimplementasikan terjemahan, opsi, tancapkan manajer ...

Apa yang biasanya terjadi adalah:

  1. Dokumen pengantar singkat dibuat, tentang apa proyek itu dan ke mana arahnya ("peta jalan" yang terkenal).
  2. Jika memungkinkan, API dikembangkan dan yang dipilih sebagai "kode terdokumentasi" di atas sebagian besar kode yang mendasarinya.
  3. Terutama API tetapi juga kode lainnya diformat ulang dan "PHPdoc" / "Javadoc" dll. Komentar khusus ditambahkan. Mereka menawarkan kompromi yang layak antara waktu yang dihabiskan dan penghargaan: bahkan seorang programmer sederhana biasanya tahu bagaimana menulis satu liner yang menggambarkan fungsinya, parameter mendapatkan "auto" didokumentasikan juga dan keseluruhan terikat dengan kode yang terkait dan dengan demikian mereka menghindari dokumentasi " desyncing "dan pengembangan behing lagging.
  4. Paling sering, sebuah forum dibuat. Ini adalah media sosial yang kuat di mana pengguna dan pemrogram akhir dapat berbicara satu sama lain (dan di antara rekan-rekan mereka, mungkin dalam subforum "devs only"). Hal ini memungkinkan banyak pengetahuan muncul secara perlahan dan dikonsolidasikan oleh komunitas yang dibuat (baca: tidak membebani tim pengembang). FAQ dan HOWTO.
  5. Dalam proyek yang sangat besar, wiki juga diproduksi. Saya menyatakan "proyek-proyek besar" karena mereka sering kali adalah mereka yang memiliki cukup pengikut untuk membuat wiki (dev tidak) dan kemudian benar-benar mengisinya di luar "tulang telanjang" (komunitas melakukannya).
Dario Fumagalli
sumber
2
WOW!! kita hidup (dan bekerja) di dua dunia yang sangat berbeda. Di mana pun Anda saat ini bekerja, keluarlah dari sana dengan cepat & temukan perusahaan (ada banyak) di mana itu dilakukan dengan benar karena itu benar-benar menghemat uang Anda. Jangan pernah biarkan manajer berkepala runcing / pembuat kode koboi mencoba untuk mengatakan sebaliknya.
Mawg
6
+1, saya setuju dengan hampir semua poin Anda, satu-satunya pernyataan yang saya tolak dengan tegas adalah bahwa parameter mendapatkan "otomatis" didokumentasikan . Ketika kita memikirkan penjelasan daripada batasan sintaks / tipe saja, tidak ada yang mendapat "auto-didokumentasikan"; komentar yang dihasilkan dalam gaya Mengembalikan X. untuk metode getX bukanlah dokumentasi yang membantu, itu hanya pengisi tanpa informasi tambahan.
ATAU Mapper
3
@Mawg memberikan dokumentasi yang baik adalah investasi, Anda melepaskan waktu pengembang dengan imbalan (semoga) lebih banyak kontributor di masa depan, dan beberapa manfaat lainnya. Tetapi seperti banyak dari jenisnya, itu hanya bermanfaat jika Anda tahu ada peluang bagus proyek akan berhasil, dan sebagian besar proyek perangkat lunak gagal. Sangat penting untuk menyadari bias survivorship ketika Anda menyesali kurangnya dokumentasi dalam proyek yang sukses.
congusbongus
Apakah tidak mungkin proyek-proyek itu gagal karena tidak didokumentasikan? Dan dengan dokumen, maksud saya rencana, sehingga Anda mengerti, daripada duduk di keyboard & pound pergi. Inilah perkiraan saya untuk siklus hidup proyek, semua angka +/- 5%. Hal-hal di muka (persyaratan & kasus penggunaan, arsitektur, desain terperinci) 50%, pengkodean 10 hingga 15%, pengujian, sisanya. "Jika kamu gagal merencanakan, kamu berencana untuk gagal"
Mawg
6

Dokumen tinjauan umum seperti yang Anda gambarkan jarang ada di proyek komersial. Mereka membutuhkan upaya ekstra dengan sedikit nilai untuk pengembang. Juga pengembang cenderung tidak menulis dokumentasi kecuali mereka benar-benar perlu. Beberapa proyek beruntung memiliki anggota yang pandai menulis teknis, dan sebagai hasilnya memiliki dokumentasi pengguna yang baik. Dokumentasi pengembang jika ada, tidak mungkin diperbarui untuk mencerminkan perubahan kode.

Setiap proyek yang terorganisir dengan baik akan memiliki pohon direktori yang cukup jelas. Beberapa proyek akan mendokumentasikan hierarki ini dan / atau alasan dipilihnya. Banyak proyek mengikuti tata letak kode yang relatif standar, jadi jika Anda memahaminya, Anda akan memahami tata letak proyek lain menggunakan tata letak yang sama.

Untuk mengubah sebaris kode, Anda memerlukan pemahaman terbatas tentang kode di sekitarnya. Anda seharusnya tidak perlu memahami seluruh basis kode untuk melakukannya. Jika Anda memiliki ide yang masuk akal tentang jenis fungsi yang rusak, seringkali dimungkinkan untuk menavigasi hierarki direktori dengan lebih cepat.

Untuk mengubah satu baris kode Anda perlu memahami metode di mana baris tersebut ditemukan. Jika Anda memahami apa perilaku yang diharapkan dari metode ini, Anda harus dapat membuat perubahan korektif, atau ekstensi ke fungsionalitas.

Untuk bahasa yang menyediakan pelingkupan, Anda dapat memperbaiki metode pelingkupan privat. Dalam hal ini Anda mungkin perlu mengubah penelepon serta metode atau metode refactor. Ini membutuhkan pemahaman yang lebih luas, tetapi masih terbatas, tentang basis kode.

Lihat artikel saya Menambahkan SHA-2 ke tinyca untuk contoh bagaimana perubahan tersebut dapat dilakukan. Saya memiliki pemahaman yang sangat terbatas tentang kode yang digunakan untuk menghasilkan antarmuka.

BillThor
sumber
1
Poin penting di sini bukan untuk menyatakan seberapa banyak Anda perlu tahu tentang kode untuk membuat perubahan. Tentu saja ini akan tergantung pada banyak hal, tetapi Anda tidak akan pernah perlu memahami seluruh kode, baik ikhtisar tidak akan memberi Anda pemahaman itu, tetapi bahkan untuk menemukan garis kode yang akan Anda ubah, Anda perlu pengetahuan tertentu tentang struktur proyek umum.
fiatjaf
+1 Tidak ada yang istimewa tentang open source. Dalam pengalaman lebih dari 10 tahun saya bekerja di industri, saya belum pernah melihat dokumen tinjauan umum. Apa yang biasanya terjadi adalah bahwa pengusaha berharap bulan pertama pekerjaan Anda tidak memiliki produktivitas karena Anda mempelajari basis kode. "Gambaran umum" biasanya diterapkan ketika mengajukan pertanyaan kepada rekan kerja Anda
slebetman
5

Apakah ada hal-hal seperti ini dan saya kehilangan mereka? Hal-hal yang melakukan pekerjaan yang sama dengan yang saya jelaskan?

Ada sebuah buku bagus yang disebut Arsitektur Aplikasi Sumber Terbuka yang memberikan deskripsi terperinci tentang berbagai proyek perangkat lunak sumber terbuka profil tinggi. Namun, saya tidak yakin apakah itu persis mengisi peran yang Anda bayangkan, karena saya percaya audiens utamanya dimaksudkan untuk menjadi pengembang yang mencari pola untuk diikuti saat membuat aplikasi mereka sendiri, bukan kontributor baru untuk proyek-proyek yang ditampilkan dalam buku ini. (meskipun saya yakin itu bisa membantu di sana).

bjmc
sumber
ini berbunyi lebih seperti komentar, lihat How to Answer
gnat
4
Saya tidak menganggap komentar Anda konstruktif. Apa, khususnya, yang menurut Anda kurang? Banyak jawaban lain di sini adalah spekulasi panjang tentang kemungkinan alasan mengapa pengembang mungkin tidak menulis dokumentasi tinjauan umum. Saya telah menautkan ke contoh spesifik dari dokumen tinjauan umum yang baik.
bjmc
1
Saya merasa jawaban untuk pertanyaan yang diajukan kurang, "Mengapa tidak ada ikhtisar kode untuk proyek sumber terbuka?"
nyamuk
3
Saya berpendapat itu tidak mungkin untuk merespon secara akurat untuk pertanyaan seperti ditulis ketika, pada kenyataannya, ada yang ikhtisar kode untuk beberapa proyek open-source. Saya telah mengedit jawaban saya untuk menjelaskan bahwa saya merespons secara sempit permintaan contoh yang mungkin terlewatkan oleh pengguna.
bjmc
1
Pertanyaan seperti tertulis bertanya, "Apakah ada hal-hal seperti ini dan saya kehilangan mereka?" Jawaban ini merespons secara definitif, menunjuk pada kumpulan ikhtisar kode yang ada. Karena itu saya pikir itu jawaban (dan tepat) yang bagus untuk pertanyaan itu.
Jim Garrison
4

Karena ada jauh lebih banyak programmer open-source daripada penulis teknis open-source.

Dokumentasi membutuhkan perawatan dan waktu untuk tetap mendapatkan informasi terbaru. Semakin banyak dokumentasi, semakin banyak yang dibutuhkan. Dan dokumentasi yang tidak selaras dengan kode lebih buruk daripada tidak berguna: itu menyesatkan dan menyembunyikan bukannya mengungkapkan.

Basis kode yang terdokumentasi dengan baik lebih baik dari pada yang kurang terdokumentasi, tetapi dokumentasi dapat dengan mudah memakan waktu selama menulis kode. Jadi pertanyaan Anda adalah, apakah lebih baik memiliki basis kode yang terdokumentasi dengan baik, atau basis kode yang dua kali lebih besar? Apakah biaya untuk memperbarui dokumentasi setiap kali kode perubahan sepadan dengan kontribusi pengembang tambahan yang mungkin atau tidak dapat dihasilkannya?

Kode pengiriman menang. Mengurangi jumlah upaya yang dimasukkan ke dalam hal-hal selain kode pengiriman dapat membuat pengiriman kode lebih sering, dan lebih mungkin untuk dikirim sebelum kehabisan sumber daya.

Ini tidak berarti bahwa hal-hal selain masalah pengiriman. Dokumentasi menambah nilai bagi proyek, dan dengan proyek yang cukup besar biaya interkoneksi untuk menambah pengembang lain mungkin jauh lebih tinggi daripada menambahkan seorang pendokumentasi. Dan, seperti disebutkan, dokumentasi dapat meningkatkan investasi dalam proyek (dengan membuatnya lebih mudah bagi programmer baru untuk bergabung).

Namun, tidak ada yang menjual seperti kesuksesan: proyek yang tidak berfungsi atau melakukan sesuatu yang menarik jarang menarik pengembang juga.

Dokumentasi basis kode adalah bentuk meta-work. Anda dapat menghabiskan banyak waktu menulis dokumen mewah yang menggambarkan basis kode yang tidak banyak nilainya, atau Anda dapat menghabiskan waktu membuat barang-barang yang diinginkan konsumen dari basis kode Anda dan membuat basis kode Anda memiliki nilai.

Terkadang membuat keadaan menjadi lebih sulit membuat mereka yang melakukan tugas lebih baik. Entah karena tingkat komitmen yang lebih tinggi terhadap proyek (menghabiskan berjam-jam mempelajari arsitektur), atau karena bias keterampilan (jika Anda sudah ahli dalam teknologi terkait, meningkatkan kecepatan akan lebih cepat, sehingga hambatan kurangnya dokumentasi semacam itu kurang penting: sehingga lebih banyak ahli bergabung dengan tim, dan lebih sedikit pemula).

Akhirnya, untuk alasan yang disebutkan di atas, pengembang saat ini cenderung menjadi ahli dalam basis kode. Menulis dokumentasi semacam itu tidak banyak membantu mereka memahami basis kode, karena mereka sudah memiliki pengetahuan, itu hanya membantu pengembang lain. Banyak pengembangan sumber terbuka didasarkan pada "goresan gatal" yang dimiliki pengembang dengan kode: kurangnya dokumentasi yang sudah mengatakan apa yang jarang diketahui pengembang.

Yakk
sumber
Dokumentasi +1 "dapat dengan mudah memakan waktu selama menulis kode di tempat pertama" - atau lebih lama!
Marco
-1

Selain sebagai upaya ekstra , beberapa proyek open source melumpuhkan dokumentasi mereka dengan sengaja, untuk mendapatkan pekerjaan lepas bagi para pengelola mereka (untuk mengimplementasikan sesuatu, atau untuk mengadakan pelatihan). Tidak hanya mereka tidak memiliki ikhtisar kode, tetapi API dan tutorial mereka buruk atau banyak hal yang hilang.

Hanya satu nama yang cukup populer: bluez. Semoga berhasil menemukan tutorial yang bagus, selain itu untuk memindai perangkat terdekat.

BЈовић
sumber
8
Tidak peduli berapa banyak contoh yang dapat Anda daftarkan untuk proyek sumber terbuka yang didokumentasikan dengan buruk, menurut pendapat saya, klaim bahwa mereka "melumpuhkan dokumentasi mereka dengan sengaja" perlu didukung oleh bukti konklusif (dan bahkan kemudian itu mungkin tidak berlaku sebagai pernyataan umum).
ATAU Mapper
@ORMapper Mari kita mulai dengan "Bluez - misteri linux terhebat" . Sebagai satu-satunya perpustakaan bluetooth untuk linux, saya merasa sulit untuk percaya bahwa itu bukan dokumentasi karena ini merupakan upaya ekstra. Sial, ada doxygen, dan seberapa sulit menulis tutorial sederhana?
BЈовић
@ORMapper Lalu ada kernel linux. Jika Anda kehilangan sesuatu (seperti driver kernel), jika perusahaan Anda tidak memiliki keahlian, Anda dapat mempekerjakan seseorang, atau mencari freelancer atau perusahaan yang akan melakukannya untuk Anda. Jadi, ini adalah open source, tetapi akan datang dengan harga
Bћовић
@ORMapper Kemudian ada proyek open source, dengan dokumentasi dalam format kertas. Jadi Anda membeli buku, dan tidak ada dokumentasi lain yang diberikan. Apakah dokumentasi ini melumpuhkan, atau tidak?
BЈовић
2
Untuk apa nilainya, saya telah melihat cukup banyak keuntungan dari dokumentasi yang buruk untuk setidaknya bertanya-tanya apakah itu disengaja. Ketika kelompok yang sama yang menempatkan dokumentasi setengah-setengah online lebih dari senang untuk menjual Anda sebuah buku atau kelas pelatihan, tidak perlu banyak sinisme sama sekali untuk mencapai kesimpulan itu.
cHao