Ketika datang ke pertanyaan "tes wawancara", subjek FizzBuzz sering muncul. Ada juga pos Horor Pengodean tentang hal itu.
Sekarang, jika Anda repot-repot membaca situs seperti ini, kemungkinan besar Anda tidak akan berada dalam demografi pemrogram yang akan menemukan FizzBuzz apa pun selain sepele.
Tetapi apakah benar 99% programmer akan berjuang dengan itu?
Benarkah?
Apa bukti yang mendukung hal ini?
Beberapa contoh kehidupan nyata akan sangat membantu dalam menjawab pertanyaan ini.
Jawaban:
99%? Tidak. Persentase yang signifikan? Iya. Dari pengalaman langsung saya sendiri dalam mewawancarai orang-orang, saya dapat memberikan kesaksian tentang hal ini. Ini mungkin tampak tidak berarti bagi Anda, tetapi ada banyak orang di bidang pemrograman yang telah memalsukan jalan mereka selama bertahun-tahun dan melamar posisi non-entry level dan gagal yang ini.
Bahkan jika Anda BISA dengan mudah menyelesaikannya, tetapi Anda memberi saya statis besar tentang diminta untuk melakukan tugas kasar seperti itu akan diperhitungkan terhadap Anda. Berada dalam tim berarti harus kadang-kadang melakukan hal-hal yang mungkin tidak Anda sukai tetapi perlu. Jika benar, sebelum kita mulai bekerja bersama, Anda pikir akan lebih baik untuk mencoba dan menegaskan status khusus Anda untuk melakukan sesuatu yang saya minta Anda lakukan maka itu akan bertindak sebagai tanda terhadap Anda.
Saya tidak peduli seberapa elegan solusi Anda (walaupun itu akan menyenangkan) tetapi melihat Anda menikamnya di papan tulis dan berbicara melalui Anda menunjukkan bahwa Anda setidaknya mau mengambil bacokan itu . Jika Anda marah dan mengatakan sesuatu seperti "Saya seorang pemecah masalah, bukan monyet kode!" maka Anda akan dijatuhkan pasak.
Saya telah meminta orang yang diwawancarai untuk menolak bahkan untuk mulai mencobanya. Cukup tolak saja. Tidak. Eh Tidak akan melakukannya Saya mengajukan satu atau dua pertanyaan sopan, berterima kasih atas waktu mereka dan menutup wawancara.
Saya mengatakan ini sebagai manajer dan sebagai pengembang.
sumber
Saya berpikir bahwa 99% programmer yang melamar pekerjaan (dan tidak mendapatkannya) mungkin berjuang untuk itu. Tetapi tidak 99% programmer yang produktif memegang pekerjaan.
Itulah sifat dari proses pencarian kerja modern kita. Banyak orang yang mendaftar tidak memenuhi syarat.
Posting Coding Horror itu juga berbicara tentang cara kita mengajar Ilmu Komputer saat ini. Di masa lalu (khususnya di MIT), Anda diminta untuk mempelajari hal-hal seperti Lisp, yang cukup banyak mengharuskan Anda untuk memahami konsep seperti rekursi.
Saat ini orang diajarkan Java karena banyak digunakan dalam industri, dan fokusnya telah beralih ke sintaks daripada pemikiran pemrograman yang mendalam. Saya tidak suka Java; pada kenyataannya, saya pikir itu adalah bahasa pemrograman pertama yang ideal. Tetapi saya belum melihat instruktur saya mengajarkan prinsip pemrograman yang mendalam dengannya.
sumber
Aku benci mengatakan ini tetapi
Alasan utama saya melihat pertanyaan pemrograman gagal dijawab adalah kesalahan penanya daripada penjawab.
Saya dapat dengan jelas mengingat satu wawancara di mana saya ditanya bagaimana membuat algoritma pencarian koleksi tertentu yang akan berjalan dalam waktu yang konstan (Jumlah pencarian yang sama terlepas dari berapa banyak item dalam koleksi). Saya meraba-raba dan menemukannya selama 20 menit sebelum menyerah. Saat itulah jenius melakukan wawancara melanjutkan untuk menunjukkan jawaban sebagai sesuatu yang beroperasi dalam waktu yang hampir konstan, tetapi masih dalam waktu yang tidak konstan. Agak seperti mengatakan "Beri aku jawaban nol" dan kemudian menerima 0,1.
Singkatnya adalah bahwa saya telah melihat terlalu banyak kasus di mana seseorang yang diwawancarai mengajukan pertanyaan yang gagal memenuhi kriteria berikut:
Serius (1), saya pikir meminta orang untuk menulis kode di bagian verbal wawancara itu bodoh.
Serius (2), saya pikir mewawancarai orang tanpa meminta mereka untuk menulis kode juga bodoh.
Serius (3), Anda harus memberi mereka "pekerjaan rumah", meminta mereka untuk membawa sampel kode, atau memberi mereka laptop dan beberapa pertanyaan dan kantor yang tenang untuk mengerjakannya. Kemudian tinggalkan mereka sendirian saat mereka mengerjakannya. Saya biasanya menggunakan pendekatan yang terakhir karena membatasi kemampuan mereka untuk mendapatkan bantuan dari luar (cheat) dan saya dapat mengatur waktu.
sumber
int? result; for (int i = 0; i < int.MaxValue; i++) { T item = (i < array.Length) ? array[i] : someDummyItem; if (item == whatWereLookingFor) result = i; } return result;
- waktu konstan :)Yang perlu Anda lakukan adalah mencari di FizzBuzz. Ada gelombang besar posting blog di atasnya. Secara umum, blogger mengatakan, "Saya mengatakan kepada orang-orang untuk menulisnya dalam [beberapa bahasa] dan ini adalah jenis kesalahan yang mereka buat:" dan kemudian membuat daftar beberapa jebakan. Kesenangan dimulai pada komentar di mana orang mengatakan "ha! Itu sepele dalam [beberapa bahasa lain], yang harus Anda tulis adalah ini:" diikuti oleh kode. Komentar berikutnya selalu menemukan bug di yang pertama. Sepertinya beberapa dev yang sangat baik tidak melakukannya dengan benar pertama kali, dalam bahasa apa pun. Beberapa kesalahan:
Ketika saya merekrut, saya meminta orang-orang untuk memberi kode di papan tulis untuk saya, tidak ada yang sedekat itu (saya tahu, Anda tidak berpikir itu rumit) dan banyak kandidat gagal total. Maksud saya suka menulis vb-style If, Then, End If tetapi menempatkan braces juga (hanya untuk berada di sisi yang aman saya kira) atau menulis C # (dan bertanya terlebih dahulu, C #?) Tetapi tidak memiliki satu titik koma di mana pun. Jangan mulai saya dengan kesalahan logika!
sumber
Saya telah membaca artikel Coding Horror yang Anda sebutkan, dan pendapat saya adalah bahwa Jeff benar ... tetapi kapan terakhir kali ia diwawancarai?
Ketika Anda diwawancarai, Anda biasanya dalam stres tinggi, dan Anda sering harus menjawab pertanyaan-pertanyaan teoritis (tidak ada kecerdasan, tidak ada google, tidak ada resharper, ... hanya ingatan Anda yang terganggu oleh stres). Itu sama dalam tes. Stres tidak membantu Anda.
Saya perhatikan bahwa satu-satunya cara untuk mengetahui apakah seseorang cocok untuk suatu posisi adalah bekerja dengannya untuk sementara waktu ... Ambil saja 10 orang terakhir yang Anda sewa dari 100 (mungkin lebih), berapa banyak yang benar-benar bagus mempekerjakan???
Seorang majikan harus menyewa pemecah masalah, bukan monyet kode yang tahu tentang modulos.
Anda tidak dapat menguji "untuk sementara waktu semua pelamar", jadi mewawancarai mereka diperlukan. Itu sebabnya saya memfokuskan pertanyaan saya pada hal itu (pemecahan masalah) dan melakukan pengecekan referensi sebelumnya.
Pendapat saya adalah bahwa FizzBuzz berbahaya bagi perusahaan yang mencari pengembang untuk menahan pertumbuhannya.
sumber
Saya baru-baru ini ditugaskan untuk mewawancarai lebih dari 50 programmer untuk posisi senior di mana mereka akan bekerja sebagian besar dengan PHP.
Saya melemparkan masalah fizzbuzz pada ujian skrining, kebanyakan untuk menghibur diri saya dan karena saya ingin sepuluh pertanyaan bagus dan hanya punya sembilan. Maksud saya, pada saat itu adalah untuk menunjukkan kepada orang-orang bahwa kita dapat bersenang-senang juga, bahkan pada pertanyaan wawancara.
80% dari pelamar memecahkan masalah, tetapi tidak menggunakan operator modulus.
15% dari pelamar tidak dapat memecahkan masalah.
5% pelamar menyelesaikan masalah menggunakan operator modulus.
Sementara pengambilan sampel saya sangat terbatas (50 pelamar dari satu negara), saya dapat memberi tahu Anda bahwa:
95% dari mereka memiliki gelar BS atau lebih tinggi dalam kurikulum CS (universitas di sini bersaing dengan mencoba membuat CS terdengar lebih spektakuler).
Saya benar-benar kagum. Yah, ketakutan .. tapi kagum. Saya tidak berpikir saya akan mendekati mereproduksi hasil, karena masalahnya menjadi sangat populer. Ini menunjukkan kepada saya bahwa 5% dari pelamar saya mungkin bukan programmer super, tetapi setidaknya mereka membaca blog terkait pemrograman.
sumber
x - (x/y)*y
?Dalam putaran perekrutan terakhir saya, saya memiliki 3 pekerja konstruksi dengan 0, saya ulangi nol, pendidikan pemrograman atau pengalaman berlaku untuk posisi pengembang perangkat lunak. * Jadi itu bagian bawah laras. Jika Anda mengasumsikan distribusi keterampilan yang normal, maka Anda dapat melihat bagaimana tingkat keterampilan rata-rata akan sangat rendah dan bahkan 'di atas rata-rata' (di antara pelamar) masih akan relatif buruk.
Sekarang, jika Anda hanya membuat pelamar yang memiliki kemampuan pemrograman, Anda akan menemukan bahwa Anda sekarang memiliki:
Selain itu, beberapa pertanyaan 'fizzbuzz' yang saya lihat spesifik untuk domain. Anda dapat secara progresif mengembangkan dengan bahasa / kerangka x selama beberapa tahun (karenanya z tahun pengalaman dengan x) dan belum menemukan bagian-bagian tertentu darinya (pengembang perpustakaan tidak tahu banyak tentang pengembangan komponen UI untuk misalnya.)
Demikian juga, banyak pengembang melakukan pengembangan pemeliharaan hari ini, sehingga keterampilan arsitektur / desain mereka mungkin lemah di beberapa daerah.
Sekarang, saya tidak yakin apakah 99% akurat, tetapi IME masih cukup tinggi. Setidaknya dalam kisaran 80%.
* Tidak, kami tidak menelepon atau bahkan melihat kedua aplikasi ini.
sumber
Ya benar Mungkin tidak 99% tetapi masih cukup tinggi. Saya biasa mewawancarai mahasiswa ilmu komputer untuk magang dan bekerja penuh waktu. Saya akan mewawancarai sekitar 25 siswa di sebuah perguruan tinggi. Kami diberitahu untuk tidak menanyakan pertanyaan yang sama, karena para siswa berbicara. Saya segera mengetahui bahwa itu tidak masalah, karena saya hanya akan mendapatkan 3 atau 4 siswa dari 25 yang dapat menjawab pertanyaan pertama saya. "Tulis strcmp"
Saya meminta mereka untuk menulis fungsi untuk membandingkan dua string. Mungkin menggunakan fungsi untuk mengurutkan kata-kata untuk kamus. Anda akan kagum dengan jumlah siswa yang tidak mengerti bagaimana membandingkan dua kata, apalagi tahu bagaimana menulis fungsi. Dan beberapa siswa ini mengklaim mereka mendapatkan nilai A di CSc.
Masalahnya adalah pemrograman SANGAT SULIT. Banyak orang suka berpikir mereka tahu bagaimana memprogram, tetapi mereka tidak tahu.
sumber
Beberapa pemikiran:
Saya tidak akan menentang seseorang jika program mereka memiliki beberapa bug tetapi mereka jelas memiliki ide yang tepat. Debugging adalah bagian dari pemrograman.
Saya pikir sangat menyedihkan bahwa begitu banyak orang melamar pekerjaan yang mereka tidak tahu tidak bisa mereka lakukan. Bagiku itu seperti masalah dengan ekonomi.
Sangat mudah untuk mengajukan pertanyaan buruk kepada orang-orang, di mana satu-satunya jawaban yang "benar" adalah yang akan diberikan pewawancara.
sumber
Tes ini dengan sangat baik mencakup beberapa hal yang ingin saya ketahui tentang seorang programmer yang mungkin saya pekerjakan:
Untuk menguraikan poin terakhir, ada banyak solusi untuk fizz-buzz. Apakah Anda menggunakan keterbacaan? Kecepatan? Keringkasan? Apakah Anda mencoba menyelesaikan penulisan program dengan cepat? Bagaimana seorang programmer menyerang masalah sederhana ini sangat jelas. Jika seorang programmer tidak dapat memilih solusi dan menyelesaikannya sampai akhir, apa artinya itu memberitahu Anda tentang bagaimana orang ini akan melakukan tugas nyata?
sumber
Sayangnya, banyak orang dengan resume yang tampak mengesankan tampaknya tidak memiliki keterampilan pemrograman dasar. Saya telah melihat banyak kasus ketika orang yang mendaftar C dan C ++ pada resume mereka tidak dapat menjawab pertanyaan dasar tentang petunjuk.
sumber
Ada dua tipe orang yang saya harap FizzBuzz akan membantu saya menghindari.
Dalam kedua kasus itu, saya tidak terlalu peduli dengan implementasi yang sempurna. Tes yang perlu Anda lakukan dengan orang-orang yang melamar pekerjaan pengembang adalah bahwa mereka dapat memprogram sama sekali.
Yang mengatakan, saya mungkin tidak akan repot dengan tes khusus itu karena beberapa alasan sekarang. Pertama itu sangat terkenal dan salah satu dari kelompok di atas akan cepat mencobanya. Kedua saya akan lebih suka menggunakan pertanyaan layar ponsel Steve Yegge untuk menyaring non-programmer sebelum kita sejauh membawa mereka. Jika seseorang mengenali pertanyaan-pertanyaan itu akan menyiratkan mereka telah membaca blog Steve Yegge yang akan menyarankan kepada saya mereka berada di 1% pengembang teratas yang menganggap serius profesi mereka dan tentu saja mewawancarai. Demikian juga jika seseorang memiliki perwakilan yang baik di sini atau di SO saya akan cenderung mewawancarai mereka.
sumber
Sulit untuk percaya bahwa pengembang tidak dapat membuat kode FizzBuzz sampai Anda melihat "sembilan-ke-lima" yang menyalin dan menempelkan pekerjaan mereka bersama dan dengan sadar berusaha untuk tidak menulis kode. Saya tidak percaya ketika saya mendengar salah satu pengembang senior kami mengajar pengembang C #, dengan 3 tahun "pengalaman", cara menggunakan Kamus. Antarmuka? Pola desain? stdout? YAGNI? Pimpinan saya belum pernah mendengar tentang YAGNI! Sungguh menakjubkan apa yang orang-orang ini tidak tahu.
Saya percaya itu sekarang. Saya juga berpikir ada terlalu banyak pengembang yang cukup melakukan.
sumber
Saya pikir bagian dari mengapa ini adalah pertanyaan yang begitu populer adalah karena ada lebih dari satu cara untuk menjawabnya, dan tergantung pada cara mana kandidat memilih untuk pergi dapat memberi Anda wawasan tentang bagaimana mereka membuat kode. Beberapa contoh hebat dapat dilihat di sini jika Anda memiliki perwakilan 10K di Stack Overflow.
Mengenai statistik 99%, periksa dari mana angka itu berasal. Mungkin bias. Jika didasarkan pada pemrogram entry-level yang mewawancarai untuk pekerjaan pertama mereka, maka ya saya bisa melihat itu menjadi mungkin, terutama jika sebagian besar kandidat mereka langsung keluar dari perguruan tinggi. Saya benar-benar dapat memikirkan seseorang yang mungkin akan menulis kondisi 100 jika pernyataan sebagai solusi untuk masalah itu.
sumber
Saya menemukan pernyataan bahwa 99% dari programmer tidak dapat memprogram atau untuk menyelesaikan tes pengkodean sederhana yang sangat berlebihan. Dalam kasus tes FizzBuzz, Anda pernah mengalami masalah ini sebelumnya dan dapat dengan mudah menyelesaikannya dengan operator modulo atau Anda belum pernah mengalaminya sebelumnya dan akan kesulitan dengannya. Ia tidak memberi tahu pewawancara apa pun tentang keterampilan pemrograman Anda.
Saya pikir masalah dengan banyak programmer tampaknya meninggalkan kesan buruk pada sebuah wawancara terletak pada sifat metode wawancara teknis. Pewawancara mengharapkan pelamar untuk menghafal dan langsung mereproduksi sintaksis bahasa, detail dan kompleksitas komputasi dari struktur data, arsitektur perangkat keras, pola desain, dll, dll. Area ilmu komputer / rekayasa perangkat lunak sangat luas. Mustahil dan tidak masuk akal untuk mencoba menghafal segalanya.
Di dunia nyata, kuncinya adalah untuk dapat memahami masalah pemrograman / desain yang ditugaskan untuk Anda dan untuk mengetahui di mana menemukan informasi (IDE Anda, halaman manual, buku, google, dll) bagaimana menyelesaikan masalah Anda. Namun ini adalah sesuatu yang tidak pernah diuji oleh pewawancara.
sumber
Saya masih seorang programmer yang relatif junior (saya telah mengkodekan uang selama ~ 2 tahun dan mengkode dalam kapasitas profesional sebagai tanggung jawab sampingan sekitar 2 sebelum itu) jadi gunakan garam yang cukup.
Saya punya pengalaman melakukan layar pertama untuk coders untuk Proyek Perusahaan Besar (kami agak tahu proyek itu hancur, tapi hei, mereka ingin membayar lagian). Sebagai satu-satunya programmer di perusahaan yang melakukan perekrutan, saya diberi tugas untuk meninjau resume dan menyaring pelamar.
Ini untuk proyek pemerintah jadi
mungkinmungkin tidak menarik pelamar paling berbakat, tapi saya tidak menerima satu aplikasi dari siapa pun dengan akun github yang benar-benar memiliki kode yang ditunjukkan, atau siapa pun yang memiliki portofolio, jadi saya menggunakan fizzbuzz ( secara harfiah masalah yang tepat) sebagai lulus pertama pada siapa saja yang tampak seperti mereka dapat memprogram.Saya membukanya dengan permintaan maaf semu yang menyatakan bahwa saya tahu itu bodoh tetapi saya hanya ingin melihat kode yang berfungsi, dan jika mereka mau, mereka bisa mengirim contoh lain dengan nilai yang sama atau lebih besar atau benar-benar apa pun, tetapi fizzbuzz itu sudah cukup.
Hasilnya: Saya tidak mendapatkan satu jawaban yang sebenarnya benar, yang mengejutkan mengingat volume jawaban di internet. Tidak ada yang peduli untuk menjiplak. Kami harus pergi dengan mempekerjakan orang-orang yang sebelumnya bekerja pada iterasi proyek sebelumnya yang gagal.
Setelah kejutan awal latihan dan kekecewaan tentang betapa kacau perangkat lunak / kontrak pemerintah, saya merasa jauh lebih baik dengan keterampilan saya sendiri, kemenangan begitu kecil?
Sunting: Dengan tidak benar saya tidak bermaksud kesalahan satu per satu (yaitu saya meminta sampai 100 bukan 99) atau bug tidak bersalah lainnya yang merupakan perbaikan yang mudah. Maksud saya tidak fungsional, tidak akan menjalankan / kompilasi / etc atau menunjukkan dengan jelas bahwa masalahnya tidak dibaca dan dipahami, juga sebagian besar menarik aplikasi dan tidak ada yang mengirim beberapa kode lain sebagai gantinya.
sumber