Pertanyaan umum dalam Wawancara Teknologi adalah merancang sistem tertentu, biasanya produk perusahaan yang sudah ada. Misalnya, "Desain Google Documents".
Apa jawaban yang diharapkan untuk pertanyaan seperti itu? Maksud saya, sistem seperti itu pasti memiliki desain yang rumit yang berada di luar cakupan wawancara apa pun. Apa yang diharapkan pewawancara dalam waktu sesingkat itu?
Jawaban:
Wawasan bagaimana otak Anda melihat masalah ini. Berikut adalah beberapa poin awal yang dapat saya lihat bagaimana seseorang dapat mencoba melakukan percakapan ini:
Top-down - Melihat ke bawah dari tingkat yang sangat tinggi membangun desain dan menyempurnakan desain sebagai berbagai komponen dilakukan dan di sini ada beberapa komponen yang bisa saya lihat ....
Bottom-up - Melihat dari bawah ke atas, berikut ini adalah potongan-potongan yang bisa dibangun untuk mencoba disatukan ....
Klarifikasi persyaratan - Mengajukan pertanyaan tentang skala yang diproyeksikan, ukuran, anggaran, dan tim yang digunakan untuk desain ini. Anda dapat mencoba membuat kode orang pengolah kata yang sangat disederhanakan atau Anda dapat merencanakan untuk menghabiskan ratusan juta dolar untuk membuat sistem manajemen dokumen utama yang Anda yakini adalah bagaimana Anda Google Doc mengambil ekstrem. Juga di sini adalah kemampuan untuk menanyakan sesuatu seperti, "Apa yang Anda maksud dengan Google Doc? Berapa banyak fungsi yang ingin Anda tiru?" pertanyaan juga.
Kuncinya adalah seberapa baik Anda bisa mengomunikasikan pikiran dan pendekatan Anda dalam mengatasi masalah seperti ini karena Anda mungkin mendapatkan pengguna mendekati Anda dan bertanya, "Psst, bisakah Anda membuat sesuatu seperti ini dalam 2 minggu?" itu sebenarnya bisa terjadi. Jadi, bagaimana Anda memberikan jawaban itu lebih penting daripada apa jawabannya.
Pendapat pribadi saya adalah bahwa proyek masa lalu bukan ide yang baik di sini. Apa yang seseorang coba temukan adalah kreativitas dan kemampuan komunikasi seperti apa di bidang baru daripada sekadar mengingat bagaimana sesuatu dilakukan di masa lalu. Kemungkinannya adalah bahwa sementara sesuatu yang terjadi di posisi baru mungkin mirip dengan sesuatu dari masa lalu, mungkin ada perbedaan yang cukup bahwa solusi lama tidak layak. Inilah sebabnya mengapa sementara apa yang dibangun mirip dengan aplikasi yang ada, mungkin ada berbagai penyesuaian yang membuat solusi sangat berbeda dari contoh awal.
Wawancara adalah jalan dua arah. Manajer dan pengembang lain jarang ahli dalam wawancara, jadi saya tidak yakin saya melihat nilai dalam mencoba untuk menyatakan bahwa mereka harus menjadi ahli dalam wawancara pekerjaan. Perekrut yang saya lihat berharap untuk tahu bagaimana melakukan wawancara, tetapi ada banyak perekrut miskin yang dapat digunakan sebagai contoh mengapa ini tidak selalu merupakan ide yang baik.
sumber
Khusus untuk pengembang senior, saya pikir pertanyaan ini bisa sangat bagus. Mereka menunjukkan bahwa pengembang mampu bergerak dari deskripsi yang besar dan rumit menuju implementasi yang realistis. Bahkan dengan sistem yang sama sekali tidak dikenal, Anda harus dapat melakukan sejumlah kegiatan menarik untuk pewawancara:
Pertanyaan ini hanyalah versi tingkat tinggi dari "Jelaskan hierarki objek yang akan Anda gunakan untuk ini ..." "Jelaskan antarmuka yang akan Anda desain untuk ini ..." "Rancang satu set tabel DB relasional untuk data ini ...", dll. Yang akan diberikan kepada pengembang tingkat menengah ke bawah. Pada pengembang tingkat bawah, pewawancara mungkin mengevaluasi potensi jangka panjang seseorang untuk pertumbuhan di perusahaan, atau hanya melihat apa yang mereka lakukan ketika dihadapkan dengan masalah besar yang mungkin bisa sangat besar.
sumber
Ini tentang melihat proses berpikir Anda dalam tindakan; mereka tidak tertarik pada solusi, tetapi bagaimana Anda akan mendekati menyelesaikan masalah, pertanyaan apa yang akan Anda tanyakan, masalah apa yang akan Anda identifikasi, dll.
Mengingat contoh Google Documents, masalah yang jelas muncul dalam pikiran adalah hal-hal seperti penyimpanan, keamanan, skalabilitas, ketersediaan, desain antarmuka klien, kompatibilitas browser, dll. Bagaimana Anda membagi tanggung jawab antara server dan klien? Bagaimana Anda menangani cadangan? Apa yang terjadi ketika server mati? Apa yang akan Anda lakukan dengan dokumen "terbengkalai" (hal-hal yang belum diakses atau dimodifikasi dalam jangka waktu yang lama)?
Sekali lagi, intinya bukan untuk menyelesaikan masalah-masalah itu, tetapi untuk mengidentifikasi mereka, membicarakannya, bertukar pikiran sedikit tentang bagaimana cara mengatasinya, dll.
sumber
Saya salah satu pihak yang bersalah yang sering mengajukan pertanyaan jenis ini dalam wawancara. (Sebagai catatan, saya juga mengajukan pertanyaan serupa tentang "proyek favorit mereka.") Alasan saya bertanya adalah bahwa itu adalah sesuatu yang sering kita lakukan di sekitar sini. Kami mendapatkan insinyur desain dari semua sisi antarmuka, seseorang dari rekayasa sistem, seseorang dari pengujian, dan seseorang yang memiliki pengetahuan tentang kasus penggunaan pelanggan untuk fitur tersebut. Kami berdiri di sekitar papan tulis dan berkata, "Oke, bagaimana kita akan membangun benda ini?" Seringkali Anda hanya tahu sedikit tentang fitur baru pada saat itu dan hanya ada karena keahlian Anda di bagian sistem, tetapi Anda tetap diharapkan berkontribusi secara produktif. Ini bukan hanya latihan akademis hipotetis.
Sejauh apa jawaban yang saya harapkan, ambil contoh, merancang sistem untuk mengunduh firmware baru dari server, melalui 20 kartu garis tertanam di kantor pusat untuk memutakhirkan 5.000 set top box di lapangan sekaligus. Asumsikan ada sedikit kapasitas cadangan pada tautan antara server dan kartu garis.
Jawaban salah:
Jawaban yang bagus:
Itu adalah transkripsi kata demi kata dari dua kandidat yang berbeda. Sebagian besar kandidat berada di antara keduanya, tetapi biasanya sampai di sana pada akhirnya dengan sedikit dorongan, yang tidak apa-apa. Kami tidak mencari Einstein berikutnya di sini, hanya sebuah indikasi bahwa Anda dapat benar-benar beralasan dengan cerdas tentang jenis masalah yang kami tangani setiap hari.
sumber
Saya juga mengajukan pertanyaan semacam ini, dan saya setuju dengan sebagian besar jawaban lainnya. Mungkin akan membantu orang yang diwawancarai untuk memahami MENGAPA jenis pertanyaan ini penting? Misalkan kita memiliki keputusan bisnis yang penting untuk dibuat, dan untuk melakukannya, kita perlu membangun sistem baru. Jika seseorang berlari menghampiri Anda dan bertanya apa yang diperlukan untuk membangun sistem yang berfungsi X, dapatkah Anda memberi mereka jawaban mendalam yang memprediksi tantangan dan sumber daya utama yang diperlukan?
Seorang programmer junior tidak tahu harus mulai dari mana. Mereka tidak siap untuk mulai berbicara tanpa spesifikasi terperinci. Seorang programmer senior akan langsung melihat bahwa ada banyak sisi dari masalah ini, dan akan berusaha untuk mengasah tantangan. Anda tidak harus merancang setiap aspek, cukup mengidentifikasi tantangan arsitektur dan kemudian mencari tahu bagaimana mengatasinya.
Pertimbangkan masalah Google Documents:
Satu hal yang menarik adalah skala geser permintaan yang akan datang. Anda tidak bisa hanya mendapatkan satu server dan menggunakan kode Anda untuk itu - ini adalah usaha yang lebih besar. Orang yang diwawancarai yang berhasil mungkin membidik tentang hal ini dan akan menggambarkan jenis sumber daya yang akan dibutuhkan, dan beberapa tantangan teknis dalam mengimplementasikan pada skala itu, dengan aplikasi yang tidak hanya memiliki keadaan, ia berbagi keadaan di beberapa pengguna.
Hal lain yang menarik tentang Google Documents adalah banyak orang dapat mengedit secara bersamaan. Orang yang diwawancarai yang berhasil akan dapat membahas mekanisme untuk memastikan dokumen yang dihasilkan bukan sampah, dan kandidat yang benar-benar hebat akan menyadari bahwa berbagai metode sinkronisasi atau penggabungan suntingan akan berdampak besar pada kinerja dan UX. Bahkan mungkin membahas variasi: Editor dokumen bersama untuk menulis kode mungkin harus menggunakan metode penyelesaian konflik yang berbeda dari Google Doc pada umumnya, karena ada konsekuensi yang berbeda terhadap hal-hal yang terjadi dalam urutan berbeda atau memiliki struktur yang sedikit berbeda.
Tidak ada satu pun cara yang tepat untuk membuat aplikasi seperti Google Documents, Anda tidak perlu mengidentifikasi apa yang akan Anda lakukan untuk setiap trade-off, tetapi sangat bagus untuk menemukan area yang memiliki masalah menarik, dan menjelaskan dengan jelas apa yang dilakukan perdagangan tersebut. -off mungkin.
-t.
sumber
Saya menduga apa yang ingin didengar oleh pewawancara adalah:
Kemudian, bola ada di pengadilan pewawancara. Jika dia ingin lebih detail, dia bisa bertanya. Yang dicari pewawancara adalah, dapatkah Anda melihat masalah atau produk, dan mengekstrak desainnya?
sumber
Bagi saya, jika orang tersebut tidak memulai dengan mengidentifikasi kasus penggunaan utama / cerita maka itu akan cukup untuk mengetahui mereka tidak siap untuk suatu posisi yang membutuhkan keterampilan khusus ini.
Setelah itu, mereka harus dapat menemukan solusi arsitektur berdasarkan kasus-kasus utama / cerita. Mudah-mudahan mereka menggunakan beberapa proses sistematis untuk mengidentifikasi modul selain menarik mereka dari .... Saya tidak akan berharap lebih banyak dari situasi wawancara untuk solusinya.
Namun, saya mungkin memilih salah satu modul arsitektur dan meminta desain yang lebih rinci, hanya untuk melihat apakah mereka memiliki beberapa keterampilan desain. Akan lebih baik melihat bahwa mereka mempertimbangkan kasus kegagalan / masalah kinerja. Tapi saya curiga pada titik ini, kita akan menabrak tembok waktu. Jadi, saya benar-benar tidak bisa menghukum mereka karena tidak mempertimbangkan masalah ini karena hanya ada begitu banyak waktu dan saya pikir masuk akal bagi mereka untuk menganggap bahwa mempertimbangkan setiap skenario yang mungkin tidak diharapkan dari situasi wawancara yang terbatas waktu.
sumber
Saya memiliki wawancara baru-baru ini di mana saya diminta untuk merancang sistem kontrol lift. Pada dasarnya mereka ingin melihat pendekatan Anda terhadap tugas tersebut. Jika Anda ditanya pertanyaan ini, mereka mungkin memiliki pekerjaan tingkat tinggi dalam pikiran Anda. Selamat.
sumber
Kuncinya adalah bagaimana Anda menyelesaikan masalah versus manfaat dari solusi yang Anda berikan, dan jika Anda mampu menangani masalah gambaran besar.
Saya pikir satu hal penting yang harus dilakukan adalah mengajukan pertanyaan tentang persyaratan. Jangan hanya membuat asumsi yang akan memungkinkan solusi hewan peliharaan Anda bekerja. Misalnya, Anda mungkin mengetahui beberapa metode yang sangat bagus untuk mencetak dokumen yang Anda mungkin tergoda untuk langsung menjelaskan. Tetapi Google Documents tidak mencetak secara langsung; menghasilkan PDF yang kemudian dicetak oleh klien. Jadi, jika Anda mulai dengan itu, Anda akan menghabiskan setengah waktu Anda menyelesaikan masalah yang bukan bagian dari masalah, dan telah menunjukkan bahwa Anda lebih tertarik menggunakan teknologi panas Anda daripada menyelesaikan masalah pelanggan.
sumber
Untuk menangani pertanyaan wawancara jenis ini, Anda harus memiliki minat umum dalam memahami "bagaimana hal-hal bekerja", tidak hanya dalam proyek-proyek yang Anda minati tetapi juga proyek-proyek yang Anda rasa terlalu jauh dari pengalaman Anda.
Ini berarti membaca blog, artikel, http://www.infoq.com , Berita Peretas, dll. Bahkan perangkat kerasnya menggertak dari Coding Horror.
Terlepas dari kenyataan bahwa Anda akan melupakan sebagian besar dari apa yang telah Anda baca (karena informasi tersebut tidak terhubung dengan pekerjaan Anda secara pribadi), mungkin ada beberapa informasi tersembunyi yang merupakan "benih imajinasi", dan sebagian kecil dari benih tersebut akan berkecambah ketika Anda menemukan masalah serupa di masa depan yang sangat jauh.
Jadi, pewawancara mungkin tertarik dengan kebiasaan membaca Anda (sebagai bagian dari hobi Anda) dan melihat apakah Anda memiliki kebiasaan rutin untuk mengumpulkan benih ide dari tempat-tempat acak.
sumber
Poin di balik mengajukan pertanyaan semacam ini adalah untuk mendapatkan wawasan tentang pikiran Anda. Pertanyaan umum yang saya gunakan adalah meminta pemrogram untuk merancang sistem yang dapat mensimulasikan PacMan.
Dan ya, saya mencari kasus penggunaan terlebih dahulu, itu menunjukkan kepada saya bahwa orang tersebut sedang berpikir. Kemudian, untuk multithreading, pertimbangan struktur data terlebih dahulu (yang dapat digunakan untuk masalah, kemudian yang lebih sesuai atau spesifik dengan mengapa keputusan).
Ini dianggap sebagai keharusan untuk posisi pengembangan senior. Baik konyol dan tidak ada gunanya bagi orang untuk duduk dan menjawab pertanyaan tentang implementasi semacam pada tingkat pengalaman pengembang ini. Desain sistem adalah apa yang saya harapkan pada level ini.
sumber