Sebuah perguruan tinggi setempat mengajarkan C ++ kepada mahasiswa tahun pertama (16 tahun) tanpa pengalaman pemrograman sebelumnya.
Sebagai bahasa pemrograman pertama, apakah C ++ cocok?
Sebuah perguruan tinggi setempat mengajarkan C ++ kepada mahasiswa tahun pertama (16 tahun) tanpa pengalaman pemrograman sebelumnya.
Sebagai bahasa pemrograman pertama, apakah C ++ cocok?
Jawaban:
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<<
, protected
dan new
tidak 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.
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;
}
#include
Perintah 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::cout
adalah 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.
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.
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 ();
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.
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.
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.
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.
string
tipe 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.
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.
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.
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.
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.
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.
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.
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.
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.
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;)
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 ;-)
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.
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.
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 ...
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.
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.
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.