Contoh adalah dokumentasi terbaik
(rakhim.exotext.com)- Saat developer mencari dokumentasi, 95% kasus cukup diselesaikan dengan contoh sederhana saja, tetapi kasus ketika contoh bisa ditemukan di sumber resmi hanya sekitar 5%
- Dokumentasi teknis resmi pada dasarnya ditulis untuk orang yang sudah sangat mendalami ekosistem terkait, sehingga bagi developer yang berpindah-pindah antarproyek dan bahasa, dibutuhkan energi mental yang besar untuk memulihkan konteks
- Jika melihat dokumentasi fungsi
max()di Python, ada banyak pengetahuan prasyarat yang diperlukan untuk memahami sintaks definisi fungsi dan konsep-konsepnya, padahal dengan 5 baris contoh sederhana, fungsi itu bisa langsung dipahami - clojuredocs.org milik komunitas Clojure menyediakan dokumentasi praktis melalui contoh yang dikontribusikan pengguna, dan menjadi praktik terbaik yang meningkatkan kegunaan nyata dengan menyertakan fungsi-fungsi terkait
- Bahkan proyek perangkat lunak besar pun jarang menyediakan 4 jenis dokumentasi, sehingga developer akhirnya mencari tutorial, bukan karena butuh panduan, melainkan karena mereka membutuhkan contoh
Pentingnya contoh saat mencari dokumentasi
- Saat developer mencari dokumentasi, dalam 95% kasus satu contoh saja sudah cukup
- Namun, kasus ketika contoh bisa ditemukan di sumber resmi hanya sekitar 5%
- Sebagian besar dokumentasi teknis resmi ditulis terutama untuk orang yang sudah sangat mendalami ekosistemnya
- Banyak developer sehari-hari harus men-juggling beberapa "dunia" di dalam kepala mereka
- Perpindahan antarproyek, bahasa, dan framework terjadi sangat sering
- Mengembalikan konteks dan memahami situasi menghabiskan energi mental yang besar
Analisis kasus dokumentasi Python
- Contoh fungsi
max()di dokumentasi Python 3max(iterable, /, *, key=None): mengembalikan item terbesar- Setelah itu penjelasan berlanjut dalam 5 paragraf pendek
- Pengetahuan Python yang harus diketahui untuk memahami dokumentasi ini
- Arti
*dalam definisi fungsi - Arti
/dalam definisi fungsi - Konsep "positional-only parameter separator"
- Konsep iterable
- Konsep keyword-only arguments
- Makna umum parameter
key
- Arti
- Kita harus membaca teksnya untuk memahami nilai seperti apa yang harus diberikan dan bagaimana benar-benar memanggil fungsi tersebut
Efek dari contoh sederhana
- Diakui bahwa detail penting tidak selalu bisa dihilangkan demi keringkasan
- Namun, banyak developer datang ke halaman tersebut hanya untuk cepat menemukan cara memberikan fungsi pengurutan kustom (
key) ke fungsi max - Jika ada contoh seperti di bawah ini, mereka bisa langsung mendapatkan informasi yang dicari
max(4, 6) # → 6 max([1, 2, 3]) # → 3 max(['x', 'y', 'abc'], key=len) # → 'abc' max([]) # ValueError: max() arg is an empty sequence max([], default=5) # → 5 - Melalui contoh, hal itu bisa dipahami dengan mudah dan intuitif
Praktik terbaik dari komunitas Clojure
- clojuredocs.org adalah proyek berbasis komunitas Clojure
- Pengguna berkontribusi contoh untuk fungsi-fungsi bawaan
- Menjadi sumber daya yang tak tergantikan dalam kegiatan coding sehari-hari
- Contoh halaman: lihat into, spit, map
- Ciri-ciri contohnya
- Tidak hanya fungsi tersebut, tetapi juga fungsi-fungsi terkait ikut disertakan
- Meningkatkan kegunaan nyata dan kepraktisan
Keterbatasan dokumentasi saat ini
- Bahkan proyek perangkat lunak besar pun jarang menyediakan 4 jenis dokumentasi
- Referensi: Sistem dokumentasi Divio
- Alasan orang ragu mengklik tautan "Documentation"
- Kebanyakan berupa referensi API yang dihasilkan otomatis, ringkas, dan sulit dibaca
- Alasan sebenarnya developer mencari tutorial
- Bukan karena mereka butuh panduan, tetapi karena mereka membutuhkan contoh
- Tutorial lebih berguna karena memang menyertakan contoh
8 komentar
Sejujurnya, saya rasa ini terutama berlaku untuk Java dan Python. Ekosistemnya juga cenderung kuat dengan chauvinisme bahasa masing-masing atau budaya yang terisolasi secara paradigma.
Kalau memakai Python sebagai acuan, isinya memang cukup pas, tetapi ketika mempelajari berbagai bahasa, bagian 5% itu terasa cukup berlebihan.
Contoh adalah dokumentasi terbaik
Datanglah ke Golang, tempat kode adalah dokumentasi~
Kami mengembangkan dengan membedah kode uji bahkan tanpa README
Saya kira cuma saya yang kurang pintar sampai tidak bisa paham dokumentasi resmi wkwk
Kalau benar-benar dikasih contoh lalu dijelasin sedikit saja, langsung cepat paham.....
PHP mungkin akan menjadi contoh yang bagus sekaligus contoh yang terburuk.
Di satu sisi, ini menjadi contoh yang baik karena di dokumentasi resmi pengguna bisa mengunggah konten kontribusi sehingga kita bisa melihat berbagai contoh kode.
...di sisi lain, PHP punya banyak perbedaan BC yang subtil pada fungsi-fungsi bawaannya, dan contoh-contoh kontribusi itu kebanyakan berasal dari versi zaman baheula, jadi tercampur dengan hal-hal yang sedikit berbeda dari perilaku sebenarnya dan malah menambah kebingungan... wkwk..k...
Kalau melihat dokumentasi pengembangan iOS atau Cocoa zaman dulu, ada bagian use case tersendiri; bukankah itu metode dokumentasi yang tepat? Contoh, signature fungsi, dan penjelasan perilaku semuanya diperlukan
Dulu kekurangan dokumentasi resmi tertutupi oleh Stack Overflow dan pencarian Google, sedangkan sekarang rasanya kekosongan itu diisi oleh LLM.
Komentar Hacker News
Hal terbaik dari Python lama adalah saat membuka dokumentasi library, ada bagian yang merangkum argumen fungsi dan nilai kembaliannya dengan jelas. Belakangan ini, banyak dokumentasi library JavaScript atau Python yang hanya menyediakan contoh, dan itu cukup disayangkan. Untuk membuat sesuatu dengan cepat, contoh memang bagus, tetapi untuk memperbaiki masalah atau mempelajari library, penjelasan nilai argumen itu sangat penting. Tidak masalah kalau contoh menjadi bonus, tetapi itu tidak boleh jadi satu-satunya isi dokumentasi
Sebenarnya yang Anda inginkan adalah definisi tipe. Definisi tipe berfungsi sebagai dokumentasi yang baik. Alat sistem tipe sudah menampilkan banyak informasi langsung di editor atau IDE, jadi kebutuhan untuk membuka dan membaca dokumentasi secara manual jadi berkurang. Meningkatnya dokumentasi yang berpusat pada contoh akhir-akhir ini terjadi karena perubahan alur kerja tersebut. Ada anggapan bahwa tidak perlu lagi menulis ulang di dokumentasi hal-hal yang sudah diberikan oleh alat tipe. Saat melihat dokumentasi, saya lebih tertarik pada “masalah apa yang bisa diselesaikan alat ini” daripada detail argumennya. Contoh sangat unggul dalam menunjukkan kemungkinan itu. Saat ingin menyelesaikan masalah tertentu, melihat contoh memungkinkan kita cepat menilai apakah alat tersebut akan membantu. --- Jika ada sistem tipe, saya ingin melihat contoh terlebih dahulu. Jika tidak ada sistem tipe, 1) saya tidak puas. 2) saya tetap ingin melihat contoh dulu, lalu penjelasan detail tentang argumen/pengembalian/struktur data
Dokumentasi yang baik membutuhkan keduanya. Jelaskan dulu detailnya, lalu tambahkan berbagai contoh agar pembaca bisa memeriksa pemahamannya. Kadang contoh saja cukup, tetapi jika kombinasi opsinya terlalu banyak, hampir mustahil menampilkan semuanya lewat contoh. Karena itu, penjelasan untuk tiap opsi perlu diberikan lebih dulu, lalu siapkan contoh untuk sebanyak mungkin kasus agar pembaca bisa mengembangkannya sendiri. Dan dokumentasi yang baik sangat sulit dibuat, serta akhir-akhir ini benar-benar jarang terlihat
Saya tidak sepenuhnya setuju. Dokumentasi bergaya Javadoc adalah dokumentasi pemrograman yang berbasis tipe dan docstring inline. Itu memang wajib ada, tetapi tidak harus dibuka lewat web; melihat langsung kodenya lebih efisien. Panduan seperti contoh atau QuickStart juga wajib ada. Itu menurunkan hambatan masuk ke library. Hanya dengan melihat kode, cara memakai API tidak mudah dipahami. Dulu banyak library Java yang hanya menyediakan Javadoc, dan saya pernah kesulitan karena tidak tahu cara memakainya
Menurut saya, contoh yang diberi komentar dengan baik adalah yang terbaik. Namun itu tidak bisa menggantikan dokumentasi tradisional
Saya penasaran apakah Anda pernah mempertimbangkan bahwa gaya belajar orang lain bisa berbeda dari Anda. Saya tidak paham kenapa ada resistensi terhadap gagasan bahwa contoh harus menjadi bagian dari dokumentasi. Contoh mengurangi gesekan saat berpindah konteks dalam berbagai situasi
Halaman
manUnix juga sangat membutuhkan contoh. Biasanya halaman itu hanya berfungsi sebagai referensi untuk orang yang sudah sangat paham alatnya, jadi sama sekali tidak membantu pemula. Dokumentasi yang baik membutuhkan keduanyaSangat setuju. Saya ingin mengingatkan semua penulis halaman
manbahwa ada bagian konvensional bernama EXAMPLE. Lihat dokumen resmi man(1)Saya pribadi belum pernah merasakan masalah seperti itu. Saya biasanya mulai dengan membuat kodenya sambil mempelajari perintah atau istilah, lalu melihat satu per satu kode error yang dikembalikan beserta penyebabnya, juga arti parameternya. Tanpa contoh pun, dokumentasi yang lengkap sudah cukup. Sebaliknya, hanya memberi contoh tanpa penjelasan itu benar-benar yang paling buruk. Dokumentasi macam apa yang bahkan tidak menjelaskan apa parameternya dan apa artinya?
Menarik bahwa Stack Overflow dulu juga pernah mencoba hal serupa. Mereka mengoperasikan Stack Overflow Documentation dalam versi beta dari 2016 hingga 2017. Tujuannya membuat dokumentasi yang berpusat pada contoh, tetapi akhirnya dihentikan. Meski begitu, konten yang ditinggalkan komunitas masih tersedia secara publik dengan lisensi CC BY-SA
Coba lihat cheat.sh. Saya memakainya langsung dari skrip dengan
curl cheat.sh/"$1"Saya selalu terkejut mengetahui bahwa ternyata cukup banyak halaman
manyang memang punya contoh. Meski begitu, masih ada banyak ruang untuk perbaikan yang lebih menyeluruhContoh bukan hanya bagus untuk pemula atau pengguna sesekali. Pengguna mahir juga membutuhkan dokumentasi formal, yaitu dokumentasi yang mencakup semua konfigurasi parameter. Misalnya, dokumentasi
requestsselalu membuat Google mengarahkan saya ke halaman penuh contoh seperti Quickstart, dan itu menyulitkan. Semua orang tahu HTTP GET, tetapi sulit mencari opsi lain, bagaimana menangani timeout, atau apakahraise_for_statusmengabaikan 204. Keduanya memang diperlukan, tetapi jika waktu developer terbatas, saya akan memilih menyediakan dokumentasi yang benar terlebih dahulu. tautan contoh requests QuickstartDengan melihat contoh, perilaku jauh lebih mudah dipahami dibanding dokumentasi bergaya referensi. Orang-orang lemah dalam segala hal mulai dari memberi nama, menyusun konsep, sampai menulis dokumentasi. Baru-baru ini saya juga menghabiskan beberapa jam karena satu parameter hanya bekerja dalam kondisi tertentu. Kodenya terlalu rumit untuk ditelusuri, dan bahkan LLM salah mengatakan bahwa parameternya tidak terdokumentasi. Pada akhirnya, cara paling efisien adalah membuat kode contoh sampai saya menemukan perilaku yang diinginkan. Contoh dapat merangkum banyak hal penting sekaligus dan memungkinkannya diverifikasi dengan cepat. Sebaliknya, dokumentasi API mencoba membahas semuanya sehingga sulit dirawat dan gagal menyampaikan intinya. Dan kecuali benar-benar jelas, saya tidak pernah mempercayai perilaku library. Jika tidak ditunjukkan dengan jelas di README atau ditentukan lewat tipe, saya selalu menganggap perilaku itu bisa berubah kapan saja. Akhirnya saya menulis kode pemanggil sebersifat defensif mungkin
Contoh penting bukan hanya untuk pemula, tetapi untuk semua orang. Contoh 5 detik bisa memberi efisiensi setara satu jam membaca dokumentasi dan bereksperimen. Beberapa dokumentasi git seperti itu, dan hal yang sama berlaku untuk fungsi yang pada dasarnya sederhana tetapi sulit dijelaskan. Bahkan jika developer hanya bisa membuat satu hal, mereka tetap cukup mampu mengeluarkan contoh sekaligus dokumentasi. Keduanya harus disediakan, kecuali dalam kasus yang benar-benar sangat jelas
Setuju. Dokumentasi yang baik hampir harus mendefinisikan dengan jelas keseluruhan perilaku program, dan sulit melakukan itu hanya dengan contoh
Kita bisa punya keduanya sekaligus. Contoh dan dokumentasi teknis bukan hal yang saling meniadakan
Orang mungkin punya banyak komentar soal Perl, tetapi dokumentasi Perl benar-benar membantu. Selalu ada bagian SYNOPSIS di depan, jadi langsung ada contoh kode yang bisa dipakai. Setelah itu baru penjelasan, referensi, dan contoh tambahan. Contoh: dokumentasi bigrat, dokumentasi Archive::Tar. Saat menulis dokumentasi proyek, gaya Perl layak dijadikan acuan. Dan gaya itu sendiri juga didokumentasikan dengan baik
Keduanya diperlukan. Contoh memberi gambaran cepat, memudahkan integrasi, dan penjelasan parameter detail serta nilai konfigurasi membantu menyelesaikan masalah rumit dan memahami alat secara menyeluruh. Kalau salah satunya hilang, itu sangat merepotkan. Namun untuk library yang sangat sederhana, contoh mungkin bisa menjelaskan semuanya
Framework Diátaxis menunjukkan dengan baik bahwa dokumentasi memiliki berbagai jenis dan masing-masing punya tujuan. Bukan soal mana yang “terbaik”, melainkan penting dipakai sesuai kebutuhan yang berbeda. situs resmi Diátaxis
Rasanya komentar ini seharusnya ada di paling atas. Agak frustrasi bahwa setelah diskusi sepanjang ini, baru kemudian ada yang menyebut Diátaxis. Menurut saya, contoh memang inti dokumentasi, tetapi lebih tepat dilihat sebagai “teknik dokumentasi” yang penting daripada “jenis dokumentasi” yang berdiri sendiri
Betul! Contoh (atau tutorial) adalah salah satu pilar dalam pembelajaran sistem. Saya tidak yakin siapa yang pertama membuatnya, tetapi tautannya mirip dengan tautan penulis di akhir artikel: > “Bahkan proyek besar pun jarang memiliki keempat jenis dokumentasi tersebut. Karena itu, ada kalanya orang ragu untuk menekan tautan ‘Documentation’” Saya menyukai dokumentasi yang berfokus pada penjelasan. Kalau memahami struktur atau alasan di balik suatu perilaku, maka contoh maupun tutorial jadi lebih mudah diterima. Jika penulis teknis atau pendidik yang sangat ahli membangun kerangka ini sejak awal, hasilnya sangat besar. Sebaliknya, referensi API paling dibutuhkan saat membuat wrapper atau implementasi kompatibel. Banyak proyek awalnya memang dimulai dari referensi API internal, dan dokumentasinya hanyalah proses membuka itu ke publik. lihat sistem dokumentasi divio
Konsep Diátaxis sangat bagus. Hanya saja, menerapkannya ke proyek nyata tidak mudah. Setiap proyek membutuhkan proporsi dokumentasi yang berbeda, dan menyediakan semua bentuk itu dalam satu situs web juga tidak efisien. Proporsi tersebut terus berubah mengikuti pertumbuhan dan tingkat keahlian komunitas. Saya berharap ada pendekatan yang lebih praktis. Dokumentasi adalah tugas yang sulit, dan semoga suatu saat ada solusi yang lebih baik. Saat ini, kualitasnya pada dasarnya ditentukan oleh seberapa banyak waktu dan keahlian yang diinvestasikan, dan kenyataannya biasanya keduanya kurang
Saya sangat sering merasakan masalah ini di Unity dan Unreal. Terutama dokumentasi node Unreal, yang sering kali hanya menampilkan tangkapan layar node dan menuliskan ulang namanya, tanpa menjelaskan sama sekali bagaimana cara memakainya. Di Unity juga sering begitu: saya mencari dokumentasi untuk tahu cara benar memakai suatu fungsi, tetapi isinya malah kosong. Kalau bisa, saya bahkan ingin ikut menyumbang contoh ke dokumentasi Unity
Dokumentasi Unreal yang buruk juga membuang banyak sekali waktu saya. Ada nuansa “kode adalah dokumentasi”, tetapi “penjelasan berupa tangkapan layar node” untuk Blueprint benar-benar sampai terasa konyol
Saya sering memakai ImageMagick, dan dulu selalu mencari contoh lewat Google. Karena itu saya menggabungkan catatan pribadi saya menjadi kumpulan kecil contoh perintah. Saya juga menambahkan penjelasan rinci untuk tiap argumen. Saya merasa bukan hanya contoh seperti di tulisan blog ini yang dibutuhkan, tetapi juga penjelasannya. Masih tahap draf, tetapi untuk pekerjaan sehari-hari seperti resize, optimasi, dan layering, ini sudah sangat berguna. tautan publik catatan saya
Contoh kode bisa dijalankan sebagai unit test untuk mencegah dokumentasi menjadi usang atau rusak. Ini kelebihan yang tidak dimiliki bahasa alami
Pendapat radikal: jika spesifikasi suatu metode tidak bisa dipahami secara intuitif hanya dari signature dan beberapa contoh representatif, berarti metode itu mencoba melakukan terlalu banyak hal. Saya juga tidak ingin mempelajari abstraksi yang membatasi gerak atau pengecualian yang rumit
Di ekosistem Java dan budaya berorientasi objek, ada sangat banyak kalimat penjelasan yang tidak bermakna dan dokumentasi yang formalistis, dan bahkan di framework ekosistem Python yang mewarisi suasana itu, contoh penggunaannya juga cenderung sangat minim.
Contoh dokumentasi yang tidak bermakna
add(left, right) - menambahkan ruas kiri dan ruas kanan
Yang justru penting seperti tipe data parameter, bentuk pengecualian atau nilai hasil yang bisa dikembalikan, atau struktur cara kerjanya, malah tidak dijelaskan.
Kalau seperti man page bahasa C, hanya dengan penjelasan singkat pun tetap bisa dipakai, setidaknya dengan menebak dari nama fungsi dan nama parameternya.