Saya akan membimbing tim siswa sekolah menengah untuk Kompetisi Robotika PERTAMA, sebagian besar tim di sini mengembangkan [perangkat lunak robot mereka menggunakan C ++. Bagi banyak siswa dalam tim, ini akan menjadi pengantar pemrograman pertama mereka. Saya tidak akan memilih C ++ untuk mengajar pemrograman untuk siswa sekolah menengah (misalnya Python atau Javascript akan lebih mudah saya pikir) tetapi pilihannya sudah ditentukan.
Saya ingin mengajar mereka C + + yang tepat (yaitu menghindari dialek C / C ++ campuran, yaitu C +) tetapi saya tidak ingin menakut-nakuti mereka dengan kompleksitas yang tidak perlu. Untuk masalah itu:
- Haruskah saya mulai menggunakan STL dari hari pertama, esp.
vector
atau tetap dengan array standar? Array lebih mudah untuk diperkenalkan tetapi kesalahan pointer mungkin lebih sulit untuk ditangkap. - Untuk I / O, haruskah saya berpegang teguh pada
cout
, dll. Atau apakah menurut Andaprintf
akan lebih mudah dipelajari? - Apakah ada sumber daya online untuk C ++ yang cocok digunakan untuk pelajar muda seperti itu?
Terima kasih!
EDIT : Terima kasih atas begitu banyak jawaban bagus. Selain C + Akselerasi , yang disarankan oleh banyak orang, saya telah menemukan bahwa C ++ Untuk Semua Orang adalah teks yang sangat baik.
Jawaban:
Saya pikir Anda harus mulai dengan tipe data yang telah dibangun bahasa seperti array dan pointer, dan ketika siswa Anda memahami itu, pindah ke kelas dan OO, kemudian STL.
Alasannya adalah bahwa Anda dapat mengajar orang untuk memahami array tanpa memahami banyak hal lain selain variabel dan arsitektur komputer yang mendasarinya, tetapi Anda tidak dapat mengajar mereka untuk memahami
vector
tanpa mengajar mereka kelas terlebih dahulu. Jika Anda menggunakan STL sejak awal, siswa-siswa Anda harus hidup hanya dengan tidak memiliki petunjuk tentang bagaimanavector
tepatnya bekerja. Dan kemudian ketika Anda sampai pada titik itu, mereka tidak akan memiliki pemahaman yang cukup baik tentang pointer dan array dan hal-hal yang Anda dapatkan dari melakukan hal-hal seperti menulis kelas vektor Anda sendiri, menulis kelas daftar tertaut Anda sendiri, dll. Yang akan diperlukan untuk menghargai dan memanfaatkan fitur-fiturnya. Itu mengganggu saya ketika siswa mengatakan "apa itu?" dan guru berkata "abaikan saja, kamu akan mempelajarinya nanti."Dan seperti yang ditunjukkan Demian dalam komentar, menguraikan pesan yang relatif samar yang Anda dapatkan dari kesalahan templat jauh lebih sulit daripada memahami kesalahan yang mungkin Anda dapatkan dari susunan array / non-templat.
Saya tidak merasakan hal yang sama tentang
cout
danprintf
. Tidak ada level yang lebih rendah dari yang lain, kecuali yangcout
menggunakan overloading operator.Ini mungkin tampak bodoh, tetapi saya benar - benar fanatik tentang membuat orang memahami blok bangunan yang sangat mendasar dari semua hal sebelum pindah ke abstraksi. Anda tidak harus menggunakan pointer pintar sampai Anda mahir dengan pointer mentah, tidak ada vektor sebelum array, hal semacam itu.
Saya sering mengatakan ini, tetapi saya akan mengatakannya lagi: lebih baik mengajarkan siswa pembagian panjang terlebih dahulu dan kemudian membiarkan mereka menggunakan kalkulator daripada membiarkan mereka menggunakan kalkulator kemudian mengajar mereka pembagian panjang sesudahnya.
Adapun buku untuk mengajar pemula, lihat daftar master buku C ++ yang baik .
sumber
vector
array yang berlebihan. Saya sobek.std::string
danstd::vector
?! Apakah itu pemrogram 32 C upvoting? Saya telah mengajar C ++ selama satu dekade, untuk pemrograman pemula, untuk siswa yang memiliki tahun Jawa, dan untuk para profesional pemrograman. Saya menggunakanstd::string
danstd::vector
sejak hari pertama. Mereka mudah digunakan, tidak peduli apa jeroan mereka. (Anda tidak akan menghindar untuk mengajarkan string VB karena terlalu rumit di bagian dalam?)std::vector
untuk dapat menggunakannya. Dan kelas adalah bagian yang sangat mendasar dari C ++. Yang tidak mendasar adalah men-debug semua kesalahan yang akan mereka dapatkan dengan menggunakan array dan pointer asli.new
kata kunci, Anda kembali tepat ke terrirory manajemen memori. Dan sering kali perpustakaan meminta petunjuk dan Anda perlu bertanya pada diri sendiri, "apakah itu akan menjadi milik? Atau apakah saya masih perlu membersihkannya?". Fondasi kakiku. Lebih seperti paku atau mendempul atau sesuatu.Ini pengalaman saya sendiri. Terima apa pun nilainya.
Melihat kembali ke ketika saya mulai pemrograman, saya benar-benar berharap aku akan belajar tentang memori pertama . Tidak, ini tidak mengasyikkan. Itu akan membuat Anda berkaca-kaca. Tetapi itu adalah konsep yang sangat mudah untuk diajarkan. Cukup tunjukkan meja 1-D dan buat mereka menjalani beberapa latihan mental:
dan sebagainya. Setelah Anda mendapatkan memori dasar, yang lainnya adalah kue. Siswa miskin yang menganggap kompiler melakukan sesuatu yang ajaib (atau mereka tidak pernah harus memikirkan manajemen memori) yang cenderung paling berjuang. Dan C ++ mengerutkan air karena beberapa hal dibersihkan secara otomatis (yaitu vektor normal) sementara yang lain tidak (yaitu vektor yang dialokasikan menggunakan "baru"). Dan bahkan jangan mulai saya menggunakan string (char * vs. std :: string - coba jelaskan tanpa pengetahuan pointer).
Saya tidak tahu platform apa yang akan ditarget pesaing robot Anda, tetapi jika lingkungan dengan memori terbatas, keterampilan manajemen memori sangat penting.
EDIT
Setelah Anda mengajari mereka dasar-dasar, maka ya saya katakan pergi C ++ sepanjang jalan. Secara teknis mereka hanya perpustakaan yang berbeda, tapi ya tidak ada gunanya membingungkan mereka dengan lebih dari satu paradigma. Beri mereka alat C ++ (yang termasuk pointer dan array).
sumber
pasti langsung menggunakan jenis perpustakaan standar. a
std::string
ataustd::vector
apa yang harus sering mereka gunakan dan (sebagian besar implementasi) jenis-jenis ini menawarkan beberapa bentuk deteksi kesalahan dan penanganan kesalahan, sementara mengabstraksikan banyak kompleksitas dari siswa.Anda dapat menghabiskan banyak waktu mengajar siswa bagaimana memori disusun dan bagaimana mengelola memori (gaya C), atau Anda dapat langsung bekerja menggunakan jenis bahasa idiomatik kemudian jelaskan detail implementasi jika diperlukan (dan ketika mereka memiliki pemahaman yang lebih baik tentang apa itu array dan di mana array digunakan).
sintaks
std::vector
(buat / baca / tulis) tidak jauh lebih rumit daripada sebuah array C. sebagai perbandingan, manajemen memori manual dan semua kesalahan umum yang dilakukan oleh pelajar baru dengan array C jauh lebih sulit untuk dipelajari, diajarkan, dan digunakan.cout
. secara pribadi, saya pikircout
lebih mudah dipelajari. mungkin yang lebih penting, Anda harus memilihcout
karena lebih aman, fleksibel, dan memungkinkan Anda untuk menentukan bagaimana suatu objek mencetak, yang berarti Anda sudah memiliki fungsi bawaan dan keamanan jenis menggunakan beberapa tipe perpustakaan standar. akhirnya, Anda hanya akan berakhir dengan program campuran ketika Anda menyadari mereka mungkin juga perlu belajarcout
di sampingprintf
.sebenarnya, saya pikir Anda harus membaca Accelerated C ++, oleh Koenig dan Moo dan mungkin menggunakannya untuk instruksi (menjawab pertanyaan 3 secara tidak langsung). dalam buku, mereka memperkenalkan
std::cout
sebelumreturn
(halaman 3), dan menyimpan pointer dan array sampai bab 10. jika saya bisa menyalin dan menempelkan kata pengantar buku itu sebagai jawaban untuk pertanyaan Anda, saya akan melakukannya. (catatan: saya sarankan Anda membacanya untuk perspektif pengajaran c ++).Sunting Di Sini adalah Kata Pengantar
jika Anda tidak ingin menggunakan Accelerated C ++ (yang mengasumsikan latar belakang dengan pemrograman pada umumnya), maka mungkin Anda ingin Eckel's Thinking in C ++ . Saya belum membacanya, tetapi ini adalah teks intro C ++ yang didistribusikan secara bebas.
sumber
std::cout
perkenalan, kurung kurawal diperkenalkan =) (ini adalah diseksi sederhana dari "Halo, Dunia")Satu hal yang perlu dipertimbangkan adalah bahwa dalam struktur data kode PERTAMA khas dari segala bentuk (struct, kelas, array, vektor, daftar) memainkan peran yang sangat kecil. Anda biasanya menangani sejumlah kecil data sensor, dan menggunakannya untuk memutuskan jumlah gerakan aktuator yang sangat kecil.
Tapi apa yang memainkan peran besar, dan dapat sangat sulit untuk memahami semua bentuk yang berbeda dari kontrol yang berlangsung.
Jadi saya lebih menekankan kontrol. Mulailah dengan dasar-dasar:
if
,for
,while
. Minta mereka banyak berlatih. Buat mereka mengenal mereka dengan baik ....... tapi kemudian semakin sulit. Kode robot apa pun yang berukuran sedang akhirnya akan mencapai beberapa pola kontrol yang lebih rumit:
Loop "utama" besar, yang memanggil segalanya
Mesin negara (ini sering muncul)
Menyimpan nilai sebelumnya / penghitung berjalan (seperti untuk PID)
Ini sulit dipahami pemula. Berpikir tentang bagaimana suatu program bergerak melalui kode seperti ini membingungkan, Anda mungkin tidak menyadarinya sekarang, tetapi memang demikian. Ini akan memberi siswa Anda lebih banyak masalah daripada bahasa itu sendiri.
Juga, semoga berhasil! Semoga musim berjalan dengan baik.
sumber
Masalah dengan array adalah apa pun kecuali contoh buku teks sederhana akan membutuhkan array berukuran dinamis, dan saat Anda membutuhkan array berukuran dinamis,
std::vector
jauh lebih mudah. Selain itu, satu-satunya cara untuk menangani array ukuran dinamis dengan aman adalah dengan membungkusnya di kelas Anda sendiri, yang akan menjadistd::vector
rip-off yang buruk.Berlawanan dengan kepercayaan yang tidak bisa dijelaskan, para siswa dapat menggunakan fitur yang membutuhkan mekanika rumit untuk diimplementasikan tanpa mengetahui bagaimana cara mengimplementasikan binatang seperti itu sendiri. Seperti yang saya katakan dalam komentar: Anda bahkan tidak akan berpikir untuk tidak mengajarkan string dalam bahasa lain, hanya karena implementasinya rumit, bukan?
Mengapa seperangkat konvensi string format kuno yang membuat program Anda meledak melalui atap saat Anda mendapatkan sesuatu yang salah (yang terjadi saat Anda mengubah
typedef
dalam beberapa header yang tampaknya tidak terkait) lebih disukai daripada jenis keamananstd::cout
?Sebagian besar sumber daya C ++, online atau tidak, buruk. Dan saya tidak berbicara tentang penggunaan font atau bahasa yang sulit dibaca. Saya berbicara kesalahan faktual yang sangat jelas. Ada sangat sedikit sumber daya C ++ yang bagus, kebanyakan satu atau dua lusin buku . Satu-satunya yang saya tahu adalah online adalah Bruce Eckel's Thinking in C ++ .
Selama satu dekade, saya telah mengajarkan C ++ kepada siswa dengan latar belakang yang sangat berbeda menggunakan Koenig / Moo's Accelerated C ++ sebagai basis. Kursus saya telah banyak berubah dalam dekade itu, sekarang tidak ada di dekat buku ini, kecuali untuk prinsip yang mendasarinya: Gunakan idiom modern, benar, aman sejak awal. Jangan mengajari siswa-siswa Anda cara memanipulasi memori secara manual, hanya agar mereka nanti melupakannya demi idiom yang lebih aman. Seperti yang dapat Anda lihat di beberapa jawaban yang disediakan di sini, ini tidak berfungsi: Mereka yang pernah mengajarkan cara manual terlebih dahulu jarang akan pernah memahami keuntungan menggunakan idiom modern dan aman.
sumber
Jika Anda ingin mengajar C ++, saya akan mulai langsung dengan C ++ konstruksi sebagai vektor dan cout, bukan subset C seperti printf.
sumber
Iya nih. Menggunakan array asli di C ++ rentan kesalahan dan praktik buruk 99% dari waktu.
Iya nih.
Mereka tidak terlalu muda. Belajar untuk memprogram tidak membutuhkan kebijaksanaan, hanya motivasi dan pikiran yang terbuka. Saya tidak bisa memikirkan apa pun yang diajarkan dalam dua tahun terakhir sekolah menengah yang akan lebih baik mempersiapkan siswa untuk belajar program. Pernahkah Anda melihat Bruce Eckel's Thinking in C ++ ? Ini tersedia untuk diunduh gratis dan ditinjau dengan sangat baik. Silakan menghindari populer tetapi mengerikan C ++: Bagaimana Program dan semua Teach Sam Diri C ++ ... buku.
sumber
Saya diajari C ++ di sekolah tinggi sebagai bahasa pemrograman pertama, meskipun itu lebih seperti "C +", sekarang yang Anda sebutkan itu; kami digunakan
cout
untuk menulis teks ke konsol dan file, tetapi juga beberapa fungsi C (getch()
adalah favorit saya).Saya pikir cara yang paling efektif (dan mungkin menyenangkan) untuk mengajarkan dasar-dasarnya adalah menggunakan kurikulum yang berorientasi pada tujuan: mulai dengan menunjukkan bagaimana cara menghasilkan barang, kemudian input keyboard, kemudian file I / O yang sederhana, dll. Kemajuan ke teks sederhana game berbasis (atau robotika yang setara). Kemudian ketika mereka bertanya, "Bagaimana saya melakukan X?", Anda dapat menjabarkan X dalam hal contoh yang telah mereka lihat, misalnya "Pertama, Anda harus mendapatkan input dari pengguna seperti yang kami lakukan di Z, lalu ... "(jelas itu tidak mudah dalam praktiknya karena X kemungkinan akan menjadi sesuatu yang mereka butuhkan pengetahuan tambahan untuk melakukannya, misalnya" grafis 3D ", tetapi Anda masih bisa menjelaskan bagaimana itu akan bekerja di tingkat tinggi cara).
Contoh yang Anda tunjukkan akan dimulai sebagai kotak hitam yang disalin dari copy-paste, yang misteri-misterinya terurai ketika potongan-potongan teka-teki pemrograman perlahan-lahan diketahui. Misalnya, siswa Anda akan mempelajari dasar-dasar
if
s dengan cukup cepat, tetapi mereka mungkin tidak akan menyadari bahwa ekspresi boolean tidak terbatas hanya untuk digunakan dalamif
kondisi (mengarah keif (blah) return true; else return false;
kode klasik ).Seluk-beluk apakah Anda memilih array atau vektor sebagai wadah akan tampak tidak relevan bagi siswa pada awalnya. Vektor / array hanya akan menjadi cara memiliki banyak variabel sebagai satu variabel, dapat diakses melalui indeks. Tetap pada satu di mana Anda bisa. Pointer tidak akan dipahami sampai nanti. Itu bukan untuk mengatakan bahwa Anda tidak harus menjelaskan sesuatu; Hanya saja Anda tidak bisa menjelaskan semuanya sekaligus, dan hal-hal yang Anda jelaskan tidak akan sepenuhnya diserap. Manusia belajar secara organik, bukan linear. Saya telah menggunakan
cout
selama beberapa tahun sebelum saya benar-benar memahami apa kelebihan operator itu!Oh, dan jangan takut pengulangan. "Ini seperti program Hello World yang kami lakukan - ingat bagaimana kami menulis teks ke konsol?" (tidak ...) "Ayo kita ulangi lagi hanya untuk memastikan." ... Dan ajukan pertanyaan! Biarkan siswa terlibat dengan contoh-contoh menyenangkan dan banyak interaksi.
C ++ adalah bahasa yang kompleks, dan apa pun yang Anda lakukan, sejumlah besar kerumitan itu (dan keahlian pemrograman secara umum) akan hilang pada siswa Anda. Semua yang Anda tunjukkan kepada mereka akan menjadi hal baru bagi mereka; sebagian besar tidak akan tenggelam pada tingkat pemahaman yang mendalam (setidaknya, tidak segera). Bagaimana memori bekerja, bagaimana komponen-komponen PC berinteraksi, apa tumpukan dan tumpukan, pointer, kelas, bahkan loop dan jika rantai lain tidak akan dipahami dengan baik oleh mayoritas. Ini bagus! Mereka tidak harus dipahami untuk digunakan - jumlah yang luar biasa dari program keren dapat ditulis dengan fungsi 1000-garis yang sangat jelek dengan s berlipat ganda berlipat lima
if
dan 43 variabel bernama hal-hal sepertix_2r
. Yang penting siswa terus belajar dan berkembang. Kotak hitam baik-baik saja selama mereka menjadi transparan (atau setidaknya abu-abu tembus) dalam jangka panjang. Pada akhir kursus, mereka mungkin tidak tahu apa desain patters, tetapi mereka harus dapat melihat kembali program yang mereka tulis dalam beberapa minggu pertama dan merasa ngeri pada kode mereka. Mereka harus memahami pada tingkat detail yang signifikan bagaimana program pertama yang mereka tulis benar-benar bekerja (sedangkan ketika mereka menulisnya mereka tidak tahu). Tetapi mereka tidak akan tahu segalanya - belum .sumber
Saya telah mengambil banyak kelas pemrograman dalam hidup saya dari sekolah menengah ke perguruan tinggi. Saya dapat mengatakan bahwa saya benar-benar tidak belajar terlalu banyak dari kelas c ++ pertama saya selain cara mencetak sesuatu ke aliran.
Saran saya, sebagai siswa muda, yang hanya memiliki beberapa tahun terakhir memiliki pekerjaan nyata menjadi pengembang, adalah untuk tidak membodohi mereka. Beri tahu mereka apa yang mereka lakukan dan cara kerjanya hingga ke tingkat sistem operasi (Tidak perlu masuk ke IMO khusus).
Saya pikir mengajar mereka C adalah cara yang lebih baik untuk melakukannya (masih akan selalu dikompilasi sebagai C ++ seperti yang Anda tahu). Mengajari mereka apa sebenarnya terminal itu, bagaimana program mereka berinteraksi dengannya, bahwa string adalah array karakter yang diakhiri dengan \ 0 di memori, apa malloc itu dan bagaimana C ++ mengabstraksikannya, bagaimana arang dan int disimpan dalam memori , dll ... Hal-hal inilah yang membuat seseorang benar-benar tahu bagaimana menyelesaikan masalah ketika mereka menemukannya dalam pengembangan.
Saya tidak bisa menekankan pentingnya membiarkan program anak-anak dan berada di sana terutama untuk menjawab pertanyaan. Dalam pengalaman saya, Anda belajar bahasa dengan menggunakannya. Buku dan pelajaran bisa membantu dan diperlukan untuk memulai, tetapi pada akhirnya, saya katakan berikan mereka file C / C ++ dan katakan: Ini adalah contoh X, saya ingin Anda melakukan Y (yang dapat dilakukan dengan meretas X). Tunjukkan pada mereka cara menggunakan halaman manual (jika mereka menggunakan * NIX) atau perlihatkan pada mereka cplusplus.com dan biarkan mereka menjelajahi std libs untuk mencari tahu sendiri berbagai hal.
TL; DR Biarkan anak-anak belajar sendiri. Hadir di sana untuk memberikan struktur dan menjawab pertanyaan.
Juga: Daftar tertaut adalah kebenaran!
sumber
Anda tidak mengajar mereka pemrograman secara umum, Anda mengajar mereka semacam pemrograman tertanam menggunakan Robot dan semacamnya. Jika saya mengerti dengan benar.
Pertama, saya pikir Anda harus memeriksa perpustakaan apa yang akan Anda gunakan dan apa yang Anda butuhkan.
Jika Anda memiliki perpustakaan C untuk digunakan atau seperti-C dengan banyak pointer dan array-C, maka saya kira Anda akan membutuhkan cara untuk mengajari mereka cara menggunakannya atau mengapa Anda menggunakannya.
Tapi, Anda bisa menunjukkan kepada mereka beberapa kode sederhana untuk memulainya dengan string dan vektor, begitulah cara C ++ bekerja. Itu tidak berarti Anda tidak bisa mengajari mereka petunjuk.
Mungkin Anda harus menjelaskan perbedaan antara level rendah C ++ (yang menyerupai C) dan level tinggi C ++ dengan STL. Salah satu hal yang paling sulit di C ++ untuk pemula adalah untuk melihat apa itu C, apa itu C ++ dan apa perbedaan sistem API.
Karena tujuannya di sini bukan untuk mempelajari pemrograman umum tetapi untuk memasuki kompetisi Robot, saya mengarahkan pengajaran dengan cara ini.
sumber
Saya mulai mengajar siswa C ++ akhir tahun lalu dan musim panas ini juga untuk Tim Robotika PERTAMA kami.
Kami menggunakan Pemrograman Stroustrup - Prinsip dan Praktek Menggunakan C ++ . Saya menemukan buku itu bisa didekati, dibaca, dan diorganisasi dengan baik. Kami memiliki sekitar 6 siswa membaca bab-bab sendiri. Saya di sana untuk membantu mereka dengan terminologi dan pertanyaan. Mereka melakukan semua latihan dalam buku ini.
Saya meminta siswa mengerjakan bab 14. Melewati bab-bab di atas aliran (tidak berguna untuk pemrograman FRC). Melalui bab 14 bermanfaat karena mereka mendapatkan pengantar untuk subclass. Namun, mereka mungkin perlu melangkah lebih jauh dalam buku ini untuk lebih memahami konstruktor dan destruktor terkait dengan subkelas.
Jangan meremehkan siswa Anda. Para siswa senang memiliki buku, membaca, belajar, dan melakukan latihan; dan ini selama musim panas di waktu mereka sendiri! Ada banyak siswa yang tidak akan mengerti. Mereka harus beralih ke sesuatu yang lain; tidak semua orang mengerti pemrograman.
Hambatan terbesar bukanlah bahasa atau buku; itu adalah lingkungan pengembangan. Visual Studio Express dapat menakutkan bagi pengguna pertama kali. Anda dapat berharga dalam membantu siswa fokus pada pemrograman daripada lingkungan. Namun, mempelajari lingkungan sangat berharga karena programmer menghabiskan banyak waktu untuk beradaptasi dengan sistem pengembangan baru.
Semoga berhasil.
sumber
Anda mengatakan Anda ingin mengajari mereka C ++ tetapi tidak mengajari mereka konstruksi C apa pun, tetapi sebagian besar konstruksi pemrograman yang harus mereka ketahui pertama adalah umum untuk semua bahasa dan versi C ++ berakar pada C:
Ini adalah bagaimana Anda membuat program [int main (..) {return 0; }]. Berikan gambaran dasar lingkungan pemrograman yang Anda ingin mereka coba juga. Mereka perlu tahu cara membuat proyek dan benar-benar mengkompilasi / menjalankannya.
Ini adalah variabel. Variabel dapat menyimpan data (int, char, float, dll).
String (yang C ++ lebih mudah digunakan dengan cin).
Ini adalah bagaimana Anda membaca dan menulis data (cin, cout). "Halo,% s!"
Persyaratan (komputer perlu membuat keputusan).
Loop (komputer pandai melakukan hal yang sama berulang-ulang). Perlihatkan while dan for loop.
Itu akan memakan waktu sekitar dua pelajaran masing-masing satu jam. Pastikan untuk menyiapkan serangkaian catatan singkat yang dapat mereka rujuk dalam komponen praktis. Anda tidak berusaha menjadikan mereka pemrogram yang brilian, jadi berikan contoh cara membaca dari konsol, membuat struktur, dan segala hal lain yang perlu mereka lakukan. Hanya gunakan fitur yang didukung bahasa, bukan perpustakaan utilitas khusus. Anda hanya akan membingungkan mereka lebih banyak.
Dari awal, pimpin dengan contoh dan tunjukkan pada mereka contoh kode yang ditata dengan baik. Indentasi harus benar, menguatkan, dan tanda kurung konsisten dengan gaya yang paling Anda sukai. Nama variabel harus bermakna. Jika Anda menunjukkan slop sebagai contoh maka mereka akan belajar bahwa slop dapat diterima. Ini titik awal yang buruk. Tekankan pentingnya mendapatkan indentasi yang benar - Saya menemukan bahwa ketika banyak yang saya ajarkan menjorok kode mereka secara konsisten, mereka lebih mudah melihat di mana kesalahan mereka. Itu karena sebagian besar kesalahan mereka adalah ruang lingkup yang salah untuk operasi (menempatkan operasi dalam loop / kondisi yang tidak dimaksudkan, atau kebalikannya).
Kemudian beralihlah ke pekerjaan praktis. Cara terbaik untuk mempelajari sesuatu adalah dengan memecahkannya dan mencari tahu sebabnya. Anda harus memastikan bahwa mereka memiliki lingkungan yang mudah digunakan untuk mengkompilasi kode mereka. Dokumentasikan dengan tangkapan layar di selebaran Anda.
Contoh bagus yang membantu saya grok beberapa konsep adalah membangun mesin Coke:
Setelah itu Anda dapat pindah ke C ++ konstruksi; Anda tidak ingin menyelam terlalu jauh sebelum mereka setidaknya bisa membuat program dasar.
Dan di atas semua itu, punya banyak waktu luang dan kesabaran untuk mencurahkan pertanyaan. Akan ada banyak, dan kebanyakan dari mereka akan membuat Anda ngeri karena mereka begitu sepele sehingga jawabannya jelas bagi Anda.
sumber
Saya pikir Anda tidak harus mengajarkan hal-hal dari sudut pandang C ++ ("C ++ hello world"), tetapi dari domain masalah - dalam hal ini, robotika - sudut pandang. Jadi, dunia halo Anda akan berkedip dipimpin atau mengendarai motor.
Tentu saja Anda dapat / harus menguraikan setiap tugas robotik kecil dalam subset dari peningkatan tindakan C ++ yang bermakna secara konseptual, yang melibatkan jenis, fungsi, dan operasi IO.
Sedangkan saya sendiri, saya bukan programmer profesional, dan mencoba belajar Java, C ++ dan Python. Saya benar-benar mulai mencapai sesuatu (Python) ketika saya memiliki masalah nyata (sederhana) untuk dipecahkan. Itu membuat saya langsung ke pokok permasalahan, menghindari perhatian berlebihan pada detail implementasi insidental dari bahasa itu sendiri.
Jadi saya akan menyarankan: jangan membaca manual bahasa, tetapi belajarlah untuk melakukan hal-hal dengan bahasa pilihan Anda. Itulah yang membuat orang tetap termotivasi, saya pikir.
sumber
Saya akan mengajarkan C ++ yang ketat. Anda tahu bagaimana ketika Anda menulis printf dan memberikannya kepada params kecil atau jenis yang salah sesuatu yang aneh terjadi? dan jika Anda menggunakan pointer tidak valid hal-hal buruk dapat terjadi? JANGAN MENGAJAR BAHWA
Dari hari pertama saya akan mengajarkan bagaimana cara menggunakan referensi, STL dan mengatakan Anda KEHILANGAN TANDA untuk menggunakan pointer. Jangan mengajarkan petunjuk pintar juga. Satu-satunya waktu saya perhatikan saya menggunakan pointer adalah ketika saya melakukan GUI dan objek (seperti kotak gambar) harus ada dan menjadi gambar yang valid atau nol. Untuk pemrograman konsol saya tidak menggunakan pointer (pintar atau mentah) dalam waktu yang lama.
Jadi singkatnya jangan mengajari mereka apa pun yang dapat membuat mereka kesulitan. Ajari iostreams, struct, beri tahu mereka bahwa mereka juga kehilangan nilai pada typecast dan jangan coba mengajar desain. Anda tidak ingin orang menjadi profesional yang berpengalaman
sumber
Ini bukan seri kuliah C ++, tapi Richard Buckland's COMP1917 adalah seri kuliah yang sangat baik dilakukan pada pemrograman dalam C (diikuti dengan COMP1927 , struktur data).
Menurut pendapat saya sendiri, C ++ terlalu banyak kerumitan bagi siswa baru, tetapi C adalah dunia yang lebih sederhana dan memberikan fondasi yang baik dalam pemrograman sistem yang sering kurang dimiliki oleh programmer C ++ baru.
sumber
Saya akan mulai dengan potongan signifikan kode boilerplate, membantu mereka "melakukan sesuatu yang keren" dengan pemrograman segera dan memperbaiki pemahaman mereka tentang cara kerja dari waktu ke waktu. Mereka tidak perlu menghargai atau memahami semua seluk-beluk C ++ untuk membuat LED berkedip. Mereka hanya perlu tahu "jika Anda meletakkan kode ini di sana, itu akan membuat LED berkedip." Dan kemudian "hei, mari kita bicara tentang apa itu loop sekarang, jika Anda menulis loop, Anda dapat membuat LED berkedip 50 kali tanpa harus menulis 50 baris kode, bukankah itu keren?" Sekarang mari kita bicara tentang persyaratan, ketika pengguna menekan tombol A pada kotak kontrol, kami ingin mengaktifkan pneumatik untuk menaikkan bendera, inilah cara kami menambahkan kode untuk melakukannya. Atau jika sakelar 2 pada kotak kontrol kami dibalik, kami menjalankan motor bor secara terbalik, bukannya maju.
Jika Anda tetap fokus pada mengajar mereka "cukup" untuk menyelesaikan masalah yang mereka minati, itu akan membuat hal-hal jauh lebih luar biasa dan lebih mudah didekati. Jika mereka benar-benar tertarik, dan ingin memahami seluk-beluknya, mereka mungkin akan kembali dan membaca buku yang komprehensif tentang pemrograman atau mengikuti kursus sekolah musim panas di JC setempat.
Buatlah daftar "hal-hal yang mereka ingin dapat kendalikan" pada robot mereka dan ubah masing-masing menjadi pelajaran ... apa yang paling tidak perlu mereka ketahui ...?
Saya akan tetap mengajarkan konstruksi yang paling mudah, seperti yang saya ajarkan tentang printf, karena format penspesifikasi sangat mudah digabungkan dan penspesifikasi yang salah sering merupakan resep otomatis untuk menghentikan program Anda. Demikian juga, vektor mengaburkan beberapa kompleksitas manajemen memori. Jangan khawatir tentang setiap detail tentang cara kerja, atau apa perpustakaan STL itu, paling tidak mereka perlu tahu untuk mencapai X (yang mungkin membutuhkan menggunakan struktur perpustakaan perpustakaan STL, misalnya)
sumber
Gunakan Cara Memprogram C ++ oleh Deitel dan Deitel. Buku teks yang SANGAT BAIK menurut saya.
Kedengarannya seperti Anda sedang mencoba mengajar pemula cara memprogram dan kemudian memprogram mereka pada tingkat lanjutan pada saat yang sama. Jika Anda berharap memberi mereka beberapa monyet lihat monyet melakukan pengkodean snippet tanpa pemahaman Anda ditakdirkan untuk gagal.
Tinggal jauh dari STL untuk kelas pemula.
Jika Anda sudah memiliki solusi pengkodean untuk robot Anda - atau IDE SANGAT BAIK seperti apa bentuknya maka mungkin Anda dapat "memetakan" pelajaran dalam buku teks ke tugas pengkodean untuk robot. Tapi biarkan buku teks mendorong pembelajaran.
Jika Anda memaksa memberi makan kode, memberikan siswa pelajaran yang sangat sempit dan paparan bahasa maka saya pikir sebagai lautan kode yang Anda tulis semakin besar dan lebih besar, itu akan seperti baru saja belajar mengayuh anjing dan Anda akan tenggelam karena berenang NYATA Dibutuhkan.
Ini bukan pertanyaan "haruskah mereka belajar cout atau printf?" Ini adalah pertanyaan tentang belajar cukup untuk memiliki wawasan tentang cara menulis kode untuk menyelesaikan tugas-tugas pemrograman robot.
Jika ini adalah tugas membaca, apa hasilnya jika semua yang mereka tahu adalah kalimat subjek-kata kerja sederhana dan hanya setengah dari kosakata yang Anda TAHU akan diperlukan.
sumber