Apakah pengalaman C # menerjemahkan dengan baik ke C ++? [Tutup]

13

Kelas pemrograman saya di sekolah adalah C ++, tetapi saya akhirnya mengerjakan pekerjaan dengan melakukan C # selama beberapa tahun terakhir. Jika ada posisi yang mengharuskan mengatakan 1 atau 2 tahun pengalaman dalam C ++, apakah pengalaman saya di C # layak dipertimbangkan? Seberapa efektif saya dalam posisi seperti itu? Jadi apakah saya harus memulai sebagai programmer C ++ entry-level untuk mendapatkan pengalaman yang diperlukan?

MetaGuru
sumber
4
Bagian tersulit adalah mempelajari idiom C ++ dan cara yang "benar" dalam melakukan sesuatu. Dalam C #, hal-hal seperti manajemen memori dan pemeriksaan batas dimasukkan ke dalam bahasa dan kerangka kerja. Di C ++ ada banyak lagi cara untuk menembak diri sendiri di kaki.
Robert Harvey
1
@RobertHarvey: Hanya jika Anda belum pernah mendengar tentang smart pointer. Atau wadah.
DeadMG
11
@DeadMG: Saya tidak tahu apa yang Anda maksud dengan itu. Bahkan jika Anda pernah mendengarnya, Anda masih harus mempelajarinya.
Robert Harvey
2
Seri C ++ yang Efektif jauh lebih melegakan daripada seri C # yang efektif.
Ayub
@ Robert: Ya, jika Anda melakukan container dan smart pointer, maka Anda tidak perlu mengatur memori. Dan mempelajarinya adalah C ++ 101.
DeadMG

Jawaban:

13

Masalahnya di sini adalah bahwa C ++ dan C # pada dasarnya adalah bahasa yang sangat berbeda dengan pendekatan yang berbeda untuk banyak masalah. Sangat mudah untuk menggolongkannya dalam "Bahasa OO", tetapi fakta sederhana adalah bahwa banyak idiom C # dianggap kode yang sangat buruk dalam C ++ (dan sebaliknya).

Jika Anda benar-benar mengetahui perbedaan dan seperti apa idiom C ++, maka saya tidak melihat alasan bahwa itu tidak boleh apa-apa.

DeadMG
sumber
5

Saya berada di kapal yang sama sekitar 2 tahun yang lalu. Pengalaman c # Anda mungkin tidak akan sepadan dengan pekerjaan c ++ seperti c ++ untuk pekerjaan ac #. Yang mengatakan, jika Anda tahu bagaimana c # benar-benar bekerja (sangat sedikit programmer c # benar-benar melakukannya), dan belajar c ++ Anda dengan baik maka c ++ tidak akan menjadi masalah. Yang akan menjadi masalah adalah cara Anda terbiasa dengan pola desain tertentu yang akan terlalu tinggi untuk c ++.

Misalnya, beralih dari model akses data ADO.NET yang bagus ke menggunakan cppcon untuk akses mysql, System.Collections.Generic menggunakan stl, multiple-inheritence, pengumpulan sampah untuk membersihkan memori Anda dalam destructor dan sebagainya ... semua cenderung menjadi transisi yang sulit. C ++ bukan masalah, mempelajari lib, pola desain, dan cara menggunakannya adalah tantangan. Sebagian besar perekrut tidak menyadari hal ini. Jika Anda dapat melakukan desain dasar dan dapat menggunakan fitur c ++ yang sebenarnya umum digunakan, maka Anda harus baik-baik saja dalam wawancara.

Namun, siap untuk pekerjaan adalah cerita yang berbeda. Ini adalah tantangan yang menyenangkan, saya harap semuanya berjalan dengan baik.

Jonathan Henson
sumber
Semua pekerjaan C ++ yang saya lihat inginkan 2-3 tahun pengalaman di C ++ tetapi pekerjaan saya ada di C #. Ini benar-benar membuat saya frustasi, saya ingin melakukan C ++! Anda benar tentang perekrut, mereka menembak saya. Bagaimana saya bisa mendapatkan pengalaman ini jika tidak ada yang membiarkan saya mencoba? Saya yakin bahwa jika seseorang membiarkan saya masuk, saya bisa belajar dengan cepat, tetapi saya tidak tahu bagaimana saya bisa menerimanya.
MetaGuru
Saya melompat pada proyek c ++ di pekerjaan saya saat ini. Itu mungkin taruhan terbaik Anda. Atau, Anda selalu bisa mendapatkan proyek open source yang ada di c ++.
Jonathan Henson
@Ryan Seperti yang dikatakan Jonathan, ada banyak cara untuk mendapatkan pengalaman dalam C ++. Setidaknya dari tempat saya berasal, Anda harus membuktikan bahwa Anda memiliki pengalaman (alih-alih pernyataan populer; memiliki pengalaman 1 tahun lima kali lipat). Ini bekerja dua arah - seseorang tanpa banyak pengalaman "kertas" bisa mendapatkan kesempatan untuk membuktikan dirinya juga. Pastikan Anda benar-benar tahu C ++ sebelum mencoba!
Maks.
3

Saya tidak dapat berbicara untuk setiap perusahaan tetapi saya pribadi memandang pemrograman sebagai keterampilan dan bahasa spesifik sebagai hal yang baik untuk dimiliki. Masih sangat mungkin untuk diterima dalam pekerjaan pemrograman lain yang bukan keahlian utama Anda.

Setelah mengatakan bahwa sangat tidak mungkin saya akan mempekerjakan seseorang yang sama sekali tidak memiliki pengalaman dalam bahasa yang saya sewa untuk mereka. Habiskan beberapa akhir pekan untuk belajar dan memiliki beberapa proyek kesayangan untuk mendukung CV Anda. Bahkan yang kecil membuktikan Anda mampu belajar dan tertarik.

Tom Squires
sumber
3

Anda persis dalam situasi yang sama seperti 4 tahun yang lalu.

Saya melakukan beberapa C ++ selama studi saya, tapi saya benci itu. Saya melakukan banyak pengembang web ketika saya bisa mengisi waktu luang dan mendapat pekerjaan di bidang itu.

Ketika saya pindah saya melamar pekerjaan C ++ yang memiliki 2 tahun pengalaman C ++ sebagai persyaratan. Yah aku menyegarkan ingatan C ++ saya sebelum wawancara dan ketika saatnya tiba untuk tes saya berhasil lolos dengan beberapa hal saya tidak begitu yakin saya lakukan dengan benar.

Tetapi sebagian besar wawancara adalah tentang pemecahan masalah dan solusi kreatif dan C ++ akhirnya hanya menjadi faktor kecil.

Jadi peluang sangat tergantung pada majikan dan posisi yang mereka miliki.

Jika Anda melalui agen perekrutan Anda akan "mungkin" diberi tahu bahwa profil Anda tidak cocok. Tetapi dengan majikan nyata peluang Anda jauh lebih baik karena mereka benar-benar tahu apa yang mereka butuhkan.

Anjing hutan
sumber
1
pastikan Anda tahu apa itu destruktor virtual sehingga Anda dapat melewati layar ponsel.
Kevin
2
Seperti yang dikatakan orang lain, pastikan Anda mengingat beberapa dasar manajemen memori di C ++. Ini adalah perbedaan mendasar. Kalau tidak mengenai perpustakaan dan kerangka kerja Sebagian besar perusahaan (besar) memiliki lib dan pembungkusnya sendiri, sehingga mereka tidak mengharapkan Anda untuk mengetahui implementasinya. Sebaliknya ke C # di mana sebagian besar lib tingkat tinggi didukung ke dalam kerangka .net dan persyaratannya adalah untuk mengetahui satu set lib yang relevan dengan posisi tersebut.
Coyote
Jadi, apakah Anda mendapatkan pekerjaan itu? Saya benar-benar ingin pindah ke melakukan C ++ tetapi kurangnya pengalaman saya didokumentasikan menutup pintu, tidak yakin bagaimana membangunnya sebaliknya.
MetaGuru
Yap ... Bekerja di sana selama 3 tahun. Itu adalah pengalaman hebat ... tapi saya harus melakukan beberapa penangkapan dengan kekhususan C ++ beberapa bulan pertama.
Coyote
1

Tergantung. Jika Anda dapat menjawab beberapa pertanyaan wawancara dasar tentang petunjuk dan semacamnya, maka Anda seharusnya baik-baik saja.

Ini juga bermanfaat jika Anda dapat membuat daftar perbedaan antara templat C ++ dan .NET generics.

Selain itu, cukup mudah untuk mengejar ketinggalan dengan sisanya saat Anda melanjutkan.

Yam Marcovic
sumber
1

Iya. Ini mungkin tidak relevan dengan pengalaman C ++, tapi itu bagus.

Majikan yang baik akan tertarik pada bagaimana Anda berpikir , lebih dari berapa tahun dari bahasa tertentu yang Anda miliki.

Posisi entry level C ++ baik-baik saja: Anda dapat belajar dengan cepat, dan melakukan pekerjaan dengan baik. Perusahaan yang baik akan memberi Anda banyak kesempatan untuk tumbuh. Jika tidak, Anda bisa pergi ke tempat lain, dan memiliki pengalaman C # dan C ++.

B Tujuh
sumber
0

Itu benar-benar tergantung pada sifat bisnis yang Anda lamar. Jika mereka mencari seseorang yang memiliki keahlian pemrograman dan arsitektur berbasis OO yang bagus, C # kemungkinan akan sebagus yang berikutnya.

Jika mereka bangga dengan kecepatan / respons perangkat lunak mereka, maka Anda akan perlu mengetahui algoritma Anda karena ini lebih penting daripada optimasi mikro - Tabel Hash versus Linear lookup, dll. C # masih relevan di sini, tetapi Anda perlu untuk menunjukkan pemahaman tentang karakteristik kinerja - misalnya, tidak semua orang tahu tentang ngen.exe.

Jika mereka masuk ke lingkungan yang tertanam / mobile dan / atau non-sampah, Anda benar-benar perlu tahu tentang cara mengelola memori secara efektif. Smart Pointers, seperti yang ditunjukkan @DeadMG, adalah kunci di sini, tetapi begitu juga memahami profil alokasi memori. Pemrogram gim sering pra-mengalokasikan array besar objek dan mendaur ulangnya untuk mengetahui persyaratan memori di muka dan mengurangi yang tidak diketahui pada basis per-frame. Ini juga merupakan teknik yang digunakan dalam scroll TableViews di iOS.

Jika ada pekerjaan integrasi, Anda mungkin membutuhkan keahlian tingkat-C dalam hal menyusun data antar bahasa (seperti P / Invoke) tetapi juga pemahaman tingkat-byte tentang bagaimana struktur data ini dapat digunakan, yang bukan praktik umum di C # dalam pengalaman saya.

JBRWilkinson
sumber