Mengapa sekolah tidak mencakup pengadu? [Tutup]

12

Setelah satu lagi pertanyaan PR di SO. Sepertinya sebagian besar siswa tidak tahu apa itu debugger atau bagaimana menggunakannya. Saya merasa bahwa mengetahui cara menggunakan debugger hampir sama pentingnya dengan dasar pemrograman lainnya.

  • Pertanyaannya seharusnya tidak debugging dan bagaimana menggunakan alat debugging modern diajarkan bersama dasar-dasar pemrograman? Jika tidak mengapa tidak.
memutarkan lagi
sumber
2
Emm .. maksudmu gdb adalah alat debugging modern ? Ini bukan debugger yang buruk, tapi tentu saja tidak canggih.
Billy ONeal
1
Saya akan Setuju tetapi saya juga menjawab pertanyaan apakah siswa menggunakan studio visual dan tidak tahu bagaimana atau mengapa mereka akan menggunakan debugger.
jalankan kembali
@rerun: Erm .. aduh. Mereka tidak dapat menekan tombol "play" pada IDE? (BTW, saya memberi +1)
Billy ONeal
system.out logging cetak adalah benteng terakhir dari malas dan tidak kompeten
6
@Jarrod, generalisasi yang cukup luas dan mungkin terlalu berlebihan. Terkadang Anda tidak bisa menggunakan debugger pada program Anda di mana masalah terjadi.

Jawaban:

7

Ini bukan masalah bahwa penggunaan debugger perlu diajarkan, tetapi teknik debugging yang lebih umum . Ini akan mencakup pengajaran cara menggunakan debugger tentu saja tetapi juga akan berbagai teknik penting lainnya, misalnya

  • berpikir kritis
  • memecah dan menaklukkan
  • printf debugging, logging, dll
  • memeriksa meja
  • stress testing

Sebagai manfaat tambahan, banyak teknik juga dapat diterapkan untuk pemecahan masalah di bidang selain pemrograman.

Ada buku yang cukup bagus tentang seluruh subjek ini, yang mungkin harus menjadi bacaan wajib bagi semua mahasiswa sarjana dan siapa pun yang mempelajari dasar-dasar pemrograman: Debugging oleh David J Agans .

Paul R
sumber
8

Kursus ilmu komputer tersier dirancang untuk mengajarkan dasar-dasar pemrograman kepada siswa , seperti yang telah Anda sebutkan - konsep-konsep ini diajarkan kepada siswa dengan harapan bahwa mereka akan memahami konsep yang diperlukan dan menerapkannya pada rentang bahasa pemrograman yang lebih luas dan set masalah.

Alat debugging, di sisi lain, adalah himpunan bagian dalam area implementasi - masing-masing alat berbeda untuk setiap bahasa (meskipun konsepnya sama). Kami terkena alat debugging tetapi tidak pernah benar-benar membahasnya secara mendalam. Jika kami menghabiskan lebih dari satu minggu pada alat debugging, saya akan melihat kembali - di belakang - dan menganggap itu membuang-buang waktu. Saya lebih suka belajar tentang notasi BigO atau polimorfisme. Namun, jika kekuatan alat debugging belum (berhasil) disampaikan kepada siswa, maka itu akan menjadi keharusan.

JK
sumber
3
+1. Diterjemahkan: Karena tidak semua orang menggunakan MSVS, GCC / GDB, LLVM / CLANG, dll.
Billy ONeal
1
+1 walaupun saya harus mengakui bahwa saya setuju dengan @rerun; Kursus (atau bagian dari satu) yang membahas konsep dasar dan alat-alat yang digunakan di toko perangkat lunak akan sangat membantu untuk menghasilkan lulusan baru yang produktif. Saya telah menjalankan beberapa yang tampaknya tidak mengerti kontrol sumber bahkan setelah menggunakannya untuk sementara waktu.
Ken Henderson
banyak Keterampilan yang menghabiskan banyak pengembang rata-rata ada waktu dengan yang tercakup di sekolah. Kontrol Sumber, Manajemen konfigurasi secara umum, eksplorasi kode, membaca kode, proses Build dll. Sementara saya mengerti bahwa gelar CS perlu mencakup aspek teoritis, saya pikir satu kelas tingkat senor di mana siswa bekerja dengan basis kode besar yang ada menemukan dan memperbaiki bug dan memeriksanya dalam kode dan "dikerahkan" akan membuat pengembang baru jauh lebih berguna.
jalankan kembali
3
Saya sangat tidak setuju. Jika kode aktual sedang ditulis (karena menulis kode adalah cara yang baik untuk mempraktekkan konsep-konsep ilmiah), maka siswa harus memiliki akses ke cara yang baik untuk menulis kode itu, dan itu termasuk memanfaatkan debugger jika diperlukan. Itu tidak mengambil waktu yang bisa dihabiskan untuk notasi bigO - itu membebaskan waktu yang banyak siswa habiskan untuk menguatkan jalan mereka melalui kesalahan kecil. Tidak banyak yang diperoleh dari itu. Selain itu, banyak kursus sains lainnya (misalnya fisika) memasukkan ketrampilan pengukuran praktis sebagai bagian dari kurikulum mereka.
Inca
2
Menggunakan debugger membutuhkan pemahaman tentang cara kerja komputer, bukan hanya kode. Saya menganggap ini sebagai dasar pemrograman . Saya telah menjumpai terlalu banyak siswa yang tidak tahu apa yang sebenarnya dilakukan komputer mereka, dan itu tidak cocok untuk programmer yang baik.
edA-qa mort-ora-y
2

Di sebagian besar program program pengantar, status program cukup sederhana sehingga Anda dapat menghilangkan bug dengan beberapa pernyataan cetak. Mungkin juga ada masalah memaksa siswa untuk melakukan hal-hal dengan tangan sehingga mereka memahami bagaimana dan di mana dalam kode jenis bug tertentu terjadi. Jika Anda tidak tahu ke mana harus mencari maka debugger akan menjadi sangat tidak berguna.

davidk01
sumber
4
Debugger yang baik lebih mudah digunakan daripada mencetak pernyataan. Pernyataan cetak mengharuskan Anda entah bagaimana memiliki cara untuk membuat cerita bersambung data Anda menjadi sebuah string, yang mengharuskan kode itu sendiri (mungkin bug ditunggangi) untuk melakukan serialisasi. Misalnya, program daftar tertaut mudah dilalui dalam debugger, tetapi pernyataan cetak tidak akan membantu siswa yang mencoba menulis algoritma transversal daftar tertaut - karena Anda perlu algoritme itu untuk menulis pernyataan cetak yang benar .
Billy ONeal
2
@ Billy jadi melangkah melalui kode yang salah entah bagaimana akan membantu mereka?
Neil Butterworth
1
@Billi ONeal, Anda salah. Tidak ada debugger yang Anda bicarakan. Langkah interaktif melalui program hanya berguna ketika Anda sudah mengidentifikasi masalah dengan debug logging. Tidak pernah dalam praktik saya (> 20 tahun) saya harus menggunakan debugger dengan kode saya sendiri - pernyataan yang tepat dan pencatatan selalu cukup. Saya hanya menggunakan alat terkutuk itu dengan kode pustaka dan barang warisan. Dan, btw., Bisa membuat serialisasi struktur data apa pun menjadi sesuatu yang dapat dibaca selalu merupakan ide yang bagus. Beberapa bahasa / lingkungan memberikan ini secara gratis.
SK-logic
1
@ Billy ONeal, bagaimana Anda menelusuri memori perangkat mikrokontroler, yang terpasang pada port serial? Dan, saya percaya bahwa bukan ide yang bagus untuk mengekspos freshers ke bahasa tingkat rendah dengan pointer dan hal-hal sebelum mereka cukup melek dalam struktur data dan algoritma. Pada saat itu mereka akan tahu cara men-debug dengan benar.
SK-logic
1
@ Billy ONeal, bagian yang paling sulit adalah mengidentifikasi saat yang tepat ketika memeriksa nilai dalam debuger (btw., Dalam kebanyakan kasus itu masih sesuatu seperti memanggil metode .dump (), bukan inspeksi memori langsung) atau untuk mencetak nilai serial. Dengan infrastruktur debug logging yang tepat di tempat masalahnya dipersempit ke analisis file log. Dalam kebanyakan kasus sederhana grepmelakukan pekerjaan itu. Tidak ada loncatan, tidak ada breakpoint bersyarat - hanya grep.
SK-logic
2

Itu tidak begitu penting. Saya hampir tidak pernah menggunakannya, dan tidak pernah punya. Cara terbaik untuk men-debug kode adalah:

  • jangan menulis bug di tempat pertama
  • jika Anda menulisnya, perbaiki dengan berpikir, bukan dengan masuk ke debugger

Dan untuk banyak perangkat lunak modern multi-threaded, debugger memiliki efek menyembunyikan bug daripada membukanya. Dan mereka seharusnya tidak "diajar" di tingkat sarjana, lebih dari satu orang akan mengajarkan cara menggunakan pengolah kata.

Neil Butterworth
sumber
6
Saya pikir ini tergantung. Jika Anda mencoba membiasakan diri dengan perilaku basis kode besar dan buruk yang tidak Anda tulis, debugger adalah salah satu cara tercepat untuk menyesuaikan diri dengan apa yang dilakukan basis kode. Jika Anda menulis semua kode, tentu saja, Anda tidak akan memerlukan debugger sering, tetapi tidak semua dari kita berada di tempat itu. +1
Billy ONeal
1
@ Billy Kita harus setuju untuk berbeda. Anda mencoba mengenal server perdagangan MT besar dengan debugger.
Neil Butterworth
@ Neil: Saya pribadi tidak pernah berurusan dengan hal semacam itu ... tapi saya telah mendebug kode MT sebelumnya tanpa masalah. Mungkin saya dimanjakan oleh MSVC ++ - para debugger di sana menunjukkan apa yang dilakukan berbagai thread dengan sangat mudah. Tetapi jika saya melakukan debug dalam versi sebelum 2008 (saya pikir saat itulah ditambahkan) saya bisa melihat bagaimana hal itu dapat membuat hal-hal menjadi lebih sulit.
Billy ONeal
@ Neil: Jangan salah paham - Saya tidak mengatakan debugger adalah pengganti untuk berpikir, atau itu harus menjadi satu-satunya hal yang Anda lihat. Saya hanya mengatakan itu alat yang dalam beberapa kasus dapat membuat memahami sesuatu lebih mudah. Jika debugger menyebabkan lebih banyak kebingungan, umumnya mudah untuk mengatakan bahwa itu menyebabkan lebih banyak kebingungan (Karena Anda semakin bingung), dan saat itulah Anda mematikan debugger dan mencoba sesuatu yang lain. Ini membantu dalam beberapa kasus, tetapi itu bukan pengganti untuk melihat kode / input / output dan memikirkan apa yang terjadi.
Billy ONeal
2
Saya tahu Anda menerbangkan wajah kebijaksanaan yang diterima di sekitar sini. Tetapi Anda berada di perusahaan yang baik dengan orang-orang seperti Linus Torvalds, Larry Wall, Brian Kernighan dan Rob Pike.
btilly
0

Debugging harus diajarkan karena siswa adalah manusia dan manusia membuat semua jenis kesalahan, beberapa di antaranya memerlukan memperoleh beberapa data eksperimental (info debug) sebelum pencerahan mengenai kesalahan yang terjadi terjadi.

Debugging tidak diajarkan karena premis (mungkin diwarisi dari departemen matematika) bahwa program harus benar dengan desain, bahkan mungkin bisa dibuktikan demikian. Dan dengan demikian siswa tidak boleh "bereksperimen" dengan pemrograman dengan benar. Namun ini mengabaikan proses pembuatan di dunia nyata dari manusia yang tidak sempurna mengeluarkan perangkat lunak untuk mengubah spesifikasi di bawah tekanan jadwal & dll.

hotpaw2
sumber
Hmm .. mungkin sekolah saya hanya berbeda, tapi bukan itu yang dilakukan di CWRU.
Billy ONeal
Mungkin tergantung pada pohon warisan departemen sejarah kursus pemrograman yang bersangkutan.
hotpaw2
Saya tidak yakin dari mana Anda mendapatkan semua ini. Semua kelas pengantar menghabiskan beberapa kuliah tentang cara melacak bug.
davidk01
@ davidk01 - Itu tidak menjelaskan pengamatan OP, yang saya dengar, tidak sering, tetapi lebih dari sekali sebelumnya.
hotpaw2
@ hotpaw2: Apa yang tidak menjelaskan pengamatan OP? Hanya karena siswa mengalami kesulitan untuk mempelajari program debug tidak berarti itu tidak diajarkan yang merupakan kesimpulan Anda melompat ke. Saya telah mengambil beberapa kursus pemrograman baik sebagai mahasiswa sarjana dan mahasiswa pascasarjana. Di setiap kelas instruktur telah menghabiskan setidaknya satu kuliah untuk membahas program yang salah dan memperbaikinya untuk menunjukkan beberapa teknik debugging umum.
davidk01
0

Pertanyaan ini asing bagi saya. Di universitas saya, penggunaan debugger (JDB dan Eclipse debugger) diajarkan paling awal sejak urutan ilmu komputer tahun pertama. Penggunaan debugger dan alat pengujian lainnya diajarkan lagi dalam kursus pengujian perangkat lunak.

Saya pribadi merasa sangat sulit untuk percaya bahwa sekolah bagus mana pun yang berusaha mempersiapkan orang untuk masuk ke dunia kerja tidak mengajarkan tentang teknik debugging dan pengujian yang tepat. Mereka jelas tidak bisa membahas semua aspeknya, tetapi mereka setidaknya bisa mengajarkan dasar-dasar di kelas.

Thomas Owens
sumber
0

Cari tahu sendiri

Saya tidak perlu dan tidak ingin seorang profesor atau TA meluangkan waktu untuk mengajar saya sesuatu yang saya dapat dengan mudah mencari tahu sendiri. Mereka ada di sana untuk mengajari saya konsep-konsep sulit dan membimbing pembelajaran. Mereka tidak dan tidak seharusnya ada di sana sehingga Anda tidak perlu RTFM.

Pelajari Cara Belajar

Perguruan tinggi harus tentang belajar cara belajar, bukan hanya memiliki tangan Anda memegang setiap topik yang Anda tidak tahu. Jika Anda memegang tangan Anda terus-menerus melalui proses ini, Anda akan gagal total di dunia nyata.

Menanjak, Keduanya, Melalui Salju

Ketika saya pergi ke sekolah, mereka juga tidak repot-repot mengajari Anda bahasa. Anda diharapkan mengambilnya sendiri. Mereka akan memberi Anda proyek dan fasilitas. Terserah Anda untuk melacak informasi yang Anda butuhkan untuk menyelesaikan implementasi dan mengirimkan program kerja. Cukup mirip dengan dunia nyata, kecuali dengan jam kantor.

dietbuddha
sumber