Kadang-kadang pertanyaan wawancara itu sulit, apakah pewawancara menginginkannya, atau tidak. Hal ini dapat mengarah pada pilihan apakah akan menggunakan waktu wawancara terbatas untuk menyusun solusi yang buruk, tidak efisien, kasar, atau menghabiskan waktu untuk memahami setiap aspek masalah dengan pewawancara.
Misalnya, Masalah 91 di Project Euler dapat diselesaikan dengan solusi brute-force yang tidak terlalu sulit dalam menghitung setiap kemungkinan segitiga, menulis tes isRightTriangle (), dan memunculkan semua segitiga yang lulus tes ke dalam satu set. Tetapi dua pasangan X / Y membuat solusi O (x ^ 4) dengan nilai konstan tinggi. Seorang teman dan saya baru saja menemukan solusi yang jauh lebih elegan dan efisien, tetapi kami berdua menghabiskan waktu 3 jam di sana dan menggambar lusinan diagram, menguji beberapa rumus, memeriksa beberapa pendekatan, dll.
Tidak setiap pertanyaan wawancara adil. Juga yang mudah bagi satu orang mungkin sulit bagi orang lain. Jika seseorang berjuang dengan sebuah pertanyaan, apakah Anda akan lebih terkesan dengan solusi jelek yang bekerja? Atau pemahaman masalah yang sangat baik dan jalan menuju solusi yang elegan, tetapi tidak ada solusi kode? Apakah ada aturan seperti setelah 20 menit Anda harus mulai coding tidak peduli apa?
sumber
Jawaban:
Pertama-tama, sebuah pertanyaan yang membutuhkan dua pengembang berpengalaman selama tiga jam untuk mengoptimalkan secara elegan adalah pilihan yang buruk untuk pertanyaan wawancara. Jika Anda bertanya, Anda seharusnya tidak mengharapkan jawaban yang sempurna.
Di sisi lain, kadang-kadang Anda belajar paling banyak tentang seseorang ketika Anda membuat mereka mencapai batasnya. Itu sebabnya banyak kursus di perguruan tinggi meningkatkan kesulitan kemudian naik kelas pada kurva. Jika setiap orang mendapat nilai 100% pada setiap ujian, Anda meninggalkan banyak potensi belajar.
Kandidat ideal saya mungkin akan melakukan perhitungan kompleksitas terlebih dahulu, katakan "Oh, itu hanya 6 juta iterasi, yang tidak akan memakan waktu lama," lalu cepat-cepat menulis solusi brute force. Kemudian mereka akan membahas pendekatan yang bisa mereka ambil untuk mengoptimalkannya, tanpa harus menerapkannya kecuali pewawancara memintanya.
Sebagian, ini karena banyak masalah jenis proyek euler yang muncul di dunia nyata adalah masalah sekali pakai yang perlu Anda selesaikan sekali kemudian lupakan. Saya ingin tahu bahwa seseorang yang saya sewa akan dapat mengenali algoritma brute force yang membutuhkan waktu 2 menit untuk menulis dan 10 menit untuk menjalankan lebih efisien daripada algoritma yang membutuhkan 3 jam untuk menulis dan 10 detik untuk berjalan, jika Anda hanya perlu untuk menjalankannya satu kali.
sumber
Sebagai manajer perekrutan, jika saya meminta Anda untuk memecahkan masalah dengan kode di depan saya, saya tidak melakukannya untuk melihat kode itu sendiri (walaupun ini penting) tetapi lebih untuk memastikan bagaimana dan mengapa kamu melakukan apa yang kamu lakukan. Salah satu hal yang mungkin Anda lakukan bukanlah kode, dan alih-alih menginterogasi saya mengenai aspek-aspek masalah itu sendiri, untuk menyelesaikannya dengan lebih baik. Itu berarti bagi saya, dan biasanya lebih bermakna daripada solusi yang tercantum dalam kode. Namun, bukan itu yang dilakukan oleh setiap orang, dan juga tidak semua orang ingin melihat (dan pada kenyataannya, saya jarang meminta orang untuk membuat kode dalam pengaturan wawancara, tetapi saya memang menempatkan masalah di atas meja dan kami berbicara melalui mereka dan kadang-kadang pseudocode muncul. , yang sama baiknya bagi saya ).
Anda benar bahwa tidak setiap pertanyaan wawancara adil, dan apa yang mudah bagi seseorang sulit bagi orang lain, dalam pengaturan itu dan dengan kendala-kendala itu, dan itulah sebabnya wawancara yang memahami yang biasanya tidak mencari solusi kode (meskipun , sekali lagi, itu memang memainkan peran penting) melainkan proses solusi .
"Apakah ada aturan seperti setelah 20 menit Anda harus mulai coding tidak peduli apa?" Saya akan menjawab ini dengan mengatakan bahwa dalam waktu yang sangat singkat untuk memikirkan masalah, Anda setidaknya harus melakukan sesuatu - mengajukan lebih banyak pertanyaan, membuat kerangka kerja untuk solusi, atau mengatakan Anda tidak bisa melakukannya / tidak tahu harus mulai dari mana.
Jika saya menempatkan masalah yang berat di depan Anda dan solusi yang Anda berikan - mengingat keterbatasan waktu dan apa yang Anda miliki - adalah kekerasan dan jelek, saya kemudian akan menanyakan serangkaian pertanyaan tentang mengapa itu terjadi, dan apa yang akan mengubahnya menjadi sesuatu yang lebih elegan: lebih banyak informasi? lebih banyak waktu? lingkungan yang berbeda? Menjadi sadar diri dan berhubungan dengan mengapa apa yang telah Anda lakukan, dan apa yang tidak Anda lakukan, dan mampu menjelaskannya secara rasional, adalah bintang emas besar dalam buku saya, tetapi mereka adalah jenis pengembang yang saya miliki. mencari. Jadi, "pemahaman masalah yang sangat baik dan jalan menuju solusi yang elegan" akan bekerja untuk saya juga, tetapi tidak semua orang.
sumber
Saya ingin keduanya, tetapi mereka mungkin menampilkan "kode yang hanya berfungsi" dalam satu solusi dan kemudian mungkin mendiskusikan solusi potensial untuk perbaikan dalam satu atau beberapa masalah lainnya.
Jika Anda meminta seseorang untuk menulis kode dan mereka hanya ingin membicarakan kemungkinan solusi dengan kode nol, itu akan menjadi masalah.
Seperti yang Anda katakan, seseorang mungkin bergumul dengan masalah tertentu untuk alasan apa pun, tetapi Anda harus belajar bagaimana mereka menyelesaikannya. Mereka bisa beruntung dan sudah mendengar tentang solusi untuk masalah serupa. Itu terjadi.
Perhatikan seseorang menulis tentang kode yang cukup dan mendiskusikannya dan Anda bisa mencari tahu apakah mereka cocok untuk pekerjaan itu.
sumber
Tidak, tetapi jika Anda menghabiskan 20 menit menganalisis masalah sebelum turun ke bisnis, Anda mungkin sudah dalam kesulitan. Seorang majikan yang mengajukan pertanyaan seperti yang Anda kutip sebagian besar tertarik pada bagaimana Anda mendekati masalah, tetapi jika mereka mengajukannya sebagai masalah pengkodean, mereka juga ingin melihat beberapa kode. Bicaralah dengan mereka melalui proses pemikiran Anda ...
Menulis fungsi-fungsi itu harus memakan waktu sekitar tiga menit. Sekarang, hanya beberapa menit ke pertanyaan, Anda sudah menunjukkan bahwa Anda ingat geometri dasar dan Anda benar-benar tahu cara menulis kode. Ini juga memberi Anda sesuatu untuk dibicarakan:
Jadi sekarang Anda menulis fungsi yang menggunakan
for
loop bersarang danisRightTriangle()
fungsi yang baru saja Anda tulis. Anda telah memecahkan masalah, tetapi Anda juga membiarkan pewawancara melihat ke mana Anda pergi. Jika tujuan mereka hanya untuk melihat bahwa Anda dapat menulis kode, mereka mungkin meminta Anda untuk berhenti. Kemungkinan besar, mereka senang berbicara dengan seseorang yang tahu apa yang mereka lakukan dan mereka ingin melihat seberapa jauh Anda mengambil ini. Jadi kamu pergi ...Dan seterusnya. Sekali lagi, mereka biasanya tidak ingin melihat solusi yang sempurna, mereka ingin melihat bagaimana Anda mendapatkan solusi. Proses berpikir Anda tidak harus seperti di atas - hanya memiliki kepercayaan diri untuk berpikir keras akan sangat berarti. Jangan berkeringat jika Anda melakukan kesalahan - katakan saja "hmmm, saya pikir saya sudah keluar dari rel di sini - biarkan saya mundur selangkah ..."
sumber
Sebagai seorang manajer, Jika saya meminta Anda untuk membuat kode sebagai ujian, saya paling tertarik pada:
Item pertama mungkin terlihat gila, tetapi Anda akan terkejut ...
Gaya pengkodean - maksud saya bukan hanya di mana Anda meletakkan kawat gigi, tetapi hal-hal seperti:
Inilah yang saya benar - benar tidak pedulikan:
Dalam semua kejujuran, saya tidak pernah banyak penggemar tes coding - kecuali sebagai alat untuk menganalisis gaya.
sumber
Dalam hal ini terobosan menuju solusi elegan lebih baik daripada solusi buruk tapi lengkap. Kedua kasus itu baik. Benar-benar baik untuk menuliskan pusdocode yang menunjukkan bahwa Anda memahami masalahnya dan bagaimana Anda bermaksud untuk menyelesaikannya bahkan jika Anda tidak punya waktu untuk benar-benar membuat kode program.
sumber
Saya pikir Anda mengajukan pertanyaan yang sebenarnya tidak ada jawaban, apalagi jawaban 'benar'. Alasan saya mengatakan ini adalah bahwa itu sepenuhnya tergantung pada apa yang orang itu nilai pertanyaan.
Mungkin saja pewawancara adalah seorang pragmatis keras yang benar-benar ingin melihat bahwa Anda akan mendapatkan sesuatu yang bekerja dengan cepat dan kemudian mengoptimalkannya sebagai kegiatan dengan prioritas lebih rendah jika Anda memiliki sisa waktu. Sama-sama mungkin bahwa pewawancara melakukan kesan terbaiknya tentang praktik perekrutan google dan tidak tertarik pada apa pun kecuali algoritma terseksi, paling elegan dan menganggapnya sebagai tanda kelemahan bahwa Anda akan pernah meletakkan kata "brute" dan " kekuatan "dalam 5 kata satu sama lain. Ini juga mungkin bahwa pewawancara googled "pertanyaan wawancara" dan menemukan masalah ini di internet 5 menit sebelum Anda masuk dan tidak tahu apa yang dia inginkan.
Dalam semua kasus, taruhan terbaik Anda mungkin adalah meminta klarifikasi, jika Anda tidak dapat menyimpulkan berdasarkan informasi konteks apa yang diinginkan pewawancara. Anda benar bahwa tidak semua pertanyaan wawancara adil, dan, pada kenyataannya, tidak semua dari mereka adalah pertanyaan bagus atau bahkan pertanyaan yang masuk akal. Wawancara adalah kegiatan yang secara inheren bersifat reduksionis, seperti "kencan kilat" di mana Anda menghabiskan satu atau dua jam bersama seseorang dan Anda berdua mencoba menebak, berdasarkan jam itu, apakah Anda akan bekerja sama dengan baik untuk yang berikutnya 5 tahun atau tidak. Diperiksa dari perspektif itu, saya harap itu lebih jelas mengapa saya mengatakan tidak ada jawaban untuk pertanyaan Anda tentang 'aturan'.
Seseorang mengajukan pertanyaan yang menurut mereka akan memberi Anda wawasan tentang kompetensi Anda dan cocok dengan tim mereka. Anda harus melihat tim mereka, apa yang Anda ketahui tentang mereka, kepribadian pewawancara, dan banyak faktor lainnya, dan membuat tebakan terbaik untuk jawaban, pendekatan, dan proses apa yang akan mereka nilai. Secara pribadi, saya akan mengatakan bahwa Anda harus mendekatinya dengan cara yang menurut Anda adalah ide terbaik. Jika mereka tidak setuju dengan Anda, itu mungkin tidak akan cocok - bagaimanapun, lebih mudah untuk mencari tahu lebih awal daripada nanti.
sumber
Pewawancara akan meminta Anda untuk meningkatkan solusi Anda.
Dan pendekatan "solusi brute force first" memiliki satu keuntungan yang tidak terbantahkan: jika Anda tidak berhasil menemukan solusi yang ideal, Anda masih memiliki sesuatu yang selesai untuk ditunjukkan kepada mereka.
sumber