Pertanyaan C ++ sebagai bahasa pertama [tertutup]


Saya sudah belajar sendiri C ++ selama sekitar 4 bulan sekarang. Saya menikmatinya, dan saya pikir saya melakukannya dengan sangat baik. Namun, jawaban untuk pertanyaan saya membuat saya berpikir bahwa saya mungkin mengatur diri untuk jatuh.

Jadi, apa yang orang-orang di sini pikirkan tentang C ++ sebagai bahasa pertama untuk dipelajari? Dan apakah itu layak untuk saya lakukan sekarang karena saya telah memulai dengan baik?


31


asal


Jawaban:


Saya tidak mengerti mengapa orang masih membingungkan "bahasa" dengan "perpustakaan". (Mengacu pada jawaban yang terhubung.) Jadi bagaimana jika C ++ tidak memiliki konsep audio "asli"? Ada banyak pustaka di luar sana, yang dapat Anda gunakan dengan C ++, dan yang mungkin lebih sesuai dengan kebutuhan spesifik Anda daripada "apa pun", "perpustakaan pemrosesan standar" perpustakaan audio bisa.

</ rant>

C ++ adalah bahasa yang sulit. Ada orang lain yang lebih mudah dipelajari. Saya tidak akan pernah berdebat tentang itu.

Tapi C ++ adalah salah satu yang paling mudah kuat bahasa di sekitar. Ini bisa sangat efisien, dan sangat elegan, sekaligus. Tentu saja, tidak ada yang menghalangi Anda untuk membuat segala macam kekacauan.

Jika saya merekomendasikan C ++ sebagai bahasa pemrograman pertama? Sebenarnya, saya tidak tahu apa-apa. Orang lain mungkin melindungi Anda dari membuat kesalahan, dan membuat keberhasilan awal (misalnya aplikasi GUI pertama Anda) lebih mudah. Tetapi jika Anda membangun fondasi C ++, Anda akan selalu berada di pijakan yang aman. Anda mungkin tidak perlu memilih bahasa lain sama sekali, sebenarnya. Tetapi jika Anda ingin / harus, Anda akan menemukannya dengan sangat mudah.

Coder C ++ yang berpengalaman dapat melakukannya mis. Java dengan kecepatan penuh dalam hitungan minggu. Sebaliknya? Banyak, banyak lebih sulit.


Bertahun-tahun kemudian, saya merasa seperti saya harus mengubah jawaban ini. Karena anak-anak saya meminta saya untuk mengajar mereka, saya mulai melakukannya. Saya menemukan diri saya sebenarnya tidak dimulai dengan C ++ ... karena saya menunjukkannya BF pertama. Sama sekali tidak ada waktu, mereka mengerti tentang memori dan petunjuk. Kemudian saya melanjutkan dengan C ++, dan kami sangat menikmati diri kami sejauh ini.


Namun beberapa tahun kemudian, dan saya merasa saya benar-benar harus menambahkan ceramah yang luar biasa ini oleh Kate Gregory dari CppCon 2015 untuk jawaban ini:

Berhenti Mengajar C.


72



Biarkan saya begini:

Saya mengambil dan lulus dengan 94%, Sertifikasi Sun Java tanpa pernah menyusun garis Jawa (Itu sembilan tahun yang lalu). Saya bisa melakukan ini, karena saya tahu C ++ dengan sangat baik.

Pada pekerjaan profesional pertama saya, saya dipekerjakan sebagai penguji. Pada hari kedua saya, saya diberi tahu bahwa saya dapat memprogram daripada menguji, jika saya belajar cukup PowerBuilder agar berguna - dalam dua minggu. Karena saya tahu C ++ dengan sangat baik, PowerBuilder itu mudah.

C ++ adalah keras, tetapi jika Anda mempelajarinya dengan baik - baca Stroustrup Bahasa Pemrograman C ++, lakukan juga latihan, baca nya Desain dan Evolusi C ++, baca buku C ++ Faq dan Meyers dan buku Herb Sutter, baca comp.lang.c ++. dimoderasi, baca Coplien's C ++ Advanced Pemrograman Style dan Idiom tidak peduli apa bahasa OO yang ingin Anda kode - jika Anda mempelajarinya dengan baik, setiap bahasa OO lainnya mudah.

Belajar C ++ adalah persiapan yang sangat baik untuk belajar kode. (Dan Anda akan menjadi programmer C yang adil juga, tetapi baca K & R untuk menjadi programmer C yang baik.)

Oh Dan C ++ benar-benar menyenangkan untuk diprogram, banyak kurang verbose dari Java, dan jauh lebih fleksibel. Anda benar-benar bertanggung jawab, bukan IDE atau bahasa. Anda bisa menembak kaki Anda sendiri, tetapi Anda akan bertanggung jawab untuk melakukannya. Dan baca buku Alexandrescu begitu Anda tahu template, itu akan memukau dan tercengang dan menyenangkan Anda.

C ++ adalah menyenangkan. Baca "Pola Template Berulang Berangin": terlihat seperti ini

template< class  T> struct base {};

struct derived: base< derived > {};

Ya, Anda benar: itu adalah kelas yang berasal dari basis yang templated pada kelas yang diturunkan. Sekarang kedengarannya tidak jelas dan konyol, tetapi ada banyak kegunaan yang bagus untuk itu, dan hanya beberapa hari saya memukuli kepala saya karena Anda tidak dapat melakukan ini di Jawa (karena Java menggunakan penghapusan tipe, bukan templat, untuk generik), tetapi jika saya bisa menggunakannya, saya dapat menyimpan banyak sekali kode yang diulang dalam banyak kelas.

Ada begitu banyak lagi di C ++, dan jika Anda membatasi diri ke Java atau .Net, Anda tidak akan pernah menemukannya.


37



C ++ bukanlah bahasa yang mudah untuk dipelajari sebagaimana dicatat oleh orang lain, tetapi ada beberapa alasan yang menjadikannya tempat yang layak untuk memulai:

  • itu tidak mengikat Anda ke paradigma pemrograman tertentu (misalnya, Java dan OOP) sehingga Anda dapat bereksperimen dengan teknik yang berbeda dengan mudah
  • C ++ tidak memiliki lonceng dan peluit sehingga Anda dapat berkonsentrasi untuk membuat blok bangunan jika Anda ingin tahu bagaimana mereka dibangun
  • karena ini adalah bahasa dan bukan platform, Anda dapat memilih perpustakaan atau pustaka yang paling sesuai dengan tugas di tangan atau gaya pemrograman yang Anda pilih (misalnya, memilih sesuatu seperti Poco untuk nuansa Javaesque, KARTU AS untuk gaya awal OO, dll.)
  • itu adalah bahasa pemrograman tujuan umum, bukan platform (harus mengatakan itu dua kali)

Triknya adalah mempelajarinya dengan hati-hati dan benar pada kali pertama. Saya tahu bahwa saya, seperti banyak orang lain, telah berjuang dengannya dengan mempelajarinya sebagai "C + objek" sebelum benar-benar memahaminya. Ini adalah bahasa yang sulit dipelajari. Saya akan merekomendasikan mencari mentor C ++ berpengalaman untuk melampirkan diri Anda serta membaca banyak buku "sangat dianjurkan" tentang bagaimana dan bagaimana tidak menulis C ++. Hindari belajar kebiasaan buruk di depan.

Untuk daftar bacaan awal tanpa urutan tertentu:

  • "Accelerated C ++" oleh Koenig dan Moo
  • "Effective C ++ / STL" oleh Scott Meyers
  • "Konstruksi Perangkat Lunak Berorientasi Objek" oleh Bertrand Meyer
  • "Expert C Programming" oleh Peter van der Linden
  • "Tutorial STL dan Panduan Referensi" oleh Musser, Derge, dan Saini
  • "Perpustakaan Standar C ++" oleh Josuttis

14



C ++ akan (jauh?) Lebih mudah didekati jika Anda belajar "C ++ modern" daripada "C ditambah beberapa hal baru". Misalnya, gunakan std::string, std::vector<>, dan unique_ptr<> / shared_ptr<> bukan string C-style, array, dan pointer.

Sudah disebutkan Accelerated C ++ oleh Koenig dan Moo adalah satu buku yang melakukan hal ini.


11



Banyak dukungan untuk c ++ di sini, tetapi saya harus tidak setuju. Setiap bahasa memiliki kelebihan dan kekurangan (beberapa mencapai keseimbangan yang lebih baik dari yang lain, tentu saja).

Itu dikatakan, untuk bahasa pertama, saya yakin kebanyakan orang akan belajar bagaimana cara memprogram lebih efektif dengan bahasa yang a) tidak memiliki siklus edit-compile-run (yang secara inheren lebih lambat bagi Anda sebagai programmer b) memiliki pengumpulan sampah c) memiliki intropeksi waktu proses yang baik. Lebih baik lagi jika ada evaluator interaktif juga, untuk dipusingkan.

Pengembangan (jika bukan waktu proses) hampir selalu lebih cepat dalam bahasa-bahasa seperti itu, ada lebih sedikit hal yang membuat Anda tersandung, dan ada alat yang lebih baik untuk membantu menemukan apa yang salah ketika itu terjadi.

Yang tidak mengatakan belajar liku-liku manajemen memori dalam bahasa seperti c + + bukan sesuatu yang layak dilakukan, dll, dll, itu hanya bukan tempat yang benar-benar ingin Anda mulai.

Masalah lain dengan c ++ adalah bahwa untuk semua kepraktisannya ukuran tipis itu ditambahkan ke fakta itu memiliki bagian yang tidak kompatibel yang dapat menyebabkan masalah halus yang paling dihindari sebagai pemula.

diedit: John D membawa titik dalam komentar bahwa beberapa orang yang belajar pertama pada bahasa GC'd (yang tidak terbatas pada "scripting" bahasa) tidak pernah belajar pointer kemudian. Ini adalah ikan merah. Beberapa orang gagal mempelajari segala macam hal, untuk berbagai alasan. Saya mempertahankan bahwa mengkhawatirkan pointer adalah gangguan ketika Anda mempelajari dasar-dasarnya. Pada titik tertentu Anda mungkin perlu belajar tentang manajemen memori manual, tetapi pada dasarnya tidak penting untuk melakukan hal ini. Atau lebih tepatnya, keuntungan yang diperoleh dengan menghindari ini lebih penting daripada biaya.

Biar saya jelaskan, saya tidak mengatakan bahwa c ++ adalah pilihan yang inferior untuk bahasa pertama karena tidak memiliki koleksi sampah. Itu hanya salah satu dari banyak masalah yang menghalangi pembelajaran dasar-dasar pemrograman dengan baik. Masalah sebenarnya adalah bahwa itu adalah bahasa rumit yang besar, dengan quirks di semua tempat dan bahkan inkonsistensi internal (misalnya pointer dan pengecualian tidak bermain bersama dengan baik). Tentu saja semua ini dapat dikelola dengan baik dan Anda dapat belajar praktik yang baik agar tidak mendapat masalah.

Namun, semua ini tidak akan masuk akal untuk orang baru pada awalnya. Jadi, sebagian dari pembelajaran itu akan berakhir dengan "lakukan dengan cara ini, bukan seperti itu". "Mengapa?" "Karena saya bilang begitu --- Anda tidak akan mengerti detailnya". Sangat awal yang baik.

Keuntungan besar untuk belajar bahasa pertama meskipun mungkin dalam menghindari siklus edit-compile-run (dalam bentuk apapun) dan memiliki introspeksi yang baik.


10



C ++ sebagai bahasa pertama bisa menjadi baik jika Anda memiliki guru yang baik. Tapi itu adalah dinding yang cukup tinggi untuk skala untuk pertama kalinya, tetapi setelah Anda mengukur dinding itu, bahasa lain yang serupa menjadi sangat mudah.

Jadi ya, lanjutkan.


5



bahasa apa pun adalah bahasa pertama yang baik (dalam alasan, bukan sesuatu seperti lolcode)

setelah Anda memahami cara kerjanya, menjadi lebih mudah untuk menggunakan bahasa lain.


5



Saya pikir bahwa C ++ mungkin bukan bahasa yang paling mudah digunakan untuk dikembangkan untuk pengatur waktu pertama, tetapi itu juga tidak akan memegang tangan Anda dan selalu membawa Anda menuju terlalu banyak kebiasaan buruk (saya tidak mengatakan apa pun, hanya tidak terlalu banyak).

C ++ adalah bahasa pengantar yang menjadi dasar program kuliah universitas saya dan di situlah kami mempelajari semua dasar-dasar dan tentang struktur data dan algoritme sebelum bercabang ke dalam bahasa pilihan kami.


4



Bagi saya belajar C ++ kebanyakan tentang belajar bagaimana TIDAK untuk menembak diri sendiri di kaki. Ini bisa menjadi latihan yang menyakitkan karena dengan C + + selalu ada kasus tepi lain yang akan membuat pistol itu pergi karena menunjuk pada kuku Anda.

Tembakannya adalah, jika Anda berhasil menyelesaikan latihan, Anda akan menjadi pengembang yang lebih baik untuk itu, dan Anda akan dapat melihat peluang pemotretan di masa depan sebelum itu terjadi, dalam bahasa apa pun yang akhirnya Anda gunakan.

Juga, ketika beberapa perpustakaan bagian ketiga memotret itu sendiri di kaki, Anda akan lebih baik diposisikan untuk grok apa yang salah daripada yang lain yang belum berulang kali menembak kaki mereka selama berbulan-bulan.

Saya akan mengatakan tetap dengan C ++, itu bukan buang-buang waktu, bahkan jika Anda tidak pernah menulis satu baris kode produksi C ++.

Semoga ini membantu :)

BW


4



Lanjut. C ++ masih banyak digunakan dan bahasa untuk jenis pekerjaan tertentu. Jadi itu tergantung pada apa yang ingin Anda lakukan - pemrograman sistem dilakukan di C ++ atau C, bisnis dan aplikasi web cenderung dilakukan dalam hal-hal lain.

Saya sangat menyarankan Anda menjelajahi bahasa lain juga. Python adalah bahasa kedua saya, misalnya; mungkin memberi Anda wawasan baru tentang pemrograman berorientasi objek dan fungsional dan menjadikan Anda programmer C ++ yang lebih baik (dan programmer yang lebih baik secara keseluruhan).

Saya percaya terpapar dengan banyak bahasa (dan, lebih penting lagi, untuk banyak paradigma pemrograman yang berbeda) akan menjadikan Anda seorang programmer yang lebih baik secara keseluruhan. Lihatlah Haskell, Prolog, Lisp, dan varian Assembler, setidaknya.


3