Selama wawancara, saya ditanya apakah saya tahu perbedaan antara C dan C ++.
Saya bertanya-tanya mengapa pertanyaan seperti itu diajukan?
Selama wawancara, saya ditanya apakah saya tahu perbedaan antara C dan C ++.
Saya bertanya-tanya mengapa pertanyaan seperti itu diajukan?
Jawaban:
Jika pertanyaan diutarakan seperti "Apakah Anda tahu perbedaan antara C dan C ++?" dan Anda diizinkan untuk hanya menjawab dengan "Ya" maka saya bisa melihat kebingungan Anda, tetapi jika mereka benar-benar bertanya "Apa-apa- perbedaan antara C dan C ++?" dan jawaban yang lebih terbuka diharapkan, saya bisa melihatnya sebagai "jalan penyelidikan" yang sah seperti yang mereka katakan.
Sebagai contoh, hanya pernah memiliki kode dalam C dan tidak pernah dalam C ++, saya hampir tidak akan mampu menjawab melampaui samar "C ++ mendukung pengkodean berorientasi objek?".
Beberapa orang telah mengamati bahwa ada sejumlah besar pelamar pekerjaan pemrograman yang tidak dapat menulis kode sama sekali . Jadi, ya, mengajukan pertanyaan "jelas" masuk akal.
Ada banyak dari mereka. Ada banyak sekali orang yang memiliki dosen bodoh yang mengajarkan C-string dan new
dan delete
, atau tutorial yang sudah ketinggalan zaman atau buku-buku buruk, yang belajar "C ++" tetapi sebenarnya C, yang berpikir keduanya cukup dekat.
Tentu saja, jika Anda seorang majikan, maka mengatakan bahwa mereka sama atau bahkan serupa adalah lampu peringatan besar.
Ada juga sebagian kecil orang (seperti saya) yang belajar C ++ sebelum mereka belajar C.
Saya yakin Anda tahu perbedaannya, tetapi jika Anda seorang siswa yang hanya memiliki kelas C ++, dan bukan kelas C bagian-bagian dari C ++ yang tidak kompatibel dengan C tidak akan jelas.
Beberapa perbedaan yang lebih jelas yang saya pelajari (bukan daftar lengkap) ( ) tipe data struct awalnya tidak dapat berisi fungsi, dan tidak dapat memiliki anggota pribadi, artinya sangat sulit untuk Menegakkan aturan validitas dari tipe data abstrak dalam C. ( ) kelas tidak didukung dalam C ( ) lewat referensi menggunakan operator ampersand khusus untuk C ++ ( ) C tidak mendukung stream atau templat (*) malloc dan gratis dimaksudkan hanya untuk digunakan di C dan tidak di C ++
Sayangnya, saya pikir ini menjadi semakin umum.
Saya berpikir bahwa programmer muda yang baru keluar dari sekolah teknik (atau di mana mereka belajar keterampilan mereka) tidak belajar bahasa yang lebih tua seperti C, C ++, Lisp, OCaml, dll. Mereka hanya keluar sebagai "c # programmer" atau "programmer java" ", dll. Dan ketika mereka menemukan pekerjaan, mereka tidak menantang diri mereka sendiri dengan belajar bahasa lain.
Tentu saja ada beberapa yang melakukannya, tetapi dari yang telah saya kerjakan, ada kecenderungan umum bagi programmer muda untuk mengikuti pola ini.
Penafian: Karena saya berbicara tentang pendidikan, maka tentu saja akan ada perbedaan dari satu negara ke negara lain tentang apa yang ditekankan dalam pendidikan.
Mungkin tidak secara harfiah, karena mereka berpikir C ++ dan C adalah satu dan sama, tetapi dalam hal benar-benar memahami dan mampu menggunakan fitur-fitur berbeda dari C ++, ya.
Penyebab utama adalah sifat biner dari daftar bahasa / alat pada resume / CV Anda. Pada dasarnya, standarnya adalah jika Anda mendapat "Hello World" untuk dikompilasi dan dijalankan dalam bahasa, tidak apa-apa untuk mencantumkannya di resume / CV Anda.
Ketika itu terjadi, versi C dari "Hello, World!" juga mengkompilasi dan menjalankan C ++. Jadi, tidak ada informasi lain, semua yang melihat "C ++" di resume memberi tahu saya bahwa orang ini cukup tahu C untuk mendapatkan "Halo, Dunia!" berjalan, dan tahu bahwa sebagian besar program C akan dikompilasi dalam C ++.
Mengingat itu, saya perlu menyelidiki sedikit tentang wawancara itu. Saya mungkin tidak akan melakukannya dengan bertanya "Ya / Tidak" "Apakah Anda tahu bedanya?" singkatnya, karena memiliki jawaban "benar" yang jelas. Saya mungkin akan bertanya kepada kandidat bahasa mana yang lebih disukainya, mengapa, dan jika ada kelebihan apa pun yang tidak dia pilih.
Menjawab
Ya, itu biasa. Saya telah melihat situasi ini, baik saya sendiri, rekan kerja, atau kode perpustakaan pihak ketiga.
Saya sendiri, misalnya, kadang-kadang bekerja dengan bahasa pemrograman lain atau kerangka kerja pemrograman, dan harus menautkan, atau memperbarui, ke pustaka "pure c" atau "c ++".
Saya baru saja mengalami masalah dalam memodifikasi beberapa kode "Pure C". Dan menggunakan fungsi alokasi memori "baru" & "hapus", yaitu "c ++". Sisa kode tidak berorientasi objek
Kompilernya adalah C ++. Kemudian, saya menggugat kompiler lain, dan menemukan kesalahan.
Bonus
Jika seseorang bertanya, secara lisan, atau dalam tes tertulis, atau tes online web:
"Apakah kamu tahu perbedaan antara C atau C ++"
Dan Anda menjawab "Ya" atau "Tidak".
Mereka benar-benar berarti:
"Apakah kamu tahu perbedaan antara C atau C ++, jika kamu tolong beri tahu aku?"
Jadi, Anda harus menjawab:
"Ya. Perbedaannya adalah C ++ yang Berorientasi Objek, meskipun, Anda dapat menggunakan Pure C, di dalam program C ++, untuk kompatibilitas mundur."
Kadang-kadang, mereka tidak akan bertanya "jika Anda tolong beri tahu saya", dan mereka akan menganggap bahwa Anda tidak tahu. Jangan hanya menjawab "ya", atau "tidak".
Edit
Sebagai kata pengantar, perhatikan bahwa jawaban ini tidak dimaksudkan untuk menyatakan bahwa tidak ada perbedaan atau bahwa saya mengaku tahu perbedaannya, atau bahkan yang saya tahu selain "Hello World" dalam C atau C ++. Ini adalah jawaban untuk pertanyaan dengan menyusun kerangka acuan, menunjukkan bahwa banyak orang mengetahui perbedaan mendasar (misalnya seseorang memiliki beberapa +
karakter dalam namanya) dan sangat sedikit orang yang tahu semua atau bahkan sebagian besar perbedaan.
Itu tergantung apa yang Anda maksud dengan 'programmer' dan apa yang Anda maksud dengan 'perbedaan'.
Saya seorang 'programmer' (walaupun saya menyebut diri saya seorang pengembang) dan saya akan berjuang untuk memberikan perbedaan nyata antara C dan C ++. Jika ditekan saya mungkin akan mengatakan bahwa C ++ adalah superset dari C yang memiliki ruang nama dan warisan; berbagai cara berurusan dengan memori. Saya cukup tahu untuk menambal beberapa bug atau membuat beberapa perubahan pada program Anda yang sudah ada, tetapi saya tidak bisa membayangkan menulis apa pun selain utilitas sederhana di C atau C ++. Saya cukup tahu untuk bertahan, tetapi saya tidak melukis diri saya sebagai "mengetahui" salah satu dari bahasa-bahasa itu.
Saya tahu 'programmer' lain (juga pengembang) yang bahkan tidak akan memberi tahu Anda perbedaan antara Java dan FORTRAN, atau Javascript dan Pascal. Mereka bagus dalam apa yang mereka lakukan dan mereka tidak melakukan bahasa prosedural.
Lalu ada jutaan pemrogram biasa-biasa saja yang nyaris tidak tahu bahasa tunggal yang mereka gunakan setiap hari.
Istilah 'perbedaan' bersifat ambivalen. Saya telah menunjukkan apa yang saya lihat sebagai beberapa perbedaan di atas, tetapi saya tahu mereka tidak pasti dan lengkap. Sangat sedikit orang yang akan mengetahui setiap perbedaan - lebih banyak orang akan dapat memberikan beberapa jawaban yang kabur (seperti yang saya miliki) tentang orientasi objek.
Apakah umum bagi seorang programmer untuk tidak mengetahui perbedaan antara C dan C ++?
Dua puluh tahun yang lalu? Iya.
Hari ini? Tidak terlalu banyak.
Alasan untuk ini adalah karena lanskap pemrograman telah berubah secara besar-besaran. Banyak program saat ini berbasis web; bahkan program yang ditulis untuk desktop dapat ditulis dalam bahasa tingkat yang lebih tinggi daripada C atau C ++. Karena itu, kecuali Anda seorang programmer yang menulis kode OS, Anda mungkin tidak tahu banyak tentang kedua bahasa tersebut.
Seorang pewawancara dapat mengajukan pertanyaan ini dalam sebuah wawancara untuk mengukur seberapa banyak Anda tahu tentang dasar-dasar pemrograman; jika Anda tahu perbedaan antara C dan C ++, maka Anda mungkin tahu apa itu pemrograman berorientasi objek, Anda mungkin memahami perpustakaan dan kompiler, Anda memahami fungsi memori, referensi, pointer .... banyak hal yang telah mempengaruhi bahasa pemrograman saat ini . Saya tidak banyak menggunakan C ++ (dan saya tidak bisa mengatakan bahwa saya adalah programmer yang hebat dalam bahasa apa pun; kebijaksanaan akan datang seiring waktu) tetapi saya dapat mengatakan bahwa pengalaman saya dengan C ++ telah membuat saya menjadi programmer yang lebih baik.