Hari ini saya telah mengadakan wawancara pertama saya dengan calon magang. Sementara ini sebagian besar pertanyaan terbuka, saya punya beberapa tugas pemrograman sepele untuk mereka:
- Tulis fungsi yang mengembalikan true jika sisi segitiga (semua bilangan bulat) a, b dan c dapat mewakili segitiga siku-siku .
- FizzBuzz.
- Hitung elemen N Fibonacci menggunakan rekursi (jika mereka tidak tahu apa itu Fibonacci , saya bahkan akan menuliskan definisi F (n) = F (n-1) + F (n-2); F (1) = 1; F (0) = 1).
- Terapkan daftar struktur untuk fungsi integer dan tulis untuk membalikkannya.
Ini jelas tugas yang sangat mudah dan saya tidak siap untuk seseorang yang tidak menyelesaikannya.
Bagaimana saya harus bertindak ketika mereka bergumul dengan pertanyaan-pertanyaan ini? Haruskah saya menyerah jawabannya? Berikan tip demi tip (saya melakukan itu dan akhirnya menyelesaikan masalahnya sendiri)? Atau hanya melanjutkan (atau mungkin berhenti) dengan wawancara?
ps. Dengan memiliki masalah dengan pertanyaan, maksud saya bukan seperti memiliki bug, maksud saya jika mereka bahkan tidak dapat memulai. Ini adalah kasus dengan pertanyaan Fibonacci dan Daftar.
sumber
Jawaban:
Anda mengatakan bahwa Anda sedang mewawancarai untuk posisi magang dalam pertanyaan jadi ini dari sudut pandang itu, untuk pengembang penuh waktu bilah akan menjadi sedikit lebih tinggi.
Ketika Anda mewawancarai karyawan magang, Anda harus ingat bahwa mereka mungkin tidak menyelesaikan studi mereka dan bahwa mereka mungkin juga masuk perguruan tinggi tanpa latar belakang sebelumnya dalam bidang pemrograman dan ilmu komputer. Dengan demikian, Anda perlu mengukur ekspektasi terhadap apa yang secara wajar dapat Anda harapkan diketahui oleh seseorang dan sampai pada tingkat prestise dari posisi tersebut (yaitu Google dapat lolos dari ekspektasi bahwa perusahaan yang belum pernah didengar oleh perusahaan).
Melihat melalui pertanyaan yang Anda sampaikan saya kemungkinan akan melihatnya sebagai berikut dalam sebuah wawancara:
Aplikasi dasar geometri dengan pengkodean sederhana, sebagian besar siswa harus dapat melakukan ini tanpa banyak kesulitan. Paling-paling pengingat tentang Teorema Pythagoras mungkin diperlukan jika mereka menunjukkan sedikit tekanan karena berada dalam sebuah wawancara. Ini hampir dapat dilihat sebagai masalah "meningkatkan ego" karena dapat membantu menyelesaikan beberapa orang jika mereka sangat gugup pergi ke wawancara.
Sekali lagi, aplikasi lain dari beberapa pernyataan kontrol dasar. Siswa yang belum terpapar dengan operator modulus, atau belum sering menggunakannya, mungkin perlu diingatkan tentang hal itu, tetapi tidak boleh menghadapi masalah nyata dalam menyelesaikan masalah.
Ini cenderung menjadi masalah yang cukup umum sehingga sebagian besar (jika tidak semua) siswa akan melihatnya di beberapa titik sebelum lulus. Tangkapannya adalah bahwa biasanya muncul ketika rekursi disajikan kepada siswa karena cocok dengan sendirinya atau solusi berbasis rekursif atau loop yang kemudian dapat dibandingkan sehingga siswa dari sekolah yang berbeda mungkin melihatnya pada waktu yang berbeda tergantung pada urutan kursus. Dalam praktiknya, jika seseorang tidak dapat menemukan rekursif saya akan meminta alternatif menggunakan loop dan jika mereka tidak bisa datang dengan itu saya akan lebih peduli pada kemampuan potensial mereka.
Pertanyaan ini mungkin sebenarnya agak terlalu terbuka seperti yang tertulis sehingga bisa juga menjadi pertanyaan yang bagus untuk melihat bagaimana kandidat mencari informasi tambahan (mis. Harus menghapus fungsi dimasukkan, konversi ke array, dll), tetapi diberikan dengan baik pernyataan masalah yang didefinisikan ("Menerapkan struktur daftar dasar untuk bilangan bulat yang memungkinkan angka untuk ditambahkan ke akhir atau pada indeks sewenang-wenang, dihapus, dan termasuk fungsi untuk mengembalikan salinan daftar yang terbalik") siswa harus dapat menyelesaikan masalah selama daftar adalah struktur umum yang disajikan baik dalam kursus struktur data awal, atau dalam kursus ilmu komputer dasar awal.
Dalam hal berurusan dengan kandidat, jika mereka berjuang, pastikan mereka santai dan biarkan mereka sedikit keringanan karena mereka mungkin hanya memiliki kecemasan kinerja karena ini mungkin wawancara nyata pertama mereka. Tips untuk memecahkan masalah mungkin diperlukan, terutama dalam kasus masalah ketiga dan keempat yang bertentangan dengan dua yang pertama.
Juga, susun proses wawancara secara keseluruhan sehingga ada titik "keluar yang anggun". Misalnya, Anda mungkin memiliki agenda berikut:
Alur wawancara ini cenderung bekerja dengan baik jika Anda ingin dapat memecat kandidat lebih awal karena mereka tahu dari awal bahwa mereka mungkin akan diberhentikan setelah jeda. Wawancara singkat sebelum kuis juga berarti bahwa mereka tidak hanya muncul untuk mengikuti tes yang memberi mereka beberapa latihan wawancara dan juga memungkinkan mereka untuk memutuskan bahwa mereka tidak cocok. Jika ada programer lain yang mengamati kuis atau membantu kandidat selama itu maka itu juga memberi mereka kesempatan untuk lulus / gagal kandidat saat mereka sedang istirahat sejenak.
Setiap saat ketika Anda sedang wawancara untuk magang dan kandidatnya adalah siswa, Anda harus ingat bahwa mereka masih pelajar dan mungkin tidak memiliki banyak latihan dengan wawancara (yang mengarah ke kemungkinan kecemasan kinerja) dan mungkin juga belum mencapai titik dalam studi mereka untuk bahkan dapat menjawab pertanyaan-pertanyaan yang berarti mungkin merupakan ide yang baik untuk mengirim mereka dalam perjalanan mereka dengan salinan "solusi ideal" untuk masalah-masalah yang mereka berikan juga.
sumber
Tujuan saya untuk wawancara kerja apa pun, di mana pun saya berada, adalah untuk akhirnya merasa seperti saya sedang berbicara dengan seorang kolega. Rekan kerja datang ke kantor saya setiap saat ketika mereka terjebak pada suatu masalah. Saya meminta bantuan rekan kerja saya ketika saya terjebak. Jadi dalam sebuah wawancara, saya mencoba menciptakan kembali dinamika itu.
Dengan kata lain, apa yang akan Anda katakan jika seorang kolega perlu menerapkan urutan fibonacci dan tidak tahu apa itu? Anda akan menjelaskannya kepada mereka sampai mereka cukup memahami untuk melanjutkan sendiri. Tidak ada rasa malu dalam ketidaktahuan selama itu tidak permanen.
Jika Anda menjalani latihan itu dan masih tidak bisa membayangkan diri Anda bekerja dengan orang itu, maka itu tidak cocok untuk pekerjaan itu.
sumber
Inti dari memberikan pertanyaan seperti ini dalam sebuah wawancara adalah untuk menentukan apakah seseorang dapat menemukan cara untuk menyelesaikan masalah. Pekerjaan menjadi programmer umumnya terdiri dari dua hal: "Ambil persyaratan ini dan implementasikan dalam kode" dan "cari tahu mengapa implementasi tidak cocok dengan persyaratan dan memperbaikinya." Jadi apa yang sebenarnya Anda cari bukanlah solusi untuk pertanyaan-pertanyaan spesifik ini, tetapi kemampuan untuk mencari tahu.
Memahami hal ini, saya akan memberikan satu atau dua petunjuk untuk memulai seseorang, dan mungkin lebih jika jelas bahwa mereka membuat kemajuan nyata tetapi melewatkan detail di suatu tempat. Tetapi jika menjadi jelas bahwa mereka tidak dapat menemukan cara untuk menyelesaikan masalah, maka Anda memiliki jawaban Anda dan tidak perlu melanjutkan latihan.
Sebagai contoh, ketika saya mewawancarai pekerjaan saya saat ini, saya diberi pertanyaan tentang menemukan jalur terpendek dari satu node ke yang lain pada grafik. Saya menjawab bahwa saya kemungkinan akan menggunakan sesuatu seperti Algoritma Dijkstra, yang saya ingat samar-samar telah belajar tentang suatu hari di perguruan tinggi dan tidak pernah menggunakannya sejak itu, dan memberikan penjelasan cepat (dan salah) tentang hal itu yang memenuhi persyaratan spesifik yang diberikan oleh pertanyaan. Pewawancara menunjukkan bahwa solusi saya akan berakhir dalam loop tak terbatas jika grafik sedikit dimodifikasi, dan itu mengeringkan ingatan saya, jadi saya menjelaskan cara yang tepat untuk menghindari masalah ini. Dan saya akhirnya mendapatkan pekerjaan itu.
sumber
untuk posisi magang Anda mungkin meminta sedikit.
Saya tidak tahu apa yang Anda maksud dengan pertanyaan ke-4. Adapun untuk mengajukan pertanyaan rekursi, itu agak tidak praktis, melalui basis kode Anda sendiri dan menentukan jumlah daerah rekursi yang digunakan, saya berani bertaruh bahwa beberapa tidak ada. Situasi wawancara sangat menegangkan, dan mengharapkan kandidat untuk menerapkan strategi yang jarang digunakan yang terbelakang dibandingkan dengan sebagian besar hal yang Anda program tidak adil bagi mereka, terutama menjelang awal wawancara. Secara pribadi saya akan mengajukan pertanyaan di mana mereka harus menjelaskan apa arti konsep penting / bagaimana mereka digunakan, memberikan contoh kalengan. Saya akan jauh lebih tertarik pada kandidat yang dapat memberi tahu Anda buku X atau pencarian Google Y akan menyediakan segala yang dibutuhkan untuk mengimplementasikan sesuatu ke basis kode Anda.
sumber
IMHO dua pertanyaan pertama Anda harus dapat dipecahkan oleh siapa pun yang memanggilnya seorang programmer, baik itu junior atau senior, langsung keluar dari sekolah atau belajar sendiri.
Jika saya melihat pewawancara sedang berjuang dengan salah satu dari ini, saya akan mencoba untuk mengulangi masalahnya, dan memeriksa apakah dia benar-benar memahaminya. Kemudian dorong dia untuk menggunakan pena dan kertas, papan tulis, menggambar tokoh atau pendekatan apa pun yang dia inginkan untuk mengatasi masalah tersebut. Saya juga memintanya untuk berpikir keras, untuk melihat proses pemikirannya dan jika perlu, memberikan sedikit petunjuk jika dia berada di jalur yang benar tidak berani maju, atau memiliki beberapa kendala. Tetapi jika beberapa petunjuk tidak membantu, atau - seperti yang Anda sebutkan di atas - saya akhirnya menyelesaikan masalah untuknya, saya mungkin akan menyelesaikan wawancara untuk berhenti membuang-buang waktu kita. Dalam sebuah wawancara, saya selalu berusaha untuk melihat dan fokus pada apa yang diketahui kandidat, bukan pada apa yang tidak diketahui kandidat, tetapi jika saya tidak dapat menemukan pengetahuan yang signifikan, saya menyerah setelah beberapa saat.
Yang ke-3 dan ke-4 agak lebih sulit, jadi saya bisa menerima jika seorang junior tidak bisa mendapatkannya, jika dia mendemonstrasikan pendekatan pemecahan masalah dan antusiasme yang baik. Tapi untuk senior, mereka masih harus.
sumber
Saya harus mencari apa yang Anda maksud dengan "FizzBuzz"; Ternyata saya pernah mendengar tentang permainan dan aturannya tetapi tidak dengan nama itu dan tidak dalam beberapa saat. Jadi, jangan berpikir Anda tidak perlu memberikan informasi APAPUN kepada yang diwawancarai.
Yang mengatakan, ini semua adalah masalah pengkodean dasar yang saya harapkan seseorang mewawancarai bahkan posisi pengkodean entry-level untuk dapat memikirkan jalan mereka, jika mereka tidak dapat kode jawaban dengan inspeksi. Jadi kita berada di halaman yang sama di sana. Jawaban untuk masalah Anda tergantung pada bagaimana mereka salah melakukannya:
Masalah sintaksis kecil: Jika Anda mengharapkan kode dalam bahasa tertentu, jangan terlalu banyak menghitung jika mereka kehilangan tanda titik koma atau salah eja salah satu penggunaan pengidentifikasi. Kebanyakan IDE akan menangkapnya dengan segera, dan setiap orang membuat kesalahan ketik dari waktu ke waktu. Di hampir setiap wawancara di mana saya diharapkan untuk membuat kode sesuatu, "pseudo-C-ish" dapat diterima selama algoritma tersebut dikomunikasikan dengan baik kepada pewawancara dan logikanya baik.
Kesalahan logika minor: Jika algoritme akan berperilaku seperti yang diharapkan di sebagian besar, tetapi tidak semua, dari skenario yang diharapkan (katakanlah saat mengode FizzBuzz, 15 hanya akan menghasilkan "Fizz" atau "Buzz" tetapi tidak keduanya seperti yang seharusnya), kemudian jadilah "unit tester" dan tunjukkan bahwa algoritma akan gagal dalam contoh itu, dan lihat apakah mereka dapat memperbaikinya. Mereka mungkin telah mengabaikan kasus khusus itu, atau mereka mungkin belum memahami persyaratan sepenuhnya. Keduanya sekali lagi sepenuhnya dimengerti, kejadian sehari-hari dalam pengkodean, yang harus dengan mudah diatasi dengan hanya memberikan informasi atau umpan balik tambahan.
Kelemahan logika utama: Jika algoritme tidak akan melewatkan sebagian besar atau skenario pengujian apa pun yang diberikan, tunjukkan juga, dan lihat apakah mereka dapat memperbaikinya. Ini lebih merupakan masalah; Entah mereka salah memahami beberapa persyaratan yang sangat mendasar dari sistem, atau mereka mengabaikan beberapa lubang logika yang menganga. Tetapi, jika mereka dapat memperbaikinya dengan memberikan perincian masalah yang lebih banyak, tanpa diberi tahu dengan pasti di mana kode mereka gagal, tuliskan sesuai dengan persyaratan yang tidak jelas dan lanjutkan.
Tidak tahu harus mulai dari mana / jawaban yang dikodekan dengan keras untuk kasus tertentu / tidak dapat memahami kodesemu: Ini adalah tanda merah. Jika Anda meminta seseorang untuk kode algoritma yang mengikuti aturan FizzBuzz, menjelaskan aturan itu kepada mereka, dan Anda mendapatkan tatapan kosong, wawancara selesai. Dengan cara yang sama, jika mereka dapat menempatkan SESUATU di papan tulis tetapi gagal pada sebagian besar ruang masalah, dan Anda harus memegang tangan mereka ketika menggambarkan kegagalan dan cara memperbaikinya, saya tidak akan melanjutkan wawancara kedua .
sumber
Jika Anda benar-benar mendapat calon magang yang bertindak seperti rusa di lampu depan karena ia tidak pernah diwawancarai, memiliki masalah kecemasan, belum pernah berada dalam situasi kehidupan nyata seperti itu (biasanya Anda perhatikan dari bahasa tubuh mereka), Anda bisa mulai dengan bertanya kepada mereka apa yang telah mereka kerjakan terakhir.
Maka itu akan menjadi wilayahnya sehingga dia mungkin tidak gugup. Ketika Anda menemukan tempat yang tepat bertanya, "Hei, bagaimana Anda menerapkannya?". Jika dia bisa menjelaskan, itu mungkin memberi Anda wawasan tentang cara berpikirnya.
Letakkan tes Anda sendiri dalam agenda setelah itu.
sumber
Fizzbuzz adalah syarat mutlak. Jika mereka tidak dapat membuat kode Fizzbuzz, Anda tidak boleh mempekerjakan mereka.
Saya biasanya meminta kandidat untuk sesi kode pra-wawancara, di mana kami menggunakan Google Documents untuk mengatasi masalah pemrograman (biasanya Fizzbuzz + masalah tingkat yang lebih tinggi jika mereka dapat dengan mudah menyelesaikan Fizzbuzz).
Saya biasanya di telepon atau di skype dengan mereka selama ini, dan karena saya melihat mereka menyelesaikan masalahnya (dan berbicara dengan mereka tentang apa yang mereka pikirkan pada titik tertentu), saya dapat cukup yakin bahwa mereka tidak melakukannya. t hanya google jawabannya.
Selama masalah Anda lainnya ditentukan dengan baik (yaitu, Anda memberi mereka rumus untuk masing-masing), maka pertanyaan Anda baik-baik saja.
Ketika saya mewawancarai kandidat, saya mencoba untuk tetap pada masalah pemrograman yang kemungkinan akan mereka temui. Saya suka masalah manipulasi string karena ketika Anda berada di web, hampir semua yang dihadapi pengguna berkaitan dengan semacam manipulasi string. Cara mereka menangani itu penting.
sumber
Itu tergantung pada kaliber posisi yang ingin Anda isi.
Jika Anda mencari pengembang senior, maka saya berharap mereka tahu semua itu. Jika mereka salah dan saya merasa jahat, saya akan menghentikan wawancara, terima kasih dan selamat tinggal. Jika saya dalam suasana hati yang lebih sopan, saya hanya akan berterima kasih kepada mereka dan bergegas melalui sisa wawancara.
Jika saya pergi untuk pengembang junior, maka pertanyaan-pertanyaan itu bisa dianggap cukup sulit. Saya akan lebih tertarik mengeksplorasi kemampuan dan kemauan mereka untuk belajar. Jadi saya akan mencoba memberi mereka petunjuk dan membimbing mereka serta melihat bagaimana mereka merespons.
sumber
Wawancara intern adalah jenis wawancara yang berbeda. Apa yang biasanya saya lakukan adalah menggunakan pertanyaan pengembang standar saya (seperti yang Anda berikan) untuk mengukur di mana mereka berada dalam pendidikan mereka. Kemampuan untuk memecahkan masalah-masalah ini akan sangat bervariasi dari mahasiswa tahun kedua hingga senior.
Setelah saya memiliki informasi itu, saya kemudian memfokuskan wawancara pada keterampilan lain seperti, apakah mereka akan dapat bekerja dalam tim, apakah mereka dapat diajar, apakah mereka akan mendapat manfaat dari magang di perusahaan kami, apakah mereka bersemangat tentang pengembangan / pembelajaran, dll.
Bagi saya, itu adalah hal-hal non teknis yang benar-benar membedakan peserta magang dari kandidat lainnya. Saya lebih suka menghabiskan beberapa bulan melatih / membimbing seseorang yang didorong untuk belajar dan tumbuh, daripada seseorang yang hanya menginginkan pekerjaan untuk semester.
sumber
Tanyakan pada diri sendiri nilai apa yang mungkin ditambahkan oleh orang yang diwawancarai ke perusahaan Anda. Faktor dalam biaya melibatkan mentor, terutama jika mereka tidak dapat menyelesaikan masalah di tingkat fizzbuzz. Jika jawabannya tidak sepadan dengan gaji yang dimaksud, maka Anda memiliki kasus ekonomi yang baik untuk tidak mempekerjakan mereka.
Jangan takut untuk kembali ke manajer Anda dan berkata "tidak ada kandidat yang akan menambah nilai yang cukup bagi perusahaan kami untuk membuat mempekerjakan mereka berharga". Ini harus menjadi tindakan yang lebih baik daripada berakhir dengan seseorang yang sebenarnya bernilai negatif, karena biaya seseorang yang terus-menerus membantu mereka.
sumber
Jawaban saya mungkin tampak sedikit tidak baik atau tidak menyenangkan, tetapi saya pikir itu berfungsi dengan baik. Untuk mulai dengan, saya memberi kandidat pertanyaan yang sangat mudah, yang berfungsi sebagai pertanyaan pemanasan untuk membantu membangun kepercayaan diri mereka. Apakah mereka berhasil atau tidak, saya beralih ke pertanyaan yang kurang sepele, dan terkait langsung dengan apa yang tercakup dalam pekerjaan itu.
Pada titik ini, semuanya atau tidak sama sekali. Jika mereka berlayar melewatinya, bagus, tidak masalah. Jika mereka sedikit berjuang, tidak masalah, saya akan membantu mendorong mereka dan kemudian pindah ke pertanyaan lain untuk mengukur kemampuan lain.
Namun, jika mereka benar-benar tidak memiliki kemampuan untuk menyelesaikannya, saya melanjutkan dan membakar sisa waktu wawancara membantu mereka. Kandidat masih merasa terlibat dalam wawancara, tetapi saya tidak harus mengarahkan wawancara ke arah yang berbeda dan tidak relevan. Ini baik untuk kandidat, karena mungkin mendidik.
sumber
Jadi, jawaban saya adalah: lebih baik bersiap diri.
PS Anda sudah menjadi manajer, jadi, Anda benar-benar harus menahan stres.
sumber