Bagaimana Anda membaca kode orang lain? [Tutup]

23

Hampir setiap programmer mahir mengatakan bahwa sangat berguna untuk membaca kode profesional lain. Biasanya mereka menyarankan open source.

Apakah Anda membacanya atau tidak? Jika ya, seberapa sering dan bagaimana prosedur membaca kode? Juga, agak sulit bagi pemula untuk berurusan dengan SVN - banyak file. Apa solusinya?

Sergey
sumber

Jawaban:

25

Apakah Anda membacanya atau tidak?

Iya nih.

Jika ya, seberapa sering

Harian. Selalu. Saya bekerja dengan banyak proyek sumber terbuka (kebanyakan yang berhubungan dengan Python) dan harus membaca sumbernya karena ini adalah dokumentasi yang paling akurat.

dan bagaimana prosedur membaca kode?

Um Buka dan Baca.

Juga, agak sulit bagi pemula untuk berurusan dengan SVN - banyak file. Apa solusinya?

Buka dan Baca. Kemudian baca lebih lanjut.

Ini tidak mudah. Tidak ada yang membuatnya mudah. Tidak ada Jalan Kerajaan untuk memahami. Itu butuh kerja.

S.Lott
sumber
Terima kasih atas jawaban Anda. Apa cara mendefinisikan apakah kode itu baik atau tidak? Karena tidak setiap proyek open source dilakukan oleh para profesional sungguhan?
Sergey
1
@Sergey: "Apa cara mendefinisikan apakah kode itu baik atau tidak?" Baca kodenya. "Bagus" itu subyektif. Jika itu membantu, dan Anda bisa memahaminya, itu bagus. Jika membingungkan, atau tidak benar-benar berfungsi, itu tidak baik. Ada banyak, banyak atribut kualitas: dapat dipelihara, aman, mudah beradaptasi, berkinerja tinggi, dll., Dll., Kode bisa bagus di satu dan kurang bagus di yang lain.
S.Lott
7
Saya tidak bisa menolak: osnews.com/images/comics/wtfm.jpg
Gary Willoughby
@Sergey - bahkan jika itu adalah kode terhebat yang pernah ditulis, jika Anda tidak dapat membacanya (karena tingkat pengalaman Anda), itu tidak akan ada gunanya bagimu. Meskipun Anda mungkin melihatnya sebagai bukan penggunaan waktu Anda yang terbaik, Anda akan terkena kode yang ditulis dengan buruk, jadi sebaiknya pelajari perbedaannya. Seperti kata S.Lott, itu butuh kerja dan waktu.
JeffO
Sementara saya mengagumi orang-orang yang dapat duduk dan membaca kode seperti mereka membaca novel, kadang-kadang saya merasa agak membosankan. Saya telah menyadari bahwa bagi saya 'membaca kode' tidak benar-benar menggambarkan kegiatan yang saya lakukan - frasa yang lebih baik untuk apa yang saya lakukan adalah 'pemahaman kode' dan itu melibatkan membaca dokumentasi, melangkah melalui itu dalam debugger dan bahkan membaca tes. Saya menulis posting panjang tentang membaca kode - technikhil.wordpress.com/2010/07/06/how-to-read-code-a-primer
Nikhil
9

Ada beberapa lapisan pada teka-teki yang Anda miliki. Pertama, mulailah dari tingkat atas, pandangan mata burung untuk berbicara. Setelah Anda memeriksa proyek, akan ada banyak file dalam struktur direktori. Itu sama apakah Anda melihat sumber terbuka atau sumber tertutup (kode sumber adalah kode sumber setelah semua). Jadi mulailah dengan ini:

  • Bagaimana file sumber diorganisasikan? Bisakah Anda memberi tahu dengan nama file atau nama direktori yang berisi apa yang mungkin Anda temukan di dalamnya? Kami programmer cenderung menyukai nama yang dapat diprediksi dan struktur logis. Anda harus bisa mendapatkan gambaran kasar dari mana harus mencari masalah tertentu.
  • Apa sifat aplikasi, apakah itu berbasis web, command-line, GUI? Alasan mengapa ini penting adalah Anda ingin tahu di mana harus mulai melacak eksekusi. Jika berbasis web, Anda ingin memulai dengan tempat aplikasi mulai memproses permintaan. Jika itu dibangun di atas kerangka kerja, semuanya lebih baik. Setelah Anda tahu kerangka kerjanya, Anda biasanya dapat memahami kode yang ada di sana. Kalau tidak, Anda akan mulai dengan titik entri masing-masing untuk aplikasi command line / GUI.
  • Dapatkan selembar kertas dan pensil, atau jika Anda beruntung papan tulis dan spidol kering. Beri nama komponen (atau gunakan yang disediakan dalam kode) dan buat garis di antara kotak dengan panah sehingga Anda dapat melihat bagaimana berbagai hal diproses. Atau, jika Anda melihat suatu algoritma, buat sketsa struktur data dengan cara yang dapat Anda pahami dan buat sketsa bagaimana itu dimanipulasi.

Dibutuhkan latihan, tetapi pasti bisa dilakukan. Semakin banyak Anda tahu tentang perpustakaan dan kerangka kerja aplikasi yang digunakan, semakin Anda tahu bagaimana kode perlu diatur dan di mana mencari jawaban untuk pertanyaan spesifik. Beberapa kode sedikit lebih sulit diikuti, terutama jika tidak langsung. Itu sebabnya Anda membutuhkan pensil dan kertas. Akhirnya bola lampu meledak di kepala Anda dan Anda mendapatkannya. Saat itulah membaca sisa kode lebih masuk akal.

Berin Loritsch
sumber
Salah satu aspek dari kode bacaan adalah abstraksi. Hal-hal seperti mencari tahu bagaimana sumber diatur pasti akan abstrak proses pembacaan kode.
David Gao
5

Bukan membaca seperti Anda membaca novel, tetapi lebih seperti bagaimana Anda membaca buku referensi. Cara yang baik adalah dengan mengambil bug yang baru saja diperbaiki dari pesan check-in, melakukan perubahan apa yang berubah, dan membaca bagian yang relevan sampai Anda memahami masalah dan solusinya. Kerentanan keamanan yang dipublikasikan dengan baik adalah bug yang menyenangkan karena ada banyak diskusi tentang mereka di forum. Kemudian pilih salah satu bug "low hanging fruit" dari pelacak bug dan baca sampai Anda mengerti bagaimana cara memperbaikinya sendiri. Sebagian besar profesional pembacaan kode dilakukan secara insidental dalam rangka memperbaiki bug atau menambahkan fitur.

Biasanya sampel kode terbaik hampir tidak terlihat. Anda akan langsung memahaminya tanpa membacanya lebih dari sekali. Mereka membuatnya tampak seperti itu sangat mudah untuk ditulis, meskipun kode yang bagus biasanya melewati banyak konsep. Ini menghasilkan perasaan paradoks bahwa tentu saja kode yang diberikan adalah cara yang jelas untuk melakukannya, meskipun itu bukan cara pertama yang Anda pikirkan.

Bila Anda menemukan kode seperti itu, mencoba untuk memahami wawasan yang masuk ke menulisnya, dan prinsip-prinsip desain yang terlibat, jadi ketika Anda menemukan diri Anda dalam situasi yang sama di masa depan mudah-mudahan Anda dapat menerapkan prinsip-prinsip yang sama.

Karl Bielefeldt
sumber
4

Salah satu trik yang saya gunakan cukup sering ketika membaca beberapa fungsi rumit, segmen kode adalah mulai refactoring menjadi sesuatu yang lebih mudah dibaca tanpa mengubah logika.

Michał Piaskowski
sumber
1
+1: Saya juga. // Aku pernah punya bos yang memperhatikan refactoring dan menuduhku membuang-buang waktu. Dia tidak bisa mengerti. Bodoh sekali.
Jim G.
2

Bagaimana harus berurusan dengan "banyak file"? Tidak ada bedanya dengan ketika Anda menulis kode Anda sendiri, kecuali Anda tidak memiliki pengetahuan sebelumnya tentang organisasinya kecuali didokumentasikan.

Jika Anda, sebagai programmer yang diklaim, tidak dapat mengetahui struktur proyek dari "banyak file" apakah itu proyek yang sangat tidak terorganisir, atau Anda seorang programmer yang tidak kompeten (atau, dalam kasus ekstrim, keduanya).

Mulailah membaca, cobalah untuk menemukan beberapa titik masuk atau kelas / metode pivot yang penting, dan bangun pemahaman tentang bagaimana semuanya datang bersama dari sana. Tidak akan instan, akan memakan waktu, tetapi dapat dilakukan bahkan jika tidak ada dokumentasi sama sekali.

jwenting
sumber
3
"Akan membutuhkan waktu" untuk "membangun pemahaman" adalah definisi "sulit". Hanya karena itu adalah kesulitan yang kita harapkan untuk dihadapi setiap hari tidak membuatnya menjadi lebih sulit. "Di mana saya melakukan perubahan ini?" adalah pertanyaan umum bahkan di kalangan profesional. Juga, kontrol sumber dan berurusan dengan basis kode besar adalah salah satu lubang besar dalam pendidikan perguruan tinggi. Saya pikir saya melakukan satu atau dua proyek di perguruan tinggi yang membutuhkan lebih dari satu file sumber, dan mereka hanya mendapatkan sekitar 10 file.
Karl Bielefeldt
0

Hal terbaik yang dapat Anda harapkan ketika membaca kode proyek lain, baik itu API atau perangkat lunak adalah bahwa variabel, fungsi dan nama makro tidak disingkat ambigu atau dinamai sehingga Anda dapat mengetahui maksud mereka.

Tapi selain itu, dibutuhkan jumlah yang layak penyebaran pengetahuan di seluruh bahasa, teknik pemrograman dan juga tentang tujuan kode itu sendiri untuk dapat menyelam ke dalam kode yang kompleks.

Saat ini saya mencoba untuk melihat bagaimana Lua melakukan beberapa sihirnya, tapi saya sampai pada titik di atas di mana banyak pengidentifikasi diberi nama secara samar dan agak disingkat ke titik di mana saya tidak tahu garis mana yang sedang dicoba untuk melakukan hal yang saya tahu yang harus dilakukan di beberapa titik dalam kode fungsi ... Sering variabel huruf dan nama fungsi / makro agak disingkat melakukan kepalaku di.

Nick Bedford
sumber
0

Setelah melihat "Pertama, mulailah pada level tinggi, pandangan burung-mata" sebagai @Berin Loritsch menyarankan Anda dapat mencari unittests dan / atau tes integrasi jika ada.

unittests menarik untuk melihat bagaimana (api-) detail bekerja.

Integrationtest biasanya memberikan gambaran yang baik atas proses bisnis.

k3b
sumber