Sebagai bagian dari proses wawancara, kami awalnya meminta kandidat untuk melakukan 'FizzBuzz' saat ini persentase kandidat yang dapat menjawab FizzBuzz dengan benar telah meningkat secara dramatis - ini mungkin disebabkan oleh popularitasnya di web.
Sekitar setahun yang lalu, sebagai pertanyaan kedua kami mulai mengajukan pertanyaan yang sangat mirip dengan FizzBuzz asli. Pertanyaannya dirancang sesederhana FizzBuzz asli, dan juga menilai kemampuan tertentu dari kandidat, khususnya kemampuan untuk memesan dan memprioritaskan secara bermakna dan logis serangkaian "aturan bisnis" yang telah disediakan di beberapa pesanan sewenang-wenang. Kata-kata dari pertanyaan pada awalnya tampak sedikit ambigu, yang mungkin menyulitkan penutur bahasa Inggris non-asli, tetapi jika dipikirkan dapat diselesaikan dengan benar - Juga memberikan kandidat kesempatan untuk mengajukan pertanyaan untuk klarifikasi, yang selalu merupakan hal yang baik .
Kami menemukan ini keterampilan yang sangat penting untuk dimiliki sebagai pengembang, karena pengembangan perangkat lunak biasanya didasarkan pada persyaratan fungsional yang diturunkan tanpa urutan tertentu dari waktu ke waktu, yang dapat menempatkan kendala dan kondisi pada area lain dari perangkat lunak tanpa menunjukkan secara eksplisit dan itu adalah pekerjaan pengembang yang cerdik untuk paling tidak menyelidiki potensi masalah dan konflik terkait dengan implementasi.
Apa yang kami temukan adalah bahwa sedikit di atas 65% dari kandidat (ukuran sampel 38) yang lulus FizzBuzz sepenuhnya gagal FizzBuzz v2.0 Biasanya para kandidat ini akan terdeteksi kemudian dalam proses, tetapi tampaknya cara yang bagus untuk mendeteksi mereka sejak dini.
Pertanyaan saya bukan tentang apakah FizzBuzz sudah kedaluwarsa, tetapi faktor-faktor apa yang dapat berkontribusi terhadap begitu banyaknya kandidat yang gagal dalam pertanyaan FizzBuzz v2.
- Apakah pertanyaannya terlalu mendua?
- Apakah tekanan lingkungan wawancara menurunkan kemampuan seseorang untuk berpikir kritis sampai tidak mampu menyelesaikan tugas sepele seperti itu?
Pertanyaan:
Tulis rutin dalam bahasa pemrograman favorit Anda yang akan mengambil daftar string sebagai input, dan untuk setiap string dalam daftar akan melakukan salah satu dari yang berikut:
- Hanya cetak Fizz jika string berisi huruf A
- Cetak hanya Buzz jika string berisi huruf B
- Cetak hanya BuzzBuzz jika string berisi A dan B
- Hanya cetak FizzFizz jika string tidak mengandung A dan B
- Cetak hanya FizzBuzz jika string hanya berisi satu A dan hanya satu B
Beberapa pertanyaan umum yang diajukan oleh kandidat adalah:
- Haruskah peka terhadap huruf besar-kecil?
- Apakah "mengandung A dan B" berarti A harus datang sebelum B
- Apa yang harus dicetak jika tidak ada poin yang terpenuhi?
- Apa yang harus terjadi jika lebih dari satu syarat dapat dipenuhi?
Kami menemukan bahwa sebagian besar kandidat yang berhasil menyelesaikan pertanyaan, tidak bertanya apa-apa, mereka hanya melakukannya seperti yang mereka lakukan pada FizzBuzz.
Jawaban:
Ini memiliki potensi untuk menjadi tes yang jauh lebih baik daripada FIZZBUZZ, tetapi jika Anda memiliki konsep jawaban yang benar, ini adalah tes terburuk di dunia. Tes-tes ini memiliki nilai yang sangat sedikit dalam wawancara untuk memulai.
Jika seorang kandidat menjawabnya dengan "Benar" tanpa mengajukan pertanyaan, maka Anda memiliki masalah bahwa pemilihan kandidat akan memilih jenis programmer yang salah - Ia tidak dapat mengidentifikasi persyaratan yang ambigu, atau tidak dapat memahami bahwa kebanyakan orang tidak dapat menulis persyaratan yang tidak ambigu. . Tidak masalah jika programnya sempurna secara teknis di setiap aspek, kemungkinan dia tipe orang yang akan memberikan perangkat lunak dengan "Saya tidak peduli itu bukan apa yang Anda inginkan, itulah yang Anda minta".
Bagian dari tes di sini adalah urutan prioritas aturan. Anda tidak menentukannya. Input "ABC" dapat mencetak Fizz, Buzz, BuzzBuzz atau FizzBuzz - salah satunya benar
Kandidat yang akan saya ambil adalah orang yang menjawab (sebagian besar) benar, tetapi mengajukan banyak pertanyaan dan, idealnya, melakukan banyak "mengelak" di papan tulis.
Sebagai contoh, saya akan mengeksplorasi pemahaman saya tentang persyaratan tersebut dengan memberikan Anda serangkaian sampel teks, dan menanyakan kepada Anda apa yang Anda harapkan akan dicetak, dan mengapa. - Diskusi tentang input contoh "ABC" saya harus mengarah pada beberapa insites yang berguna bagi Anda.
Sama seperti FIZZBUZZ, hasil tes ini hanya sebaik pengamatan Anda tentang bagaimana hasil itu diperoleh - hasilnya tidak relevan.
Saya akan men-tweak sedikit - hanya untuk membuatnya lebih menarik - mengambil yang 'hanya'. Itu tercakup dalam baris di atas ("cetak salah satu dari yang berikut"), dan lihat berapa banyak orang yang menanyakannya. Jika kandidat melewatkan "hanya" dan Anda punya waktu, tunjukkan dan lihat apa yang terjadi. Jika dia berurusan dengan "hanya", hapus dari persyaratan dan minta mereka untuk mengubah kode.
sumber
Kata "hanya" dalam persyaratan Anda menciptakan kontradiksi dalam semua pertanyaan.
Dengan demikian, pertanyaan Anda menguji persyaratan saat berkumpul di bawah tekanan, apakah Anda yakin ingin menguji kombinasi keterampilan itu?
Jika Anda ingin menguji pengumpulan persyaratan, saya sarankan membuat SALAH satu pertanyaan yang mendua. Jika Anda ingin pengganti FizzBuzz, hapus ambiguitasnya.
Memprioritaskan aturan bisnis hanya dapat dilakukan dengan pengetahuan khusus domain - kecuali jika Anda memasukkan beberapa konteks sederhana untuk apa yang Anda lakukan (mungkin itu adalah kupon yang harus ditebus dengan berbagai nilai), tidak ada dasar bagi pengembang untuk membuat keputusan sendiri.
Tetapi meminta seseorang untuk meminta klarifikasi di mana melakukan hal itu memiliki risiko signifikan terhadap hasil yang tidak diinginkan, mungkin bukan cara terbaik untuk mengukur keterampilan mereka dalam mengenali batasan pengetahuan mereka. Mereka mungkin berpikir bahwa lebih aman untuk menebak dan salah, daripada menunjukkan bahwa Anda tidak kompeten dalam persyaratan menulis, atau jika tidak ada pewawancara yang pengembang, diberi label memiliki sikap buruk.
sumber
Dengan ambiguitas persyaratan, seseorang tidak dapat menyelesaikan v2.0 dengan benar tanpa mengajukan pertanyaan.
sumber
Jika Anda ingin menghapus ambiguitas, Anda dapat mengubah persyaratan menjadi:
Tulis rutin dalam bahasa pemrograman favorit Anda yang akan mengambil daftar string sebagai input, dan untuk setiap string dalam daftar lakukan hal berikut:
sumber
Ya, pertanyaannya terlalu ambigu untuk dijawab tanpa klarifikasi. Namun, aturan tambahan mengatakan bahwa dalam kasus ketika beberapa aturan berlaku, program Anda harus memilih hal yang paling spesifik, harus menghapus ambiguitas.
Ini lebih merupakan indikasi kandidat "menjejalkan" FizzBuzz: stres atau tidak, program ini sangat sederhana.
Saya pikir FizzBuzz yang dimodifikasi tidak dapat dibandingkan dengan yang asli, karena solusi idealnya berbeda: meskipun rangkaian
if-then-else
tetap dapat diterima, saya pikir solusi berbasis tabel lebih tepat untuk masalah ini:Ukuran ruang masalah adalah
3x3
, tidak2x2
, sehingga peta ke meja jauh lebih mudah daripada FizzBuzz asli. Bahkan, saya menemukan solusi berbasis tabel untuk masalah FizzBuzz asli lebih sulit untuk dipahami.sumber
Dua hal di sini:
sumber
Saya telah melihat proses wawancara yang mendorong programmer untuk berpikir keras dan mengajukan pertanyaan untuk melihat proses berpikir mereka. Saya suka proses ini lebih baik.
Saya membaca fizzbuzz v2.0 ini dan saya akan bertanya tentang persyaratan # 3 dan # 5 di sana. Saya tidak tahu tentang orang lain tetapi saya menemukan di bidang teknik saya tidak ingin ambiguitas jadi saya bertanya. Karena kemudian di telepon (berkode dan semuanya), saya tidak ingin mengetahui bahwa saya harus membuat asumsi dan itu salah.
sumber
Mungkin cara termudah untuk menghindari ambiguitas adalah dengan menunjukkan beberapa contoh:
"A" mengembalikan "Fizz" "aAbA" mengembalikan "Fizz" "B" mengembalikan "Buzz" "aBbB" mengembalikan "Buzz" "AB" mengembalikan "FizzBuzz" "ABaabb" mengembalikan "BuzzBuzz" "" mengembalikan "FizzFizz" "ab "mengembalikan" FizzFizz "
sumber
Alih-alih memberikan kandidat persyaratan yang kontradiktif / tidak jelas, tanyakan kepada mereka bagaimana mereka menangani situasi tersebut. Kalau tidak, Anda membuat diri Anda terlihat tidak kompeten atau lebih buruk menempatkan orang yang kompeten pada balok keseimbangan berbahaya "bagaimana saya mendapatkan jawaban yang saya butuhkan tanpa menyiratkan bahwa pertanyaan wawancara ini atau orang yang bertanya itu bodoh?"
Either way, itu menjengkelkan karena semua jalan keluar. Wawancara adalah proses yang cocok dan maksud saya, jalan 2 arah. Pertanyaan langsung dan kejelasan niat jauh lebih penting daripada menempatkan kandidat di bawah pressure cooker, IMO. FizzBuzz adalah contoh pertanyaan koding yang bagus karena pendek dan manis. Jangan gunakan kembali secara langsung. Tulis pertanyaan sederhana seperti itu yang mengikuti model itu.
Tetapi untuk FFS jangan pandai tentang hal itu dan sembunyikan tes nyata di balik tes lain. Tanyakan kepada orang-orang bagaimana mereka menangani masalah sialan itu. Seorang pengembang yang berpengalaman akan berurusan dengan persyaratan yang ambigu berulang kali dan dengan senang hati akan memberi tahu Anda strategi mereka. Anda bahkan mungkin belajar sesuatu.
Dan jangan menganggap semua orang ingin menggunakan papan tulis atau periode tulisan tangan yang nyaman. Beberapa dari kami telah mengetik sejak kami berusia 12 (dengan banyak terima kasih kepada Space Quest). Aku bahkan tidak bisa berpikir jernih dengan pena atau spidol di tanganku. Ini 20-freaking-13, ada apa dengan papan tulis? Ketika orang-orang memberi saya pena dan kertas dan meminta saya melakukan tes-kode, sulit untuk menahan tawa.
sumber
Saya pikir ini adalah pertanyaan wawancara yang bagus. Persyaratannya tidak jelas, seperti yang sering terjadi dalam kenyataan. Anda memeriksa apakah kandidat cukup cerdas untuk menyadari hal ini (bahkan di bawah tekanan), bahwa dia tidak takut untuk mengajukan pertanyaan yang mereka anggap perlu, dan mampu menempatkan persyaratan ke dalam struktur yang masuk akal. Dan itu sedikit memberi tahu tentang kemampuan pemrograman mereka, meskipun Anda juga harus mengajukan beberapa masalah yang lebih rumit yang mengandung rekursi dan petunjuk, karena masalah ini terlalu mudah.
Namun, saya sedikit khawatir tentang kandidat "sukses" yang tidak mengajukan pertanyaan. Saya akan mencoba mencari tahu apakah mereka menyadari Anda dapat menerapkan hingga 4 aturan dalam beberapa kasus dan bahwa tidak ada dalam pertanyaan yang akan menyelesaikan ambiguitas itu, dan minta mereka menjelaskan bagaimana mereka mengatasinya. Mungkin pertanyaan Anda tidak cukup rancu untuk memaksa mereka bertanya, atau mungkin Anda harus meminta mereka berpikir keras.
BTW: Saya merasa aneh bahwa Anda berbicara tentang "solusi yang benar". Jika Anda mengucapkan pertanyaan seperti itu, maka sah untuk mencetak "Fizz", "Buzz", "BuzzBuzz" atau "FizzBuzz" jika Anda mendapatkan "AB". Jadi IMHO solusi apa pun tanpa pertanyaan yang diajukan jelas salah.
sumber