Saya punya pertanyaan yang menurut saya paling baik dijawab di sini.
Saya cukup mahir C++
, baik karena saya nyaman dengan bahasa, saya telah membaca Accelerated C++
dan melakukan hampir semua latihan.
Namun, saya punya masalah besar. Apakah saya perlu belajar C
? Saya belum pernah melakukannya C
dalam hidup saya. Saya baru mulai dengan C++
ketika saya mulai dengan pemrograman. Mungkin karena saya selalu tertarik mengetahui mengapa semua orang menyebut bahasa itu begitu rumit. Sekarang saya tahu jawaban untuk pertanyaan itu;)
Saya sangat tertarik mengetahui apakah saya bisa bertahan hidup tanpa mengetahui C
di dunia saat ini. Seperti jika saya memberikan wawancara di perusahaan, jika saya memberi tahu mereka bahwa saya tidak tahu C
- akankah mereka menganggapnya baik-baik saja? Dua bahasa yang saya gunakan adalah Python dan C ++. Saya meminta alasan ini. Saya telah mendengar bahwa perusahaan meminta struktur data dalam wawancara. Jadi jika mereka meminta saya untuk mengimplementasikannya, dan jika saya melakukannya di C ++, apakah itu dapat diterima?
Dan orang-orang yang mengatakan 'bagaimana mungkin Anda tidak tahu C ketika Anda C ++', tolong jangan menjawab :) Jangan tersinggung, tapi saya gagal memahami mengapa belajar C adalah prasyarat.
Jawaban:
Jika Anda tahu C ++, saya tidak akan belajar C hanya demi itu. Anda seharusnya tidak merasa terlalu sulit untuk belajar jika dan ketika Anda membutuhkannya.
Saya lebih suka bertemu seseorang yang mengaku tahu C ++ tapi bukan C daripada seseorang yang mengaku tahu C / C ++.
sumber
Jawaban multi-bagian. Pendapat saya saja.
Pengalaman saya (25 tahun setelah lulus dari perguruan tinggi) adalah bahwa C ++, meskipun semakin jarang, akan terus menjadi vital bagi sistem yang menarik untuk masa mendatang. Jadi saya bertahan dengan itu sebagai bidang keahlian utama saya. Pekerjaan itu sulit, menarik dan penting.
Pemrogram C ++ umumnya bernilai tepat karena mereka belum tumbuh dalam bahasa yang dikelola, dan karena itu memiliki lebih banyak kemungkinan untuk memahami apa yang terjadi di bawah selimut. Lebih mudah untuk transisi dari C ++ ke C # / Java daripada sebaliknya karena bilah untuk entri lebih tinggi.
Jadi sementara dalam pandangan saya, itu tidak penting untuk memahami C untuk memprogram kompeten dalam C ++, mengembangkan pemahaman tentang mengapa C ++ ada dalam konteks C - keterbatasan dan kekuatannya dan bagaimana mereka diatasi atau tidak dalam C ++ - akan menjadi tak ternilai bagi Anda dari waktu ke waktu.
Semoga berhasil.
sumber
Inilah yang dikatakan Bjarne:
sumber
Hanya pendapat pribadi saya: jika Anda tahu C ++, Anda dapat menulis dalam C. Beberapa pengalaman akan menyenangkan, tetapi ini bukan masalah. Sebaliknya tidak benar: pengetahuan C tidak memungkinkan untuk menulis dalam C ++, tanpa belajar tambahan. Saya belum pernah belajar C, dan menggunakannya saat diperlukan, tanpa masalah.
sumber
Oke, hal pertama yang pertama - tidak, mengetahui C bukanlah prasyarat untuk belajar C ++. Memang, itu bisa menjadi penghalang.
Kedua, ini sepenuhnya situasional. Apakah Anda perlu tahu C atau tidak sepenuhnya tergantung pada apakah pekerjaan itu mengharuskannya. Jika Anda ingin menjadi seorang pria sistem embedded maka ya, belajar C akan membantu. Kalau tidak, sebagian besar pekerjaan tidak memerlukannya. Jika suatu pekerjaan membutuhkan C, harus dikatakan demikian. Jika tidak dikatakan demikian, mungkin tidak perlu. Berkenaan dengan struktur data, sekali lagi datang ke perusahaan. Biasanya sebuah perusahaan akan berkata, "Kami memprogram dalam bahasa-bahasa ini, tulis struktur data ini kepada kami. Gunakan bahasa pilihan Anda dari daftar di atas." Jika mereka meminta Anda untuk menuliskannya dalam huruf C, Anda cukup mengatakan "Saya tidak tahu huruf C - tidak tertulis di resume saya bahwa saya tahu huruf C, pekerjaan ini bukan untuk saya."
sumber
Tanyakan apakah mereka membutuhkan C (dan mau mempelajarinya atau tidak jika mereka mau).
Saya berharap demikian, jika mereka sedang mewawancarai / mempekerjakan Anda untuk bekerja di C ++.
Jika itu adalah pertanyaan "struktur data", Anda mungkin bertanya kepada mereka apakah mereka ingin Anda menunjukkan menggunakan wadah STL, atau apakah (karena ini adalah wawancara) mereka ingin Anda menerapkan struktur data dari awal.
sumber
C hampir merupakan bagian yang tepat dari C ++. Jika Anda tidak tahu C, maka Anda tidak tahu bagian besar dan penting dari C ++. Apakah Anda harus mempelajari bagian ini? Tidak. C ++ adalah bahasa yang sangat besar dan kebanyakan orang memilih subset dan program dengan itu. Anda tidak perlu mengetahui subset yang merupakan C. Terutama, tidak penting untuk mengetahui pustaka standar C. Namun, saya akan menaruh pandangan yang sangat mencurigakan kepada siapa pun yang tidak memahami konsep inti C seperti pointer, array, dan sedikit memutar-mutar.
sumber
Tidak, kamu tidak perlu. Periode.
Tetapi mempelajari bahasa pemrograman baru akan bermanfaat dalam jangka panjang. Belajar bahasa berdasarkan paradigma pemrograman yang berbeda bahkan lebih bermanfaat. Apakah itu bahasa OOP (Smalltalk atau C ++), bahasa dinamis (Lisp, Clojure, Python), fungsional (Lisp, Haskell, Erlang), bersamaan (Erlang, Go, Algol 68, Smalltalk), atau apa pun (Fortran 03, Perl, Forth) paradigma ketinggalan jaman baru menyerang keinginan Anda; mempelajari bahasa yang berbeda membantu memaparkan Anda pada banyak alur pemikiran, masing-masing dengan kekuatan dan kelemahan mereka sendiri untuk menangani tugas yang ada.
Fortran masih mendominasi dalam komputasi numerik, COBOL masih menjadi andalan di perusahaan asuransi besar, Unix, BSD, dan Linux masih berbasis pada C. Kode lama tidak kehilangan nilainya seiring bertambahnya usia karena selalu tidak aus. seperti perangkat mekanis yang perlu diganti seiring waktu. Jadi bahasa yang lebih tua bisa berharga dalam hal kemampuan kerja versus faktor keren bahasa yang lebih baru .
Sama seperti belajar untuk menjadi multi-bahasa dalam bahasa (manusia) alami yang bisa dibilang meningkatkan kemampuan Anda untuk mengekspresikan diri , hal yang sama membawa bonus yang sama untuk bahasa komputer.
Jadi sementara saya pikir penting (dari waktu ke waktu) untuk belajar menjadi fasih tidak hanya dalam berbagai bahasa, tetapi lebih penting untuk fasih dalam berbagai paradigma pemrograman.
Saya akan mencadangkan, dan mengatakan bahwa C ++ adalah bahasa yang kaya dan kompleks, butuh bertahun-tahun paparan dan latihan terus-menerus untuk menjadi benar-benar fasih dalam semua seluk-beluknya yang kaya (atau jelek).
Luangkan waktu Anda, dan terus belajar adalah saran paling penting yang bisa saya berikan kepada Anda. Untuk diambil orang lain, saya mendorong Anda membaca Program Teach Yourself Peter Norvig dalam Sepuluh Tahun .
sumber
Jawaban yang sangat singkat untuk pertanyaan Anda adalah: itu sangat tergantung pada kebutuhan Anda. Beberapa perusahaan terutama mengandalkan C, kadang-kadang sebagai peninggalan (jika C sudah digunakan selama bertahun-tahun di sana). Perusahaan lain tidak ada hubungannya dengan C. C adalah bahasa tingkat rendah dari, katakanlah, Python atau Java, dan banyak pemrograman aplikasi mungkin tidak memerlukan pengetahuan tentang C. Tidak seperti bahasa OOP, C memerlukan kerangka pikir yang berbeda, dimana Maksud saya program terstruktur dan terorganisir secara berbeda, dan beberapa aspek yang lebih bernuansa harus dipertimbangkan. Biasanya bermanfaat untuk mempelajari idiom itu, bahkan sekadar untuk memperluas pikiran Anda, begitulah. Tetapi sekali lagi, apakah perusahaan akan peduli tergantung pada kebutuhan mereka. Beberapa mungkin memberi Anda pilihan bahasa, beberapa mungkin memerlukan Java, yang lain C ++, yang lain masih C, dll. Bisakah Anda bertahan? Ya hari ini' Dunia s memiliki begitu banyak bidang pemrograman yang berbeda sehingga Anda bahkan mungkin tidak pernah melewati kode C. Haruskah Anda belajar C? Saya akan mengatakan - ya, terlepas dari penggunaan nanti.
sumber
Beberapa orang mungkin tidak merasa nyaman pemrograman dalam C sambil mengetahui C ++.
Ada struktur "pelindung" di sekitar C ++ yang berkontribusi untuk mendorong tidak hanya struktur tetapi juga algoritma dari suatu program. Misalnya bantuan struktur dan algoritma STL, pendekatan pemrograman berorientasi objek yang jelas, penghancur / penghancur, lapisan abstraktif tambahan yang berasal dari templat ...
Sementara C - dikatakan - lebih sederhana, itu memaksa programmer untuk menyuntikkan struktur dan algoritma sendiri ke dalam pemodelan masalah. Ini adalah peningkatan intens kebebasan pemrograman.
Tetapi ada biaya, karena beberapa orang memerlukan struktur yang lebih dipaksakan, dan membangun program yang cenderung lebih sulit dipertahankan secara eksponensial karena semakin besar. Saya sering mengatakan bahwa masalahnya bukan pada bahasa (C) tetapi apa yang orang lakukan dengannya.
Karena itu, sebagai seorang perekrut, saya senang mewawancarai seseorang dengan keterampilan C ++ yang kuat, tetapi akan lebih antusias jika dia memiliki cukup otonomi bahasa untuk mengembangkan proyek C secara keseluruhan.
Juga, program C yang baik menyiratkan keterampilan sistem pengembang yang baik, karena bahasa membutuhkan (biasanya) pemahaman yang adil tentang komponen sistem untuk membangun runnable yang efisien.
sumber
Jika Anda merasa nyaman dalam C ++ saya tidak akan khawatir tentang belajar C. C ++ memiliki banyak perbaikan di atas C (kemampuan untuk mendukung RAII dengan konstruktor / destruktor, wadah dasar, aliran, dan string besar).
Namun saya akan menyarankan mempelajari
printf
danscanf
serangkaian fungsi sehingga Anda dapat BACA kode yang menggunakannya. Mereka cukup populer di C ++ sehingga mengetahui bagaimana mereka digunakan sangat membantu. Saya tidak menyarankan menggunakannya dalam kode Anda sendiri tanpa alasan yang sangat spesifik.sumber
Satu-satunya waktu Anda perlu tahu C adalah jika Anda diharapkan untuk menghasilkan kode C. Jika tidak, maka tidak ada masalah.
Saya belum menulis C secara profesional dalam 6 tahun terakhir atau lebih; ada banyak domain aplikasi yang lebih baik dilayani oleh bahasa lain (setidaknya dari sudut pandang produktivitas, jika bukan kinerja) seperti Java atau C # atau Python. Anda pasti dapat bertahan dan bahkan berkembang sebagai pengembang perangkat lunak tanpa pernah menyentuh C.
Jika Anda ingin belajar C untuk hiburan Anda sendiri, itu tidak masalah. Bergantung pada bagaimana Anda mempelajari C ++ dan seberapa bergantung Anda pada C ++ - fitur spesifik (templat, tipe referensi, STL, kelebihan beban) Anda mungkin sedikit cepak ketika Anda menyadari bahwa 90% alat yang membuat pemrograman dapat ditoleransi tidak lagi tersedia. Hal-hal seperti manajemen memori di C sangat padat karya dan membosankan dibandingkan dengan C ++ atau Java. Ada juga beberapa ketidakcocokan antara C dan C ++, dan dengan setiap versi bahasa baru celah itu akan melebar.
Masih ada domain aplikasi di mana C adalah alat yang tepat untuk pekerjaan itu: kecil, cepat, tidak banyak sihir di bawah tenda, dan itu bukan perakitan. Tetapi untuk pengembangan aplikasi umum (terutama aplikasi desktop berbasis GUI), ada alat yang jauh lebih baik tersedia.
sumber
Saya pikir jika Anda nyaman dengan C ++ Anda akan terlalu dengan C.
Perbedaan utama antara keduanya adalah bahwa C ++ bersih - berorientasi objek - C tidak :)
sumber
Mengetahui C akan memberi Anda wawasan lebih lanjut tentang manajemen memori, dll. Ini semua tentang seberapa rendah level yang ingin Anda dapatkan, dan apakah memahami berbagai hal pada tuas yang lebih rendah membantu Anda, atau tidak. Anda dapat mengambilnya selangkah lebih maju dan belajar bahasa majelis juga, tetapi semuanya tergantung seberapa besar nilainya bagi Anda.
Itu juga tergantung apakah Anda ingin memprogram dalam C atau tidak. :)
sumber
Ya tidak apa-apa ...
IMHO, karena Anda pandai
C++
, itu memang cukup ...Saya yakin ada industri yang mencari programmer C ++ ... Tapi begitu Anda tertarik, semuanya tergantung pada kebutuhan proyek Anda .. Apa pun yang mengharuskan Anda harus belajar .. Mungkin Java, .Net atau bahkan C .. Jika perusahaan siap membayar Anda, pelajari saja ...
Jika Anda berada di tahap awal karir Anda, pewawancara IME cenderung melihat sikap Anda dan pemahaman bahasa yang Anda sukai.
Alih-alih belajar
C
demi, belajar C ++ sedikit menyeluruh .. Tingkatkan keahlian Anda .. Saya yakin ada banyak yang harus Anda pelajari ... Bagi saya, selalu ada sesuatu dalam C ++ untuk dipelajari ..: )sumber
Saya pikir hal terpenting yang perlu Anda ketahui tentang C adalah perbedaan antara C dan C ++. Anda mungkin akan melihat beberapa kode yang memiliki beberapa C gaya di beberapa titik, dan Anda tidak harus bingung ketika Anda melihat hal-hal seperti
malloc
,free
,printf
,fopen
, ataufclose
. Anda juga harus tahu bagaimana ini mirip serta bagaimana mereka berbeda dari rekan-rekan C ++ mereka.Anda juga harus tahu itu
<<
dan>>
merupakan operator shift kiri dan kanan, bukan operator penyisipan. Di C ++, di mana Anda dapat membebani operator, ini telah kelebihan beban untuk melakukan penyisipan aliran dan hal-hal serupa, tetapi mereka masih digunakan untuk menggeser bilangan bulat.Pastikan Anda memahami semua fitur dasar yang dimiliki oleh C ++ yang tidak ada di C. Jika Anda cukup membaca stackoverflow.com, Anda akan melihat banyak pertanyaan yang melibatkan perbedaan dalam bahasa dan kesalahpahaman orang tentang mereka.
Anda juga harus membiasakan diri dengan preprocessor C, yang hampir sama dengan (dan seringkali program yang sama dengan) preprocessor C ++. Mengetahui cara menggunakannya akan membantu Anda dalam C ++, tetapi lebih banyak mengandalkan C.
Satu hal besar yang sulit dihadapi dalam C yang dimiliki C ++ adalah destruktor. Hal-hal itu dapat disebut di semua tempat mengurus pembebasan sumber daya, tetapi dalam C Anda harus melakukan semua itu secara lebih eksplisit. Ini mudah bagi programmer C ++ untuk melupakan tentang melakukan.
Sejauh wawancara, jika seseorang meminta Anda untuk menulis kode untuk beberapa algoritma umum dalam C dan Anda melakukan sesuatu seperti:
Saya tidak berpikir mereka akan memutuskan bahwa Anda tidak tahu apa yang Anda lakukan karena Anda tidak melakukannya:
Dan mereka seharusnya tidak peduli jika Anda menggunakan
cout
kecuali apa yang mereka coba tampilkan adalah kemampuan Anda menangani input dan output, yang membuat C ++ lebih mudah untuk kasus-kasus umum.Jika Anda menemukan diri Anda dalam posisi sedang diwawancarai untuk pekerjaan yang membutuhkan C, Anda harus jujur tentang kurangnya pengetahuan Anda tentang C di luar tumpang tindihnya dengan C ++. Mereka mungkin akan mengerti bahwa seorang programmer yang baik harus dapat membuat transisi ke C dari C ++ dengan cukup cepat.
Semua itu dikatakan, C tidak sebesar bahasa. Pustaka standar jauh lebih kecil daripada C ++ dan itu bukan masalah besar untuk membiasakan diri dengan bagian yang paling umum, jadi benar-benar tidak ada salahnya untuk mempelajarinya.
sumber