Apakah boleh jika saya tidak tahu C tapi saya baik dengan C ++? [Tutup]

23

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 Cdalam 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 Cdi 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.

SS
sumber
1
Artikel yang dikutip oleh DumbCoder adalah tentang popularitas C dalam pemrograman tertanam.
ChrisW
2
@ ChrisW - Ya, tetapi masih menunjukkan C tidak mudah untuk dikuasai, bukan bahwa C ++ mudah dikuasai.
DumbCoder
@DumbCoder: Oh noes, pemrograman tertanam. Berapa banyak pekerjaan yang tertanam dibandingkan dengan desktop?
DeadMG
@DeadMG - Menguasai bahasa tidak ada hubungannya dengan berapa banyak pekerjaan yang tersedia untuk bahasa itu. Dan dari mana Anda mendapatkan gagasan bahwa C hanya digunakan dalam pemrograman tertanam?
DumbCoder

Jawaban:

36

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 ++.

CB Bailey
sumber
Oh ya. Ini adalah daftar item pertama dalam pertanyaan SO tentang mitos urban C ++: stackoverflow.com/questions/2245196/c-urban-myths
4
+1. Jika Anda tahu C ++, sebagai permulaan, itu kencing-mengambil untuk belajar C, dan kedua, itu benar-benar tidak penting.
DeadMG
6
@DeadMG Mungkin mudah untuk mempelajari sintaksisnya, karena itu hanya mengetahui bagian C ++ mana yang harus ditinggalkan, tetapi mempelajari idiom umum lebih sulit, dan bisa dibilang bagian yang paling penting. Tetapi saya tidak akan belajar C kecuali diperlukan.
KeithB
6
@chubsdad maksudmu aku seharusnya tidak menaruh "Aku tahu Jawa / Javascript" di CV-ku?
Incognito
@ user257493: Tidak ada yang namanya Java / Javascript
John Dibling
23

Jawaban multi-bagian. Pendapat saya saja.

  1. 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.

  2. 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.

  3. 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.

Steve Townsend
sumber
Apa yang membuat Anda mengatakan bahwa C ++ semakin tidak umum? Dalam pengalaman Anda, apa yang menggusurnya?
Praxeolitic
13

Inilah yang dikatakan Bjarne:

Mengetahui C adalah prasyarat untuk belajar C ++, bukan?

Salah. Subset umum dari C dan C ++ lebih mudah dipelajari daripada C. Akan ada lebih sedikit kesalahan ketik untuk ditangkap secara manual (sistem tipe C ++ lebih ketat dan lebih ekspresif), lebih sedikit trik untuk dipelajari (C ++ memungkinkan Anda untuk mengekspresikan lebih banyak hal tanpa circumlocution) , dan perpustakaan yang lebih baik tersedia. Subset awal terbaik dari C ++ untuk dipelajari bukanlah "semua dari C".

Chubsdad
sumber
4

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.

Alex F
sumber
3
@Alex Farber - "Jika Anda tahu C ++, Anda dapat menulis dalam C". Saya sangat meragukan itu :)
DumbCoder
4
Tidak setuju. IME, programmer yang mempelajari C ++ pertama cenderung tidak menyadari apa yang tidak dimiliki fitur C ++. Programmer yang mempelajari C lebih dulu dapat dengan mudah menulis dalam C ++, tetapi memulai secara non-idiomatis.
dan04
1
Ini berdasarkan pengalaman pribadi saya. Saya belajar C ++ dan membuat sebagian besar pekerjaan saya di C ++. Tapi saya menggunakan C bila perlu, tanpa masalah.
Terutama mengingat bahwa semua lib kelas imut tidak tersedia dalam C. Imo kemenangan bahasa seperti C ++ dan Java adalah lib, bukan fitur bahasa bawaan per se.
8
Pemrogram C ++ mencoba meretas jalan mereka melalui C menulis kode buruk karena alasan yang sama mengapa pemrogram C mencoba meretas jalan mereka melalui C ++ menulis kode buruk. Orang-orang C menggunakan C ++ sebagai "C dengan kelas" sedangkan orang-orang C ++ menggunakan C sebagai "C ++ tanpa kelas."
John Dibling
4

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."

Stephen
sumber
Mengapa mengetahui C menjadi penghalang untuk belajar C ++? Saya tidak mengatakan saya tidak setuju, tetapi ini adalah pernyataan yang berani.
Casey Patton
3

Seperti jika saya memberikan wawancara di perusahaan, jika saya memberi tahu mereka bahwa saya tidak tahu C - akankah mereka menganggapnya baik-baik saja?

Tanyakan apakah mereka membutuhkan C (dan mau mempelajarinya atau tidak jika mereka mau).

Jadi jika mereka meminta saya untuk mengimplementasikannya, dan jika saya melakukannya di C ++, apakah itu dapat diterima?

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.

ChrisW
sumber
2

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.

frankc
sumber
2

Apakah saya perlu belajar C?

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 cukup baik dengan C ++, baik karena saya nyaman dengan bahasa, saya telah membaca Accelerated C ++ dan melakukan hampir semua latihan

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 .

mctylr
sumber
1

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.

pengguna400348
sumber
1

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.

Dering Ø
sumber
Saya tidak akan mengatakan bahwa itu meningkatkan kebebasan programmer - Anda selalu dapat menulis struktur dan algoritma Anda sendiri di C ++.
DeadMG
0

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 printfdan scanfserangkaian 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.

Mark B
sumber
0

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.

John Bode
sumber
-1

Saya pikir jika Anda nyaman dengan C ++ Anda akan terlalu dengan C.

Perbedaan utama antara keduanya adalah bahwa C ++ bersih - berorientasi objek - C tidak :)

Nuno
sumber
1
Saya penggemar berat C ++, tapi saya tidak akan menyebutnya bersih. Dan C ++ adalah multi-paradigma, artinya kode C ++ yang baik tidak selalu berorientasi objek.
KeithB
-1

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. :)

Alexander Liberson
sumber
-1

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 Cdemi, belajar C ++ sedikit menyeluruh .. Tingkatkan keahlian Anda .. Saya yakin ada banyak yang harus Anda pelajari ... Bagi saya, selalu ada sesuatu dalam C ++ untuk dipelajari ..: )

berhubungan
sumber
-1

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, atau fclose. 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:

struct foo {
       int a;
       void * b;
};
foo x;  // in C++ this would work, but in C it would fail because struct names aren't in the
        // type name table unless you put them there with typedef

Saya tidak berpikir mereka akan memutuskan bahwa Anda tidak tahu apa yang Anda lakukan karena Anda tidak melakukannya:

struct foo x;

Dan mereka seharusnya tidak peduli jika Anda menggunakan coutkecuali 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.

nategoose
sumber