Apakah pertanyaan algoritma merupakan pertanyaan wawancara yang baik? [Tutup]

25

Saya memiliki argumen baru-baru ini dengan sesama programmer. Dia sedang mewawancarai untuk posisi baru dan ditanya pertanyaan ini:

Berikan urutan angka mulai dari X dan berakhir dengan Y tetapi dengan satu elemen yang hilang sehingga N adalah YX-1, temukan elemen yang hilang di O (N) atau lebih baik.

Sekarang, jawabannya tidak relevan di sini (tapi menarik). Ini memulai diskusi tentang apakah ini adalah pertanyaan yang bagus untuk ditanyakan selama wawancara.

Satu sisi: Algoritma adalah bagian inheren dari pemrograman dan kemampuan kandidat untuk menjawab pertanyaan ini mendukung bahwa kandidat ini akan menjadi programmer yang baik dan mampu memecahkan masalah yang lebih besar dan dapat menangani sebagian besar tugas pemrograman yang pada akhirnya mudah dipahami dan dijawab.

Sisi lain: Menulis algoritma dari awal jarang digunakan dalam pemrograman modern dan oleh karena itu tidak relevan dalam pertanyaan besar apakah orang tersebut akan menjadi programmer yang baik. Seseorang dapat berhasil menjawab pertanyaan ini tetapi masih belum dapat melakukan tugas-tugas pemrograman yang lebih umum.

Pikiran Anda? Pertanyaan wawancara bagus atau tidak?

MBonig
sumber
Maaf, tapi saya tidak mengerti. find the missing element in O(N) or betterApa artinya "atau lebih baik" dalam konteks ini? Sepertinya jenis hal yang akan diselesaikan dengan loop sementara yang sederhana, tapi bagaimanapun saya tidak mengerti - itu baik dipecahkan atau tidak diselesaikan , kan?
Camilo Martin
"Atau lebih baik" mengacu pada kinerja - solusi O (ln (n)) akan lebih baik.
Ethel Evans
Pertanyaan-pertanyaan algoritma sebenarnya, salah satu pertanyaan yang diharapkan dalam pemrograman atau wawancara kerja teknis. Gayle Laakmaan McDowell telah menulis sebuah buku berjudul "Cracking the Coding Wawancara" yang memiliki bagian khusus tentang algoritma.
hagubear

Jawaban:

20

Saya setuju dengan mengajukan pertanyaan algoritma, tetapi saya tidak setuju dengan bersikeras pada tingkat kualitas big-O tertentu.

Mengajukan pertanyaan semacam ini menarik untuk melihat bagaimana orang tersebut mendekati masalah dan jebakan apa yang mereka pertimbangkan dalam usahanya, tetapi kecuali mereka menulis sesuatu yang benar-benar salah atau tidak efisien, detail sebenarnya dari apa yang mereka tuliskan tidak mengatakan fakta bahwa mereka melewati langkah-langkah pemecahan masalah / desain dengan cara yang koheren.

Saya mengajukan pertanyaan serupa, tetapi orang-orang yang memiliki keberuntungan terbaik setelah menyewa adalah orang-orang yang memberikan jawaban yang salah tetapi memiliki ide yang benar dalam pendekatan mereka.

Tagihan
sumber
9

Saya akan tidak setuju dengan gagasan bahwa kemampuan untuk menulis algoritma tidak relevan dalam pertanyaan yang lebih besar apakah orang tersebut akan menjadi programmer yang baik. Bahkan jika dia tidak pernah harus menggunakannya, (yang diragukan,) masih menunjukkan apakah dia memiliki fleksibilitas mental yang diperlukan untuk mencari solusi logis untuk masalah yang lebih rumit daripada seperangkat persyaratan sederhana yang sudah ditulis dan ditata. secara rinci oleh klien.

Saya pasti tidak ingin mempekerjakan seseorang yang tidak tahu cara berpikir dan menganalisis. Itulah yang membuat perbedaan antara monyet kode dan pemrogram komputer.

Mason Wheeler
sumber
6

Saya harus mengakui di sini, bahwa saya adalah salah satu dari mereka yang suka mengajukan pertanyaan algoritma dalam wawancara, tetapi saya harus menekankan, bahwa jawaban aktual untuk pertanyaan itu sama sekali tidak relevan. Saya tidak peduli sedikit pun jika orang yang diwawancarai tahu jawabannya atau tidak. Sebagai gantinya, bagi saya, pertanyaan ini menargetkan berbagai aspek, seperti yang berikut - sesuai urutan kepentingan:

Persyaratan

Pertanyaan-pertanyaan semacam itu sengaja tidak ditentukan. Dalam contoh Anda, tidak ada detail lebih lanjut yang diberikan tentang urutan. Jika Anda memiliki orang yang diwawancarai yang bertanya apakah angka-angka ini benar-benar diurutkan, maka itu pertanda baik. Dia memiliki pola pikir yang benar untuk bertanya kepada pelanggan tentang perincian lebih lanjut, yang akan membantu mencapai solusi yang lebih baik dalam waktu yang lebih singkat. Calon juga dapat mempermainkan ide menggunakan O (n) ruang untuk menyimpan array nomor N, tetapi ia tidak boleh melakukan itu tanpa bertanya tentang rincian lebih lanjut tentang X dan Y. Katakanlah bahwa X dan Y adalah antara 1 dan 1000 , lalu yakin, maju dan jalankan solusi berbasis array. Tetapi jika saya beri tahu Anda bahwa intervalnya adalah 1 dan 1 miliar, maka masalahnya menjadi sangat berbeda. Biarkan saya tekankan lagi, bahwa saya tidak peduli dengan solusinya.

Teknik Standar

Saya tidak ingin mempekerjakan seorang programmer yang bahkan tidak tahu apa artinya O (n). Itu mutlak harus diketahui jika Anda memiliki pendidikan yang layak di bidang itu. Tetapi juga penting untuk tidak hanya tahu apa artinya, tetapi untuk benar-benar menerapkan pengetahuan itu. Dalam contoh Anda, saya ingin seorang kandidat menyadari bahwa ia tidak diizinkan untuk mengurutkan data (tanpa mengajukan pertanyaan lebih lanjut dengan menargetkan opsi penyortiran bucket atau pendekatan penyortiran O (n) lainnya karena penyortiran diperlukan O (n log n) secara umum.

Demikian pula, pertanyaan algoritma lainnya menargetkan teknik standar seperti pohon atau grafik-traversal, atau rekursi. Calon dapat menyelinap di salah satu teknik ini, yang tidak membuat kesan yang baik Namun, dalam kasus seperti itu, saya ingin menggali lebih dalam untuk mengetahui apakah kandidat memiliki latar belakang CS sama sekali. Tentu saja, itu tergantung pada apa posisi target itu, tetapi biasanya pengembang yang tidak tahu tentang kompleksitas runtime, atau struktur data khas dan traversalnya, tidak akan membantu.

Mindset Berurusan Masalah

Setelah mengajukan pertanyaan, Anda memantau kandidat dengan cermat. Bagaimana dia bereaksi? Anda mendapatkan hasil terbaik di sini dari kandidat yang sama sekali tidak tahu bagaimana menyelesaikan masalah pada awalnya . Dalam hal itu, pertanyaannya memeriksa apa yang mungkin terjadi jika situasi serupa terjadi di tempat kerja nanti. Anda mungkin menemukan masalah seperti itu selama pengembangan Anda, dan baik untuk mengetahui bagaimana calon Anda menangani masalah-masalah ini, bahkan jika dia tidak mampu menyelesaikannya sendiri.

Contoh: Anda tidak ingin calon Anda masuk ke mode diam selama setengah jam berikutnya! Periksa apakah dia dapat mengajukan pertanyaan cerdas (lihat Persyaratan), periksa apakah dia mulai berpikir di luar kotak begitu dia menyadari bahwa dia tidak bisa melakukannya. Bahkan pertanyaan tandingan yang "menyenangkan" seperti "Bolehkah saya menggunakan opsi telepon-rekan kerja?" adalah pertanda baik.

Bagaimana menjawabnya

Secara umum, jawaban terbaik yang dapat Anda berikan untuk pertanyaan semacam ini adalah pertanyaan balasan! Memberi jawaban segera pada dasarnya gagal semuanya, dan sebenarnya bukan jawaban yang baik sama sekali, karena semua pertanyaan ini mengisyaratkan trade-off, yang disiratkan oleh jawaban Anda, tanpa Anda memiliki informasi yang diperlukan untuk secara cerdas membuat itu trade-off. Tentu saja, kualitas pertanyaan balik bervariasi di antara kandidat.

Sebagai catatan umum tentang pertanyaan wawancara: Pertanyaan tandingan jarang merupakan hal yang buruk. Dalam salah satu wawancara saya sendiri, misalnya saya ditanya sesuatu seperti berikut: "Jika Anda harus menerapkan X, apakah Anda memilih C ++ atau Java untuk itu, dan mengapa?" - Saya hanya membalas dengan "Apakah saya terbatas pada keduanya?". Tebak sendiri, reaksi seperti apa yang Anda dapatkan dari pewawancara untuk pertanyaan balasan seperti itu - dan betapa mudahnya bagi Anda untuk benar-benar menunjukkan kepada pewawancara apa yang mampu Anda lakukan.

jujur
sumber
Mengapa "Bolehkah saya menggunakan opsi telepon-rekan kerja?" pertanda baik? Bukankah ini menunjukkan bahwa orang yang diwawancarai tidak tahu bagaimana mengatasi masalah dan selalu meminta bantuan?
Uooo
Akan selalu ada pertanyaan yang tidak bisa dijawab oleh orang yang diwawancarai. Dalam hal ini pertanda baik, tetapi tentu saja, orang yang diwawancarai tidak boleh mengulangi perilaku itu untuk beberapa pertanyaan. Tugas yang sulit adalah mencari tahu, apakah Anda baru saja mengenai satu sweet spot itu, di mana kandidat tidak memiliki pengetahuan (yang dapat diterima), atau jika ia mencoba untuk keluar dari masalah-masalah sulit secara umum (yang tidak).
Frank
Seseorang pernah mengatakan kepada saya perbedaan antara pengembang junior dan pengembang senior adalah pengembang senior akan meminta bantuan lebih cepat. Telepon-rekan kerja adalah keterampilan yang penting. Ada banyak ego di industri ini dan mengatakan "Saya tidak tahu" adalah pertanda baik. Beberapa kode terbaik yang pernah saya rancang / tulis berasal dari bekerja dengan orang, bukan hanya ide saya sendiri.
MBonig
5

Kecuali jika Anda mengajukan pertanyaan tentang algoritme / formula yang perlu diketahui kandidat untuk pekerjaan tersebut (dinamika fluida, misalnya, jika posisi mengharuskannya), saya tidak melihat nilainya. Calon sudah cenderung khawatir tentang bagaimana mereka berpakaian, bagaimana mereka berbicara, dll ... apakah mereka dapat menjawab pertanyaan matematika di tempat tidak membuktikan apa pun selain mungkin bagaimana mereka bisa tampil di acara permainan tv.

Ketika saya wawancarai, saya bahkan tidak mengajukan pertanyaan 'pemrograman'. Saya meminta kandidat untuk menggambarkan proyek mereka di masa lalu, bagaimana kode mereka mencapai tujuan, apa pendekatan mereka, dll. Dari itu saya dapat mengetahui dengan cepat apakah kandidat tahu apa yang dia lakukan atau jika dia seorang pelamar.

GrandmasterB
sumber
4

Saya setuju bahwa programmer harus mengetahui algoritma dengan sangat baik, bahkan dengan kerangka kerja baru yang mewah, tapi saya tidak sepenuhnya yakin tentang pemikat otak dalam sebuah wawancara. Kekhawatiran terbesar saya adalah bahwa dalam lingkungan nyata, Anda menulis algoritma dalam kondisi yang sangat berbeda; alias, tidak di bawah tekanan dengan seseorang mengawasi Anda setiap penstroke, dengan setidaknya beberapa menit untuk memikirkannya dalam diam. Bagi mereka yang menganjurkan metode evaluasi ini, berapa lama Anda biasanya memberi orang itu untuk menyelesaikannya? Saya percaya kode tidak begitu banyak tentang mengeluarkan solusi dalam teror 3 menit demam, jadi yakinkan saya bahwa ini sebenarnya cara yang baik untuk melihat bagaimana seseorang akan menangani tugas sehari-hari.

Morgan Herlocker
sumber
2

Masalah dengan pertanyaan spesifik itu hampir merupakan pertanyaan jebakan. Dengan satu wawasan khusus, Anda akan dengan mudah menghasilkan O (n), jika tidak Anda akan berjuang untuk menjadi lebih baik daripada O (n log n). Itu hampir menjadi "Pernahkah Anda melihat ini sebelumnya?"

Saya tidak yakin ada pertanyaan algoritmik yang bagus. Jika Anda bertanya satu berdasarkan teori grafik, katakanlah, itu akan tergantung pada seberapa akrab orang yang diwawancarai dengan teori grafik - dan, jika Anda mempekerjakannya, ia bisa mencapai kecepatan pada teori grafik dengan cukup cepat. Sekali lagi, kita kembali ke "Apakah Anda pernah terkena ini sebelumnya?"

Tidak ada waktu dalam wawancara reguler untuk melakukan pemecahan masalah yang serius, dan saya mendekati berbagai hal secara berbeda ketika saya bisa duduk, menggunakan Wikipedia, dan umumnya membutuhkan waktu untuk memikirkannya. Mungkin tidak ada waktu bagi pewawancara untuk secara hati-hati mendiskusikan apa yang diwawancarai diketahui secara rinci dan memilih pertanyaan algoritmik yang sesuai.

David Thornley
sumber
1
Apa wawasan khusus untuk melihatnya O (n)? Saya melihat "mencari daftar nilai sekuensial N yang diurutkan untuk yang hilang" sebagai masalah bawaan O (n). Bagaimana Anda bisa menulisnya agar lebih buruk? (Jujur, saya ingin tahu dan tidak melihat bagaimana solusi O (n) tidak jelas, dan bahkan O (log n) yang tampak jelas bagi saya.)
dash-tom-bang
@ dash-tom-bang: Saya tidak memikirkan daftar sebagai diurutkan (apakah saya salah memahami sesuatu?) sehingga solusi O (n log n) akan diurutkan dan dipindai, sedangkan O (n) akan menjumlahkan angka naik.
David Thornley
ah - ok itu bisa jadi masalah - saya belum menganggap bahwa daftar itu tidak akan disortir. :) ("Daftar dimulai pada X dan berakhir pada Y.")
dash-tom-bang
2
Varian pilihan cepat juga berfungsi di sini. Putar pada (atas + bawah) / 2, dan mudah untuk melihat setengah dari entri yang hilang karena Anda tahu seberapa besar masing-masing setengahnya. Ulangi sampai Anda menemukan elemen yang hilang.
Paul Hankin 6-10
1
Saya pikir pertanyaan mengacu pada urutan (daripada satu set, dll) mulai dari X dan berakhir pada Y itu menyiratkan bahwa item diurutkan. Ini memang pertanyaan yang agak sepele.
FinnNk
1

Saya memiliki beberapa pertanyaan mirip algoritma yang saya gunakan secara teratur, beberapa di antaranya sangat sulit. Saya menggunakannya untuk melihat bagaimana mereka secara mental menyerang masalah dan untuk melihat apakah mereka mengerti konsep tertentu. (Saya telah melihat terlalu banyak kandidat pengembang yang tidak mengerti pointer.)

John Franklin
sumber
Pointer, seperti, anjingnya, kan? :)
JoshD
1

Anda menginginkan pertanyaan yang akan memberi Anda wawasan tentang kandidat. Pertanyaan algoritma mungkin memberikan respons yang baik, atau mungkin juga tidak. Dan saya tidak menyebut mereka bisa menjawabnya atau tidak. Jika mereka mengatasinya, dan Anda memahami dan mengikuti alasan mereka, itu indikator yang baik. Jika mereka hanya duduk di sana, tidak ada respons nyata, bahkan tampaknya tidak tahu harus mulai dari mana, itu indikator yang buruk (mungkin). Masalahnya adalah bahwa beberapa orang membeku, dan membedakan pembekuan dari tidak memiliki keterampilan pemecahan masalah mungkin sulit.

Orang akan mengeluh tentang menanyakan apa saja dalam wawancara, karena berbagai alasan. Pemohon mungkin membeku, pemohon bisa saja melihat pertanyaan itu, pemohon mungkin tidak tahu bahwa bagian tertentu dari hal sepele / teknologi / apa pun. Semua ini benar, tetapi sebuah wawancara masih perlu terjadi, dan banyak dari kita dalam profesi ini membenci itu. Kita membenci gagasan seseorang yang menghakimi kita. Kami segera mengemukakan alasan mengapa kami bisa dinilai secara tidak adil, atau bagaimana tes itu bisa palsu atau gamed. Intinya adalah, itu tidak masalah.

Yang benar-benar Anda inginkan adalah pewawancara dengan kemampuan untuk menentukan keterampilan yang mungkin atau mungkin tidak disajikan selama wawancara. Pertanyaan hanyalah alat. Bagi saya, semua palu terlihat sama. Tetapi untuk seseorang yang cukup terampil dengan mereka, saya yakin ada perbedaan.

Jeremiah Nunn
sumber
0

Saya suka pertanyaan algoritma, karena itulah yang kami lakukan. Saya suka kendala, karena itulah yang kami gunakan. Big-O sangat relevan di industri saya.

Saya tidak suka meminta jawaban atas pertanyaan semacam ini untuk menjadi "tulis kode di papan tulis". Orang yang diwawancarai harus dapat berbicara secara cerdas tentang pendekatan terhadap solusi dan terlibat dalam diskusi yang berkelanjutan ketika pewawancara mengubah persyaratan saat diskusi sedang berlangsung.

Pertanyaan awal ditanyakan, orang yang diwawancarai mengatakan, "mulai dari awal dan berbaris menuju akhir mencari 'lubang'". Pewawancara mengatakan itu terlalu lambat, karena N adalah raksasa. Orang yang diwawancarai mulai membahas pencarian biner. Pewawancara mengatakan bahwa tiba-tiba data tidak lagi disortir. Orang yang diwawancara mengatakan "sort lalu search". "Sekarang terlalu lambat". Dll.

dash-tom-bang
sumber