Haruskah saya berharap lulusan baru akrab dengan konsep pemrograman dasar? [Tutup]

9

Tampaknya ada perbedaan besar antara apa yang saya harapkan dari seseorang yang belajar pemrograman selama beberapa tahun di universitas, dan apa yang sebenarnya diketahui orang.

Saya tidak merasa seperti saya mengajukan pertanyaan yang terlalu rumit dalam wawancara. Beberapa pertanyaan saya yang biasa adalah:

  • Apa perbedaan antara tipe referensi dan tipe nilai?

    Jika tampaknya orang yang diwawancarai tidak benar-benar memahami jawabannya sendiri, atau jika dia tidak tahu terminologi yang saya gunakan, saya masuk ke dalam perincian lebih lanjut dengan memintanya untuk menjelaskan kepada saya apa yang terjadi ketika saya menulis int i = 0; dalam suatu metode, bagaimana dengan objek o = 0, objek o = new MyClass (), dll ...

    Pada dasarnya, saya melakukan semua yang saya bisa untuk menipu orang yang diwawancarai untuk memberi tahu saya tentang callstack, heap dll, dan saya mencoba untuk tetap dalam konsep agnostik bahasa. Jika orang yang diwawancarai memberi tahu saya bahwa dia banyak melakukan C, atau C ++, atau c #, saya menyelam lebih dalam ke bahasa tertentu, dan mungkin ke dalam detail implementasi.

    Jika perlu, saya bertanya kepada orang yang diwawancarai apa itu callstack, atau di mana argumen dilewatkan ke fungsi dalam bahasa imperatif pilihannya disimpan.

    sebagian besar orang yang diwawancarai tidak tahu apa itu callstack, apalagi pertimbangan tinju, dll.

  • Apa perbedaan antara kelas abstrak dan antarmuka. Dalam kasus apa Anda harus menggunakan salah satunya?

    Biasanya, saya juga meminta mereka untuk membayangkan desain perpustakaan kecil dengan use case yang bertujuan menggunakan beberapa warisan dan beberapa pabrik abstrak

    Sebagian besar orang yang diwawancarai tidak tahu apa tujuan sebenarnya warisan. Mereka biasanya mengetahui beberapa kata kunci (virtual, override, dll), tetapi tidak benar-benar tahu kapan menggunakannya, apalagi menjelaskan apa itu virtual-table.

Meskipun saya sudah menyaring CV sebelumnya, bahkan untuk orang-orang dengan 5 tahun pengalaman dalam proyek kehidupan nyata yang melibatkan arsitektur kompleks, saya akan mengatakan kurang dari 25% dari semua yang saya wawancarai dapat menjawab dua pertanyaan dengan benar. Dan ketika saya mengatakannya dengan benar, saya tidak bermaksud 'mendalam' ... hanya untuk memiliki perkiraan tentang konsep itu.

Mengenai junior, saya baik-baik saja dengan mempekerjakan seseorang yang tidak tahu bagaimana mengatur waktunya dengan sangat baik, atau seseorang yang tidak terbiasa dengan proses pembangunan industri misalnya, tetapi saya memiliki perasaan bahwa jika seseorang belum mendengar kata " "setelah beberapa tahun belajar Ilmu Komputer, dia bodoh, atau tidak termotivasi, atau memilih universitasnya dengan sangat tidak bijaksana.

Apakah Anda pikir saya terlalu ekstrim di sini? Apakah biasa untuk mempelajari konsep-konsep dasar ini setelah Anda menyelesaikan universitas? Apakah Anda tahu orang-orang yang tidak terbiasa dengan ini, dan menjadi insinyur perangkat lunak yang sangat baik setelah beberapa tahun? Dan apakah Anda pikir perusahaan saya mungkin memiliki masalah dalam menarik orang-orang berbakat, atau apakah Anda mengalami masalah yang sama dengan dalam proses perekrutan Anda sendiri?


Edit. mengenai "tipe langsung", itu hanya terjemahan harfiah dari bahasa Prancis ke bahasa Inggris, seperti yang biasanya kami lakukan dalam bahasa Prancis. Saya telah memperbaikinya dalam pertanyaan saya. Tapi tetap saja, saya pikir Anda semua mengerti dengan sempurna apa yang saya maksud, jenis apa yang membuat poin saya, bukan?

Brann
sumber
4
Hanya komentar kecil tapi saya tidak akan tahu apa yang Anda maksud dengan tipe langsung, tipe nilai di sisi lain yang bisa saya jelaskan kepada Anda. Namun saya merasa bahwa setiap orang yang lulus dengan gelar CS harus dapat menjawab dua pertanyaan itu. Untuk meningkatkan pertanyaan Anda, mungkin Anda bisa memberikan contoh seberapa lengkap jawaban yang Anda harapkan.
sebastiangeiger
Belajar bahasa selama 2+ tahun di universitas, berkompetisi dengan mata pelajaran lain hanya menyisakan siswa minimal setelah ujian mereka selesai. Satu-satunya hal yang dapat Anda yakini adalah bahwa mereka dapat mempelajari informasi itu, atau mereka pernah mengetahuinya. Hanya pengalaman praktis yang bisa memberi mereka pengetahuan permanen. Joel Spolsky memberikan contoh yang bagus tentang bagaimana dan mengapa siswa tidak memiliki banyak kemampuan yang harus kita harapkan dimiliki oleh programmer dalam artikel blognya di sini - http://www.joelonsoftware.com/items/2009/10/26.html
Justin Shield
@sebastiangeiger; Anda benar, diperbarui!
Brann
2
Dia harus tahu bahwa dia hampir tidak tahu apa-apa. Ini adalah titik kunci untuk menjadi lebih baik dari waktu ke waktu.
deadalnix
Brann, yang menarik, semua orang yang menjawab pertanyaan ini menyebutkan "tipe langsung" (kesalahan terjemahan), dan memberi tahu Anda bahwa mereka tidak tahu apa itu. Apakah pewawancara Anda berkata: "Saya belum mempelajari hal-hal ini secara mendalam?" atau apakah mereka mengklaim sebagai ahli tentang, misalnya, runtime spesifik dan pemahaman yang mendalam tentang kompiler?
Pindatjuh

Jawaban:

15

Terminologi adalah kejatuhan umum dalam situasi wawancara.

Anda bertanya kepada orang yang diwawancarai pertanyaan menggunakan terminologi yang berarti bagi Anda tetapi orang yang diwawancarai mungkin mengetahuinya dengan istilah yang berbeda, atau mungkin hanya tahu teori generik tanpa aplikasi ke bahasa atau lingkungan tertentu. Terjadi kesalahpahaman. Tidak ada pesta yang bahagia.

Sebenarnya ternyata orang yang diwawancarai sangat memahami bahwa beberapa nilai mungkin disimpan secara langsung dalam register dan yang lain mereferensikan sepotong memori di tempat lain, tetapi karena Anda mengajukan pertanyaan dengan cara yang dipimpin oleh domain tertentu, titik dari apa yang Anda tanyakan, dan apa yang Anda ingin diwawancarai oleh orang yang diwawancarai tidak benar-benar disebarkan.

Mungkin Anda mendapatkan banyak situasi di mana orang yang diwawancarai tiba-tiba mengklik dan berkata 'Oh - itu yang Anda bicarakan' - dan kemudian menjelaskan dengan cukup memadai.

Ini adalah keseimbangan yang sulit karena programmer yang baru keluar dari universitas tidak akan memiliki pengalaman beragam yang diberikan oleh pengembangan dunia nyata dalam lingkungan tim. Sementara itu pengembang yang berpengalaman sering tidak akan mengingat (atau bahkan tertarik) semua hal yang mereka pelajari di universitas karena itu tidak relevan untuk digunakan sehari-hari.

Kedua tipe orang ini (ya - itu yang diwawancarai dan pewawancara) perlu belajar bagaimana berkomunikasi satu sama lain sebelum Anda dapat saling mengenal . Tanggung jawab ada pada orang dengan pengalaman yang lebih besar (pewawancara) untuk memastikan ini terjadi.

Belum lagi fakta bahwa beberapa orang mendapatkan kegagalan memori lengkap dalam wawancara. Termasuk saya sendiri. Saya ingat diminta untuk menulis sebuah program dalam C dan saya tidak bisa seumur hidup saya mengingat simbol yang digunakan untuk mengakses anggota dari sebuah pointer (->) dan harus bertanya kepada seseorang. Bahkan bukan untuk pekerjaan pertamaku. Boy memiliki saat itu mengganggu saya selama 15 tahun terakhir :-)

Jauh lebih berguna menurut saya adalah kemampuan berkomunikasi, mampu menyelesaikan masalah secara efisien dan sepenuhnya; ambil dengan cepat; menunjukkan sikap positif yang tajam; berinteraksi dengan baik dengan orang lain, dan nilai-nilai inti lainnya.

Jangan menyerah pada orang yang diwawancarai karena mereka tidak tahu apa jenis langsung. Berpindah.

Roger Attrill
sumber
@Brann - tipe langsung -> tipe nilai. dicatat
Roger Attrill
Yah, mungkin itu tidak cukup jelas dari kata-kata pertanyaan saya, tapi saya benar-benar melakukan banyak hal untuk memastikan tidak ada masalah terminologi. Saya bertanya kepada orang yang diwawancarai apa yang terjadi dalam situasi tertentu dalam bahasa pilihannya, saya bertanya kepadanya apakah dia tahu apa itu callstack, saya bertanya kepadanya apakah ada berbagai "jenis" kenangan, saya bertanya kepadanya di mana argumen yang dilewatkan ke suatu fungsi adalah disimpan dalam bahasa imperatif pilihannya. Sungguh, saya tidak merasa itu masalah terminologi. Kadang-kadang, orang yang diwawancarai tidak memiliki IDEA tentang apa yang terjadi di belakang layar ketika kelas dipakai.
Brann
mengenai hal "pindah", itulah yang biasanya saya lakukan. Tetapi dalam pengalaman saya, ketika orang yang diwawancarai tidak tahu apa tipe nilai itu, dia juga tidak tahu tentang sinkronisasi utas, juga tidak tentang apa obat generik, dll. Jadi setelah beberapa pertanyaan, ketika menjadi jelas, kandidat tidak tidak cocok untuk pekerjaan itu, saya biasanya memberinya beberapa saran tentang apa yang harus dipelajari untuk tampil lebih baik dalam wawancara teknis dan ... lanjutkan dengan kandidat berikutnya :)
Brann
12

Anda meminta pengetahuan khusus bahasa, dan istilah yang Anda gunakan tidak digunakan 100% sama di semua bahasa. Saya - untuk satu - tidak tahu apa "tipe langsung" itu.

Juga, pertimbangkan bahwa hal-hal yang diajarkan di universitas bukanlah cara untuk mengubah kode standar dalam X, tetapi telah belajar banyak konsep yang mendasarinya dan melihat berbagai paradigma pemrograman. Dengan kata lain, ini sangat mirip dengan SIM - meskipun Anda tahu teori dasarnya, Anda masih membutuhkan banyak praktik nyata.


sumber
Saya telah memperbarui ke "tipe nilai". Tetapi masalahnya adalah jika orang yang diwawancarai tidak memahami pertanyaan itu, saya biasanya menjelaskannya dengan lebih terperinci, dan mencoba banyak hal untuk menipu orang yang diwawancarai untuk memberi tahu saya tentang panggilan telepon, tumpukan, dll ... (ya, saya TAHU itu adalah detail implementasi, tetapi tetap saja, itu adalah konsep umum yang tidak benar-benar IMO khusus bahasa)
Brann
Saya pikir konsep "callstack" adalah salah satu konsep umum yang sedang Anda bicarakan. Bahkan setelah mengulangi pertanyaan dengan sepuluh cara berbeda untuk memastikan orang yang diwawancarai tahu bahwa saya mengharapkannya untuk memberi tahu saya tentang alokasi memori, callstack, tipe nilai, dll. Saya masih, lebih sering daripada tidak, mendapatkan tatapan kosong ...
Brann
Jika saya mengerti Anda dengan benar, Anda ingin tahu apakah pengembang tahu pointer dan tahu apa yang mereka lakukan dan bagaimana menggunakannya?
Tidak, saya tidak. Saya ingin memastikan pengembang setidaknya memiliki gambaran kasar tentang apa yang terjadi di balik layar ketika dia menggunakan fitur x atau y dari bahasa pilihannya. Bertanya tentang petunjuk adalah cara untuk membuatnya berbicara tentang apa yang dia ketahui tentang alokasi memori.
Brann
3
@Rann, semua hal rinci tentang tumpukan panggilan, tumpukan dll, pada dasarnya hanya petunjuk yang diterapkan .
3

"Aku mendengar dan aku lupa. Aku melihat dan aku ingat. Aku tahu dan aku mengerti." (Dan, menurut saya, pemahaman mengarah pada retensi memori yang lebih baik.)

Sederhananya, lulusan baru tidak memiliki banyak pengalaman, jadi seperti orang lain catat, mereka tidak akan memiliki lebih dari pengetahuan minimum, tidak peduli apa bahasa "pilihan" mereka.

Saya pergi ke sebuah perguruan tinggi yang dirancang khusus untuk merampingkan pembelajaran tentang jurusan yang dipilih seseorang (jadi, misalnya, Anda tidak akan memiliki Sastra Sejarah jika Anda adalah seorang CS mayor; yang terdekat Anda dengan Sastra Sejarah adalah Fiksi Ilmiah), dan langsung dari perguruan tinggi, saya tidak akan bisa memberi tahu Anda apa antarmuka itu apalagi perbedaannya dengan kelas abstrak, meskipun kami memang belajar tentang abstraksi (dan banyak antarmuka di. Net, teknologi yang saya pelajari). Kita mungkin telah menyentuh antarmuka, tetapi hilang dalam semua hal lain yang perlu kita ketahui untuk lulus kelas. Tidak sampai pekerjaan pertama saya keluar dari perguruan tinggi saya belajar tentang antarmuka, terutama dengan cara yang berarti.

Anda menyebutkan melakukan wawancara dalam bahasa Prancis, yang membuatnya jelas kita berada di negara yang berbeda, sehingga jarak tempuh Anda dapat bervariasi, tetapi di sini di AS, perguruan tinggi terkenal ketinggalan zaman ketika datang ke teknologi. Oleh karena itu, kecuali Anda berurusan dengan bahasa dewasa (C / C ++, COBOL, dll), kemungkinan besar apa yang telah Anda gunakan bahkan selama bertahun - tahun mungkin tidak tersedia dalam versi yang telah dipelajari siswa. Sebagai contoh, .Net 3.0 memperkenalkan Entity Framework, WPF, WCF, dan sejumlah hal keren lainnya, tetapi bahkan sekolah saya masih terjebak pada .Net 1.1 dan 2.0 (yang berarti terjebak dengan ADO.NET dan bahkan tidak belajar tentang Object Pemetaan -Relasional). Sekolah yang menggunakan PHP mungkin macet di (non-OOP) PHP 4.

Perlu diingat juga, bahwa seorang siswa harus menerima banyak informasi yang seringkali hanya digunakan untuk waktu yang singkat. Konsep "lanjutan", seperti abstraksi, sering diajarkan menjelang akhir kelas, di mana siswa mungkin hanya memiliki satu minggu atau lebih untuk bermain dengannya, sementara bersaing dengan kelas lain yang harus diambilnya, dan mungkin, pada atas pekerjaan paruh waktu atau penuh waktu. Gabungkan semua itu bersama-sama dan itu mengherankan orang tersebut dapat mengingat apa saja , apalagi menjaga semuanya tetap lurus.

Di AS, setidaknya, lulusan baru-baru ini sering diasumsikan tidak tahu apa-apa di luar dasar-dasar generik (perbedaan antara melewati nilai dan melewati referensi, mungkin), karena dipahami bahwa teori generik dan penyelesaian masalah adalah bagian utama dari sekolah, tidak belajar seluk beluk bahasa yang diberikan.

Saya sarankan menggunakan pertanyaan-pertanyaan yang Anda miliki lebih sebagai ukuran dari apa yang Anda perlu ajarkan / ajarkan kembali (ingat, sangat mungkin mereka tidak mempelajari istilah yang Anda coba gunakan, bahkan jika Anda pikir itu ada di mana-mana), yang bertentangan dengan apakah orang yang diwawancarai itu "tidak berharga". Gabungkan bahwa dengan mengukur seberapa besar keinginan mereka untuk belajar dan seperti apa keterampilan pemecahan masalah umum mereka (dengan serius, beri mereka teka-teki untuk dipecahkan dan lihat bagaimana mereka melakukannya), dan Anda dapat memiliki rockstar masa depan yang sangat baik bagi Anda. mungkin sudah lewat karena mereka tidak tahu apa yang Anda maksud dengan "callstack."

Shauna
sumber
Nah, di Perancis (dan saya menduga itu sama di sebagian besar tempat), setiap kurikulum CS menyertakan beberapa kode wajib dalam C (atau bahasa serupa) ketika seseorang belajar tentang alokasi memori di antara hal-hal lain), dan beberapa kode wajib di C ++ / java / .net (di mana orang belajar tentang OOP). Selain itu, Anda juga melakukan banyak hal yang dapat mencakup banyak bidang, tetapi jika orang yang lulus tanpa mengetahui apa itu metode virtual, itu berarti ia tidak mengambil studinya dengan sangat serius ... Saya tentu tahu apa ketika saya lulus ... Apa pendapat Anda tentang seorang siswa Matematika yang tidak tahu seri apa itu?
Brann
@Rann - Menurut penelitian (cepat) saya tentang apa itu Ilmu Komputer (dan juga pemahaman saya sebelumnya tentang itu), CS bukanlah program utama. Ya, ada pemrograman di dalamnya, tetapi itu belum tentu menjadi fokus utama. Untuk itu, "Ilmu Komputer" begitu luas dan agak kabur, sehingga dapat bervariasi dari sekolah ke sekolah. Stanford adalah salah satu sekolah CS terbaik di AS, dan untuk daftar pilihan kursus Musim Gugur dan Musim Dingin ( www-cs.stanford.edu/courses ), ia memiliki kurang dari setengah lusin program yang tampaknya berfokus pada pemrograman aktual (bukan hanya teori program), dari sekitar 50 kelas.
Shauna
Ini berarti bahwa seorang siswa kemungkinan akan menggunakan bahasa yang diberikan selama satu atau dua semester, kemudian tidak menyentuhnya selama sisa karir siswanya. Selain itu, dia juga belajar tentang robotika dan pemrograman genetika, yang sangat berbeda dari desktop standar / sistem embedded / pemrograman firmware.
Shauna
Apa yang akan Anda pikirkan tentang seorang siswa Matematika yang tidak tahu seri apa itu? - Itu tergantung pada jenis Matematika apa yang dikhususkan siswa dan apa yang sebenarnya dia kerjakan. Sekali lagi, sangat mungkin bahwa siswa telah mempelajarinya (dan oleh karena itu, secara teknis tahu apa itu), tetapi telah melupakannya, karena ia tidak pernah menggunakannya dalam pekerjaan sehari-harinya dengan kriptografi atau matematika diskrit. Matematika dan pemrograman umumnya dianggap sebagai topik yang digunakan-atau-hilang.
Shauna
3

Anda memiliki sejumlah pandangan sempit dan Anda menganggapnya secara implisit.

  • Tampaknya ada perbedaan besar antara apa yang saya harapkan dari seseorang yang belajar pemrograman selama beberapa tahun di universitas, dan apa yang sebenarnya diketahui orang.

    Setahu saya tidak ada universitas, tempat orang belajar pemrograman selama beberapa tahun. Universitas menawarkan kursus dalam ilmu komputer, dimana pemrograman adalah satu aspek.

  • Apa perbedaan antara tipe referensi dan tipe nilai?

    Rule of thumb: Jika Lisp dapat melakukan tanpa perbedaan, itu hanya berantakan;)

  • Pada dasarnya, saya melakukan semua yang saya bisa untuk menipu orang yang diwawancarai untuk memberi tahu saya tentang callstack, heap dll, dan saya mencoba untuk tetap dalam konsep agnostik bahasa.

    Berbicara tentang konsep agnostik bahasa adalah ide yang bagus. Baik heap maupun stack adalah bahasa-agnostik.

  • Jika orang yang diwawancarai memberi tahu saya bahwa dia melakukan banyak C, atau C ++, atau C #, saya menyelam lebih dalam ke bahasa tertentu, dan mungkin ke dalam detail implementasi.

    Semua bahasa ini memiliki spesifikasi. Implementasi tidak ditentukan oleh bahasa. C dan C ++ dapat dikompilasi silang menggunakan LLVM untuk dijalankan pada Flash Player atau runtime JavaScript apa pun. Ini membuat asumsi Anda tentang tumpukan dan tumpukan alokasi dibatalkan.
    Dengan C #, sama saja. C # JITed sebelum eksekusi dengan banyak optimasi, itu bisa dilakukan. Variabel lokal, yang ditangkap oleh penutupan pada akhirnya akan berakhir di tumpukan, bukan tumpukan, sementara analisis pelarian memungkinkan untuk menyimpan objek lingkup-lokal (yang biasanya harus pergi ke tumpukan) untuk disimpan di tumpukan. Alokasi register yang tepat juga akan sangat mengurangi kebutuhan alokasi stack.

  • Jika perlu, saya bertanya kepada orang yang diwawancarai apa itu callstack, atau di mana argumen dilewatkan ke fungsi dalam bahasa imperatif pilihannya disimpan.

    Apa yang akan Anda tanyakan pada seseorang yang hanya memiliki pengalaman pemrograman yang luas dengan Haskell? : P

  • Sebagian besar yang diwawancarai tidak tahu apa itu callstack, apalagi pertimbangan tinju, dll.

    Ide dasar di balik autoboxing adalah, bahwa primitif juga dapat diperlakukan sebagai objek (atau setidaknya nilai-nilai yang diketik dapat ditemukan saat runtime). Sehubungan dengan abstraksi itu, ada tiga jenis bahasa:

    1. yang tidak ada. Saya kira Objective-C adalah contoh kanonis.
    2. mereka yang benar-benar memilikinya
    3. mereka yang ada tetapi tidak memiliki. Saya kira Java adalah contoh terbaik (saya anggap sudah diperbaiki sekarang).

    Saya tidak mengerti mengapa orang tidak boleh menggunakan bahasa kategori 1 (sebenarnya itu ide yang bagus). Saya tidak mengerti mengapa orang yang menggunakan bahasa kategori 2 harus benar-benar repot. Dan saya pikir semua orang yang menggunakan bahasa kategori 3, yaitu bahasa yang fitur inti semantiknya rusak, menggunakan bahasa yang salah.

  • Apa perbedaan antara kelas abstrak dan antarmuka. Dalam kasus apa Anda harus menggunakan salah satunya?

    Nah, itu sangat subjektif dan sangat tergantung pada bahasa. C ++ tidak memiliki antarmuka. Objective-C tidak memiliki kelas abstrak. Saya berpendapat bahwa bahasa apa pun yang memiliki keduanya perlu dirancang ulang. Banyak bahasa modern menggunakan ciri, mixin, kategori, peran dan konstruksi serupa untuk memberikan solusi yang jauh lebih bersih untuk penggunaan kembali kode daripada warisan implementasi parsial. Bahasa berbasis prototipe tidak memiliki kelas sama sekali pula.

    Pada akhirnya ini adalah subjek yang sulit dan diperebutkan. Wawancara bukanlah tempat yang tepat untuk menyelesaikan pertanyaan ini dan saya tidak akan benar-benar menangkap siapa pun yang melamar posisi junior karena tidak memberi saya jawaban yang baik.

  • Sebagian besar orang yang diwawancarai tidak tahu apa tujuan sebenarnya warisan. Mereka biasanya mengetahui beberapa kata kunci (virtual, override, dll), tetapi tidak benar-benar tahu kapan menggunakannya, apalagi menjelaskan apa itu virtual-table.

    Ada sejumlah bahasa berorientasi objek, yang tidak menggunakan warisan atau vtables klasik.

Saran saya:

  • Berhati - hatilah untuk menganggap bahwa apa pun yang Anda ketahui tentang pemrograman benar-benar konsep pemrograman dasar . Anda dapat mengasumsikan bahwa setiap programmer yang baik memiliki rasa ingin tahu untuk mengetahui jawaban atas pertanyaan tersebut. Namun Anda tidak dapat berasumsi bahwa siapa pun yang mengenal mereka itu baik. Saya cenderung percaya bahwa mereka yang terlalu mementingkan perincian seperti itu sebenarnya tidak akan melihat hutan untuk pepohonan.
  • Kurang khawatir tentang detail implementasi. Bahasa pemrograman dimaksudkan untuk membuat abstraksi. Anda perlu berpikir dalam hal abstraksi itu dan hanya dalam hal itu. Kode yang baik tidak ditulis terhadap rincian implementasi suatu bahasa. Ini ditulis untuk menanamkan semantik terbaik dari solusi Anda ke dalam fitur bahasa. Jika Anda berhasil melakukan hal itu, kode Anda tidak hanya akan menjadi kuat, tetapi juga dapat dibaca oleh siapa pun yang terbiasa dengan bahasa tersebut, dan lebih mudah untuk dioptimalkan untuk kompiler.
  • Mengetahui jawaban yang Anda harapkan tidak begitu penting. Memahami mereka adalah. Jika seseorang hanya mengenal mereka, karena mereka membacanya di buku teks atau profesornya memberi tahu mereka, maka itu nilainya kecil. Sebenarnya Anda bisa menjelaskan semua hal itu kepada diri sendiri dengan hitungan jam.
    Yang penting adalah Anda memahami bagaimana fakta-fakta sederhana dan terisolasi ini dapat diterapkan pada rekayasa solusi yang fleksibel dan dipelihara untuk masalah yang kompleks.

Untuk sampai ke pertanyaan sebenarnya:

Dan apakah Anda pikir perusahaan saya mungkin memiliki masalah dalam menarik orang-orang berbakat, atau apakah Anda mengalami masalah yang sama dengan dalam proses perekrutan Anda sendiri?

Semua perusahaan memiliki masalah menarik orang-orang terampil, kecuali mungkin para pemain besar. Itu karena ada beberapa dari mereka. Dan karena asumsi itu, universitas itu membuat orang-orang terampil. Tidak. Itu membuat mereka berpengetahuan (seandainya mahasiswa dan universitas memegang bagian dari tawar-menawar mereka). Pengalaman itulah yang membuat orang terampil.

Ada beberapa yang telah mengumpulkan pengalaman sebelum memasuki universitas dan yang terus melakukannya selama masa studi mereka. Karena mereka suka pemrograman dan karena ketika mereka mengambil beberapa ide baru selama kursus, mereka akan mencoba untuk melihat bagaimana mereka dapat menggunakannya, hal pertama yang mereka dapatkan di rumah. Ini adalah tipe orang yang ingin Anda pekerjakan. Tetapi ada beberapa dari mereka.
Ini adalah hasrat untuk pemrograman dan pengembangan diri dan pengejarannya yang membuat programmer baik. Pada waktunya.

Saya pikir, yang harus Anda sadari adalah, bahwa sayangnya kebanyakan orang akan masuk dan meninggalkan universitas tanpa pengalaman pemrograman yang memadai.
Pada saat yang sama, industri kami sangat membutuhkan programmer yang berpengalaman. Oleh karena itu, saya percaya ini adalah misi industri kami untuk benar-benar mencoba melangkah. Dan mewawancarai kandidat untuk posisi junior, yang Anda cari secara realistis adalah orang-orang yang mau belajar dan meningkatkan. Dan Anda harus memilih dengan hati-hati, karena Anda harus menginvestasikan banyak energi dan Anda tidak ingin itu sia-sia.

Anggap saja mempekerjakan darah segar untuk menjadi pengemudi bagi tim balap Anda: Seorang pengemudi yang baik memiliki pemahaman yang cukup tentang mekanik untuk memanfaatkan mobilnya dengan baik, tetapi pengetahuan ini saja tidak ada gunanya (bahkan tidak banyak kepala) Mulailah). Apa yang Anda cari adalah seseorang yang mau bekerja keras untuk peningkatan mereka sendiri dan baik dengan tim Anda.

back2dos
sumber
1

Terlepas dari istilah "tipe langsung" di mana saya tidak memiliki petunjuk (tipe nilai? OK, saya tidak yakin, terima kasih telah memperbarui), saya pikir Anda benar tentang pertanyaan Anda dan sama sekali tidak ekstremis. Ini adalah pertanyaan yang bisa dijawab jika seseorang keluar dari sekolah. Meski begitu, saya tidak akan segera memberhentikan para kandidat, masih ada beberapa yang mungkin punya potensi karena ingin belajar.

Untuk melanjutkan dengan analogi SIM: beberapa orang tidak peduli apa yang terjadi ketika mereka memasukkan kunci (atau menekan tombol "mulai"). Mereka hanya melakukannya dan mengemudi. Ini tidak berarti mereka juga tidak berharga, hanya saja akan membutuhkan waktu bagi mereka untuk mencapai ketenaran ;-)

Hanya komentar pribadi tentang gelar / diploma: Saya saat ini bekerja dengan orang-orang dengan latar belakang biokimia dan industri yang memiliki beberapa tahun pengalaman di bidang IT dan juga beberapa orang "berpengalaman" dengan latar belakang CS, dan tebak siapa yang paling berpengetahuan luas. tentang bagaimana mesin kendaraan bekerja? Yup, bukan orang yang pernah belajar CS! Jadi saya hanya mengalami kenyataan bahwa diploma tidak selalu berarti!

Jalayn
sumber
2
Beberapa orang dapat menghabiskan waktu lama dengan mengutak-atik kendaraan mereka untuk mencapai kecepatan tertinggi, yang lambat telah selesai bahkan sebelum mereka memulai.
cukup adil :-)
Jalayn
Saya sepenuhnya setuju tentang orang-orang yang berasal dari bidang lain selain CS. tetapi untuk seseorang yang benar-benar memiliki gelar CS, tidak tahu apa jenis nilai tampaknya agak mengkhawatirkan untuk sedikitnya ...
Brann
@ Brann, mereka mungkin tidak tahu istilahnya , tetapi masih sadar bahwa penempatan fisik data yang dipegang oleh variabel ditempatkan di segmen data dan bukan di tumpukan atau tumpukan. Bahasa apa yang Anda gunakan karena ini tampaknya penting?
Saya menggunakan c #. Dan saya setuju bahwa mengetahui rincian implementasi semacam ini mungkin tidak begitu penting dalam konteks itu (walaupun dalam beberapa situasi tertentu, mungkin saja). Masalahnya adalah bahwa saya tidak berusaha mencari ahli # ac. Saya mencoba menemukan seseorang yang cukup pintar dan cukup termotivasi untuk menjadi benar-benar pandai dalam pengkodean dalam c #. Jika seseorang tidak peduli untuk belajar / memahami apa tipe nilai, saya cenderung (mungkin salah) berpikir dia kehilangan salah satu dari dua kualitas, setidaknya
Brann
1

Saya biasanya tidak mengajukan pertanyaan spesifik tentang terminologi atau definisi selama wawancara. Seperti yang telah dicatat oleh jawaban lain, orang memiliki istilah berbeda untuk konsep yang berbeda dan walaupun mereka secara konseptual memahami subjek, mereka mungkin tidak dapat menyampaikannya kepada Anda.

Dengan Juniors saya sangat fokus pada magang atau proyek sekolah mereka. Saya bertanya pertanyaan tentang mereka, biarkan mereka mengartikulasikan jawaban dan kemudian saya mulai menyelam lebih dalam ke keterlibatan mereka yang sebenarnya dalam proyek, apa yang mereka pelajari, apa yang mereka rasakan.

Secara umum, jika orang itu bobot mati dalam proyek maka mereka umumnya tidak bisa memberikan jawaban yang memuaskan kepada saya, jadi biasanya cukup mudah untuk mengatakannya. Berhati-hatilah untuk tidak membuat kesalahan karena gugup dan tertutup karena tidak tertarik dan tidak terlibat.

Mampu menentukan kandidat yang baik yang pemalu dan tertutup agak sulit, tetapi kemudian budaya tempat saya bekerja tidak akan baik untuk pengembang yang pemalu dan pemalu sehingga jika mereka tidak dapat mengadakan percakapan rinci yang produktif dengan saya maka mereka tidak cocok.

maple_shaft
sumber
1
 or chose his university very unwisely.

Itu sangat tidak adil. Ketika Anda seorang mahasiswa, yang dapat Anda lakukan hanyalah memilih universitas berperingkat tertinggi yang akan Anda dapatkan, atau mungkin universitas yang diiklankan memungkinkan Anda bermain dengan anjing robot yang bermain sepak bola. Tidak ada lagi. Anda hanya dapat mengevaluasi program universitas setelah melakukannya, kemudian pergi dan bekerja di industri selama beberapa tahun dan membangun beberapa proyek non-sepele.

Bahkan jika Anda memasang tanda neon besar pada setiap kursus yang mengatakan "KITA TIDAK MENGAJARKAN PANGGILAN PANGGILAN", lalu apa yang Anda harapkan siswa lakukan tentang hal itu? Luangkan waktu berbulan-bulan untuk merisetnya sehingga mereka benar-benar dapat memahami apa artinya itu dan berapa banyak yang mereka perlukan yang mengajarkannya? Untuk setiap kursus dengan setiap kombinasi tanda?

Orang tidak bisa memilih pendidikan mereka, secara realistis.

DeadMG
sumber
0

Ketika mewawancarai lulusan baru saya tetap berpegang pada topik yang tercantum di CV mereka. Jika mereka menggunakan Java, saya akan bertanya tentang Java. Jika mereka menggunakan Blub, maka saya menghabiskan setengah jam membaca tentang Blub, dan bertanya kepada mereka tentang itu. Tapi saya selalu bertanya menggunakan kata kunci bahasa. Jika itu Java, maka saya akan bertanya tentang "extends" dan "implementements" tetapi bukan "subclass" dan "inherit". Saya berharap lulusan baru dapat berbicara tentang beberapa kode yang telah mereka tulis, untuk dapat memecahkan masalah pemrograman yang sederhana, dan untuk memahami struktur data dasar (tabel hash dan pohon).

kevin cline
sumber
0

Sebagai Direktur yang merancang proses wawancara, saya dapat memberi tahu Anda apa yang diharapkan oleh perusahaan kami dari lulusan baru: Saya berharap orang-orang yang dapat membaca dokumentasi dan menerapkan pengetahuan. Jadi, kami memiliki beberapa tugas yang kami minta mereka lakukan. Ini adalah tugas pengkodean sederhana, tidak jauh lebih sulit daripada latihan kelas perguruan tinggi Anda (pengembang "baik" yang berpengalaman dapat merobohkannya dalam waktu sekitar 15 menit). Kandidat diberi workstation dengan akses internet, kompiler (dalam kasus visual studio kami), dan file bantuan.

Jika mereka tidak dapat menulis kode dalam kondisi ini, mereka tidak mendapatkan pertimbangan untuk disewa. Sederhana seperti itu. Seluruh alasan "baik saya tidak tahu bahasa" tidak pernah benar-benar cocok dengan saya karena setiap kandidat yang datang untuk wawancara di sini tahu akan ada ujian, mereka tahu bahasa dan alat yang kami gunakan di muka. Anda dapat mengunduh visual studio express di rumah dan melakukan beberapa dasar-dasar sebelum masuk dan lulus ujian entry level, mereka yang tidak repot ... yah itulah yang saya sebut bendera merah.

Eric
sumber
Ini adalah cara terbaik untuk menemukan seseorang yang mengaku tahu sesuatu yang sebenarnya tahu cukup baik untuk menggunakannya. Menanyakan apa arti istilah, sesuatu yang di luar ruang kelas, jarang digunakan adalah hal yang tidak ada gunanya. Maksud saya dalam 18 bulan terakhir saya belum pernah berdiskusi tentang jenis referensi yang mungkin mengeluh tentang sesuatu yang melibatkan pointer.
Ramhound