Apakah C ++ cocok sebagai bahasa pertama? [Tutup]

26

Sebuah perguruan tinggi setempat mengajarkan C ++ kepada mahasiswa tahun pertama (16 tahun) tanpa pengalaman pemrograman sebelumnya.

Sebagai bahasa pemrograman pertama, apakah C ++ cocok?

Ed James
sumber
56
Bahasa apa pun bisa menjadi bahasa pertama. Itu tidak masalah.
Adam Lear
8
Ini mungkin menarik bagi Anda - joelonsoftware.com/articles/ThePerilsofJavaSchools.html
Craige
19
@Anna Lear: Tentu saja, bahasa apa pun bisa menjadi bahasa pertama, tetapi itu tidak memenuhi syarat C ++ sebagai bahasa pertama yang baik. Jika jawaban Anda adalah Jawaban yang sebenarnya, saya akan memilihnya sebagai tidak membantu.
Ed James
6
@Doug: Saya pemrograman C ++ untuk hidup ... apa maksud Anda?
Matthieu M.
9
@Dough - 70% proyek komputasi saat ini melibatkan perangkat lunak penulisan untuk sistem tertanam dan perangkat mikro. Tebak bahasa apa yang digunakan untuk proyek-proyek itu? Tebak siapa yang paling siap untuk posisi entry level? Tentu saja bukan kuda poni satu-trik Java atau .NET. Kedengarannya keras, tetapi sekolah telah melakukan penghinaan besar terhadap seluruh generasi lulusan CS dengan melatih mereka hanya untuk 30% dari pasar kerja pemrograman. Kami memiliki programmer yang terlalu banyak untuk sektor aplikasi (30%) dan kami memiliki kekurangan di sektor sistem (70%). Angka-angka itu tidak ke mana-mana. Peluang karir masa depan? Ya benar.
luis.espinal

Jawaban:

61

Tegas No .

Untuk tujuan apa pun yang Anda pikirkan untuk siswa, bahasa lain atau urutan bahasa akan lebih cepat dan lebih baik. Contohnya.

"Siswa perlu memahami konsep tingkat rendah."

Pengkodean "tingkat rendah" tidak terdiri dari mendapatkan objek dari new, mengumpankannya kembali delete, dan kadang-kadang memiliki penunjuk yang menunjuk ke suatu tempat yang tidak seharusnya. Fungsi, kelas, dan templat bukan level rendah. RAII, 12 cara untuk menggunakan const, std::ostream::operator<<, protecteddan newtidak konsep tingkat rendah. Hal-hal itu memiliki implikasi tingkat rendah dan Anda melewatkannya selama berbulan-bulan atau sampai kelas masa depan dan mengajar pegunungan semantik C ++.

Saya sarankan assembler dengan lingkungan dan materi pengajaran yang baik seperti MIPS atau MMIX. Jika Anda sedang terburu-buru, ajarkan C dengan jalan memutar untuk setidaknya melihat hasil assembler. Ini akan memberi Anda semua pemahaman tingkat rendah yang dilakukan C ++, dan kemudian beberapa, lebih cepat.

"Siswa perlu memahami orientasi objek."

Orientasi objek yang dibangun ke dalam C ++ adalah cara yang terlalu rumit untuk mengajarkan konsep OO, atau hampir semua konsep tingkat tinggi lainnya. Lihat C ++ FAQ untuk daftar alasan yang bagus dan panjang mengapa. Anda juga harus menekan semua hal itu, yang akan memakan waktu sangat, sangat lama dengan programmer baru; atau Anda harus melewatkan banyak hal, meninggalkan programmer baru dalam gelap - secara efektif, tidak benar-benar mengetahui C ++!

Saya sarankan belajar bahasa tingkat tinggi yang lebih sederhana dengan objek terlebih dahulu (Python, Ruby, Squeak, Common Lisp, Racket), jika Anda harus mengajar C ++ sama sekali. Selain itu, pelajari polimorfisme sebagai konsep yang terpisah dari OO dengan mengunjungi bahasa fungsional.

"Siswa perlu memahami templat dan templat pemrograman dengan templat."

Tidak ada yang benar-benar menanyakan ini, tetapi saya berharap mereka akan melakukannya. C ++ memiliki templat yang bagus dan STL keren, tetapi mereka seharusnya tidak menjadi prioritas yang cukup tinggi untuk mengajar C ++ terlebih dahulu. Mengajarkan sistem tipe OCaml atau Haskell dan kemudian retrofit konsep-konsep itu mungkin lebih cepat.

"Siswa perlu belajar pemecahan masalah."

Ya, Anda mendapatkan ini dalam bahasa apa pun, dan Anda mendapatkan lebih banyak jika itu dalam hampir semua bahasa selain C ++ karena ada jauh lebih sedikit bagasi. Sekali lagi, lihat C ++ FAQ untuk daftar semua hal yang akan dipelajari siswa alih-alih keterampilan memecahkan masalah.

"Semua hal di atas, dan kita hanya perlu menggunakan satu bahasa." atau "Majikan menginginkannya." atau "Kita membutuhkan bahasa gaya-C." atau...

Ajarkan lebih dari satu bahasa.

Gagasan bahwa Anda menghemat waktu atau energi dengan mengajar atau belajar hanya satu bahasa sama sekali konyol. Ini didasarkan pada gagasan bahwa mempelajari bahasa tertentu membutuhkan waktu X man bulan ( HINT! HINT! ) Di mana X adalah angka tunggal atau satu angka per bahasa. Ini hampir identik dengan gagasan bahwa Anda dapat menghemat waktu dan uang dengan melewatkan semua 'persyaratan' dan 'pengujian' sampah.

Adapun beberapa sintaksis, Anda berbahaya melumpuhkan siswa jika Anda mengajar mereka untuk mengharapkan sintaks C dalam setiap bahasa dengan membuat mereka sangat bias terhadap bahasa lain.

Hampir semua jalur lebih cepat dan lebih baik daripada memulai dengan C ++. Mempelajari bahasa tingkat tinggi yang sederhana dan kemudian C ++ akan lebih cepat. Mempelajari assembler dan kemudian C ++ akan lebih cepat. Apa pun selain C ++ akan membuat siswa di sana lebih cepat dan mereka akan lebih tahu cara mem-boot. Hanya saja, jangan mengajarkan C ++ terlebih dahulu.

Jesse Millikan
sumber
4
Jawaban bagus! Memang, banyak fitur C ++ sama sekali tidak terkait dengan pemrograman tingkat rendah.
Marco Mustapic
7
+1, jawaban yang sangat bagus. Memang benar bahwa terkadang tingkah C ++ salah disamakan dengan "tingkat rendah". Anda ditautkan ke C ++ FAQ, tetapi saya juga akan merekomendasikan orang-orang untuk melihat C ++ FQA (atau "Jawaban yang Sering Diajukan": P)
Andres F.
2
Wow. Itu mengingatkan saya pada Java IAQ ...
Jesse Millikan
Sangat setuju. Bahkan Malbolge akan lebih baik daripada C ++ untuk pemula.
sayap kanan
2
Reservasi saya satu-satunya - Anda dapat mengajar banyak tanpa masuk ke detail yang sebagian besar hanya relevan untuk orang yang mengembangkan perpustakaan. Selama Anda membuatnya jelas bahwa Anda hanya melakukan C ++ dasar ... tapi sekali lagi, apa yang telah Anda ajarkan kepada siapa pun?
Steve314
54

Tidak, C ++ adalah bahasa yang sulit bahkan untuk pengembang C ++ yang berpengalaman. Bahkan untuk algoritma paling sederhana Anda harus menjelaskan banyak seluk-beluk bahasa. Pertimbangkan contoh Hello World:

#include <iostream>

int main()
{
  std::cout << "Hello World!" << std::endl;
}

#includePerintah apa itu ? Apa std::cout. Mengapa ::? Apa <<? Ohhh, ini operator yang kelebihan beban! Apa itu operator yang kelebihan beban? Sooo, untuk ints, memang sedikit bergeser, tetapi untuk apa pun std::cout, itu output barang ke konsol. Ohhh, std::coutadalah stream, dan stream memiliki kelebihan <<dan >>operatornya.

Mari kita lihat contoh yang sama dengan Python:

print("Hello World!")

Itu saja, mari kita buat kode beberapa algoritma.

Marco Mustapic
sumber
15
Python akan cocok untuk siswa kelas tujuh. Seorang mahasiswa dapat lebih memahami.
Gulshan
13
Tentu, tetapi kita berbicara tentang bahasa pertama. C ++ dikenal sulit dipelajari dan dikuasai, dibandingkan dengan bahasa lain. Mengapa menggunakannya untuk mengajar pemrograman? Seorang siswa dapat belajar C ++ nanti, ketika dia tahu beberapa dasar pemrograman.
Marco Mustapic
8
Anda bahkan tidak menyebutkan pencarian argumen-bergantung pada << :)
MetricSystem
6
Anda tidak perlu benar-benar tahu segalanya untuk memulai dengan bahasa. Cout << terserah; "hanya bekerja", Anda tidak perlu masuk ke detail seluk-beluk sampai Anda menutupi kelebihan operator dll nanti.
Colen
6
Saya akan mengambil Python lebih dari C ++ setiap hari dalam seminggu sebagai bahasa pengantar.
jprete
21

Ini mungkin bukan bahasa pertama yang baik: sintaksis kompleks, banyak aturan, bahasa lama, manajemen memori rawan kesalahan. Lebih baik mengajari siswa Anda sesuatu yang lebih OO seperti Smalltalk, atau sesuatu yang lebih baik untuk diprogram dengan seperti Python, atau sesuatu yang fungsional seperti Haskell.

Mereka dapat belajar C ++ di kemudian hari (jika mereka tidak bisa menahannya), setelah mereka mempelajari bahasa yang lebih baik.

Andres F.
sumber
5
Haskell sebagai bahasa pertama akan menjadi percobaan yang menarik.
Larry Coleman
@Larry, program CS Cambridge University mengajarkan SML sebagai bahasa pertama.
Peter Taylor
1
Pemrograman fungsional memutar otak Anda - saya tahu MIT memulai dengan Skema sejak awal, tetapi saya senang saya tidak memulai pemrograman fungsional sampai setelah dua tahun hybrid prosedural / gaya OO di sekolah.
justkt
11
@justkt: Semua bahasa memutar otak Anda. Itu hanya masalah bagaimana Anda ingin itu diputar.
David Thornley
+1, tapi saya tidak akan memberi label kategorikal bahasa selain C ++ sebagai "lebih baik."
greyfade
18

Jawaban singkat: Ya!

Saya akan mengatakan bahwa bahasa apa pun adalah awal yang cocok tetapi terutama C ++ (atau equivivalent). Saat ini C # dan Java adalah bahasa utama yang digunakan dan pemrograman dengan ini Anda dengan cepat belajar untuk bersandar pada API dan IDE tetapi dengan C ++ Anda mendapatkan kesempatan untuk belajar pemrograman dari bawah ke atas, termasuk optimasi kinerja, dll.

Tidak pernah merupakan ide yang buruk untuk mempelajari dasar-dasar pemrograman, perulangan dan penyortiran sebelum Anda hanya bergantung pada bahasa bawaan .Sort ();

Mantisen
sumber
11
Looping dan sortir, ya. Anda dapat melakukannya dengan bahasa apa pun. Tetapi mengapa mulai bekerja dengan pointer dan sintaks aneh ketika Anda bisa menghindarinya? Anda dapat mempelajari semua hal itu nanti, saat Anda memiliki lebih banyak pengalaman pemrograman.
Marco Mustapic
4
@Marco: buku teks pengantar Stroustrup "Programming: Principles and Practice using C ++" memperkenalkan petunjuk di sekitar tengah buku. Anda dapat melakukan banyak hal dalam C ++ tanpa memperkenalkan pointer.
David Thornley
4
“Tidak pernah ide buruk untuk mempelajari dasar-dasar ... sebelum ...” apakah Anda memiliki setiap penelitian untuk mendukung klaim ini up? Saya tahu bahwa banyak orang pintar menggembar-gemborkan itu sebagai pengetahuan umum bahwa “bottom up” adalah satu-satunya cara mengajar yang benar, tetapi ini adalah poin yang sangat kontroversial dan satu-satunya (yang memang sangat terbatas) penelitian didaktik yang saya tahu menunjuk pada kesimpulan yang berlawanan.
Konrad Rudolph
1
@ David: Masalahnya adalah, melakukan "banyak hal dalam C ++" tanpa petunjuk lebih buruk. Tanpa pointer, semua objek Anda dideklarasikan di stack, yang merupakan salah satu ide pemrograman terburuk yang pernah ada. Jenis nilai dan pewarisan / polimorfisme tidak bercampur, dan mencoba mencampurnya mengarah ke seluruh kategori kesalahan yang tidak ada dalam bahasa yang dirancang lebih baik.
Mason Wheeler
9
Ya Tuhan, tidak! Mengapa membakar pasokan siklus otak terbatas pada keistimewaan C ++ yang tidak perlu? Mengapa fokus pada hal-hal tingkat rendah yang tidak relevan, seperti manajemen memori, ketika tujuannya adalah untuk mempelajari konsep dasar dalam pemrograman? Mengapa melompat ke ujung yang dalam?
Maglob
14

Sebenarnya saya percaya itu mungkin pilihan yang baik sebagai bahasa pertama karena alasan yang sangat praktis: Setelah mempelajari C ++ bahasa lain yang Anda temui akan terasa seperti angin untuk belajar.

ennuikiller
sumber
10
Dengan semua kredit kepada Dijkstra, praktis tidak mungkin untuk mengajarkan pemrograman yang baik kepada siswa yang telah memiliki pengalaman sebelumnya dengan C ++; sebagai programmer potensial, mereka dimutilasi secara mental di luar harapan regenerasi. ;)
Mason Wheeler
3
Mereka harus menghapus banyak kebiasaan buruk dari C ++. Untuk menggunakan contoh lain, apakah mengetahui assembler menjadikan Anda seorang programmer Java yang lebih baik? Saya akan mengatakan TIDAK.
Andres F.
16
@ Andrés F .: Tidak setuju dengan itu. Mengetahui assembler menjadikan Anda seorang programmer yang lebih baik apa pun yang Anda tulis, karena dengan begitu Anda dapat memahami apa yang sebenarnya terjadi.
Mason Wheeler
2
@Andres: Saya telah melihat terlalu banyak programmer Java / C # datang ke bahasa lain dan menjejalkan semuanya menjadi objek ... mereka tidak memiliki banyak pengalaman.
Matthieu M.
3
@Andres F. - Dalam 12 tahun saya bekerja di Java, saya telah menemukan bagian saya dari programmer Java yang benar-benar payah karena tidak memiliki semacam paparan pada hal-hal seperti alokasi sumber daya, RAII, tidak tahu bagaimana memprogram aplikasi yang ramah gc, dll. Mengetahui perakitan dan mengetahui bahasa yang dikompilasi tanpa dukungan sampah otomatis dan dengan dukungan untuk paradigma selain OO (C, C ++, Ada, atau hampir semua bahasa yang dikompilasi pada keluarga Algol) mengajari Anda cara menulis sistem besar dan efisien di Jawa, C #, Python, sebutkan saja. Plus, model objek di C ++ sama sekali tidak mirip dengan Java.
luis.espinal
10

Saya belajar sendiri C ++ ketika saya berusia 15-16.

Lebih baik menyerahkan keajaiban kepada orang lain dan mempelajari sendiri hal-hal dalam diri Anda.


Terus terang, jika Anda tidak bisa mengetahui sintaks dan semantik entry-level C ++, Anda tidak terlalu mahir dalam komputer. Tidak sesulit itu. Tidak ada alasan bagus untuk menghindari "C with Classes".

Jika Anda mengharapkan siswa mulai bekerja pada pemrograman metaplat, menyimpulkan panggilan polimorfik, dan mengurai beberapa hierarki warisan - itu konyol untuk kelas level entri untuk jenis bahasa apa pun yang Anda gunakan.

Ada kecenderungan yang sangat buruk untuk ingin menyembunyikan seluk-beluk pemrograman untuk siswa. Itu tidak berakhir dengan baik (cf esai Java Schools Spolsky). Orang-orang itu berakhir di DailyWTF jika mereka tidak dapat meluruskan kepala. Abstraksi bocor, dan ketika (bukan jika) abstraksi bocor, itu lebih buruk daripada harus menghadapinya. Saya telah bekerja sebagai TA untuk siswa entry level C ++. Entah hal-hal yang harus disembunyikan sepanjang jalan, atau mereka harus dibawa ke dalam cahaya untuk diperiksa. Sihir adalah musuh pembelajar.

Jika saya harus merekomendasikan bahasa awal yang dikompilasi ke kode mesin, varian Pascal mungkin akan menjadi pendekatan terbaik. Itu memiliki pendekatan yang lebih teratur dan terstruktur daripada keluarga C dari apa yang saya ingat.

Paul Nathan
sumber
1
@ Id: Tidak juga. Saya telah menguasai If dan Goto dalam QBASIC, dan hanya itu saja. Pointer, array, fungsi, kelas, dll semuanya ada di masa C ++ saya. Rekursi juga tidak bisa dipahami.
Paul Nathan
5
Tunggu, tidak ada yang mengharapkan seseorang untuk mengerjakan proyek menggunakan C ++ tanpa terlebih dahulu memahami C ++! Itu memang akan mengarah pada kode yang layak untuk TheDailyWTF. Tetapi bertentangan dengan klaim Anda, bukan hal yang sepele untuk mempelajari C ++ (dan juga bukan "C dengan kelas"). C ++ memiliki sintaks dan tata bahasa yang sangat besar, berbelit-belit, dan terkadang tidak sensis, serta tak terbatas kata kunci dan aturan. Ini adalah bahasa yang mengerikan untuk memulai. Sebagai bahasa pengajaran, itu mengerikan karena mengkondisikan siswa untuk berpikir bahwa kekurangan C ++ adalah alami dan tidak dapat dihindari dalam dunia pemrograman.
Andres F.
1
Andr: Anda bersikeras dikotomi palsu: "~ C ++ atau All C ++". Itu salah.
Paul Nathan
1
@ Paul: cukup adil. Tetapi pertimbangkan ini: bahkan sintaks & tata bahasa dari C ++ yang disederhanakan berbelit-belit karena harus mendukung semua fitur dari bahasa lengkap. Jadi Anda sudah berkompromi dalam menggunakan bahasa yang jelek, bahkan jika Anda mengajarkannya dalam bentuk yang lebih sederhana. Saya berasumsi Anda tidak hanya coding dalam C dengan gula sintaksis (alias "C dengan kelas"), karena dalam hal itu Anda lebih baik dilayani oleh plain C!
Andres F.
2
@ Andr: Tidak juga. C ++ menawarkan penyederhanaan sintaksis yang lebih dari C89. Lebih jauh, untuk tujuan entry level, segalanya sangat mudah untuk semua kasus yang dapat saya pikirkan ...
Paul Nathan
8

Saya akan mengatakan 'tidak' - Saya memiliki hasrat dan keinginan untuk belajar pemrograman, dan langsung memasuki tahun intro saya di perguruan tinggi dengan C ++ segera. Ditambah dengan seorang guru yang mengajar bahasa C ++ seolah-olah itu adalah bahasa lain (konsep yang masuk akal bagi mereka, belum tentu konsep bahasa atau aplikasi dunia nyata), dan proyek yang dilemparkan kepada kami segera setiap minggu, saya jatuh dan terbakar bersama dengan setengah dari kelas. Pada saat saya bahkan dapat mencerna, bereksperimen dan menerapkan apa yang diajarkan kepada saya, saya bergumul dengan pekerjaan rumah proyek yang merangkap sebagai ujian. Saya berpendapat bahwa itu lebih dari 200 level saja daripada 100.

Saya benar-benar mencoba yang terbaik. Saya tidak meminta simpati, saya tahu itu akan menjadi tantangan, tetapi guru itu bahkan tidak mau membantu saya. Hanya menyuruh saya pergi membaca buku pelajaran, seperti yang telah saya lakukan.

Saya berpendapat (dan beberapa orang akan tidak setuju) bahwa Ruby atau Python adalah bahasa yang jauh lebih baik untuk memecah seseorang ke dunia pemrograman. Bersihkan, ringkas, mudah dibaca, sintaks yang lebih jelas.

Kevin
sumber
8
Bahasa apa pun adalah bahasa pertama yang buruk jika diajarkan dengan buruk.
David Thornley
3
@ David Thornley: namun, meskipun diajarkan dengan benar, beberapa bahasa merupakan pilihan yang buruk sebagai bahasa pertama. Misalnya, Cobol.
Andres F.
Saya setuju, saya merasa bahwa dengan guru yang lebih baik, yang peduli untuk melibatkan orang lain dan tidak hanya melewati materi pelajaran dengan kecepatan kilat, hasilnya mungkin berbeda. Itu terlalu cepat untukku.
Kevin
@ Andrés F .: Saya tidak setuju dengan itu. Namun, akun Kevin adalah tentang guru yang buruk, dan guru yang buruk dapat mengacaukan Python atau Skema sebagai bahasa pertama (dua nominasi saya untuk bahasa pertama yang baik).
David Thornley
2
@ Chris: Saya sudah memprogram dalam Cobol dan saya kasihan :)
Andres F.
8

Tidak.

Sebagai bahasa pengajaran, C ++ hanya sedikit lebih baik dari C, yang merupakan salah satu bahasa pengajaran terburuk di sekitar. Ini memperkenalkan banyak kompleksitas di muka, beberapa bagian dari bahasa ini sangat tidak intuitif, dan sebagian besar waktu Anda belajar lebih banyak tentang C ++ daripada tentang pemrograman pada umumnya.

Itu bukan untuk mengatakan bahwa C ++ (atau C) adalah bahasa yang buruk, atau tidak layak untuk dipelajari; Hanya saja ada bahasa pengajaran yang lebih baik tersedia, seperti Python.

John Bode
sumber
1
C adalah bahasa yang sulit untuk mengajar, tetapi tentu saja di antara yang terburuk. COBOL dan Java menganggap kue itu sebagai yang terburuk, jauh lebih buruk daripada C. Hal baik tentang C adalah Anda harus berurusan dengan logam bagian dalam di bagian depan (tanpa harus mempelajari assembler). Orang-orang telah berhasil diajari dengan C sebagai bahasa utamanya. Ada pilihan lain yang lebih elegan, tentu saja, seperti Python atau Ruby (atau bahasa apa pun yang multi-paradigma dan yang tidak perlu mendorong OO di depan bahkan untuk tugas yang paling sederhana sekalipun.) C bukan salah satu pengajaran terburuk pilihan, bukan dengan tembakan panjang.
luis.espinal
1
Secara marginal lebih baik? Bagaimana menurut Anda? C ++ mengambil semua yang buruk tentang C dan membangunnya !
Mason Wheeler
1
@MasonWheeler: Terutama karena C ++ menyediakan stringtipe data jujur ​​kepada Tuhan yang membebani operator seperti +,, =dan ==untuk melakukan hal-hal yang lebih atau kurang diharapkan siswa, dibandingkan dengan bagaimana pemrosesan string perlu dilakukan dalam C. Oleh karena itu "secara marginal" . Saya tidak akan merekomendasikan baik sebagai bahasa pengajaran.
John Bode
7

Ada dua jenis penting pendidikan pasca-sekolah menengah: universitas dan sekolah perdagangan. Perbedaannya terletak pada apa yang ingin Anda siapkan setelah lulus. Di bidang otomotif, apakah Anda akan menjadi mekanik atau insinyur mekanik.

Yang sedang berkata, C + + adalah bahasa pertama yang bagus jika Anda ingin menjadi seorang insinyur, dan yang buruk jika Anda ingin menjadi setara pemrograman mekanik.

Kelas intro tentang C ++ akan menghabiskan banyak waktu berbicara tentang tipe data, definisi, deklarasi, pointer, alokasi memori, dan sebagainya. Ini adalah fondasi yang bagus jika Anda bermaksud menghabiskan beberapa semester membangun untuk dapat melakukan sesuatu yang bermanfaat, tetapi ingin tahu bahwa begitu Anda sampai di sana Anda memiliki fondasi untuk menangani tingkat kerumitan apa pun.

Di sisi lain, jika Anda ingin dapat melakukan sesuatu yang bermanfaat lebih cepat, tetapi tidak keberatan jika domain dan kompleksitasnya terbatas, maka menghabiskan semua waktu itu pada konsep-konsep tingkat rendah di depan akan menjadi sia-sia. Ada banyak programmer yang dapat menulis validator bentuk html yang bagus, tetapi tidak memiliki petunjuk bagaimana cara mendesain driver perangkat.

Karl Bielefeldt
sumber
5

Yakin. Bahasa pertama saya adalah C, tapi itu benar-benar hanya untuk memudahkan kelas kami menjadi C ++. Itu membuat Jawa jauh lebih mudah untuk ditangani begitu saya sampai di Universitas. C ++ mungkin memiliki kurva belajar yang sedikit lebih curam, tetapi jika itu diajarkan dengan benar itu harus baik-baik saja.

FrustratedWithFormsDesigner
sumber
4

Tidak, C ++ tidak cocok sebagai bahasa pertama. Seperti yang ditunjukkan di sini, banyak programmer profesional berbagi pendapat ini, tetapi ini juga merupakan pendapat yang dimiliki oleh guru profesional.

Berikut adalah laporan dari dekan Universitas Carnegie Mellon tentang penggunaan C ++ untuk kursus pengantar pemrograman untuk mahasiswa baru:

Bahasa standar seperti C atau C ++ tidak cocok untuk kursus ini karena kompleksitas dan kekurangan mereka menghambat teknik penalaran informal dan mekanis.

CMU menawarkan dua kursus pengantar, yang penting dan yang fungsional. SML dipilih untuk pemrograman fungsional. Saya tidak tahu apa yang dipilih untuk kursus imperatif, tetapi laporan itu menyebutkan menggunakan subset dari C.

Joh
sumber
2

Yakin. Ada bahasa lain yang mungkin lebih mudah dipahami oleh siswa tahun pertama. Namun, ada beberapa cara dimana seorang guru bisa secara perlahan memperkenalkan konsep dalam C ++.

jzd
sumber
2

Jelas C ++ dapat menjadi bahasa pertama. Tapi ini tentang seberapa baik itu diajarkan.

Semua orang mengatakan, bahasa pertama harus sangat mudah dipahami. Tapi maksud saya adalah, sebagian besar orang mulai pemrograman di tingkat sarjana. Jadi, Anda bisa mengajarkan sesuatu yang mampu mereka pahami. Dan dengan C ++, Anda dapat beralih dari level pemrograman yang lebih rendah ke level yang lebih tinggi.

Gulshan
sumber
Tetapi mengapa tidak mulai dari level pemrograman yang lebih tinggi? Ini adalah tingkat di mana kami memecahkan sebagian besar masalah (kecuali untuk masalah khusus domain tertentu, tentu saja). Kemudian, jika mereka perlu lebih dekat dengan logam, mereka dapat belajar C ++, assembler, dll.
Andres F.
Saya setuju, ini tentang seberapa baik itu diajarkan!
Gary Willoughby
2

Sama sekali tidak.

Jika saya punya cara saya, saya akan melarang itu digunakan dalam pengaturan akademik hampir seluruhnya. Bukan karena alasan yang bertentangan dengan yang sudah dibuat, tetapi karena terlalu banyak berpikir C ++ (atau variasi) adalah jawaban untuk hampir setiap masalah karena Anda dapat menggunakannya di hampir semua situasi. Ini adalah obeng pemrograman.

Beberapa orang menggunakannya untuk mengencangkan sekrup, alat yang sangat masuk akal untuk pekerjaan itu. Yang lain menggunakannya seperti prybar, sementara sering efektif, tidak benar-benar ideal karena obeng, tidak peduli apa yang ayah Anda katakan kepada Anda, bukan prybar, dan mungkin gagal karena disalahgunakan karena komposisi shank tidak sengaja dibuat untuk jenis kekuatan yang akan dihadapi prybar. Yang lain mungkin akan mencoba dan menggunakannya sebagai tinju atau pahat, dan mereka hampir selalu akan menghadapi masalah karena gagang obeng tidak dibuat untuk jenis pelecehan mencolok yang ditinju oleh punch atau pahat yang dirancang untuk bertahan.

Menurut pendapat saya, tugas seorang programmer adalah untuk secara umum menerjemahkan masalah nyata ke dalam otomatisasi yang memberikan beberapa tingkat peningkatan efisiensi (mengurangi komitmen sumber daya untuk suatu tugas), kecepatan (mengurangi waktu untuk melakukan tugas), prediktabilitas (meningkatkan pengulangan suatu tugas), atau organisasi (meningkatkan kesadaran hubungan antara tugas).

Meskipun dapat dimengerti bahwa setiap orang yang memprogram harus memiliki pengetahuan umum tentang operasi komputer tingkat rendah, dan khususnya perangkat IO dan alokasi memori, sangat tidak lazim untuk benar-benar harus menggunakan pengetahuan itu pada tingkat yang signifikan, apalagi memanfaatkannya untuk sebagian besar tugas. Mencoba melakukannya tanpa memahami konteks masalah yang lebih luas akan menimbulkan risiko yang tidak perlu terhadap suatu upaya.

Tidak masuk akal bahwa bahasa pemrograman pertama harus C / C ++ atau varian dekat, karena kelas masalah yang dipecahkan oleh C dan turunannya tentu tidak sesuai untuk beberapa persentase besar dari masalah saat ini dan di masa depan (kecuali di mana kita harus menyelamatkan program sebelumnya, obeng), dan sebenarnya lebih merupakan masalah kecil yang akan datang. Sebagian besar programmer tidak akan pernah mendekati pengembangan fitur OS inti atau antarmuka perangkat langsung, meskipun peningkatan perangkat mobile kecil yang saling berhubungan. Sebagian besar akan bekerja dan hidup seperti kita. Memperbaiki dan menghapus kode yang berumur lebih dari dua generasi, menerapkan teknologi yang sudah menunjukkan usia, atau bekerja di pinggiran teknologi pada aplikasi pembunuh (x +1).

Untuk bahasa pertama, saya akan melihat Lego NXT, tugas ringan tapi varian kaya fitur LabView. Walaupun Lego NXT tidak digunakan secara luas dalam usaha komersial, Lego NXT akan menyajikan sifat dasar dari apa yang diprogram dengan cara "kaya sensor". Saya mungkin memasangkannya dengan bahasa scripting platform yang agak netral seperti Javascript atau TCL / TK. Keduanya akan berdampak relatif rendah dalam hal apa yang harus Anda temukan untuk melakukan tugas yang sangat mendasar tetapi efektif, dengan pengembalian tinggi dalam hal lingkaran umpan balik dan fleksibilitas untuk memperkenalkan dan memecahkan berbagai tingkat kompleksitas masalah. Plus, ini memberikan kesempatan baik bagi siswa ketika mereka maju untuk mengeksplorasi potensi untuk melebihi apa yang disediakan di lingkungan kalengan: kesempatan untuk mencoba bekerja dalam gelap, lembab,

Setelah mereka belajar mengendarai empat silinder otomatis, kemudian naikkan ke hotrod manual v8 yang besar, jika mereka benar-benar tertarik dan termotivasi. Jika Joel tidak dapat menemukan pemrogram bintang rock di bawah batu apa pun di bawah kakinya, ia mungkin harus terus mencari di tempat lain, atau memikirkan kembali mengapa ia mungkin membutuhkan lebih dari banyak obeng di kotak peralatannya.

JustinC
sumber
1

Beberapa poin di mana pemula dengan mudah membuat kesalahan dalam C ++ adalah:

membuat tugas di mana Anda ingin menguji = vs ==

Tidak ada;

Keterbacaan tanda kurung keriting vs. misalnya pascal begin-end

Dan kemudian ada semua file termasuk, makro, manajemen memori dll untuk membingungkan.

Jadi saya akan mengatakan C ++ bukan bahasa terbaik untuk memulai - namun tidak ada keraguan bahwa itu bisa sangat berguna ketika Anda telah mempelajarinya.

Saya akan - seperti orang lain juga menyarankan - menggunakan C #, Java atau mungkin bahkan VB - dan IDE yang bagus dengan highlight sintaks, debugger dll untuk membantu membuatnya lebih mudah untuk pulih dari kesalahan.

Rune Andersen
sumber
1

Ketika saya masih di perguruan tinggi C ++ adalah bahasa dasar yang diajarkan sepanjang tahun pertama kuliah. Teorinya adalah bahwa ia mengandung beberapa konsep pemrograman yang rumit, jadi jika Anda bisa menguasainya, Anda bisa mengambil bahasa lain. Itu bermanfaat bagi saya sebagai fondasi yang baik.

Karena itu, selama tahun senior saya, saya bertugas di sebuah komite untuk menentukan apakah akan mengganti bahasa inti ke Jawa. Setelah berbicara dengan beberapa pengusaha terkemuka dan beberapa alumni departemen, diputuskan bahwa beralih ke Jawa adalah yang terbaik bagi para siswa. Para majikan yang kami ajak bicara ingin agar orang-orang memiliki pengalaman dalam bahasa yang mereka gunakan untuk mempekerjakan mereka. Saya percaya sekarang, 10 tahun kemudian, mereka masih menggunakan Java sebagai bahasa inti mereka.

Pada catatan yang sama, kami telah mencari untuk mempekerjakan beberapa lulusan perguruan tinggi baru-baru ini dengan keterampilan C ++ yang sangat bagus. Kami belum dapat menemukannya.

SchwartzE
sumber
1

Saya akan mengatakan ya. Tetapi bahasa apa pun bisa benar-benar menjadi bahasa pertama. Saya pikir C ++ bagus karena meskipun kompleks dan kadang-kadang sulit, ini menunjukkan kepada Anda apa yang benar-benar dapat Anda lakukan (sedikit batasan). Juga, ia memiliki beberapa desain berorientasi objek yang dapat membantu Anda bersiap-siap untuk mengambil bahasa lain.

C ++ adalah bahasa pertama saya dan saya senang itu. Itu membuat saya berpikir dalam pola pikir OOP sejak awal dan saya berterima kasih untuk itu. Tetapi pada akhirnya, itu benar-benar tergantung pada apa yang ingin Anda lakukan. Bahasa tidak terlalu penting karena jika Anda bisa menguasai satu bahasa, kemungkinan Anda tidak akan kesulitan mengambil yang lain. Apa yang ingin kamu lakukan? Membuat game? Program untuk ponsel? Masing-masing akan memiliki alat dan bahasa yang lebih cocok untuk itu.

pengguna16281
sumber
1

C ++ adalah bahasa ahli, bukan yang pemula ... akan mengatakan C pertama, bukan Java atau C # atau Python ... mengapa? karena C mengajarkan Anda untuk menjaga ingatan Anda dan beberapa konsep rumit seperti petunjuk yang "disembunyikan" oleh semua bahasa namun hadir di mana-mana. Saya telah melihat begitu banyak pengembang muda yang bahkan tidak mengerti mengapa kadang-kadang memori harus dilepaskan dan percaya bahwa pengumpul sampah tidak sedikit kerdil yang membersihkan semua omong kosong pengkodean: mereka instantiate, mereka instantiate dan boom itu meledak bahkan jika mereka memiliki XXXXGb RAM ... Tetapi mereka tidak mengerti mengapa pengumpul sampah tidak secara ajaib membersihkan semuanya! Dan saya telah melihat pengembang semacam ini mengkode dalam C ++ (dan bahkan lebih gila lagi, di Corba) dan itu adalah pembantaian !!!!!!!!!! Jadi saya akan menyarankan untuk belajar coding dalam C dan kemudian pergi ke Python / Java / C # untuk konsep objek dan semua gula di sekitar. Kemudian ketika Anda memahami semua itu, Anda pergi ke C ++ dan Anda merasakan kekuatan C ++ tetapi Anda juga menemukan semua bahayanya dan mengapa itu tidak boleh digunakan oleh siapa pun;)

mandubia
sumber
1

TIDAK. Ada begitu banyak hal yang dimiliki C ++, yang membuat sulit bagi seorang pemula untuk memahaminya. Jangan masuk ke fallacie "semua bahasa pemrograman sama".

Mulai dengan Basic atau Pascal, (abaikan hal-hal "mereka sudah usang"), dan kemudian, dengan C / C ++ / Java / C # / Perl. Atau jika Anda memiliki kesempatan, pertama dengan Logo & Karel, dan kemudian Basic atau Pascal.

PD Beberapa universitas & kolega memiliki kelas penggunaan & perbandingan Bahasa Pemrograman, dan kebetulan saya telah mengajar kelas itu ;-)

umlcat
sumber
0

Anda dapat memilih bahasa apa saja untuk mempelajari dasar-dasar pemrograman. Saya belajar banyak hal dalam C / C ++. tetapi 7 tahun kemudian, alat / bahasa diubah di sekolah saya dan mereka lebih suka java / C #. bahasa hanyalah alat. Yang Anda butuhkan untuk menjadi lebih baik adalah fundamental. misalnya di MIT orang belajar dasar-dasar algoritma menggunakan python. misal Java mungkin bagus untuk pemrograman web. tetapi C / C ++ bagus untuk layanan dan aplikasi berkinerja tinggi. Jadi itu tergantung situasi Anda.

sarat
sumber
0

Jika "cocok" berarti "mungkin", ya. Kalau untuk "baik", pasti tidak.

Dimungkinkan untuk menyukai, bahkan mencintai C ++, tetapi untuk itu Anda lebih baik belajar beberapa bahasa dan bekerja beberapa dekade dengan basis kode busuk kehidupan nyata, dapatkan pengalaman tentang "membuat perangkat lunak nontrivial yang benar-benar berfungsi" - maka C ++ akan memiliki pesona.

Tidak di awal ketika Anda masih perawan, bermain-main dengan masalah kecil, sederhana (tapi seharusnya menarik dan menyenangkan).

Saya akan mulai dengan python, diikuti oleh SICP (skema), atau yang serupa. Mungkin terbalik atau disisipkan. Dengan itu Anda bisa pergi dan mengatasi masalah tersebut. Alih-alih melawan sistem, berjalan di lumpur yang dalam dan belajar semua jenis kebiasaan tidak logis dan alasan historis mereka.

Kemudian, ketika Anda sudah bisa memprogram jalan keluar dari kantong kertas, beralihlah ke bare metal: pelajari cara perakitan dan beberapa arsitektur, plus mungkin Knuth's Mix. Saya tidak bermaksud menghafal opcode atau melakukan banyak hal nyata, hanya untuk memahami memori, register, ALU, cache, interupsi, dan mulai membaca.

Kemudian dengan fondasi itu Anda dapat diekspos ke bahasa lain, termasuk C ++. Mungkin ide yang bagus untuk menambahkan "sejarah dan evolusi bahasa" di antaranya.

Balog Pal
sumber
0

Saya mulai dengan C ++ di sekolah menengah. Saya mengambil salinan buku ini: C ++ Cara Memprogram oleh Deitel dan Deitel . Buku ini cukup bagus.

Terus terang tidak ada jawaban benar atau salah di sini, saya pribadi menemukan bahwa C ++ dapat dipahami. Saya mempelajarinya sampai OOP (saya tersandung pada "ini" yang sekarang saya tidak mengerti bagaimana saya tidak bisa mendapatkan itu tetapi apa pun). Cobalah, jangan berkecil hati. Jika Anda buntu, periksa bahasa lain dan terus pelajari yang baru. Idenya adalah bahwa ketika Anda melihat konsep yang sama dalam 2-3 bentuk berbeda Anda akan memahaminya dengan lebih baik. Seperti yang saya katakan, konsep pointer "this" membingungkan saya, tetapi ketika saya melihat hal yang sama dengan Python (yang disebut self), itu masuk akal bagi saya segera karena saya memahaminya dalam C ++. Belajarlah Java jika Anda bisa mengajar di banyak perguruan tinggi. Belajarlah python atau ruby ​​karena itu adalah bahasa du jour dan jika Anda dapat menjelajahi lebih banyak niche / hal baru seperti Clojure (dan semua lisps lainnya), Haskell, Scala ...

nkassis
sumber
-1

Tidak, saya akan mulai dengan Java atau C #. Jika Anda ingin belajar C ++, mungkin lebih mudah setelah Anda mempelajari dasar-dasarnya, seperti apa itu kelas, bagaimana melakukan loop dan fork (jika, lalu pernyataan), dll. Jauh lebih penting untuk mempelajari cara melihat masalah atau persamaan matematika dan program itu daripada mencari tahu apakah Anda telah melepaskan semua memori Anda atau apa pun.

pengguna16286
sumber
2
Mengapa Java atau C # ketika Python bahkan lebih sederhana?
David Thornley
-3

Tampaknya asumsi di balik pertanyaan ini adalah "C ++ tampak sangat kompleks, apakah anak berusia 16 tahun dapat mengambilnya sebagai bahasa (pemrograman komputer) pertama?"

Pada saat kami berusia 4 atau 5 tahun, kami mengambil sebagian besar konstruksi dalam bahasa ibu, hanya dengan banyak paparan itu melalui mendengarkan orang lain berbicara itu. Membentuk kalimat yang hebat membutuhkan waktu seumur hidup, tidak ada pertanyaan di sana.

C ++ pasti jauh lebih kompleks / rumit daripada, katakanlah, sebagian besar bahasa manusia. Anak usia 16 tahun harus bisa mengambilnya. Apakah mereka akan menulis kode hebat dengan itu? Harus menunggu dan menonton.

vpit3833
sumber
4
Bahasa manusia mampu memiliki sintaks yang rumit karena jika Anda mendapatkan grammer atau speling rong, orang masih dapat memahami Anda. Tidak demikian halnya dengan bahasa komputer.
dan04
-3

Pemula perlu menghargai 'pemrograman' terlebih dahulu. Dalam pengalaman saya dalam melatih kelas pemula, mereka menghargai yang paling mereka pahami terlebih dahulu. Seperti Python vs. C # mereka menghargai Python karena tingkatnya sangat tinggi dan tidak menggunakan simbol seperti C #, yang berarti sangat dekat dengan bahasa manusia, sangat Inggris. Jadi saya akan merekomendasikan untuk belajar pemrograman dari level tinggi ke level rendah.

Lemuel Adane
sumber