Apakah keterampilan debugging penting untuk menjadi programmer yang baik?

24

Seiring dengan kualitas lain, seorang programmer harus memiliki keterampilan debugging yang baik? Jika saya memiliki pelamar yang tidak dapat menemukan kesalahan dalam program yang diberikan, tetapi mampu menyelesaikan semua teka-teki dan program, haruskah saya menganggapnya pelamar?

EDIT: - Teka-teki adalah bola merah, biru dan merah-biru normal seperti. Program-programnya seperti menemukan nol k kontinu dalam sebuah array. Program debugging adalah sesuatu yang gagal karena kondisi yang seharusnya> =, tetapi sebaliknya>. Semuanya ada di atas kertas.

Manoj R
sumber
13
Apakah dia diizinkan menjalankan program, atau apakah dia harus menemukan kesalahan saat melihat kode?
Michael K
9
Anda hanya dapat kode sebaik yang Anda bisa debug. keduanya berjalan beriringan di buku saya.
Demian Kasier
3
beberapa orang lebih baik dalam hal itu daripada yang lain. seringkali sulit untuk menemukan kesalahan dalam sepotong kode asing - terutama selama wawancara yang menegangkan.
leed25d
6
@ Fanatic: Hanya jika Anda hanya bekerja dengan kode Anda sendiri. Sebagian besar debugging yang saya lakukan di tempat kerja adalah menggali kesalahan orang lain.
Mason Wheeler
3
@ Moj R, apakah Anda yakin dapat menemukan masalah yang sama dengan jumlah waktu yang sama? Apakah Anda yakin itu hanya karena pelamar tidak menemukan masalah di atas kertas dalam 20 menit, bahwa ia tidak akan mampu melakukannya dengan Google (Ya, sialan Google) di sisinya dan beberapa minggu latihan?
Pekerjaan

Jawaban:

37

Ya itu sangat penting

Tentang kandidat tertentu, ada kemungkinan bahwa dia tidak cukup akrab dengan basis kode x untuk men-debug itu.

Pemecah masalah yang baik harus dapat melakukan debug, karena semua yang biasanya diperlukan adalah memiliki metode / pendekatan yang sangat logis.

Malam gelap
sumber
1
Lebih dari keterampilan lainnya dalam pemrograman, debugging hadir dengan pengalaman dan kurang berkaitan dengan bakat.
Pieter B
24

Jika Anda tidak dapat men-debug Anda bukan programmer sama sekali, apalagi yang bagus.

Debugging adalah aplikasi nyata dan praktis tidak hanya keterampilan teknis tetapi juga kemampuan analisis dan proses berpikir. Alhasil saya menilai itu sebagai tes yang jauh lebih berguna dan relevan daripada papan tulis atau pertanyaan wawancara.

Kecuali pekerjaan yang Anda miliki melibatkan menghabiskan sepanjang hari menjawab pertanyaan teori, Anda membutuhkan seseorang yang dapat menerapkan keterampilan apa pun yang mereka miliki.

Yang perlu Anda lakukan adalah bertanya pada diri sendiri apakah ini merupakan uji kemampuan debug yang adil - dapatkah mereka menjalankan kode, memasukkan break point, dan seterusnya dengan cara yang sama seperti di dunia nyata? Kesalahan macam apa itu? Apakah ini sesuatu yang diambil dan dikompilasi oleh kompiler (dalam hal ini pertanyaan yang tidak ada gunanya karena mereka tidak perlu melihatnya)?

Jika itu hanya ditulis di atas kertas maka itu pada dasarnya hanya tes membaca terperinci dan itu adalah keterampilan yang bahkan lebih abstrak daripada pertanyaan wawancara teknis rata-rata Anda dan saya berpendapat, cukup banyak tidak berharga.

Jon Hopkins
sumber
2
+1 untuk "Tanyai dirimu sendiri apakah ini uji kemampuan debug yang adil" - Sepertinya tidak. Sebuah tes yang adil akan termasuk kode runnable dengan debugger, yaitu menempatkan mereka dalam lingkungan kerja alami, normal (mengingat mereka akan jarang bekerja sans debugger).
doppelgreener
11

Aturan perekrutan utama - dalam keraguan katakan tidak.

Jika Anda perlu menerapkan banyak kode baru dengan harga murah - Anda bisa mendapatkan orang itu, tetapi secara pribadi saya akan terus mencari.

BarsMonster
sumber
7
Saya telah mempekerjakan banyak orang selama bertahun-tahun, dan menyesali hampir setiap kandidat "Mungkin" yang saya sewa.
JohnFx
10

Kecuali jika pengembang dapat menulis kode bersih setiap saat (benar-benar mustahil), dan hanya bekerja pada proyek-proyek "lapangan hijau" (tidak akan pernah terjadi), maka ya, keterampilan debug sangat penting. Benar. Saya memiliki pengalaman dengan pengembang yang tidak suka men-debug, jadi mereka malas, dan melemparkan kode ke QA untuk diuji. Tetapi para pengembang itu tidak bertahan lama sama sekali.

Pengembangan perangkat lunak adalah keahlian dan keterampilan memecahkan masalah. Masalah-masalah itu termasuk masalah bisnis, dan masalah dengan kode mereka (dan lainnya). Ngomong-ngomong, banyak proyek pemeliharaan secara khusus memperbaiki bug, jadi debugging adalah keterampilan yang sangat esensial.

Mark Freedman
sumber
Hal lain yang ingin saya tambahkan ... Bagian dari proses wawancara kami di sini, adalah bahwa kami memberikan kandidat latihan untuk debug aplikasi dan menambahkan beberapa fitur kecil juga. Setiap bagian dari proses ini diperlakukan sama pentingnya.
Mark Freedman
7

Saya akan ingat bahwa ada banyak "-wawancara situs" -type situs web, dan sangat mungkin untuk belajar untuk banyak pertanyaan dan teka-teki. Satu hal yang tidak dapat Anda pelajari adalah kode debug yang belum pernah Anda lihat sebelumnya. Entah Anda telah menulis kode yang cukup sehingga Anda tahu cara men-debug atau tidak. Jika ini adalah posisi entry-level saya tidak akan mengesampingkan kandidat, tetapi jika mereka mengklaim memiliki pengalaman dengan bahasa dan tidak dapat men-debug kode di dalamnya, itu tentu saja menimbulkan tanda bahaya.

TMN
sumber
5

Perbedaan utama yang saya lihat antara programmer junior dan programmer senior adalah keterampilan mereka dalam debugging. Keterampilan dalam debugging adalah sesuatu yang hanya disertai dengan latihan dan pengalaman.

Misalnya, pikirkan bug aneh di mana program Java berfungsi dengan baik di konsol dalam mode interaktif, tetapi gagal ketika Anda mencoba menggunakan pipa Unix untuk input yang sama. Jika Anda pernah mengalami masalah ini sebelumnya, Anda mungkin memeriksa untuk memastikan bahwa new Scanner(System.in)itu hanya dipanggil sekali; bug adalah bahwa ia mengkonsumsi buffer ketika disalurkan, tetapi jelas tidak ketika dalam mode interaktif. Saya mengharapkan programmer yang lebih senior untuk mengidentifikasi bug ini lebih cepat. Mungkin karena mereka pernah mengalaminya sebelumnya, atau karena mereka punya masalah lain dengan buffering di masa lalu.

Sedangkan untuk memecahkan teka-teki dan menulis kode baru, sementara pengalaman itu penting, ini adalah sesuatu di mana seorang programmer tingkat junior mungkin dapat melakukan serta, atau bahkan lebih baik daripada, seorang programmer yang lebih senior. Artinya, kecerdasan dan keterampilan dapat memiliki efek yang lebih besar, yang independen dari pengalaman.

Jika Anda berada dalam posisi untuk berinvestasi dalam seorang programmer junior, yang mungkin memiliki ide-ide baru dan dapat membantu tim "gel," dan mereka tampaknya baik-baik saja menulis kode baru, silakan dan mempekerjakan mereka. Jika Anda mencari programmer tingkat senior, maka kurangnya keterampilan debugging ini mungkin menjadi tanda peringatan utama: Mereka mungkin memiliki pengalaman sepuluh tahun yang hanya setara dengan mengalami tahun pertama sepuluh kali.

Sebagai catatan, ada beberapa cara untuk menjadi lebih baik dalam debugging tanpa memiliki 10 tahun pengalaman terlebih dahulu. Saya merekomendasikan buku Andres Zeller, Mengapa Program Gagal: Panduan untuk Debugging Sistematik sebagai cara untuk mempelajari prinsip-prinsip ilmiah dan untuk lebih memahami bagaimana mereproduksi, menemukan, dan memperbaiki kegagalan.

Macneil
sumber
Jadi debugging adalah sesuatu yang datang dengan latihan, dan dapat dipelajari, dan tidak boleh diberi banyak bobot saat memilih kandidat.
Manoj R
1
Untuk menjadi jelas: Anda harus mempertimbangkan berat untuk pengembang senior, tetapi kurang untuk pengembang junior. Misalnya, seseorang yang baru lulus dari perguruan tinggi, yang mulai memprogram tahun pertama mereka, mungkin membutuhkan waktu 10 kali lebih lama untuk melakukan debug sesuatu. Tetapi ada alasan bagus untuk berinvestasi di pengembang junior.
Macneil
5

Itu tergantung pada lingkungan Anda. Jika Anda bermain sodoku dan puzzle lain sepanjang hari, mungkin itu akan menjadi kandidat yang baik.

Namun, jika kadang-kadang Anda memiliki bug dalam kode Anda, atau itu tidak selalu berfungsi persis seperti yang diharapkan, saya sarankan Anda membuat seseorang pandai mengatasi masalah.

Menyewa untuk apa yang Anda butuhkan, bukan yang ideal dari seorang programmer.

JohnFx
sumber
3

Seiring dengan kualitas lain, seorang programmer harus memiliki keterampilan debugging yang baik?

Iya nih.

Kode debug adalah bagian dari pemecahan masalah. Saya belum pernah menemukan pengembang yang menulis kode sempurna dan nol bug. Pengembang akan men-debug kodenya, atau milik orang lain. Itu suatu keharusan.

haruskah saya mempertimbangkan dia untuk pekerjaan itu?

Mungkin itu tergantung.

Tidak dapat men-debug suatu program dalam suatu wawancara mungkin seharusnya tidak menjadi pelanggar jika pemohon mampu menyelesaikan semua teka-teki dan program lain dalam wawancara. Itu sangat tergantung pada kedalaman dan nafas wawancara.

Berapa banyak debug yang diperlukan oleh posisi? Jika banyak, maka mungkin lebih banyak bobot harus dimasukkan ke dalam seberapa baik pelamar dapat menjawab pertanyaan debugging. Tetapi karena Anda hanya menyebutkan bahwa satu pertanyaan debug ditanyakan, sepertinya tidak.

sepon
sumber
2
+1 Untuk mengulangi debug diperlukan tetapi tidak memecahkan masalah selama wawancara.
Gaurav
3

haruskah programmer membutuhkan keterampilan debugging yang baik?

Iya nih. Yang mengatakan, saya akan meminta Anda untuk mempertimbangkan metodologi dalam wawancara (yaitu kuis / gaya tes) kurang sempurna (oke, cacat) dalam banyak orang yang menemukan kode di atas kertas pengalaman yang aneh dan asing.

Karena debugging adalah proses , bukan jawaban atau hasil (misalnya kesalahan ), saya sarankan menggunakan dialog atau diskusi interaktif sebagai cara yang lebih baik untuk menilai kemampuan calon debugging. Sementara kebanyakan orang menggunakan sistem debugging informal ad-hoc, kandidat yang baik akan memiliki pola yang sama secara umum, mengajukan pertanyaan untuk mendapatkan pemahaman tentang sistem atau asumsi, dan persyaratan, kemudian mengisolasi masalah (sering membagi dan menaklukkan), dan membandingkan secara metodis kode untuk persyaratan, dan mengevaluasi input / output yang diharapkan, daripada mau tak mau mengubah banyak hal sekaligus secara serampangan sampai berfungsi.

Saya juga menyatakan keberatan tentang masalah teka-teki selama wawancara, khususnya dalam bentuk tertulis, seolah-olah kandidat tidak memiliki asumsi kerangka acuan yang tepat ( triknya)), puzzle mungkin tidak terpecahkan bagi mereka. Yaitu Banyak teka-teki wawancara menderita karena memiliki satu jalur yang benar, sedangkan hidup itu rumit dan pemikiran paling kreatif adalah mereka yang mengambil pendekatan baru yang mengejutkan untuk memecahkan masalah yang mungkin tidak bekerja dengan teka-teki tertentu yang sudah dimasak sebelumnya, dengan solusi yang diharapkan. . Ini seperti mengharapkan semua pemain trompet bermain jazz. Ini dapat dikelola dengan mengajukan pertanyaan sebagai diskusi interaktif non-konfrontatif (tekanan dapat mengacaukan kreativitas). Sekali lagi, bagi saya, jawabannya adalah sekunder untuk melihat proses pemikiran yang baik diungkapkan. Anda mungkin perlu meminta mereka berpikir keras, tetapi ini cenderung lebih produktif dalam pengalaman saya.

Saya belum membaca atau mengevaluasi Mengapa Program Gagal Zeller , tetapi saya dapat merekomendasikan Debugging oleh Agans sebagai bacaan singkat dan cepat yang dapat membantu memperkuat proses debugging ad-hoc menjadi upaya yang lebih terstruktur, konkret, dan terorganisir, yang dapat membantu untuk lebih efisien dalam debugging. Juga cetak salinannya, dan gantungkan di bilik atau tempat solusi Anda, poster Aturan Debugging , itu adalah pengingat yang sempurna untuk hari-hari buruk di mana tidak ada yang berjalan dengan baik. Saya mengalami beberapa hari yang buruk, dan menghabiskan lebih sedikit waktu untuk debugging aktif (baca: menggaruk-garuk kepala saya dalam kebingungan ) dengan mencoba mengikuti mereka dalam semangat jika tidak dalam surat.

mctylr
sumber
Jawaban yang bagus Saya telah menghabiskan waktu berhari-hari mencari perbaikan bug paling sederhana dan benar-benar gagal memperbaiki bug yang rumit dalam hitungan menit. Seorang pengembang yang baik harus memiliki strategi yang masuk akal. Dan itu sangat tergantung pada aplikasi. Katakanlah aplikasi Anda tidak menunjukkan masalah ketika Anda memasukkan banyak pernyataan cetak / log atau jalankan versi dengan simbol. Lalu bagaimana? Pemohon setidaknya harus dapat mengartikulasikan semacam strategi yang koheren.
SnoopDougieDoug
2

Saya akan mengatakan debugging sangat penting, kecuali programmer begitu baik sehingga dia tidak pernah membuat kesalahan. Saya tidak yakin itu tidak mungkin, tetapi saya tidak dapat membayangkannya dengan bahasa dan alat populer saat ini.

Saya tidak suka konsep diletakkan di tempat seperti itu dalam sebuah wawancara. Jika kandidat gugup (dan siapa yang tidak), dia bisa menggambar kosong sebagai programmer dia mungkin bisa secara rutin menangani masalah seperti itu. Kemudian, jika itu adalah wawancara yang terkenal atau masalah tes kompetensi, kandidat mungkin tahu hasilnya dengan menghafal, tetapi tidak memiliki kemampuan untuk berpikir jalan melalui masalah novel. Juga jika kandidat tidak terbiasa dengan bahasa, dia harus berjuang. Banyak bug yang sulit karena programmer yang baik tahu apa yang ia maksud untuk mengetik, dan otaknya mengambil jalan pintas saat membaca kode. Saya tidak dapat menemukan gaya C menggunakan = di mana == seharusnya digunakan dengan inspeksi, karena saya tahu apa maksudnya, dan otak saya akan mengambil jalan pintas parsing untuk membacanya.

Omega Centauri
sumber
1

Bagian yang baik dari pemrograman pemecahan masalah, dan untuk memecahkan masalah Anda harus mengetahui inti-masalah bukan hanya gejala atau ketidakkonsistenan. Debugging adalah seni mengidentifikasi masalah inti.

  • mengidentifikasi masalah inti
  • lebih mampu memvisualisasikan aliran

dan masih banyak lagi.

Srikanth Remani
sumber
1

Saya akan menambahkan sedikit lebih banyak ke situasi dalam menunjukkan kesalahan dan melihat apa reaksi orang itu. Apakah mereka terlalu dramatis tentang, "D'oh! Aku idiot, itu sangat bodoh ...", terlalu apatis dalam, "Ya, apa pun cowok," kamp, ​​atau di sana aktif mendengarkan apa yang ada salah dengan semacam permintaan maaf atau komentar untuk menunjukkan bahwa mereka mendapatkan bahwa mereka mengacaukan sesuatu yang seharusnya mereka selesaikan? Hanya sesuatu untuk dipikirkan dalam situasi masa depan.

Men-debug secara tepat waktu adalah keterampilan yang hebat. Ini sedikit berbeda dari memberi seseorang masalah di mana ia diperbaiki ketika diperbaiki. Terkadang harus ada langkah-langkah agresif yang diambil untuk menyelamatkan sistem yang harus diakui karena saya bayangkan sebagian besar perusahaan tidak ingin penjualan dihentikan selama berminggu-minggu sementara seseorang memperbaiki bug dalam perangkat lunak akuntansi yang digunakan perusahaan.

JB King
sumber
1

Debugging adalah keterampilan yang sangat penting. Sebenarnya saya akan mengatakan lebih banyak bahwa pemecahan masalah adalah keterampilan yang penting. Seseorang harus tahu cara mendefinisikan masalah (termasuk informasi pengguna apa yang diminta dan log apa yang harus dilihat), bagaimana memperbanyaknya, sumber data apa yang tersedia untuk mendiagnosis masalah dan cara men-debug dan kemudian cara memperbaiki satu hal tanpa merusak sesuatu yang lain. Namun, menentukan bahwa selama wawancara itu sulit.

Saya akan memberinya masalah nyata untuk ditemukan dan kesempatan untuk menggunakan alat yang tersedia dan kemudian bertanya langkah apa yang dia ambil untuk menemukan masalah atau apa lagi yang akan dia lakukan jika dia tidak dapat menemukan masalah tersebut dalam waktu yang ditentukan. Anda benar-benar mencari seseorang yang menyerang masalah agak sistematis dan yang memiliki lebih banyak alat dalam toolkitnya daripada hanya debugger dan google (kecuali pada tingkat Junior ketika ia harus mencoba minimal keduanya) (seseorang yang tidak bisa berpikir untuk coba kedua hal itu mungkin tidak kompeten atau setidaknya saya tidak akan mengambil risiko dengannya) tetapi mungkin belum memiliki banyak alat pemecahan masalah canggih).

Saya akan memberikan bobot lebih untuk keterampilan mengatasi masalah daripada jawaban untuk teka-teki (baik saya tidak akan meminta mereka sama sekali) atau untuk keterampilan pemrograman yang ditunjukkan. Saya jarang melihat pengembang yang dapat memecahkan masalah dengan baik yang tidak dapat juga menulis kode yang baik atau melakukan perbaikan yang diperlukan. Saya telah melihat banyak orang yang dapat membuat beberapa kode bersama untuk mendapatkan produk "Bekerja" tetapi tidak dapat memperbaiki masalah jika hidup mereka bergantung padanya. Sebagian besar karena mereka tidak benar-benar memahami apa yang mereka lakukan atau memahami masalah yang mereka coba selesaikan. Pemecah masalah yang baik tahu bagaimana mengidentifikasi masalah sebenarnya, bukan hanya gejalanya. Dan mereka juga tahu pertanyaan apa yang harus diajukan untuk mendefinisikan masalah untuk pengembangan baru juga.

HLGEM
sumber
1

Ada 4 hingga 5 keterampilan utama dalam pekerjaan apa pun dan pemrograman tidak berbeda. Di tingkat profesional Anda harus baik dalam semua keterampilan dasar utama. Jika Anda memiliki 4 dari 5, itu masih akan menahan Anda.

Dapatkah Anda membayangkan seorang tenaga penjualan yang dapat menghadirkan, meyakinkan, mengartikulasikan, memenuhi syarat pelanggan, tetapi tidak dapat menutup kesepakatan? Mereka ada di luar sana dan Anda tidak ingin mereka ada di tim penjualan Anda.

Debugging jelas merupakan keterampilan inti yang seorang programmer tidak bisa tanpanya.

pengguna39741
sumber
0

Saya memiliki gaya pengkodean seperti itu, yang membutuhkan debugging miminal. Ketika saya selesai dengan 3 baris kode, saya menjalankannya, dan mengujinya, sering mencetak beberapa variabel. Dalam kasus tersebut, ketika saya mendapatkan hasil atau perilaku yang tidak diinginkan, saya menaruh banyak kesedihan dalam kode saya - bukannya debugging. Saya menggunakan debugger nyata sangat jarang. Aneh tapi Nyata.

ern0
sumber
0

Debugging adalah fase dalam pengembangan perangkat lunak yang muncul setelah pengujian tertentu dilakukan pada perangkat lunak Anda, dan bug ditemukan. Ini adalah tindakan mencari dan memperbaiki bug di perangkat lunak Anda. Dalam banyak kasus, menemukan bug biasanya memerlukan lebih banyak waktu untuk memperbaikinya.

Ini adalah proses menghilangkan bug (kerentanan) yang melekat pada aplikasi / sistem komputer. Jika ini tidak dilakukan maka peretas dapat mengambil keuntungan dari bug & dapat melakukan berbagai kegiatan berbahaya:

1) Mereka dapat mengekspos kerentanan kepada publik yang menyebabkan hilangnya pendapatan, bisnis & reputasi bagi pengembang & vendor.

2) Cacing mencari sistem rentan yang dapat mereka eksploitasi & dengan demikian, menyalin diri mereka ke server tersebut. misalnya. Pada Jan 2003, Slammer Worm mengambil keuntungan dari kerentanan di MS SQL Server.

3) Di mana cacing telah disebutkan bagaimana kita bisa melupakan virus. Virus juga dibiarkan kalah oleh pengembangnya yang memanfaatkan bug yang ada dalam program untuk tujuan utama pemaparan tidak senonoh ...

4) Dan jika program tidak di-debug dengan benar, konsumen tidak akan pernah bertahan jika mereka tidak mendapatkan nilai uang mereka. Dalam hal ini Anda bahkan tidak perlu peretas untuk melakukan pekerjaan kotor - Anda mungkin juga mempercayai publik yang baik.

Shylendra Madda
sumber