Bagaimana saya bisa dengan cepat menghilangkan kode "salin & tempel"? [Tutup]

15

Saya perlu cara untuk memfilter resume dari orang-orang yang hanya menyalin dan menempelkan kode lalu berharap itu berfungsi, dan memeriksanya jika ada. Semua ini terjadi tanpa memiliki pemahaman (atau perhatian) untuk memahami sisa kode dalam sistem.

Tentu saya tahu bahwa menyalin dan menempelkan kode adalah bagian dari belajar objek baru, kontrol, dll ... tetapi bagaimana kita bisa tahu apakah itu menyumbang 70% (atau lebih) dari karir pengembangan mereka?

Saya telah menemukan beberapa orang senior tingkat mungkin keterampilan yang sangat usang atau tidak relevan untuk proyek tersebut, bahwa semua yang mereka lakukan adalah google, salin-tempel-tempelkan beberapa kode tanpa memikirkan solusinya secara keseluruhan. Sebagai hasilnya kami memiliki mismash JSON, AJAX, callback, ASMX, WCF dan postback dalam proyek yang sama. Jelas tidak ada konsistensi atau logika di mana masing-masing teknologi digunakan.

Dalam kasus terburuk, pengembang jenis ini menciptakan masalah keamanan dan vektor untuk serangan.

Pertanyaan

Bagaimana Anda merekomendasikan saya menyaring orang-orang yang memiliki latar belakang pemrograman yang buruk? Bisakah saya melakukannya di tingkat resume? Jika tidak, bagaimana saya melakukan ini selama wawancara.

goodguys_activate
sumber
Sepertinya Anda membutuhkan arsitek teknologi untuk proyek Anda. Seseorang harus meletakkan hukum WRT ke standar yang digunakan, teknologi yang digunakan, dan memindahkannya dari ide-hewan peliharaan-minggu ini.
cepat

Jawaban:

47

Saya telah menemukan beberapa orang senior tingkat mungkin keterampilan yang sangat usang atau tidak relevan untuk proyek tersebut, bahwa semua yang mereka lakukan adalah google, salin-tempel-tempelkan beberapa kode tanpa memikirkan solusinya secara keseluruhan. Sebagai hasilnya kami memiliki mismash JSON, AJAX, callback, ASMX, WCF dan postback dalam proyek yang sama. Jelas tidak ada konsistensi atau logika di mana masing-masing teknologi digunakan.

Saya tidak berpikir keterampilan pengembang Anda adalah masalahnya. Masalah Anda ada di tempat lain, mungkin pemimpin tim atau arsitek yang tidak memiliki kepercayaan diri untuk "mendorong" disiplin kode yang lebih baik, atau tim manajemen yang tidak memahami pentingnya mengelola utang teknis, dan tidak memberikannya pengembang waktu dan sumber daya untuk melakukannya. Apakah perusahaan Anda menerima ulasan kode?

Kepemimpinan mungkin masalahnya, bukan pengembang salin-tempel.

Robert Harvey
sumber
16
+1 Leadership may be the problem, not copy-paste developers. Itulah tepatnya interpretasi saya.
George Marian
Serius. Ada yang sangat AWOL di departemen komunikasi.
MIA
+1: Ditto atas komentar George Marian. Sangat bagus, Robert.
Jim G.
itu bagus. Harapannya mencapai sebanyak pewawancara, merekrut manajer.
Saar
tampaknya ada banyak konsensus atas jawaban ini, tetapi jangan tingkat senior "" mendikte fungsi dan kemudian implementasi diserahkan kepada coders, kan? Maksudku orang tingkat senior mungkin berkata "Hei, jangan gunakan gerombolan teknologi, cukup gunakan <dua ini", tapi tetap saja copy paste devs akan melakukan copy paste! Apakah aku salah ?
Chani
13

Cara untuk menyingkirkan programmer yang tidak dapat memprogram adalah dengan membuat mereka latihan pemrograman praktis sebagai bagian dari fase penyaringan atau fase wawancara. (Yang terakhir mungkin lebih baik karena Anda dapat mengendalikan lingkungan untuk mencegah kecurangan.)

Tapi saya tidak berpikir itu akan mengatasi masalah Anda.

... kami memiliki kesalahan JSON, AJAX, callback, ASMX, WCF dan postback dalam proyek yang sama. Jelas tidak ada konsistensi atau logika di mana masing-masing teknologi digunakan.

IMO, masalah sebenarnya di sini adalah bahwa tim Anda tidak melakukan tinjauan kode internal yang cukup, dan tidak mengembangkan "buku pedoman" dari solusi pilihan untuk masalah yang diketahui. Ini sebagian adalah masalah budaya, sebagian masalah komunikasi, dan (mungkin) sebagian masalah dengan tenggat waktu proyek.

Masalah lainnya adalah bahwa proyek biasanya memiliki umur yang panjang, dan selama umur itu, teknologi / teknik baru akan muncul, dan yang lama cenderung tidak disukai. Jika Anda ingin menghindari penggunaan "anjing sarapan" teknologi / teknik, Anda perlu:

  • mengatur dan menegakkan daftar teknologi / teknik yang dapat digunakan per proyek, atau
  • berinvestasilah dalam menyegarkan teknologi yang digunakan oleh suatu proyek.
Stephen C
sumber
1
Jika Anda tidak memberikan tes tertulis selama wawancara, Anda bisa menembak diri sendiri. Saya sudah memilikinya di empat majikan terakhir saya dan sering terkejut betapa sederhananya beberapa pertanyaan itu. Di satu tempat, saya diberi tahu bahwa kandidat lain pergi tanpa menyelesaikan tes, menangis.
Adrian J. Moreno
1
Saya sangat setuju bahwa tes tertulis selama wawancara adalah satu-satunya cara untuk memastikan bahwa rekrutan Anda benar-benar memiliki keterampilan pemrograman yang baik. Tetapi dorongan utama dari jawaban saya adalah bahwa keterampilan pengembang saja tidak cukup untuk mengatasi masalah SO.
Stephen C
Tertangkap oleh pengedit waktu. Saya sepenuhnya setuju bahwa standar dan tinjauan diperlukan. Kami baru-baru ini menerbitkan dokumen standar pengkodean baru dan dikombinasikan dengan beberapa proses peninjauan kode baru, kami memiliki bug jauh lebih sedikit untuk QA. Satu jika tujuan saya berikutnya adalah memulai tim pelatihan internal.
Adrian J. Moreno
10

Pekerjakan orang dalam masa percobaan 3 bulan. Memecat mereka jika mereka payah.

Jika Anda tidak INSPEKSI, Anda tidak dapat MENGHARAPKAN. Ulasan kode, alat audit. Server CI dapat menjalankan ini secara otomatis.

Ajukan pertanyaan nyata dalam wawancara Anda, seperti dalam pertanyaan dari kode nyata.

Buat mereka untuk menulis kode di papan tulis.

Jika Anda seorang manajer non-teknis, Anda tidak memenuhi syarat untuk menilai ini.

Jika Anda tidak memenuhi syarat, dapatkan konsultan profesional senior terkemuka untuk melakukan pengujian. Tanyakan orang yang ada, dan pesaing bisnis jika mereka mengenal orang yang 100x produktif. Bayar mereka untuk melakukan wawancara.

Jika Anda ingin menjalankan rumah sakit tanpa kepala operasi, silakan saja.

Tim Williscroft
sumber
Apakah Anda berbicara tentang orang yang berpengalaman? Mengapa seseorang harus meninggalkan pekerjaannya dan bergabung dengan tempat di mana mereka membutuhkan 3 bulan untuk membiarkan mereka mengisap atau tidak :) Mengapa ada sumber daya manusia?
Saar
Saya berbicara tentang orang-orang yang berpengalaman dan kompeten. Mereka lebih murah dalam jangka panjang. Sumber daya manusia menghentikan Anda dituntut karena melanggar hukum ketenagakerjaan. Awalnya ada untuk melakukan hal-hal yang sensitif untuk manajer numerik Henry Ford. Kisah nyata, lihat itu. Jika Anda sudah tahu orang itu akan bekerja dengan baik, Anda lebih baik dalam hal ini daripada saya. Orang itu akan berganti pekerjaan karena Anda begitu hebat untuk bekerja, ada lingkungan kerja yang hebat, dan setelah masa percobaan mereka mendapat bonus besar. Jika mereka dibuat mubazir sebagai permanen, perusahaan Anda membayar tiga bulan ekstra. Sesuatu seperti itu
Tim Williscroft
9

Saya telah menghabiskan beberapa tahun terakhir mewawancarai orang-orang dan menemukan bahwa 90% kandidat tidak dapat memprogram. Teknik wawancara saya untuk menentukan pemrograman adalah untuk memberi kandidat brief yang terlalu sederhana dan membiarkan kandidat menyelesaikannya menggunakan spidol dan papan tulis.

Mode kegagalan meliputi:

datang dengan desain dan kemudian mengimplementasikan sesuatu yang berbeda. Kandidat ini ditolak karena berbahaya bagi tim. tidak mengikuti spesifikasi, menulis bug dll ...

Tidak dapat menemukan desain. Sejumlah kandidat "berpengalaman" yang mengejutkan membutuhkan spesifikasi untuk memasukkan desain implementasi.

tidak tahu bahasa pemrograman, meskipun CV mengklaim pengalaman.

Tidak mengajukan pertanyaan tambahan untuk mengekstrak spesifikasi yang lebih lengkap.

Tidak bisa menjelaskan keputusan desain. Yang ini utama. Jika seseorang tidak dapat menjelaskan mengapa, maka setiap kali mereka akan melakukannya secara berbeda, dan konsistensi hilang.

Hasil akhirnya adalah saya menghabiskan banyak waktu untuk wawancara, dan tidak sering merekrut. Namun, tim pengembangan sangat baik, dan memiliki rasa hormat penuh dari seluruh perusahaan dan disampaikan!

Michael Shaw
sumber
Pengalaman Anda terdengar sangat normal.
cepat
5

Saya akan menyarankan FizzBuzz bahwa Jeff Atwood menyebutkan dalam posting di http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html .

Tulis program yang mencetak angka dari 1 hingga 100. Tetapi untuk kelipatan tiga cetak "Fizz" alih-alih angka dan untuk kelipatan lima cetak "Buzz". Untuk angka yang merupakan kelipatan dari tiga dan lima cetak "FizzBuzz".

Jetti
sumber
9
-1. FizzBuzz mendeteksi total orang idiot. Untuk melakukan pengkodean salin & tempel, Anda tidak boleh menjadi seorang idiot total.
back2dos
@ back2dos - Anda seharusnya sudah menyingkirkan "total idiot" saat Anda melakukan wawancara tatap muka. FizzBuzz membuat seseorang berpikir tentang masalah dan cara terbaik untuk menyelesaikannya. Itu tidak sulit jadi itu harus mengekspos mereka yang menyalin & menempel, karena mereka yang menyalin & menempel tidak mempelajari "mengapa" di balik hal-hal.
Jetti
3
+1. FizzBuzz mendeteksi lebih dari total orang idiot. Ini juga mendeteksi orang yang mengimbangi kurangnya keterampilan teknis dengan keterampilan sosial di atas par. Orang-orang itu memiliki peluang bagus untuk lulus tes skrining pertama. Misalnya mereka mungkin memegang gelar yang sah.
MSalters
1
Nah, Anda bertanya pada saya Fizzbuzz dan saya segera pergi. :) IMO dalam kategori junior itu tidak terlalu berguna, karena Anda akan melatih mereka, dan dalam kategori senior tidak berguna + ofensif. Anda harus bisa membuat orang yang pintar menjadi pintar dengan melakukan hal lain. Pengodean pada pertanyaan seperti titik adalah indikasi IME dari perusahaan pertanian musang. Jika saya benar-benar tertarik pada keterampilan pengkodean seseorang, saya memberikan pertanyaan ulasan kode . Dan dapatkan semua jawaban yang relevan tanpa frustrasi.
Balog Pal
@ BalogPal: Saya akan tertawa dan mulai mengetik seperti orang gila selama dua menit, dan kemudian saya akan malu pada diri saya jika itu tidak mengkompilasi, menjalankan dan bekerja pertama kali.
gnasher729
2

Saya mengajukan tiga pertanyaan wawancara

  1. Tulis daftar tertaut yang mampu menyimpan beberapa tipe numerik di java tanpa mengimpor apa pun dari kerangka koleksi
  2. Tulis kode yang menunjukkan bagaimana Anda dapat menambah / menghapus node dari daftar itu
  3. Tulis kode yang menunjukkan bagaimana Anda bisa mendapatkan maks / min dari daftar itu

Saya telah melihat orang menyelesaikan ini dalam 5 menit dan melihat orang berjuang selama 30 menit sebelum menyerah.

sal
sumber
Persyaratan pertama harus lebih spesifik. java.util.LinkedList l = new java.util.LinkedList()tidak mengimpor apa pun, tetapi tentu saja menggunakan koleksi bawaan.
Barry Brown
Ini adalah pertanyaan yang adil terutama untuk lulusan baru. Jika Anda memperhatikan atau menghabiskan waktu pemrograman sama sekali ini hampir sepele. Saya menganggap itu tidak harus tepat, tetapi cukup dekat.
Bryan Harrington
3
@Bryan, belum ada yang mencobanya. Dan saya benar-benar tidak peduli jika jawabannya 100% benar. Hanya mereka yang memahami masalah dan mampu mengatasinya dengan cara yang kompeten. Masalah yang paling umum adalah masalah ketika add / remove tidak berfungsi pada bagian kepala atau ujung daftar. Saya merekomendasikan orang dipekerjakan berdasarkan reaksi mereka terhadap saya yang menunjukkan hal ini.
sal
2

Anda tidak dapat melakukan ini di tingkat resume karena mereka pada dasarnya memiliki waktu tak terbatas untuk menuliskannya, tetapi Anda dapat melakukannya melalui wawancara telepon jika Anda mengajukan beberapa pertanyaan yang memerlukan wawasan teknis tentang apa yang mereka lakukan. Ini memberi Anda jawaban (baik atau buruk) dan berapa lama mereka sampai di sana.

Saat wawancara, buat mereka menulis kode. Ini adalah satu-satunya cara Anda mengetahui apakah mereka dapat memprogram secara nyata. Sederhanakan masalahnya, berikan mereka komputer dengan koneksi internet, dan IDE yang Anda gunakan terpasang, biarkan mereka mengajukan pertanyaan (kecuali beri-hte-codez) dan perhatikan cara kerjanya.


EDIT: Untuk analisis post-mortem tampak bahwa PMD memiliki copy / paste detector untuk menemukannya: http://pmd.sourceforge.net/cpd.html


sumber
Saya setuju dengan Anda sampai "... dan IDE yang Anda gunakan." Coder khusus tentang lingkungan kerja kami, dan sepertinya tidak terbiasa dengan $ random-IDE. Saya telah mengkode selama lebih dari 20 tahun, dan saya akan menyia-nyiakan 10 menit pertama mencoba mencari cara untuk bekerja IDE jika Anda melemparkan satu ke saya. Saya menggunakan editor (bluefish saat melakukan hal-hal webby, emacs untuk yang lainnya), dan alat baris perintah untuk yang lainnya (kontrol revisi, kompilasi saat diperlukan, dll.). Saya tidak menggunakan debugger sama sekali. Saya diajari bahwa jika Anda membutuhkan debugger, Anda salah melakukannya: untuk itulah kode debug!
HedgeMage
@ HedgeMage, saya tidak mengatakan mereka harus menggunakannya ... Melihat bagaimana seseorang menangani situasi itu sangat jelas. Apakah notepad + javac sudah mencukupi? Apakah dia mengunduh dan menginstal NetBeans? Akankah dia bertanya bagaimana melakukan X dalam IDE Anda, sedikit meretas dan meminta Y dan Z?
@ HedgeMage, kode debug sangat bagus jika Anda dapat menentukan sebelumnya semua hal yang mungkin perlu Anda ketahui. Debugger bagus dalam kasus-kasus di mana Anda perlu melihat jawaban atas pertanyaan untuk menentukan pertanyaan berikutnya, yang dengan kode debug memerlukan biner baru dan restart dan pergi ke lokasi lagi.
1
@ Thorbjørn: Memang, tagihan saya telah dibayar oleh pekerjaan dalam bahasa yang ditafsirkan selama beberapa tahun terakhir, tetapi bahkan kembali pada hari C coding saya, saya memberhentikan debugger yang mendukung kode debug yang baik. Mungkin itu hanya sebuah prasangka di pihak saya: Saya pergi ke perguruan tinggi dengan banyak orang yang tidak pernah belajar bagaimana kode per se - mereka hanya menampar sesuatu bersama-sama kemudian memperbaiki apa pun yang diteriakkan oleh debugger sampai "agak" berhasil. Saya tidak tahan dengan coding slipshod semacam itu. Saya tidak bermaksud menyiratkan bahwa para penentang itu jahat, hanya saja mereka dan fitur-fitur IDE lainnya tidak termasuk dalam semua alur kerja.
HedgeMage
@ HedgeMage, saya setuju pada pendekatan "mengalahkannya sampai berhasil" untuk debugging tidak baik, tetapi menyimpulkan bahwa debugger buruk mungkin sedikit terlalu luas sebuah kesimpulan.
1

Sederhana

  • (1) Kunci mereka di dalam ruangan + Oksigen Gratis.
  • (2) Beri mereka PC dengan koneksi Internet + IDE pilihan + akses ke Makanan.
  • (3) Memiliki wireshark atau metode serupa untuk mencatat semua lalu lintas masuk dan keluar.
  • (4) Beri dia tugas menengah.
  • (5) Periksa semua lalu lintas HTTP, penyelesaian tugas posting.
  • (6) Jika subjek telah menyalin sebagian besar kode sumber, akhiri Subjek .....

Edit:

Seperti yang dikatakan pembuat7, secara praktis orang dapat melakukan pengambilan video (tangkapan layar).

Malam gelap
sumber
Novel, tetapi pada akhirnya tidak praktis.
Robert Harvey
... atau hanya melakukan perekaman video, lihat perkembangan logika. Saksikan keindahan (atau kekacauan) terungkap.
goodguys_activate
1
mengakhiri Subjek? Dengan menarik oksigen gratis? Kacau!
@ Thorbjørn: Tidak serampangan mereka menembak diri mereka sendiri, setelah menyalin sejumlah besar kode sumber.
Joe D
1
Mereka yang gagal menggunakan internet untuk keuntungan mereka terkunci dalam mode kemarin. Saya SELALU berasumsi mereka adalah beberapa contoh bagus di luar sana bagi saya untuk melihat betapa pun sepele pertanyaan itu. Saya tidak menyalin dan menempel, saya melihat contoh yang baik dan menerapkan teknik terbaik. Saya seorang programmer penuh-tumpukan yang berarti saya seorang generalis dan bukan seorang spesialis dan mengandalkan seluruh dunia. Jelas berdosa!
Junky
1

Jika Anda ingin "menyingkirkan" coders yang buruk, Anda dapat mencoba, misalnya Matriks Kompetensi Programmer (berguna tetapi tidak berlaku untuk semua area yang mungkin - tentu saja Anda dapat membuatnya sendiri) atau codility.com (tugasnya sangat bagus dan ini menghemat banyak waktu).

Secara umum, mempekerjakan coders yang baik sulit dan sering membutuhkan bertahun-tahun latihan. Anda dapat memulai database pertanyaan wawancara sendiri, tidak hanya bertanya tentang pengkodean tetapi juga dengan matematika, logika, belum lagi pertanyaan motivasi.

Wojciech Sroczyński
sumber
0

Saya akan mengatakan bahwa masalah dengan kandidat Anda bukanlah bahwa mereka tidak dapat memprogram sama sekali, tetapi bahwa mereka tidak memiliki perasaan untuk menggunakan alat yang tepat untuk pekerjaan itu. Saran saya adalah pertanyaan esai di mana mereka akan diberikan persyaratan tingkat tinggi untuk sistem baru dan diminta untuk memberikan arsitektur dan membenarkan pilihan komponen mereka. Tapi simpan FizzBuzz untuk kandidat yang tidak bisa kode sama sekali tanpa browser.

Larry Coleman
sumber