Proyek pemrograman wawancara yang baik [ditutup]

26

Saya mencari beberapa proyek pemrograman kecil yang bisa saya berikan kepada karyawan potensial untuk mengukur kemampuan pemrograman mereka. Ini akan menjadi programmer langsung dari perguruan tinggi. Saya mencari proyek yang akan memakan waktu beberapa jam bagi seseorang dan mereka akan mengirim kembali email jawaban mereka setelah wawancara.

Salah satu contohnya adalah mengambil paragraf teks ini dan mengembalikan daftar kata-kata unik yang diabjadkan. Setelah setiap kata beri tahu saya berapa kali kata itu muncul dan dalam kalimat apa kata itu diterima.

Adakah yang punya saran bagus?

bigtang
sumber
Pertanyaan kontes pemrograman ACM. Anda dapat menemukan arsip pertanyaan-pertanyaan itu di sini .
whatsisname
1
Apakah situs teka-teki pemrograman ini menarik bagi Anda? programmers.stackexchange.com/questions/756/programming-puzzles/…
grokus

Jawaban:

43

Saya sudah lama menyimpulkan bahwa tidak ada yang bisa dilakukan seseorang dalam waktu singkat yang bisa memberi tahu saya apa pun yang berguna tentang orang itu. Tetapi setiap kandidat yang baik memiliki proyek pribadi yang sudah ditulis yang dapat memberi tahu Anda banyak hal. Jadi saya telah mengganti tantangan spesifik dengan "beri saya sepotong kode yang Anda banggakan dan senang mencap nama Anda."

Mereka pilihan proyek memberitahu Anda lebih dari tugas selama satu jam. Dan kemudian Anda dapat menghabiskan satu jam membahasnya untuk belajar lebih banyak lagi.

pdr
sumber
4
Saya ingat wawancara di sebuah perusahaan dan diberi fungsi yang cukup sederhana (15-20 baris) dan ditanya "Apa fungsinya?" Saya memberi tahu mereka, lalu bertanya "Apakah ada yang salah?". Saya diberitahu bahwa mayoritas orang yang mereka wawancarai tidak dapat menjawab. Mungkin itu alternatif cepat (saya tidak tahu ada orang yang bisa membaca kode yang tidak bisa menulisnya, tapi mungkin saya belum pernah bertemu orang yang salah).
TMN
4
@ TMN - Oh, kami juga melakukan itu. Tapi saya sudah bertemu orang yang bisa membaca kode dan tidak menulisnya dengan baik .
pdr
@ TMN Dengan belajar sendiri, saya menghabiskan banyak waktu membaca kode sejak awal hingga jauh lebih baik dalam membacanya daripada menulisnya. Itu bisa dan memang terjadi, hanya butuh waktu dan latihan untuk meningkatkan keterampilan menulisnya.
Jimmy Hoffa
28

Aku bosan dengan omong kosong yang memalukan ini. Saya telah berada di tempat-tempat yang meminta saya untuk sampel kode, memisahkan mereka, dan kemudian meminta saya untuk menjelaskan kode contoh dari sistem mereka yang sepertinya ditulis oleh anak-anak berusia 2 tahun yang retak. Saya telah diminta untuk mengimplementasikan algorythms sort yang tidak jelas, layanan jaringan, guis, struktur data (selalu berupa pohon atau daftar yang ditautkan). Setiap rasa mengutak-atik pertanyaan yang mengganggu tentang apa pun yang menurut pewawancara adalah bagian terpenting dari pemrograman.

Pada akhirnya itu semua sangat tidak berguna. Cara terbaik untuk mengevaluasi karyawan adalah dengan mempekerjakannya selama 30 hari, dan lihat seberapa baik dia melakukan pekerjaan itu. Luangkan semua waktu yang Anda inginkan untuk mengembangkan tes, dan itu tidak akan memberi tahu Anda apa-apa tentang bagaimana seseorang bekerja setiap hari.

Satanicpuppy
sumber
8
Mengkode algoritma sederhana seperti yang dijelaskan bigtang bukanlah "mind-gamey". Mampu melakukan sesuatu seperti itu harus menjadi prasyarat untuk bahkan mendapatkan wawancara (dan itu, di perusahaan saya). Ini sangat berguna untuk menyaring kandidat yang sebaliknya terlihat hebat di atas kertas. Hal terakhir yang ingin saya lakukan adalah menghabiskan berjam-jam mewawancarai seseorang yang tidak dapat menulis fungsi untuk mengetahui apakah string adalah palindrom. Anda akan kagum dengan jumlah PhD CS dari sekolah top yang tidak dapat melakukan tes bigtang. Singkatnya, bisa menyelesaikan tes seperti ini diperlukan tetapi tidak cukup.
Yer
+1 @ Jer. Terakhir kali saya mewawancarai seorang programmer, enam dari delapan kandidat tidak dapat menyelesaikan tugas yang paling mendasar (bahkan dengan Google dan SO). Tidak mungkin saya membiarkan mereka dekat basis kode saya yang sebenarnya selama lima menit, apalagi 30 hari.
Julia Hayward
2
@JuliaHayward: Saya berharap ada orang yang bisa menyelesaikan proyek dengan akses yang diberikan ke web / dokumentasi. Masalah muncul ketika seseorang mulai melempar kata kunci dan algoritma semacam mengaburkan pada Anda tanpa akses ke internet, di bawah asumsi palsu bahwa telah menghafal berbagai macam teknik atau apa pun yang penting untuk kinerja pekerjaan setiap hari.
Satanicpuppy
12

Mengizinkan seseorang melakukan proyek praktis pada waktu mereka sendiri tidak berarti mereka yang melakukannya.

Semua orang datang lebih awal untuk wawancara (well, setidaknya harus). Kami memiliki lembar 'selagi Anda menunggu' untuk mereka kerjakan sampai kami siap untuk melihatnya. Ini memiliki delapan (8) pertanyaan yang menguji pengetahuan pelamar dalam bahasa yang terutama kami gunakan.

Kami tidak mencari jawaban untuk semua yang benar, karena siapa pun dapat memperbaikinya dengan komputer di depannya. Kami sedang mencari proses, apakah mereka bahkan mencoba pertanyaan, bagaimana mereka sampai pada jawaban mereka.

Ketika kita memasuki wawancara, kita membahasnya bersama mereka dan menjawab pertanyaan apa pun yang mungkin mereka miliki yang juga dapat mengarahkan mereka untuk mendapatkan jawaban yang benar. Itu juga memungkinkan kita untuk bertanya bagaimana mereka mendapatkan jawaban yang mereka dapatkan.

Ini dikombinasikan dengan pekerjaan sebelumnya, kami temukan, adalah cara terbaik untuk menyaring kandidat.

UPDATE 2016/06/15

Kami telah mengubah proses kami secara signifikan dalam cara kami mempekerjakan pengembang.

Fase 1: Wawancara telepon 15 menit di mana kami mengajukan 7 pertanyaan. 2 yang pertama adalah "Apa hal paling menyenangkan yang pernah Anda kerjakan?" (tidak harus terkait pemrograman) dan "Apa kode Anda untuk bersenang-senang di waktu luang Anda?".

Fase 2: Proyek mini yang mereka selesaikan sendiri. Kami kemudian melakukan pembagian layar dengan mereka dan mereka menunjukkan kepada kami apa yang telah mereka buat. Selama berbagi layar, kami juga membuat mereka melakukan dua perubahan pada proyek mereka dan kemudian menonton mereka mengerjakannya dan membuatnya bekerja.

Fase 3: Wawancara langsung.

Proses ini memungkinkan kita untuk mengetahui budaya yang cocok segera (fase 1). Jika mereka dapat melakukan pekerjaan dan benar-benar menjalankan pembicaraan mereka (tahap 2) Akhirnya, pastikan nilainya sesuai dengan apa yang kita cari (fase 3).

RDL
sumber
1
Ini agak cemerlang. Saya suka itu!
davidhaskins
3
Meskipun saya telah dalam banyak wawancara yang berubah menjadi hal-hal sepele. Berhati-hatilah untuk tidak terjebak pada sedikit sysntax khusus ini dan masuk ke pemahaman skala besar mereka. Apalagi jika mereka diduga memiliki sedikit bakat atau minat. hasilnya saya tidak mau bekerja untuk mereka, dan saya yakin itu saling menguntungkan.
John Nicholas
"Mengizinkan seseorang untuk melakukan proyek praktis pada waktu mereka sendiri tidak berarti mereka yang melakukannya" - Benar, tetapi saya belum menemukan seseorang yang cukup berani untuk diwawancarai dan ditanyai kode yang mereka miliki. sedang ditulis. Jika itu terjadi, mereka tidak akan melalui wawancara dan masa percobaan mereka, tetapi saya dapat mempertimbangkan kembali pendekatan saya.
pdr
@ John Setuju, tidak mungkin "oh, Anda lupa koma di sana". Seperti yang saya sebutkan itu adalah untuk mendapatkan pemahaman tentang bagaimana hal pendekatan dan jika mereka mengerti bahasa. Jika mereka tahu barang-barang mereka pasti pindah ke hal-hal yang lebih besar.
RDL
2
@RDL, Sebagian besar proses wawancara kami dirancang untuk menjadi agak menyenangkan bagi jenis pengembang yang kami cari dan neraka untuk sisanya. Anda tahu bagaimana para pengembang yang baik tidak bisa menolak tantangan.
pdr
4

Anda mungkin ingin melihat Cyber-Dojo Jon Jagger yang fantastis .

Ini adalah lingkungan terintegrasi berbasis web yang dirancang untuk melakukan praktik yang disengaja dari Test Driven Development dan belajar tentang dinamika tim. Ini memiliki banyak tugas pemrograman kecil (kata) dan mendukung berbagai bahasa, dari Python dan Ruby ke Java dan C ++.

Tidak seperti IDE yang dirancang untuk produktivitas, tidak ada penyelesaian kode, penyorotan sintaksis atau auto-refactoring, sehingga Anda bisa melihat apa yang dapat dilakukan oleh orang yang diwawancarai tanpa ini.

Yang terbaik adalah, setelah melakukan kata, Anda kemudian dapat kembali dan melihat perkembangan merah / hijau (atau mungkin tidak jika mereka tidak melakukan TDD * 8 ') dari masing-masing kata. Setiap kompilasi / tes melakukan perubahan pada repositori git bersama dengan hasil tes.

Saya pikir menggunakan ini untuk wawancara tes pengkodean bisa memberi tahu Anda banyak tentang tidak hanya kemampuan kandidat untuk memecahkan masalah, tetapi juga pendekatan mereka untuk pemecahan masalah dan proses yang mereka gunakan ketika tidak dibatasi oleh faktor-faktor eksternal, cukup pilih kata yang sesuai dengan waktu yang Anda inginkan kandidat habiskan untuk itu.

Jika Anda ingin server CyberDojo Anda sendiri, seluruh proyek dapat ditemukan di github dan bahkan ada mesin virtual alat Turnkey Linux yang ditautkan dari sana, yang berarti bahwa dengan asumsi Anda sudah menginstal VMware player atau VirtualBox , Anda dapat menjalankan dan menjalankannya di dalam beberapa menit mengunduh alat!

Mark Booth
sumber
3

Saya hanya mewawancarai perusahaan yang pernah melakukan ini. Mereka memberikan lembar pertanyaan 6 atau 7 masalah. Instruksi adalah membuat metode untuk menyelesaikan setiap masalah.

Salah satu bagian dari tugas adalah untuk menyadari bahwa Anda dapat menggunakan kembali kode. Masalah dapat menggunakan kode dari solusi lain. Itu juga tidak berurutan. Misalnya, pertanyaan 3 dapat ditulis menggunakan metode yang digunakan untuk pertanyaan 5.

Saya sarankan mencoba sesuatu seperti itu.

Adapun pertanyaannya? Beberapa pertanyaan awal di situs Project Euler bagus.

Anda juga bisa mencoba permainan sederhana jika Anda ingin melihat bagaimana mereka dapat menyatukan proyek.

Atau, jika Anda tidak ingin membuat sesuatu, minta mereka mengirimi Anda beberapa kode dari tugas akhir.

Tyanna
sumber
3

Untuk meminta orang menyelesaikan proyek, Anda harus memiliki serangkaian keterampilan khusus yang ingin Anda evaluasi dalam pikiran dan merancang proyek untuk menguji keterampilan tersebut.

Salah satu contohnya adalah mengambil paragraf teks ini dan mengembalikan daftar kata-kata unik yang diabjadkan. Setelah setiap kata beri tahu saya berapa kali kata itu muncul dan dalam kalimat apa kata itu diterima.

Apa yang kamu cari dengan pertanyaan ini? Berapa banyak cara yang ada untuk menyelesaikannya, dan apa yang masing-masing pendekatan katakan kepada Anda tentang orang yang menulis jawabannya? Apakah keterampilan yang ditunjukkan oleh jawaban yang efektif untuk pertanyaan ini adalah keterampilan yang sama yang paling penting bagi bisnis Anda?

Saya tidak ingin jawaban atas pertanyaan ini; Saya hanya ingin Anda memikirkan jawaban sebelum Anda mengajukan sekelompok kandidat ke proses Anda. Jika Anda tahu keterampilan apa yang Anda cari, membuat pertanyaan untuk mencari keterampilan itu tidak sulit. Jika Anda menggunakan pertanyaan orang lain tanpa pemahaman menyeluruh tentang apa yang dirancang untuk dievaluasi (jika ada), Anda benar-benar hanya membodohi diri sendiri dan membuang-buang waktu semua orang.

Caleb
sumber
Maaf telah menyia-nyiakan waktu Anda.
bigtang
1
@ Bigtang, bukan itu sama sekali. Maaf jika kata-kata di atas muncul sebagai kata-kata kasar - saya bisa melihat bagaimana mungkin - tetapi tujuan saya adalah untuk membangun sebuah kasus untuk membuat proyek Anda sendiri berdasarkan keterampilan yang Anda cari di karyawan baru. Anda dapat membuat proyek kecil dari hampir semua hal, tetapi untuk membuatnya bermanfaat bagi Anda dan orang yang diwawancarai, persyaratan harus didorong oleh keterampilan yang paling Anda hargai.
Caleb
Dihapus sama sekali kalimat pertama (Hormat, jika Anda tidak cukup pintar untuk membuat proyek yang layak sendiri, apa yang membuat Anda berpikir Anda cukup pintar untuk mengevaluasi pengajuan kandidat? "). Tidak benar-benar menambahkan apa pun nilai dan memang tampak agak rantish
Michael Durrant
0

Salah satu contohnya adalah mengambil paragraf teks ini dan mengembalikan daftar kata-kata unik yang diabjadkan. Setelah setiap kata beri tahu saya berapa kali kata itu muncul dan dalam kalimat apa kata itu diterima.

Dalam bahasa apa mereka menulis ini? Jika mereka keluar dari sekolah yang sangat berfokus pada C, ini tidak akan secepat menulis seperti yang mengajarkan Python / Perl / Ruby dll ... Atau bahkan Java atau C #. Meskipun demikian, ini adalah ujian kecil yang bagus.

Saya menyarankan beberapa yang lebih mudah sebenarnya selama wawancara. Tidak ada pertanyaan jebakan. Saya dengan TMN untuk yang ini. Beri mereka beberapa fungsi yang melakukan tugas-tugas dasar dan tanyakan apa yang mereka lakukan (membaca kode orang lain). Kemudian beri mereka beberapa tugas dasar (<20 baris) untuk menulis dalam bahasa pilihan mereka. Itu harus cukup untuk entry level untuk mengetahui apakah mereka dapat kode atau tidak (pada posisi entry level). Itu bersama dengan wawancara dan IPK harus memberi Anda ide yang baik tentang apa yang perlu Anda ketahui.

Membangkitkan
sumber
1
Saya tidak menemukan bahasanya kritis, itu bahkan dapat dilakukan dengan pseudo-code. Gagasan utamanya adalah untuk melihat apakah karyawan yang diduga "masuk ke sana" dan menunjukkan tanda-tanda pemecahan masalah yang baik.
Jonas Byström
Terus terang, bahasa apa pun dengan split () dan array / daftar (dengan push / append) akan membuat ini sepele. Izinkan programmer C untuk 'menganggap' split () dan daftar, dan itu menjadi sepele :-)
ChuckCottrill
-1

Mintalah mereka menerapkan Permainan Kehidupan Conway untuk bahasa apa pun yang Anda lihat, menggunakan paradigma desain bahasa itu.

Game of Life Java atau C # Conway harus berorientasi objek, LISP atau F # akan berfungsi, dll.

George Stocker
sumber
2
Berapa lama Anda memberi mereka untuk menyelesaikan ini?
Pekerjaan
Butuh waktu sekitar 4 jam untuk melewati seluruh implementasi OO itu, tapi saya sudah melakukannya sekitar belasan kali sekarang. Jika Anda ingin melihat bagaimana mereka berpikir dan seberapa jauh mereka mendapatkan (dan apakah mereka menulis kode yang dapat diuji atau tidak), beri mereka lebih sedikit waktu dari itu. Jika Anda melakukannya sendiri, beri mereka waktu 45 menit dan lihat seberapa jauh mereka dapatkan dan mengapa mereka memilih jalan yang mereka lakukan. Ini adalah salah satu masalah yang Anda ingin mereka ketahui sebelumnya sehingga mereka tidak benar-benar hilang, bahkan mendorong mereka untuk mencobanya sendiri. Ini mengungkapkan banyak tentang seorang programmer.
George Stocker
8
Meminta seorang kandidat untuk menulis Permainan Kehidupan Conway menguji seberapa baru mereka di perguruan tinggi, atau menulis dan mempelajari masalah itu. Anda akan menyewa @George Stocker karena dia telah menulisnya belasan kali. Seberapa berkorelasi Game Game dengan pekerjaan pengembangan dunia nyata?
ChuckCottrill