Jadi saya sedang mencari posisi baru sebagai Pengembang Front-End. Saya tahu JavaScript dengan sangat baik dan dapat menulis tentang Penutup, Currying, Warisan Prototypal, Pola Desain, kinerja Aplikasi, dan Arsitektur Front-End secara keseluruhan. Namun, saya tetap saja berakhir dengan wawancara pekerjaan dengan pengeboman. (FYI sebagian besar pekerjaan yang saya wawancarai adalah untuk membangun SPA dengan semacam kerangka kerja MVC)
Biasanya tes pengkodean adalah potongan kode kecil dari hal-hal yang tidak pernah saya temui secara profesional. Seperti menulis fungsi untuk memecahkan beberapa jenis masalah matematika. Selain dari kecanggungan bawaan mencoba kode sambil memegang telepon di satu tangan dan memiliki orang asing melihat layar Anda dan menonton setiap karakter yang Anda ketik, saya biasanya tidak melihat hal-hal semacam ini di dunia nyata.
Apakah ini keterampilan serius yang saya miliki atau pewawancara mengajukan pertanyaan yang tidak relevan. Saya kira saya harus bekerja pada pemrograman fungsional dan algoritma saya memotong tetapi saya belum menemukan banyak sumber daya yang baik di web (atau di cetak) ada saran?
sumber
Jawaban:
Menulis kode hanyalah bagian dari proses wawancara.
Sebenarnya menyelesaikan masalah logis hanyalah bagian dari tugas penulisan kode.
Pewawancara ingin memastikan bahwa:
Anda dapat menulis kode. Banyak kandidat dengan sepuluh tahun pengalaman profesional dalam suatu bahasa tidak dapat menulis kode sama sekali, dan tes ini dimaksudkan untuk menolak kandidat tersebut.
Anda memikirkan masalah sebelum Anda menulis kode. Banyak yang akan melompat ke keyboard mereka, menulis puluhan baris kode, kemudian menemukan bahwa mereka salah memahami masalah asli, karena mereka tidak mengambil waktu untuk memikirkannya.
Anda dapat menyesuaikan diri saat menulis kode. Katakanlah Anda menemukan solusi, tetapi ketika Anda mulai menerapkannya, tampaknya ide pertama Anda bukan yang terbaik; dapatkah Anda dengan cepat beralih ke yang lebih baik, pada akhirnya refactoring kode yang Anda tulis?
Ini juga berarti bahwa wawancara semacam itu harus lebih interaktif . Alih-alih mengetik dengan satu tangan, beli kit hands-free atau telepon melalui Skype dan gunakan headset. Ketik saat Anda mengetik di tempat kerja, sambil mengomentari dan menjelaskan apa yang Anda lakukan: tiba-tiba akan menjadi kurang canggung.
Sudahkah Anda melakukan pemrograman pasangan? Jika ya, situasi wawancara sangat mirip, kecuali bahwa pewawancara tidak dapat memberi Anda pendapatnya, dan Anda tidak memintanya untuk mengganti keyboard dengan Anda ketika Anda selesai.
Berikut adalah beberapa contoh masalah matematika murni dan bagaimana ini menunjukkan keterampilan non-matematika pengembang.
Contoh 1: latihan coding sederhana
Di sini, pewawancara ingin Anda berpikir secepat mungkin, menemukan solusinya dan mengimplementasikannya dengan cepat. Latihan semacam itu tidak terkait dengan apa yang dilakukan pengembang sebenarnya dan lebih dekat dengan apa yang dapat Anda temukan ketika melakukan gelar CS, tetapi pewawancara menyukai hal-hal semacam ini, jadi mari kita lakukan. Selain itu, batasan waktu membuat pengujian otomatis tidak mungkin dilakukan, sehingga pewawancara mungkin tidak mengharapkan ini dari Anda.
“Deskripsi algoritma membuat saya berpikir tentang rekursi. Aturan kedua mengarah ke fungsi rekursif berikut. "
"Untuk mengakhiri rekursi, kami akan menambahkan kasing khusus dengan mengganti badan
fibonacci
fungsi.""Selesai."
Kesimpulan
Seperti yang saya katakan, latihan semacam itu sama sekali tidak terkait dengan pekerjaan pengembang yang sebenarnya. Apakah itu membuatnya tidak berarti? Tidak juga, karena setidaknya, itu menunjukkan bahwa orang tersebut:
Mampu memikirkan masalah. Beberapa kandidat akan benar-benar hilang, dan di bawah tekanan, akan membutuhkan lebih dari waktu yang dialokasikan hanya untuk memikirkan cara yang mungkin untuk mendekati masalah.
Mengetahui rekursi atau mampu menghindari rekursi melalui loop biasa. Kemudian, pewawancara mungkin bertanya apakah ada cara untuk menggunakan / tidak menggunakan rekursi, dan apa manfaat / kelemahan rekursi.
Mengetahui dasar-dasar bahasa pemrograman. Tidak masalah jika orang yang digunakan
switch
, klausa penjaga, kondisional atau kamus : tergantung pada latar belakang, kandidat yang berbeda akan memilih alat yang berbeda untuk mencapai hal yang sama.Tetap fokus pada masalah, tanpa membawa hal-hal seperti tes unit, skalabilitas, atau kinerja. Pewawancara kemudian dapat bertanya mengapa kinerja-bijaksana, fungsi di atas mengerikan, mengharapkan kandidat untuk menjelaskan apa yang harus dilakukan untuk membawa kinerja ke tingkat yang wajar.
Contoh 2: pertanyaan rumit
Sekarang, kami memiliki kendala menarik yang menunjukkan bahwa pewawancara tidak benar-benar peduli tentang kemampuan kandidat untuk menyelesaikan masalah, tetapi lebih pada kemampuannya untuk menebak jalan mana yang lebih cepat daripada yang lain.
Pertanyaan rumit itu biasanya mengundang jawaban yang sulit. Di sini, mengingat batasan waktu, tidak ada cara untuk membuat beberapa implementasi, membandingkannya, membuat profil menjadi yang tercepat dan datang dengan solusi optimal.
Sebaliknya, bagaimana dengan:
"Biarkan saya Google" Angka Fibonacci Pertama "... Ini terlihat menjanjikan. Dengan ekspresi reguler
sederhana(yang akan menjadi oxymoron), kita dapat membangun daftar nilai yang dipisahkan koma. ”"Akhirnya, programnya sendiri."
Kesimpulan
Pertanyaan rumit mengundang jawaban sulit. Jangan heroik, dan jangan mulai membuat benchmark dan profil ketika Anda hanya punya waktu tiga menit. Pikirkan cara cerdas untuk memecahkan masalah saat menggunakan pengalaman Anda. Pengalaman saya memberi saya petunjuk bahwa menggunakan peta mungkin lebih cepat daripada menghitung angka. Mungkin salah, tetapi upaya ini harus diharapkan mengingat batasan waktu.
Mengetahui alat Anda juga membantu, dan merupakan bagian penting dari keterampilan pengembang: tanpa mengetahui ekspresi reguler, saya akan menghabiskan tiga menit yang dialokasikan untuk Googling untuk daftar yang dipisahkan koma, atau akan mulai menulis parser yang akan membangun array yang saya butuhkan.
Ingat, pengembang yang baik bukanlah yang memulai pengkodean segera, tetapi siapa yang tahu bagaimana menghindari pengkodean ketika ada peluang yang lebih baik. Beberapa pewawancara tidak akan ragu untuk memberi Anda tugas yang terlihat seperti pengkodean, tetapi hampir tidak memerlukan kode sama sekali.
Contoh 3: pengembangan aplikasi lengkap
Ayo mulai.
“Urutan contoh sangat membantu, karena akan memungkinkan saya untuk memiliki banyak unit tes untuk memastikan implementasi saya tidak terlihat sepenuhnya salah. Secara umum, saya menggunakan Mocha untuk node.js atau QUnit untuk JavaScript sisi klien, tetapi di sini, demi kesederhanaan, saya hanya akan melempar banyak fungsi pengujian. ”
“Saya mulai dengan membuat
index.htm
danfib.js
file. Kemudian, saya mengisiindex.htm
dengan kode yang benar-benar minimalis dan tidak sesuai dengan W3C (kita bisa kembali ke sini nanti jika Anda tertarik dengan kemampuan HTML saya juga). ""Sekarang mari kita menulis beberapa kode yang akan memanggil fungsi generator Fibonacci dan menunjukkan hasilnya."
"Sudah waktunya untuk menjalankan kode untuk pertama kalinya dan ... itu tidak berhasil. Tidak ada yang terjadi. Mengapa?"
"Oke, aku sudah lupa
fibonacci.init();
pada akhirnya. Saya menambahkannya, dan tetap saja, tidak ada yang terjadi, sementara itu setidaknya harus menampilkan pesan di konsol. Tunggu, benar, bukanonclick
, tapiclick
; Saya sering menggunakan JQuery sehingga saya mulai lupa nama-nama peristiwa dalam JavaScript biasa. ”"Mari kita tambahkan beberapa tes."
"Membandingkan array bisa rumit, jadi saya hanya menyalin-tempel
Array.prototype.equals
kode dari jawaban ini .""Sekarang kita menjalankan aplikasi, ini menampilkan:"
“Tes gagal, yang sangat diharapkan, mengingat implementasi aktual kami (
return [1, 2, 3];
) dari urutan Fibonacci. Sudah waktunya untuk mengubah ini. ""Dari pernyataan aslinya, urutan Fibonacci dimulai dengan
[0, 1]
, jadicompute
menjadi:""Ini memungkinkan untuk lulus tes pertama, dan sekarang kita dapat menulis tes kedua."
"Gagal, jadi kami kembali ke
compute
dan memodifikasinya.""Sekarang, kedua tes lulus, dan sekarang saatnya untuk beralih ke case non-edge."
“Ketiga tes lulus sekarang, kecuali bahwa hasilnya tidak cocok untuk panjang yang lebih besar seperti 100. Untuk mendapatkan hasil yang benar, kita harus menggunakan perpustakaan presisi yang sewenang-wenang . Ada juga hal yang perlu diperbaiki. Misalnya, konvensi penamaan terkadang terlalu buruk (apa
fib
?). Kode JavaScript terkait HTML juga harus menuju ke objek yang berbeda, serta kode pengujian. Juga, saya belum mengujicompute(0)
dan belum memeriksa input. "Kesimpulan
Dengan menelusuri contoh, Anda dapat melihat interaksi yang diharapkan selama wawancara. Tidak semuanya lancar (saya melakukan beberapa kesalahan di awal yang membawa saya ke situasi yang memalukan di mana tidak ada yang terjadi ketika saya menjalankan aplikasi), dan pendekatan awal menjadi lemah jika kita harus mendukung panjang urutan yang besar, tetapi saya telah mencapai untuk menunjukkan bahwa:
compute(0)
yang akan gagal, tetapi tidak masalah untuk demo).Ini persis seperti apa yang diharapkan dari pewawancara dari Anda.
sumber