Saya seorang pengembang dengan gelar CS dan memiliki pengalaman kerja melakukan pengembangan dalam sejumlah bahasa selama hampir 3 tahun.
Hari ini saya melakukan wawancara, secara keseluruhan berjalan dengan baik, saya bersiap untuk sebagian besar pertanyaan dan merasa siap untuk apa pun. Di akhir wawancara, mereka memberi saya SATU pertanyaan pemrograman ... masalah seperti FizzBuzz (tanpa mencetak nomor bagian). Saya percaya saya membuat terlalu banyak kesalahan dan karenanya "gagal". Apakah semua harapan hilang bagi saya?
Ini kode saya:
void FizzBuzz()
{
for(int i = 0; i <= 100; i++)
{
bool isThree = i % 3;
bool isFive = i % 5;
if (isThree)
{
print "Fizz\n";
}
else if(isFive)
{
print "Buzz\n";
}
else
{
print "FizzBuzz\n";
}
}
}
Seperti yang Anda lihat, saya mengacaukan bools yang seharusnya memiliki sintaks i% 3 == 0; Jika saya mengingat pertanyaan yang benar saya juga meletakkan yang lain, bukan yang lain jika dengan isThree && isFive. Saya cukup stres, tapi itu bukan alasan untuk melewatkan masalah sederhana.
Jadi pertanyaannya adalah, seberapa penting mampu menghasilkan kode kerja di tempat relatif terhadap faktor-faktor lain, seperti pengalaman dan kepribadian? Misalnya, apakah kode di atas akan menjadi deal breaker?
Jawaban:
Maksud dari FizzBuzz adalah untuk menunjukkan bahwa Anda benar - benar tahu cara memprogram , bukan bahwa Anda telah menghafal semua aturan sintaksis yang lebih halus dari bahasa yang Anda telah diminta untuk memprogramnya (meskipun itu penting, jika mereka ingin tahu seberapa berpengalaman Anda menggunakan bahasa ini).
Jika Anda sampai sejauh ini dalam tekanan lingkungan wawancara, dan dapat menunjukkan bahwa Anda memahami kesalahan yang Anda buat, saya katakan Anda lulus.
sumber
iya nih
Sebagian besar orang yang saya wawancarai yang gagal bagian latihan kode atas sintaks kecil atau sedikit logika akhirnya menjadi karyawan yang lebih baik.
Mendapatkan ide inti dari logika langsung (yang telah Anda lakukan) dan mengubahnya menjadi sesuatu yang layak dan ringkas dari sudut pandang kode (yang saya pikir sebagian besar Anda lakukan) jauh lebih penting bagi saya daripada membuatnya benar-benar sempurna.
Saya membeli sebuah IDE untuk memeriksa sintaksisnya tidak mempekerjakan dev, dan Anda akan menyadari kesalahan-kesalahan lain saat debug pertama Anda.
Anda beralih dari persyaratan awal ke upaya pertama secara langsung dan tanpa melakukan hal buruk. Itu lebih berharga di banyak lingkungan daripada kesempurnaan tanpa umpan balik. Jika atasannya menutup telepon pada detail yang Anda lewatkan, itu mungkin pertanda lingkungan akan datang.
Jika tugasnya adalah varian nomor cetak, kehilangan detail akan terlihat sedikit buruk, tetapi tidak akan cukup untuk mengubah keputusan saya jika saya menyukai Anda untuk posisi yang sebaliknya.
[Sunting] Seperti yang ditunjukkan Alex ada aspek reaksi dan ketenangan juga. Secara pribadi saya mencoba untuk menyingkir dari jalan sebelum pergi ke latihan praktis dengan mencoba memojokkan orang yang diwawancarai pada sesuatu yang sedikit di luar pengalaman mereka tetapi beberapa mungkin memilih untuk menggabungkan keduanya. Sekali-sekali saya bertemu dengan seseorang yang hanya memiliki pengetahuan buku teks dan mereka berlayar melalui masalah-masalah teoretis dan latar belakang tetapi secara serius terhenti di mana harus memulai dengan latihan praktis. Beberapa bahkan tidak tahu harus mulai dari mana.
Individu-individu ini PERSIS apa yang ingin saya hilangkan dengan latihan ini.
Jadi, kecuali jika Anda mengambil 20 menit untuk membuat pewawancara mengklarifikasi persyaratan saya membayangkan solusi Anda kurang lebih adalah upaya pertama Anda dengan kemungkinan beberapa koreksi saat Anda pergi. Jika Anda mendapatkan apa yang Anda masukkan di atas dalam waktu kurang dari 5 menit, Anda menunjukkan bahwa Anda dapat berpikir cukup untuk standar saya.
sumber
Kode di atas mungkin akan menjadi pemecah kesepakatan bagi saya jika saya tidak memiliki hal lain untuk dilanjutkan. Jika mereka mengikuti gaya wawancara Microsoft, maka orang yang memberi Anda pertanyaan ini mungkin akan memblokir Anda - dan biasanya hanya satu yang diperlukan.
Yang membuat saya bingung adalah bahwa pewawancara tidak menanyakan kode ini kepada Anda. Pewawancara yang baik telah melihat cukup kode mereka sendiri untuk mengetahui bahwa orang membuat kesalahan - terutama ketika sedang terburu-buru. Biasanya mereka berkata, "Sekarang, apakah Anda melihat ada yang salah dengan kode ini?" "Tidak? Baiklah mari kita mengujinya". Anda datang dengan beberapa set hasil dan kemudian jalankan melalui fungsi. Lalu Anda berkata, "Oh sial, itu tidak berhasil." "Oke, bagaimana kamu memperbaikinya ..." dan seterusnya. Jika Anda selamat dari dialog itu, itu sebenarnya cukup mengesankan dan menunjukkan kemampuan untuk berpikir kritis, menghasilkan kasus uji, dan men-debug kode Anda sendiri.
Perhatikan juga, mereka biasanya tidak mencari "kode kerja". Siapa yang menghasilkan yang pertama kali mencoba? Tetapi secara logis benar dengan penanganan kesalahan dan set tes yang baik adalah tujuan yang baik.
Selain itu, ini mungkin mengejutkan Anda, tetapi Anda bersaing dengan banyak orang yang bahkan tidak bisa memulai menggunakan fizzbuzz. Kita cenderung berasumsi bahwa semua orang melintasi pohon b + dalam tidur mereka .... tetapi pada kenyataannya, mereka bahkan tidak dapat mengetahui kelipatan 3 dan 5 dan menggunakan operator modulus. Anda mungkin akan terkejut melihat betapa jauh lebih baik Anda lakukan daripada kandidat lainnya.
Saran saya, singkirkan saja. Saya mewawancarai perusahaan perangkat lunak besar baru-baru ini (Microsoft, Amazon dll ...), dan ini adalah pertama kalinya saya melalui proses wawancara yang menyeluruh. Saya membodohi diri sendiri di sebuah wawancara Microsoft di tempat sebagian besar karena gugup, tetapi juga, saya hanya tidak tahu apa yang diharapkan atau apa yang sebenarnya mereka cari. Saya memakukan masalah jalur terpendek hanya untuk meniup beberapa masalah yang sangat sederhana. Saya muncul nilai dari ujung tumpukan yang salah, lupa dalam
int atoi(char* value)
implementasi ituint val = value[i] - '0';
akan memberi saya nilai integer karakter, dan beberapa kesalahan konyol lainnya. Saya senang sebagian besar dengan wawancara, tetapi masih mengerti mengapa saya tidak menerima tawaran. Saya harus menyadari bahwa ini bukan refleksi dari kemampuan saya, tetapi merupakan indikator bahwa saya hanya perlu terus mencobanya sampai saya mampu menguasai saraf saya. Akhirnya saya memaku beberapa wawancara dengan pertanyaan yang jauh lebih sulit dan mendapatkan pekerjaan impian saya. Ini benar-benar - bagi kebanyakan orang yang benar-benar tahu apa yang mereka lakukan - hanya masalah mencari tahu apa yang diinginkan pewawancara, menjadi percaya diri pada diri sendiri, dan memberikannya kepada mereka. Butuh beberapa saat.sumber
No? Well let's test it
. Saya meminta kandidat untuk menulis buzz desis dalam wawancara. Saya juga meminta mereka untuk menulis unit test. Terkadang desis desis mereka gagal, tetapi unit test mereka mendeteksi ini, membuat mereka memperbaikinya - ini baik Orang-orang yang ditolak adalah mereka yang menulis solusi gagal dan kemudian menulis tes yang gagal mendeteksi ini. Saya bertanya kepada mereka, apakah Anda senang dengan tes ini, jika ya, saat itulah mereka gagal.Saya harus mengatakan tidak, tetapi bukan karena alasan yang Anda berikan, tetapi Anda menempatkan bagian FizzBuzz sebagai yang terakhir. Dengan cara kode Anda bekerja, itu tidak akan pernah mencetak FizzBuzz ketika Anda mengharapkannya. Seperti Lee berkomentar, itu akan mencetaknya untuk setiap nilai yang tidak dapat dibagi oleh 3 atau 5.
Tetapi poin utamanya adalah Anda belajar darinya. Saya suka fakta bahwa Anda di sini bertanya tentang bagaimana Anda bisa melakukan yang lebih baik. Pastikan Anda melakukan beberapa teka-teki kode dan teliti pertanyaan wawancara umum. Juga, cobalah mengatur waktu sendiri atau melakukan hal lain yang akan meningkatkan tekanan sehingga Anda bisa meniru perasaan yang akan Anda dapatkan dalam sebuah wawancara. Dan siapkan, siapkan, dan lakukan lebih banyak persiapan untuk wawancara jika Anda benar-benar ingin menjatuhkannya dari taman.
sumber
i
tidak dapat dibagi 3 atau 5.Tidak. Maksud dari FizzBuzz adalah untuk melihat apakah Anda dapat mengerjakan logika kondisional dasar, yang mencakup semua kasus. Bertentangan dengan pendapat beberapa orang, FizzBuzz bukan tentang operator modulus, mengetahui operasi ternary atau operan boolean. Ini latihan sederhana dalam kondisi dan Anda telah gagal.
Masalahnya terstruktur sehingga semua kode tampak "elegan" gagal menutupi setidaknya satu kasing.
Jawaban yang bisa diterima:
sumber
Saya memberi orang masalah pemrograman sepele untuk dilakukan di papan tulis. Apakah kode yang dihasilkan bebas bug bukan titik keputusan sama sekali. Alih-alih, saya peduli dengan sejumlah perilaku yang ditunjukkan selama penulisan kode. Ini interaktif, dan saya belajar banyak tentang kandidat saat itu sedang terjadi.
Saya membahas lebih rinci di "pengujian" Papan Tulis selama wawancara: cara yang sah untuk mencadangkan kode (papan tulis) Anda?
Tentu saja, pewawancara Anda mungkin tidak seperti saya. Tapi sangat mungkin bagi Anda untuk lulus wawancara dengan saya sambil menghasilkan kode yang sangat sedikit, dan sangat mungkin untuk gagal dengan kode yang sama.
sumber
Jika saya mengevaluasi ini, saya akan mencari hal-hal berikut:
-
Sulit dikatakan di # 1. Pertanyaan Anda menyatakan bahwa masalah Anda tidak termasuk bagian "nomor cetak", dan solusi Anda sebenarnya tidak termasuk itu. Saya tidak punya pilihan selain mengambil kata Anda untuk itu, tetapi jika sebenarnya itu adalah masalah FizzBuzz klasik yang termasuk mencetak angka-angka yang tidak dapat dibagi dengan baik, maka sepertinya Anda melompat ke solusi sebelum sepenuhnya memahami persyaratan, yang akan menjadi tanda off.
Saya akan memberi Anda kredit sebagian untuk # 2 dan # 3. Anda tahu untuk menggunakan operator modulus, dan memiliki struktur solusi yang berfungsi, tetapi melewatkan bagian keduanya.
Sepertinya Anda tidak melakukan # 4, yang akan menandai Anda. Di masa depan, saya akan merekomendasikan mengambil langkah mundur dari papan tulis dan melihat solusi Anda sebelum menyebutnya selesai. Saya juga akan (tanpa diminta) melangkah melalui beberapa unit test untuk solusi Anda, yang akan dengan cepat menunjukkan di mana Anda mengacau.
Mereka tidak memberi Anda kesempatan ke # 5, yang sangat disayangkan. Tetapi intinya adalah saya tidak ingin seseorang yang berpikir bahwa setiap baris kode yang pernah mereka tulis adalah emas murni yang tidak mungkin ditingkatkan, tetapi seseorang yang mau menerima umpan balik tentang solusinya dan terlibat dalam beberapa percakapan tentang pendekatannya .
-
Jadi, jika saya mengevaluasi ini sendirian, saya akan memilih "Tidak Ada Perekrutan." Hal-hal seperti ini semacam mengukur seni kinerja daripada kemampuan pemrograman , tetapi menguasainya masih dapat membantu karir Anda. Jadi saran saya untuk wawancara teknologi di masa depan adalah:
Sebelum wawancara, latihlah beberapa jenis latihan ini dengan dingin, gunakan sesedikit mungkin sumber daya dari luar. Bukan untuk menghafal solusi, tetapi untuk memastikan Anda merasa nyaman dengan bahasa pilihan Anda
Ajukan pertanyaan tentang masalah untuk memvalidasi asumsi Anda.
Sebelum mengumumkan solusi Anda tuntas, mundurlah dari papan tulis dan periksa, dan telusuri beberapa unit test case sederhana.
sumber
Meminta seseorang untuk memecahkan masalah tanpa memberi mereka kemampuan untuk mendapatkan umpan balik tentang solusi mereka adalah pendekatan yang dipertanyakan, karena mereka tidak diizinkan untuk meningkat.
Semua tes ini memberi tahu kami bahwa Anda tidak menunjukkan keterampilan pemecahan masalah "terbaik" yang sangat baik.
Ini bisa menjadi salah satu elemen dalam keputusan untuk mempekerjakan Anda atau tidak, tetapi bagi saya itu pasti bukan satu-satunya.
Seandainya mereka memberi Anda pengujian unit atau lingkungan eksekusi, kesalahan yang Anda buat akan menjadi lebih ringan.
sumber