Saya menyiapkan pertanyaan untuk wawancara kerja untuk posisi pengembangan senior. Pekerjaan itu akan mencakup desain berorientasi objek, dan perangkat lunak yang ada menggunakan pola desain, jadi saya ingin meminta para kandidat untuk menjelaskan beberapa pola desain yang mereka tahu, mereka gunakan, bagaimana mereka menggunakannya, mengapa mereka menggunakannya dan sebagainya. Namun, dalam wawancara sebelumnya ketika saya bertanya kepada pengembang senior dengan setidaknya 5-10 tahun pengalaman tentang pola desain, hampir tidak ada yang pernah mendengarnya. Saya pikir dua dari dua puluh pengembang dapat menyebutkan satu pola desain tunggal (Singleton dan MVC, masing-masing).
Jadi pertanyaan saya adalah: apakah masuk akal untuk mengajukan pertanyaan ini? Atau apakah ini subjek yang tidak jelas sehingga Anda tidak bisa mengharapkan karyawan baru untuk mengenal mereka?
Haruskah pengembang senior memiliki pengalaman sebelumnya dengan pola desain, atau apakah Anda akan mengatakan bahwa pola desain adalah topik yang sangat sederhana sehingga setiap pengembang yang baik dapat mengambilnya selama pelatihan? Jika demikian, pertanyaan apa yang ingin Anda tanyakan untuk mengukur kemampuan desainnya?
Tambahkan Setelah membaca jawaban sejauh ini, saya harus memberikan beberapa klarifikasi:
- Pekerjaan ini untuk pengembang .NET dengan pengalaman di OOP / OOD
- Kode yang ada menggunakan nama kelas seperti
IParameterGraphVisitor
danIStorageFactory
di banyak tempat - Bagaimana Anda bertanya kepada orang-orang tentang pengalaman masa lalu mereka dengan desain OO yang mereka buat, jika mereka tidak memiliki kosa kata untuk menjelaskan desain mereka? Itulah yang ingin saya lakukan, dan yang bisa saya kemukakan adalah "tolong Anda menggambar hirarki desain / objek dari proyek terakhir Anda di papan tulis".
sumber
Jawaban:
Kemungkinan mereka lakukan mengenal mereka. Mereka mungkin tidak mengenal mereka sebagai 'pola desain'; yaitu, mereka mungkin tidak terbiasa dengan terminologi akademik untuk hal-hal seperti itu. Apa yang Anda lihat sebagai 'mesin negara' mungkin hanya pendekatan akal sehat untuk masalah ke programmer yang lebih tua, lebih berpengalaman. Saya tidak pernah menaruh perhatian pada 'pola desain', misalnya, tetapi ketika saya mengetahui apa itu State Machine, saya harus tertawa karena saya telah melakukan itu selama bertahun-tahun. Siapa yang tahu aku akademis? Saya selalu menganggapnya sebagai keterampilan dasar coding, dan bukan 'pola desain'.
Intinya bukan mengasumsikan pengembang berpengalaman Anda mengetahui istilah buku teks untuk hal-hal; sebaliknya, tanyakan kepada mereka bagaimana mereka akan menyusun kelas, atau bagaimana mereka akan mendekati suatu tugas.
sumber
Harapan Anda cukup masuk akal untuk pengembang OO senior. Siapa pun yang memanggilnya bahwa tanpa mengetahui Pola Desain hanya menunjukkan bahwa pengalaman tidak dibawa secara otomatis oleh tahun-tahun yang lewat :-( Tentu ada banyak pengembang di luar sana yang telah menghabiskan bertahun-tahun atau bahkan puluhan tahun di lapangan, tanpa pernah mendengar tentang desain pola - yang hanya menunjukkan bahwa mereka tidak tertarik untuk mempelajari ide-ide baru, memperbaiki diri mereka sendiri dan mengadopsi praktik-praktik terbaik.
Pengalaman IMO sangat penting. Secara teori, pengembang yang baik dapat membaca Pola Desain dalam buku, atau bahkan di Wikipedia, dan memahami konsep dasar dalam 15 menit. Namun, menerapkan konsep dengan benar membutuhkan pengalaman yang sulit. Sangat mudah untuk tergila-gila dengan pola, mencoba menjejalkannya ke dalam setiap kemungkinan kode, l'art pour l'art. Juga mudah untuk menolak mereka dengan mengatakan "pola bukanlah peluru perak, cukup gunakan hal paling sederhana yang mungkin bisa berhasil". Menemukan jalan tengah di antara kedua ekstrem dengan mempelajari kapan dan bagaimana menggunakan pola untuk memecahkan masalah nyata, dan kapan tidak menggunakannya, membutuhkan pengalaman bertahun-tahun .
Dalam konser di atas, saya hanya akan menambahkan pertanyaan ini ke daftar Anda:
Memperbarui
@GrandmasterB memiliki poin bagus karena beberapa pengembang mungkin menggunakan pola desain tertentu tanpa mengetahui namanya. Di satu sisi dia benar dalam hal ini adalah terminologi / pertanyaan komunikasi. Namun, sisi lain dari koin adalah bahwa itu memang pertanyaan terminologi / komunikasi :-) Artinya, salah satu manfaat utama dari Pola Desain adalah untuk memberikan kosa kata umum kepada pengembang, sangat meningkatkan komunikasi . (Cobalah untuk menjelaskan ide dasar Adaptor tanpa menggunakan kata itu sendiri, atau sinonimnya "pembungkus" et al!) Jadi betapapun berbakat dan berpengetahuan luas seorang kandidat, tanpa mengetahui terminologi yang diterima secara luas, ia akan memperkenalkan masalah komunikasi di tim Anda.
sumber
Seorang senior yang pengembang? Pastinya. Seorang junior harus. Saya berusia 15 tahun, tidak memiliki pendidikan formal tentang hal ini dan bahkan saya memahaminya. Tidak hanya masuk akal untuk berharap bahwa mereka mengenal mereka, itu tidak akan dapat diterima jika mereka tidak mengenalnya. Dengan asumsi mereka tahu sesuatu tentang pemrograman berorientasi objek, yang kemungkinan besar mereka lakukan.
sumber
Dalam sebuah wawancara Anda harus bertanya apa yang penting untuk diketahui calon untuk melakukan pekerjaan.
Jika mereka harus mengetahui nama-nama pola karena mereka dari Gang of Four maka itu adalah persyaratan yang valid.
Jika, di sisi lain Anda ingin mereka menampilkan pengetahuan kerja yang tepat dari arsitektur program, saya pikir Anda lebih baik memberi mereka masalah dan bertanya kepada mereka bagaimana akan menyusun kode. Jika mereka memberi Anda solusi pola yang sesuai maka Anda memiliki bukti bahwa mereka mengetahuinya, terlepas dari nama yang digunakan.
Setiap kali saya mewawancarai untuk posisi Senior, mereka cenderung lebih "praktis" daripada T&J. Saya ingin menunjukkan keterampilan dan kenyamanan yang jelas dalam pemrograman. Saya juga menginginkan dasar yang kuat dalam konsep-konsep CS yang berarti keterampilan yang lebih umum tentang bagaimana menerapkan konsep-konsep seperti enkapsulasi, algoritma, penggabungan / kohesi, dll. Pengalaman dan keakraban dalam berbagai bahasa dan paradigma.
sumber
Tergantung pada bidang keahlian mereka. Saya tidak berharap pengembang C yang tertanam tahu banyak tentang pola desain. Jika kita berbicara tentang pengembang Java atau .NET, mereka harus terbiasa dengan pola desain, dan terutama bagaimana untuk tidak terlalu terbawa olehnya.
sumber
Dengan asumsi Anda mencari senioritas di OOP jawabannya pasti ya. Pola desain adalah leksikon bahasa OOP.
Lebih jauh lagi, saat ini tidak masuk akal bahwa programmer OOP yang baik dengan pengalaman 10 tahun tidak dapat menyebutkan pola desain, karena pola desain banyak diadopsi dalam API standar, perpustakaan dan kerangka kerja pengembangan.
Sudah bertahun-tahun sekarang saya telah mengajukan pertanyaan ini selama wawancara dan itu adalah showstopper ketika kandidat tidak memberikan jawaban yang memuaskan pada topik.
sumber
Ya, tetapi Anda mungkin harus mendapatkan pemahaman mereka dengan mengajukan pertanyaan desain daripada meminta orang untuk menyebutkan pola desain yang telah mereka dengar. Saya cukup nyaman dengan pola yang dijelaskan dalam PoEAA, GoF dan bahkan beberapa pola pemrograman fungsional dan saya masih tidak berpikir Anda akan belajar lebih banyak tentang pendekatan saya untuk memecahkan masalah dengan meminta saya menyebutkan beberapa pola.
Diberikan pertanyaan seperti "desain saya editor teks" dengan tindak lanjut seperti, "Bagaimana Anda akan mendukung objek yang disematkan seperti gambar? Berani dan miring? Undo?" Anda mungkin pada akhirnya akan cukup mendengar untuk mengenali pola perintah, pola gabungan, pola kenang-kenangan, dan beberapa lainnya bahkan dengan percakapan singkat.
Pola desain ditemukan dan kemudian dideskripsikan sehingga kita akan memiliki bahasa yang sama untuk berkomunikasi keputusan desain.
Sayangnya saya telah bekerja untuk seseorang yang setiap penggunaan pola desain harus dijelaskan dan dibenarkan, bukan karena uji tuntas, tetapi karena dia tidak tahu mereka. Itu tidak menyenangkan. Tetapi sebagian besar pengembang yang serius, secara kebetulan atau desain, mempelajari nama-nama pola OO yang paling umum digunakan, jika tidak ada yang lain, dan sebagian besar pengembang aplikasi perusahaan menghargai garam mereka setidaknya tahu sesuatu tentang pola PoEAA yang paling umum.
sumber
Masuk akal. Jelas. Perlu. Tidak
Saya bertanya kepada calon potensial apakah mereka tahu pola desain. Ini hanya salah satu dari beberapa kriteria yang harus ditimbang secara keseluruhan. Jangan mengabaikan gambar total.
Ya, banyak pengembang tanpa sadar menggunakan beberapa pola desain, tidak diragukan lagi.
Bukan itu sebabnya saya mengajukan pertanyaan.
Penting untuk diketahui bahwa saya dapat berkomunikasi dengan cepat dan efektif dengan pengembang lain. Saya tidak ingin menghabiskan 20 menit di papan tulis menjelaskan mesin negara hanya untuk menemukan bahwa mereka "menggunakannya sebelumnya, tetapi tidak pernah tahu harus menyebutnya apa". Ini tidak produktif.
Mereka juga membantu dalam proses refactoring. Melihat sekilas kode seseorang dapat dengan sembarangan menerapkan beberapa bentuk pola pabrik, tetapi pola pabrik GoF telah bertahan dalam ujian waktu. Itu sebabnya ini adalah pola pabrik, bukan YET ANOTHER fp (menciptakan kembali roda tidak disukai, Joel pada perangkat lunak memiliki banyak kelemahan yang melakukannya).
Sebuah tim yang menggunakan dan mengakui pentingnya pola desain meningkatkan komunikasi dan produktivitas. Jika tim Anda, sebagai satu unit, tidak menggunakan dp maka mereka kehilangan relevansinya.
sumber
Berbicara dari pengalaman saya sendiri, saya mengabaikan desain patters untuk sementara waktu. Saya tahu bahwa mereka ada, saya tidak pernah membaca tentang mereka. Setelah saya akhirnya menggigit peluru, saya menyadari bahwa saya telah menggunakan pola desain selama ini dan saya tidak menyadarinya atau saya tidak tahu bahwa solusi desain saya sebenarnya memiliki nama yang sama.
Saya akan lebih cenderung untuk datang dengan serangkaian masalah di mana pola desain tertentu cocok dengan solusinya dan melihat pengembang datang dengan sesuatu yang mirip dengan pola tersebut. Jika mereka melakukannya, bagus. Saya mungkin bahkan lebih cenderung untuk mempekerjakan seorang pengembang yang menggunakan pola desain tanpa mengetahui karena saya melihat banyak pengembang yang memiliki pengetahuan pola desain berusaha untuk mencocokkan solusi ke suatu pola ketika itu tidak sesuai daripada menyadari pola tertentu yang terjadi untuk menyelesaikan masalah dengan baik.
sumber
Saya pikir pertanyaan yang lebih baik adalah: Diberi nama pola, dan deskripsi pola, misalnya Pola Pabrik dari buku Geng Empat, kandidat harus dapat membuat skenario di mana pola tersebut akan pendekatan yang masuk akal.
sumber
Ada pengembang dengan pengalaman 5-10 tahun dan ada pengembang senior. Mereka bukan hal yang sama sekali. Ya jika Anda mempekerjakan di tingkat senior dan Anda mengharapkan orang tahu dan menggunakan pola desain maka saya tidak akan mempekerjakan orang senior yang tidak terbiasa dengan mereka. Itu akan seperti mempekerjakan spesialis basis data yang tidak mengerti gabungan kiri. Itu hal yang cukup mendasar bagi pengembang senior sejati. Saya mungkin akan mempekerjakan orang junior sekalipun.
sumber
Ya memang mereka harus terbiasa dengan istilah itu, dan bahkan harus bisa menyebutkan beberapa pola - tetapi jangan membuat kesalahan dengan membingungkan pengetahuan teoritis dengan pengalaman.
Ada banyak orang yang sebelum wawancara akan memoles pola desain, dan dapat membuat mereka dengan deskripsi singkat - tapi itu hanya teorinya. Ini adalah pengembang senior nyata yang dapat menentukan kapan harus menggunakannya, atau tanpa pengetahuan tentang pola formal akan menyelesaikan masalah dengan cara pola desain klasik.
Cara terbaik untuk memeriksa adalah membiarkan mereka merancang sesuatu di depan Anda dan mengajukan pertanyaan menyelidik .. seorang pengembang senior adalah seseorang yang dapat berpikir secara alami pada tingkat abstraksi. Inilah orang-orang yang "menciptakan" pola desain.
Seperti kelas Peopleware yang berbicara tentang mempekerjakan seorang pemain sulap tanpa meminta mereka untuk menyulap - hanya karena mereka mengatakan mereka tidak bisa berarti banyak .. coba mereka.
sumber
Seperti yang telah dinyatakan, saya juga percaya bahwa boleh saja jika mereka tidak mengingat kata kunci dalam hati. Tetapi karena ini adalah posisi senior, mereka harus tahu kapan menerapkan pola untuk menyelesaikan masalah secara optimal alih-alih menggunakan solusi terburuk. Jadi, beri mereka masalah yang harus dipecahkan dengan menggunakan pola (misalnya, cara membuat objek tanpa mengkodekan kelasnya, cara mengakses elemen objek tanpa memiliki detail tentang implementasinya, dll.) Dan lihat caranya mereka akan menyerangnya.
sumber
Jelas mereka harus tahu polanya, tetapi belum tentu kata kunci.
Misalnya MVC memiliki banyak alternatif yang sangat mirip seperti PAC, 3-tier. Beberapa tahun yang lalu kata kunci populer lain untuk MVC adalah "Model 2". Saya sebenarnya tahu pengembang yang sangat baik yang tahu pola itu dengan sempurna, tetapi tidak tahu bahwa kata kunci saat ini untuk itu adalah MVC.
sumber
Sangat sederhana: jika Anda menggunakannya maka Anda perlu bertanya kepada kandidat Anda. Jika mereka tahu pola, maka itu harus menambahkan beberapa poin plus; tetapi tidak tahu seharusnya tidak menghalangi mereka, terutama jika mereka menunjukkan keterampilan OOD yang baik. Pengembang yang telah dalam proyek pemeliharaan tidak mungkin tahu banyak tentang pola desain dibandingkan dengan mereka yang telah merancang mereka. itu juga tergantung pada apakah mereka telah diajarkan pola desing di perguruan tinggi. Dalam pengalaman saya, tidak mungkin mereka melakukannya. Sebagian besar universitas dan kursus swasta mengajarkan Anda OOP tetapi tidak OOD. Kemungkinan mereka akan mempelajari DP lebih sedikit.
Secara pribadi, saya belum mempelajari DP sampai proyek saya mengharuskan saya juga. Bahkan kemudian saya menemukan bahwa saya telah menggunakan beberapa pola, setidaknya dengan cara yang sama jika tidak dengan cara yang persis dijelaskan dalam buku. Saya terkejut mengetahui bahwa mereka dikodifikasikan. Jadi cari keterampilan desain yang baik jika mereka tidak tahu DP. Jika mereka tahu DP, besar kemungkinan mereka bagus dalam desain tetapi masih mengujinya. Mereka mungkin baru saja mendengar beberapa kabar tentang DP atau mengetahui dari orang dalam dan hanya mempelajari beberapa pola tanpa menerapkannya.
sumber
Adalah masuk akal bagi Anda untuk mengharapkan orang yang melamar pekerjaan dengan Anda untuk mengetahui (atau mempelajari) hal-hal yang diperlukan dalam slot pekerjaan Anda, terlepas dari apakah mereka standar industri atau tidak. Kalau tidak, Anda mengutuk diri sendiri untuk menjadi biasa-biasa saja. Tetapi berhati-hatilah dalam membuat pengetahuan (atau keterampilan) suatu persyaratan pekerjaan, jika itu tidak benar-benar dibutuhkan.
Katakanlah Anda memiliki dua kandidat dengan latar belakang yang hampir sama, dan satu dapat memberi tahu Anda tentang pola desain, dan yang lainnya tidak. Apa yang akan memberi tahu Anda tentang bagaimana kinerja mereka di pekerjaan?
Anda mengatakan perangkat lunak yang ada menggunakan pola desain. Apakah itu keuntungan? Jika ya, bagaimana caranya? Apakah tujuan Anda bahwa perangkat lunak baru ditulis sesuai dengan pola yang ada, atau bahwa pola baru diperkenalkan? Mengapa?
sumber
Saya dapat memikirkan pengembang senior yang tidak tahu tentang pola desain dalam situasi berikut:
sumber
Mengapa pengembang di lingkungan non-OO harus tahu tentang pola desain OO? Saya telah bekerja di toko-toko hanya melakukan Cobol, hanya PL / SQL, hanya Kemajuan 4GL, dll. Prinsip-prinsip desain OO tidak relevan di sana, saya berharap para senior di lingkungan tersebut memiliki pengetahuan yang relevan dengan lingkungan tersebut, bukan untuk desain OO pola.
Mampu mengutip tanpa alasan dari katalog pola juga tidak membuat Anda menjadi pengembang yang baik (pada kenyataannya, menurut pengalaman saya, ini menghasilkan beberapa kode terburuk yang pernah saya lihat). Namun itulah yang Anda harapkan menjadi tanda "pengembang senior". Saya telah bekerja di industri ini selama 15 tahun, namun jangan meminta saya untuk menggambar diagram pola. Saya tidak pernah memberikannya banyak waktu, saya tidak perlu melakukannya. Saya telah memperoleh cukup pengalaman untuk menemukan apa yang berhasil tanpa mencantumkan nama tertentu, dan jika saya memerlukan definisi formal, saya tahu di mana mencarinya (dan ya, saya memiliki buku referensi di perpustakaan pribadi saya). Itulah tanda dari pengembang berpengalaman, bukan pengetahuan hafalan yang diperoleh dari menjejalkan beberapa buku sekolah.
sumber