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.
Jawaban:
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
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.
sumber
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.
sumber
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.
sumber
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.
dan masih banyak lagi.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber
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.
sumber