Haruskah saya mempelajari C sebelum mempelajari C ++? [Tutup]


116

Saya mengunjungi hari buka departemen Ilmu Komputer universitas hari ini dan dalam tur lab kami duduk untuk bermain dengan beberapa proyek tahun terakhir dari mahasiswa sarjana. Salah satunya sangat bagus - semacam permainan asteroid FPS. Saya memutuskan untuk mengintip di srcdirektori untuk menemukannya dilakukan di C ++ (sebagian besar proyek lainnya adalah aplikasi Java 3D).

Saya belum pernah melakukan C sebelumnya tetapi saya telah melihat-lihat beberapa kode C sebelumnya. Dari apa yang saya lihat di kode .cpp di game ini tidak terlihat jauh berbeda.

Saya tertarik mempelajari C atau C ++, tetapi mungkin akan mempelajari yang lain nanti. Apakah ada keuntungan bagi saya belajar satu sebelum yang lain dan jika ya, yang mana?



7
Ini sebenarnya bukan duplikat. Secara implisit pertanyaan ini juga menanyakan "haruskah saya mempelajari OOP atau pemrograman prosedural dulu"
bobobobo

2
Sebelum turun ke jawaban di bawah ini (IMO mereka berputar-putar), izinkan saya untuk menawarkan beberapa saran: BENAR : C ++ memang mempertahankan semua fitur dan atribut yang diterapkan ke C, sehingga secara implisit ' usang ' C (Intinya sebagian besar jawaban di bawah mencoba untuk membuat). NAMUN : C tidak , tidak , TIDAK MATI. Orang-orang tampaknya memahami kiasan ' tidak perlu mempelajari keduanya ' untuk kehidupan yang menyenangkan, tetapi pada kenyataannya ini tidak memiliki dasar. Untuk meminjam sintaks berasal dari C, C ++! = C . Mengetahui C ++ TIDAK akan menjadikan Anda pengembang C yang memenuhi syarat, dan juga, mengetahui C TIDAK akan menjadikan Anda pengembang C ++ yang memenuhi syarat.
Super Cat

4
BAHWA : TIDAK ada salahnya menggunakan C sebelum mempelajari C ++ - Semakin banyak yang Anda tahu, semakin baik Anda - Namun sebaliknya, Anda tidak perlu mempelajari C jika tujuan akhir Anda adalah mempelajari C ++ . JIKA Anda ingin belajar C ++, pergi belajar C ++ , dan jika Anda ingin t belajar C, pergi belajar C . Keduanya memiliki pro dan kontra (Kesederhanaan C dan fitur -ultra mendalam- dari C ++ keduanya merupakan kutukan dan berkah dengan caranya sendiri), dan keduanya masih digunakan sampai sekarang (C untuk sistem tertanam, Unity, PHP, dll - C ++ juga untuk Unity, Unreal, dll).
Super Cat

3
POINT: Ingin belajar C ++? Kemudian lewati C. Anda tidak membutuhkannya. Ingin belajar C? Kalau begitu bagus, pelajari C. Jika Anda ingin mempelajari keduanya, lanjutkan ke C terlebih dahulu. Mereka berdua memiliki tempat masing-masing di dunia, jadi jangan berpikir bahwa keduanya cukup untuk yang lain.
Super Cat

Jawaban:


121

Tidak perlu mempelajari C sebelum mempelajari C ++.

Mereka adalah bahasa yang berbeda . Ini adalah kesalahpahaman umum bahwa C ++ dalam beberapa hal bergantung pada C dan bukan bahasa yang ditentukan sepenuhnya sendiri.

Hanya karena C ++ memiliki banyak sintaks yang sama dan banyak semantik yang sama, tidak berarti Anda perlu mempelajari C terlebih dahulu.

Jika Anda mempelajari C ++, pada akhirnya Anda akan mempelajari sebagian besar C dengan beberapa perbedaan antara bahasa yang akan Anda pelajari seiring waktu. Faktanya, menulis C ++ yang tepat adalah hal yang sangat sulit karena programmer C ++ perantara cenderung menulis C / C ++. Itu benar apakah Anda memulai dengan C atau memulai dengan C ++ atau tidak.

Jika Anda tahu C terlebih dahulu, itu bagus plus untuk mempelajari C ++. Anda akan mulai dengan mengetahui sebagian besar bahasa. Jika Anda tidak tahu C terlebih dahulu maka tidak ada gunanya berfokus pada bahasa yang berbeda. Ada banyak buku dan tutorial bagus yang tersedia yang membuat Anda tidak tahu apa-apa dan akan mencakup apa pun yang akan Anda pelajari dari C yang juga berlaku untuk C ++.

Silakan lihat alasan lebih lanjut dalam jawaban ini .


33
Saya sangat tidak setuju. Mempelajari C ++ pertama-tama membuat pengalaman yang sangat sulit "kembali" ke C. C adalah bahasa sistem yang mendasar dan hanya dasar. C ++ adalah ballgame yang benar-benar baru, pendekatan untuk masalah apa pun dalam kedua bahasa akan sangat berbeda. Saya cukup beruntung untuk mengutak-atik C sebelum terjun ke pekerjaan C ++. Selanjutnya saya mampu secara mental "mendidihkan" gula sintaksis yang disediakan C ++, dan dapat mendekati masalah dengan kedua bahasa. Sangat mudah bagi saya untuk mengidentifikasi C sebagai bagian "melakukan sesuatu" pada pasangan bahasa. Mempelajari C ++ terlebih dahulu akan membuat programmer bingung dan tersesat.
Matt Joiner

24
@ Matt: Saya belajar C ++ terlebih dahulu dan saya bukan programmer yang menyesatkan. Jadi klaim Anda tidak benar, bukti demi contoh kontra. Dan ya, saya juga memiliki lencana emas di C. Kebenaran dari masalah ini adalah bahwa mereka adalah 2 bahasa yang berbeda dan berbeda. Anda tidak memerlukan satu bahasa sebagai ketergantungan untuk mempelajari bahasa lainnya. Itu hanya kesalahpahaman yang konyol.
Brian R. Bondy

8
@Matt: Juga dari posting saya yang ditautkan: Anda harus belajar C ++ terlebih dahulu, bukan karena mempelajari C terlebih dahulu akan merugikan Anda, bukan karena Anda harus melepaskan apa pun (Anda tidak akan melakukannya), tetapi karena tidak ada manfaat dalam mempelajari C terlebih dahulu. Anda pada akhirnya akan mempelajari hampir semua hal tentang C karena itu kurang lebih terkandung dalam C ++.
Brian R. Bondy

11
@Matt: Maaf, Anda masih belum mengerti. Gambarlah diagram Venn dari C dan C ++ dan lihat bagian yang berpotongan. C ++ terdiri dari seluruh lingkaran C ++ yang Anda gambar, bukan hanya bagian yang tidak berpotongan. Jika Anda kebetulan tahu C dulu, bagus untuk Anda, Anda bisa belajar C ++ lebih cepat. Jika Anda tidak mengetahui C pertama kali, tidak ada alasan untuk mempelajarinya terlebih dahulu. Apakah Anda berasumsi bahwa setiap buku di C ++ tidak akan mencakup pointer dan manajemen memori, dan string literal, dll.? Saya akan berhenti berdiskusi sekarang tetapi jangan ragu untuk meninggalkan komentar penutup Anda.
Brian R. Bondy

11
@ Mat: bagaimana C mengarah pada pemahaman yang lebih baik tentang C ++? Biasanya, programmer C yang mempelajari C ++ akhirnya menulis kode gaya "C dengan kelas" yang jelek dan rawan kesalahan. Saya tidak mengatakan ini selalu terjadi, tetapi ini adalah perkembangan yang paling alami saat memulai dengan C, karena C lebih mirip dengan gaya C ++ yang mengerikan daripada C ++ "modern".
jalf

77

Saya suka pertanyaan ini - ini seperti menanyakan "apa yang harus saya pelajari dulu, snowboarding atau ski"? Saya pikir itu tergantung apakah Anda ingin snowboard atau ski. Jika Anda ingin melakukan keduanya, Anda harus mempelajari keduanya.

Dalam kedua olahraga tersebut, Anda meluncur menuruni bukit di atas salju menggunakan perangkat yang cukup mirip untuk memancing pertanyaan ini. Namun, mereka juga cukup berbeda sehingga mempelajari yang satu tidak banyak membantu Anda dengan yang lain. Sama halnya dengan C dan C ++. Meskipun tampaknya bahasa yang cukup mirip dalam sintaks, pola pikir yang Anda perlukan untuk menulis kode OO vs kode prosedural cukup berbeda sehingga Anda harus mulai dari awal, bahasa apa pun yang Anda pelajari kedua.


70

Saya belajar C dulu, dan saya mengambil kursus struktur data yang menggunakan C, sebelum saya belajar C ++. Ini berhasil dengan baik untuk saya. Kursus struktur data dalam bahasa C memberi saya pemahaman yang kuat tentang petunjuk dan manajemen memori. Itu juga memperjelas manfaat dari paradigma berorientasi objek, setelah saya mempelajari apa itu.

Di sisi lain, dengan mempelajari C terlebih dahulu, saya telah mengembangkan beberapa kebiasaan yang awalnya menyebabkan saya menulis kode C ++ yang buruk, seperti penggunaan pointer yang berlebihan (ketika referensi C ++ akan dilakukan) dan preprocessor.

C ++ benar-benar bahasa yang sangat kompleks dengan banyak fitur. Ini sebenarnya bukan superset dari C. Sebaliknya ada subset dari C ++ yang terdiri dari konstruksi pemrograman prosedural dasar (loop, if, dan fungsi), yang sangat mirip dengan C. Dalam kasus Anda, saya akan mulai dengan itu, dan kemudian melanjutkan ke konsep yang lebih maju seperti kelas dan template.

Hal terpenting, IMHO, adalah dihadapkan pada paradigma pemrograman yang berbeda, seperti prosedural, berorientasi objek, fungsional, dan logis, sejak dini, sebelum otak Anda membeku menjadi salah satu cara memandang dunia. Kebetulan, saya juga sangat menyarankan Anda mempelajari bahasa pemrograman fungsional, seperti Skema. Ini benar-benar akan memperluas wawasan Anda.


18

Jika Anda memutuskan untuk mempelajari keduanya (dan seperti yang telah disebutkan orang lain, tidak ada kebutuhan eksplisit untuk mempelajari keduanya), pelajari C terlebih dahulu. Beralih dari C ke C ++ terasa seperti perkembangan alami; pergi ke arah lain terasa seperti sengaja mengikat satu tangan ke belakang punggung Anda. :-)


13

Saya pikir Anda harus belajar C dulu, karena saya belajar C dulu. C memberi saya pemahaman yang baik tentang sintaksis dan gotcha dengan hal-hal seperti pointer, yang semuanya mengalir ke C ++.

Saya pikir C ++ membuatnya mudah untuk membungkus semua gotcha itu (membutuhkan array yang tidak akan meluap ketika Anda menggunakan operator [] dan indeks yang cerdik? Tentu, buat kelas array yang melakukan pemeriksaan batas) tetapi Anda perlu tahu apa mereka dan digigit oleh mereka sebelum Anda memahami mengapa sesuatu dilakukan dengan cara tertentu.

Ketika semua dikatakan dan dilakukan, cara C ++ biasanya diajarkan adalah "C ++ adalah C dengan objek, ini C dan inilah cara kerja semua OO", jadi Anda cenderung mempelajari C dasar sebelum C ++ nyata jika Anda tetap ikuti sebagian besar teks.


Saya tidak setuju. Buku pemrograman apa pun ke C ++ yang sepadan dengan garamnya akan mencakup setidaknya beberapa "gotcha", seperti cara kerja array (dan cara mencegah overflow)
moonman239

12

Saya tidak setuju dengan mayoritas di sini. Saya pikir Anda harus mempelajari C sebelum mempelajari C ++. Ini jelas tidak perlu, tapi menurut saya itu membuat belajar C ++ jauh lebih mudah. C adalah inti dari C ++. Apa pun yang Anda pelajari tentang C dapat diterapkan ke C ++, tetapi C jauh lebih kecil dan lebih mudah dipelajari.

Ambil K&R dan baca itu. Ini singkat dan akan memberi Anda pemahaman bahasa yang memadai. Setelah Anda memiliki dasar-dasar pointer dan panggilan fungsi, Anda dapat beralih ke C ++ sedikit lebih mudah.


15
Salah. Hampir semua yang diajarkan C kepada Anda adalah praktik yang buruk dalam C ++. C bukan inti dari C ++, C ++ kebetulan berbagi banyak sintaks. Tolong, dunia sudah memiliki lebih dari cukup programmer "C dengan kelas". Pelajari C atau C ++. Tapi jangan berpura-pura bahwa C adalah C ++ lite.
jalf

13
Saya mendukung kata-kata saya. C ++ dibangun di atas C dan dengan demikian C ada di intinya. Idiom yang digunakan di C ++ jauh berbeda dari yang digunakan di C, tetapi sintaksnya sama. Seseorang dapat mempelajari cara yang benar untuk memprogram C ++ dimulai dengan C. Lihatlah C ++ Primer. Itu pada dasarnya melakukan itu.
Steve Rowe

6
+1. C adalah bahasa yang lebih kecil, sehingga lebih mudah dipelajari. Upaya untuk menjadi kompatibel ke belakang dengan C adalah salah satu sumber masalah utama dengan C ++, yang lainnya adalah sistem template yang terlalu rumit untuk digunakan oleh 90% programmer C ++.
hillu

1
Pemahaman tentang variabel, tipe [termasuk pointer dan kualifikasi], cakupan, fungsi, preprocessor, dan linkage sangat penting untuk C dan C ++. Saya akan mengatakan mempelajari konsep-konsep ini dengan C akan lebih mudah sehingga Anda tidak perlu juga berurusan dengan mengetahui kelas, arti lain dari static, templat (dan kesalahan templat yang sangat mengintimidasi yang
dikeluarkan oleh

1
Anda ada benarnya. Sebenarnya, mungkin bagus untuk mempelajari C sehingga Anda dapat melanjutkan ke C ++ dengan pengetahuan yang lebih baik tentang akarnya.
Daniel Daranas

10

Dalam proses mempelajari C ++, Anda akan mempelajari sebagian besar C juga. Namun perlu diingat banyak kode C ++ tidak valid C. C ++ dirancang agar kompatibel dengan kode C, jadi saya akan mengatakan belajar C ++ dulu. Brian menulis jawaban yang bagus tentang ini.


8

Seperti jawaban atas banyak pertanyaan lain dalam hidup, itu tergantung. Itu tergantung pada apa minat dan tujuan pemrograman Anda. Jika Anda ingin memprogram aplikasi desktop, mungkin dengan GUI, maka C ++ (dan OOP) mungkin adalah cara yang lebih baik. Jika Anda tertarik dengan pemrograman perangkat keras pada sesuatu selain chipset x86, maka C seringkali merupakan pilihan yang lebih baik, biasanya untuk kecepatannya. Jika Anda ingin membuat pemutar media baru atau menulis aplikasi bisnis, saya akan memilih C ++. Jika Anda ingin melakukan simulasi ilmiah tentang tabrakan galaksi atau dinamika fluida, lihatlah kekuatan C.


4
Dalam banyak skenario komputasi kinerja tinggi, beberapa ratus siklus clock itu memang penting.
Scottie T

1
@ScottieT: Mengingat bahwa selain penentu restrictC tidak memiliki konstruksi sintaksis / semantik terkait kinerja selain yang dimiliki C ++, mengapa tepatnya menurut Anda kode C ++, dengan sintaksnya yang lebih kaya dan misalnya pemrograman meta harus menghasilkan kode yang lebih lambat? Apakah Anda tahu template ekspresi?
Sebastian Mach

1
@phresnel: Relevansi. C ++ adalah bahasa yang sangat kompleks dengan fitur yang sering kali tidak sepadan. Sebagai aturan umum, C memberikan peluang performa yang sama seperti C ++ dengan biaya yang jauh lebih kecil dalam kompleksitas.
Matt Joiner

1
@MattJoiner: Maintainability / Extensibility juga merupakan faktor kinerja, meskipun saya menyadari kode ilmiah sering kali hanya sekali. Namun, mengulangi ekspresi-template-argumen (sebagai contoh), saya mengatakan bahwa C ++ memiliki lebih banyak peluang pengoptimalan, (juga karena lebih mudah untuk menulis kode-template-ekspresi daripada kode-intrinsik), dengan satu pengecualian ( restrict, yang bagaimanapun semua compiler C ++ utama disediakan sebagai ekstensi). Dan apakah Anda benar-benar berpikir bahwa, dengan kode yang sama, akan ada perbedaan dalam performa antara C ++ dan C, dengan kompiler yang sama? [...]
Sebastian Mach

1
@MattJoiner: [...], dan ketika membaca pernyataan seperti "sebanyak yang saya tidak suka C ++" memungkinkan saya membangun asumsi Anda sedikit bias dalam diskusi ini. Menurut Anda, apa sebenarnya yang membuat kode C ++ berkinerja lebih buruk? Jika C memiliki peluang kinerja yang sama , apa yang setara dengan templat ekspresi, templat secara umum, komputasi waktu kompilasi pada tipe data non-intrinsik, functor? Dan menambahkan faktor biaya / pemeliharaan: RAII, kelebihan operator / fungsi, kontainer standar umum, utas standar, algoritme standar umum, referensi?
Sebastian Mach

8

Mempelajari C memaksa Anda untuk berpikir lebih keras tentang beberapa masalah seperti manajemen memori eksplisit dan implisit atau ukuran penyimpanan tipe data dasar pada saat Anda menulis kode.

Setelah Anda mencapai titik di mana Anda merasa nyaman dengan fitur C dan kesalahan fungsi , Anda mungkin tidak akan kesulitan belajar dan menulis dalam C ++.

Sangat mungkin bahwa kode C ++ yang Anda lihat tidak terlihat jauh berbeda dari C standar, tetapi itu mungkin karena kode tersebut tidak berorientasi objek dan tidak menggunakan pengecualian, orientasi objek, templat, atau fitur lanjutan lainnya.


8

Saya pikir mempelajari C terlebih dahulu adalah ide yang bagus.

Ada alasan mengapa kursus komputer masih menggunakan C.

Menurut pendapat saya ini untuk menghindari semua "keramaian" dari subjek kewajiban untuk meminta OOP membawa.

Saya pikir pemrograman prosedural adalah cara paling alami untuk mempelajari pemrograman terlebih dahulu. Saya pikir itu benar karena pada akhirnya itu yang Anda miliki: baris kode yang dieksekusi satu demi satu.

Banyak teks saat ini yang mendorong pendekatan "mengutamakan objek" dan mulai berbicara tentang mobil dan perpindahan gigi sebelum memperkenalkan array.


4
Sepertinya banyak kursus komputer dewasa ini menggunakan Java, yang memperburuk masalah yang Anda bicarakan.
Dima

2
Anda membuat poin yang sangat bagus. Selain menjadi terlalu rumit untuk bahasa pertama, C ++ untuk sebagian besar mendorong menyembunyikan interaksi tingkat rendah dengan sistem operasi dan memori yang penting untuk pelajaran ilmu komputer yang baik. Array harus diajarkan jauh sebelum benda.
Matt Joiner

1
Di sisi lain, jika Anda tidak buruk dalam matematika, pemrograman fungsional mungkin lebih alami, karena terlihat dan terasa dan berfungsi lebih akrab.
Sebastian Mach

2
"Ada alasan mengapa kursus komputer masih menggunakan C." Ya, karena sebagian besar kursus ilmu pengetahuan diajarkan dengan buruk.
Balapan Ringan di Orbit

8

Tidak.

Biasanya lebih berguna mempelajari C ++ karena lebih mirip dengan bahasa berbasis OO paling modern, seperti Eiffel atau C #.

Jika tujuan Anda adalah mempelajari C ++, pelajari C ++ standar modern terlebih dahulu. Tinggalkan mallocs di samping.


Tapi Steve Rowe ada benarnya ...


C ++ saat ini tidak lebih dekat dengan bahasa OO seperti C # atau Eifel.
einpoklum

7

Setelah mengamati orang-orang, yang telah mempelajari Java terlebih dahulu, berjuang dengan konsep pointer dan manajemen memori dalam C ++, saya akan mengatakan bahwa mempelajari C terlebih dahulu adalah ide yang bagus, untuk memahami kedua konsep ini, yang terisolasi dari kompleksitas C ++ lainnya fitur.


6

Dua sen saya:

Saya sarankan untuk belajar C dulu, karena:

  • itu adalah bahasa fundamental - banyak bahasa yang diturunkan dari C
  • lebih banyak platform yang mendukung kompiler C daripada C ++, - baik itu sistem tertanam, chip GPU, dll.
  • menurut TIOBE indeks C masih sekitar 2 kali lebih populer dari C ++.

3

Saya pikir c adalah bahasa pemrograman yang sangat bagus, kompak dan agak mudah dipelajari. tetapi jika Anda hanya ingin mempelajari c ++, mulailah dengan c ++. tetapi saya menyarankan Anda untuk mempelajari keduanya. dan jika Anda ingin melakukan itu; Saya pikir lebih baik memulai dengan c. seperti yang dikatakan sebelumnya: ini kecil dan agak mudah dipelajari. mungkin langkah yang bagus untuk bahasa pemrograman yang lebih kompleks seperti c ++. (karena c memberi Anda beberapa dasar)

semoga berhasil.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.