Catatan: Saya mengetahui pertanyaan ini . Pertanyaan ini sedikit lebih spesifik dan mendalam, namun, berfokus pada membaca kode aktual daripada men-debug atau bertanya kepada penulis.
Sebagai siswa di kelas ilmu komputer tingkat pengantar, teman-teman saya kadang-kadang meminta saya untuk membantu mereka dalam tugas mereka. Pemrograman adalah sesuatu yang sangat saya banggakan, jadi saya selalu senang melakukannya. Namun, saya biasanya mengalami kesulitan menafsirkan kode sumber mereka.
Kadang-kadang ini karena gaya yang aneh atau tidak konsisten, kadang-kadang karena persyaratan desain aneh yang ditentukan dalam tugas, dan kadang-kadang hanya karena kebodohan saya. Bagaimanapun, aku akhirnya terlihat seperti orang idiot yang menatap layar selama beberapa menit dan berkata "Uh ..."
Saya biasanya memeriksa kesalahan umum pertama - hilang titik koma atau tanda kurung, menggunakan koma bukan operator ekstraktor, dll.
Masalahnya datang ketika itu gagal. Saya sering tidak dapat melangkah dengan debugger karena ini adalah kesalahan sintaksis, dan saya sering tidak dapat bertanya kepada penulis karena dia sendiri tidak mengerti keputusan desain.
Bagaimana Anda biasanya membaca kode sumber orang lain? Apakah Anda membaca kode dari atas ke bawah, atau apakah Anda mengikuti setiap fungsi sesuai namanya? Bagaimana Anda tahu kapan harus mengatakan "Sudah waktunya untuk refactor?"
sumber
Jawaban:
Kiat pertama: gunakan IDE (atau editor yang sangat bagus :)) untuk menemukan kesalahan sintaksis, tanda kurung salah tempat, dan kesalahan sepele lainnya.
Langkah kedua: Atur otomatis semua kode dalam format yang Anda rasa nyaman. Anda akan berpikir ini tidak terlalu penting tetapi luar biasa, itu penting.
Jangan takut untuk mengubah nama variabel lokal jika nama mereka buruk. (Jika Anda memiliki akses ke sistem lengkap, Anda dapat mengganti nama apa saja dan Anda harus.)
Tambahkan komentar ke diri Anda ketika Anda menemukan apa fungsi / metode tertentu lakukan.
Sabar. Memahami kode alien tidak mudah tetapi selalu ada saat terobosan ketika sebagian besar potongan teka-teki tiba-tiba jatuh ke tempatnya. Sampai saat itu, semua itu adalah kerja keras dan pekerjaan yang membosankan. Kabar baiknya adalah bahwa dengan berlatih momen eureka ini akan datang lebih cepat.
sumber
// Renamed to ABC for XYZ
?Bolehkah saya mengatakan bahwa saya pikir Anda mengambil pendekatan yang salah dengan ini. Jika orang-orang meminta bantuan Anda dengan kode mereka, saya pikir Anda memiliki tanggung jawab untuk berbalik dan mengatakan kepada mereka untuk memandu Anda membaca kode mereka. Anda dapat memperbaiki kesalahan mereka untuk mereka, dan mereka dapat mempelajari sesuatu (dengan cara menghafal), jika mereka dapat menemukan kesalahan mereka sendiri (dengan bantuan Anda) mereka cenderung belajar lebih banyak. Selain itu, Anda akan mendapatkan pengalaman yang lebih luas dengan bagaimana orang yang berbeda mendekati pengkodean (yang pada gilirannya akan memungkinkan Anda untuk membaca / memahami lebih banyak kode) - siklus yang baik ...;)
sumber
Saya percaya kemampuan ini adalah campuran dari pengalaman dan hanya memiliki bakat untuk itu. Kami memiliki karyawan yang dapat memecahkan lebih atau kurang apa pun jika kami meminta mereka membuat sesuatu dari awal, sementara pada saat yang sama sama sekali tidak dapat menemukan bug yang jelas dalam potongan kode yang tidak mereka tulis. Dan, secara bersamaan, kami memiliki karyawan yang tidak akan kami percayai dengan sesuatu yang melebihi desain dasar, tetapi yang dapat menyelami kode orang lain dan melacak masalah dalam waktu singkat.
Yang mengatakan, cara untuk mendekati ini adalah dengan mengubah kode. Format ulang sesuai keinginan Anda, ubah nama variabel menjadi sesuatu yang masuk akal bagi Anda, tambahkan komentar jika kode tidak jelas. Jika dia meminta bantuan Anda, Anda harus melanjutkan dan mengubah beberapa hal sampai Anda menemukan masalah. Kemudian serahkan kepada teman Anda apakah akan memperbaiki kode asli atau menggunakan kode Anda.
sumber
Pertama, jika ada kesalahan sintaks, Anda hanya perlu membaca kesalahan kompiler dengan hati-hati. Sering garis disorot sebagai kesalahan, tapi itu benar-benar sebelumnya baris yang memiliki kesalahan.
Sadarilah bahwa, untuk siswa pengantar, mungkin ada beberapa artefak pengeditan yang akan mencegah program dikompilasi yang tidak dapat dilihat. Misalnya, saya pernah melihat seorang siswa (bukan salah satu dari saya) yang menggunakan bilah spasi alih-alih kembali: Kodenya tampak normal pada editor yang dibungkus setelah 80 kolom (siswa sangat sabar), dan kode itu bahkan berfungsi sampai dia menambahkan
//
komentar gaya " ", yang mengomentari semua sisa program. Demikian pula, jika Anda menyalin sampel kode dari situs web, sering kali ada karakter yang tidak dapat dicetak yang juga disalin (tergantung bagaimana situs web memformat kode). Jika ragu, ketikkan ulang baris tanpa salin dan tempel. [Agak luar biasa, tapi aku melihat ini terjadi jauh lebih belakangan.]Untuk kesalahan kompiler jahat, Anda mungkin harus menumbuhkan program, dengan membuat file baru dan mengetik semua kode saat Anda melanjutkan. Pastikan untuk mengkompilasi setelah setiap langkah utama sebelum melanjutkan ke langkah berikutnya.
OK, jadi bagaimana kalau tidak ada kesalahan sintaks? Maka sekarang saatnya untuk menelusuri kode! Anda dapat menggunakan debugger untuk ini, tetapi melakukan panggilan ke
printf
seluruh kode juga sangat efektif. Misalnya, jika adafor
loop, tambahkan pernyataan cetak untuk penghitung loop. Dalam kasusfor
loop bersarang , Anda mungkin menemukan bahwa variabel yang salah sedang bertambah.Keuntungan menggunakan
printf
s adalah kemampuannya untuk "memampatkan" dari waktu ke waktu / ruang yang sedang Anda lihat. Ketika Anda melangkah dengan debugger, Anda juga melihat banyak kondisi yang tidak relevan dan itu bisa lebih membosankan. Juga, tanpa melihat riwayat apa yang telah dicetak ke konsol, Anda mungkin kehilangan beberapa pola. Intinya di sini adalah bahwa debugger dan printfs adalah teknik yang saling melengkapi, dan tidak ada yang selalu lebih baik dari yang lain.Akhirnya, tanyakan saja kepada teman Anda apa yang terjadi! Alih-alih melihat itu dan berkata "eh" tanyakan kepada mereka apa yang mereka lakukan: "sekarang apa yang
n
harus dilakukan?" Dengan memulai dialog, mereka mungkin akhirnya menjawab pertanyaan mereka sendiri, atau, Anda mungkin menyadari cara mereka membuat konsep program memiliki kelemahan, yang dapat mengarahkan Anda ke solusi.Seperti yang dikomentari di tempat lain, semua ini menjadi lebih baik dengan pengalaman. Meskipun saya telah pemrograman selama 20 tahun, tidak sampai 5 tahun terakhir saya telah bekerja dengan siswa bahwa saya menjadi lebih baik dalam membantu mereka dengan kesalahan mereka.
sumber
Aku benci mengatakan ini, tapi tidak ada peluru perak di sini.
Terus terang jika saya peramal cukup untuk dapat memahami apa yang orang lain maksudkan ketika mereka menulis apa yang mereka lakukan bahkan dalam 10% dari kasus, saya akan tanpa keraguan membuat jutaan sekarang.
Pada catatan yang lebih praktis, menggunakan IDE yang cerdas adalah langkah 1.
Langkah 2 adalah menjalankan doxygen atau yang serupa untuk mengetahui hierarki kode sumber.
Langkah 3 adalah untuk mengetahui fungsi jangkar atau objek, hal-hal yang memproses baris perintah atau file Anda dan kemudian melakukan logika.
Sejalan dengan Langkah 3, pantau global jika Anda menggunakannya. Tanyakan juga kepada teman Anda apakah mereka menggunakan algoritma spesifik yang dikenal - membaca algoritme (jika ada) sebelum melihat kode selalu bermanfaat.
sumber
Dalam satu kata: Pengalaman, semakin Anda mendapatkan pengalaman, semakin banyak Anda mempelajari praktik terbaik dan dapat menilai / memahami kode orang lain. Itu tidak datang secara otomatis, melainkan sering hanya berasal dari melakukan kesalahan yang sama sendiri!
Yang mengatakan, sangat penting bahwa programmer belajar untuk mengomentari kode mereka dengan benar karena ketika Anda melihat kode itu sering hanya merupakan hasil dari proses pemikiran utama yang sering sangat sulit untuk diekstrapolasi dari kode. Beberapa komentar, file teks dengan pemikiran desain dapat membuat perbedaan antara memahami kode dan benar-benar salah paham.
sumber
Saya sering ditanya hal yang sama di lab di sekolah. Biasanya pertanyaan dimulai dengan, "Bagaimana cara memperbaiki kesalahan kompiler ini?" jadi saya cukup pandai melihat menggantung
else
, kehilangan titik koma dan sejenisnya. (Macro juga menyenangkan untuk debug -#define CUBE(x) x * x * x
adalah kesalahan yang kita semua ditakdirkan untuk membuat.) Keuntungan yang saya miliki adalah bahwa saya telah melalui kelas yang sama dengan guru yang sama, jadi saya sudah terbiasa dengan persyaratan.Proses yang saya temukan berfungsi paling baik adalah menjaga dialog tetap berjalan. Anda tidak ingin menulis program untuk mereka, karena merekalah yang perlu belajar. Ini berarti Anda harus berada di komputer yang sama dengan mereka. Di lab saya akan datang ke komputer mereka. Saya akan mencoba untuk membuat mereka menemukan kesalahan, dengan memulai dengan pesan kompiler. (Kami menggunakan C.) Mulai dengan nomor baris, dan tunjukkan di mana pesan dan kesalahan sesuai. Jika ada lebih dari satu kesalahan yang sama, saya akan bertanya kepada mereka apa yang mirip dengan kedua kesalahan itu.
Seluruh ide adalah untuk membantu membimbing siswa lainnya. Menulis ulang kode mereka untuk mereka tidak akan membantu mereka belajar.
sumber
#define CUBE(x) x * x * x
selain tipe-tidak aman?CUBE(3)
, tidak apa-apa. Sebut denganCUBE(x + 1)
dan Anda mendapatkanx + 1 * x + 1 * x + 1
yang di C dievaluasix + (1 * x) + (1 * x) + 1
. Ini mengevaluasi3x + 1
yang bukan x <sup> 3 </sup>! Anda memperbaikinya dengan menyatakan#define CUBE(x) (x) * (x) * (x)
.Kesalahan sintaksis jauh lebih mudah ditemukan daripada kesalahan logika. Jika sebagian besar masalah mereka adalah sintaksis, cari IDE, salin dan tempel kode mereka ke dalamnya, dan perbaiki kesalahannya. Kesalahan logika jauh lebih sulit. Saya tidak yakin mengapa Anda mengatakan Anda tidak dapat meminta mereka menjelaskan kode mereka. Saya telah menemukan banyak kesalahan logika dengan menjelaskan kode kepada orang lain.
sumber