Saya telah mengambil Ilmu Penempatan Komputer Lanjutan untuk tahun terakhir ini di sekolah menengah. Tampaknya seolah-olah kita diajarkan untuk menghafal kode dan fungsi saja dan bukan bagaimana menjadi cerdas dan efisien dalam menggunakan dokumentasi dan sejenisnya.
Secara praktis, saya membayangkan banyak (jika tidak semua) pekerjaan pemrograman akan memungkinkan Anda membolak-balik dokumentasi, meninjau kode masa lalu dan kode orang lain, pada dasarnya melakukan apa yang guru saya anggap "selingkuh."
Sementara saya setuju konsep inti sangat penting untuk dihafal (dalam subjek apa pun), tampaknya berlebihan dan tidak praktis bagi saya untuk memberikan ujian pena-dan-kertas untuk kelas CS, terutama ketika secara praktis Anda akan memiliki kompiler, debugger, referensi manual, dan seluruh internet untuk dirujuk dalam situasi kerja di dunia nyata.
Mengapa CS diajarkan berfokus pada menghafal kode dan fungsi yang bertentangan dengan mengajarkan keterampilan yang berguna termasuk bagaimana menggunakan dan menafsirkan dokumentasi, kode sampel, debugger dan semacamnya?
Jawaban:
Di kelas sekolah menengah, Anda berada di tingkat paling dasar dari jalan Anda menuju penguasaan. Hal-hal yang tercakup di kelas Anda adalah hal-hal yang diharapkan diketahui oleh programmer profesional. Dalam banyak hal, ini mirip dengan mempelajari "tabel waktu" Anda. Tentu saja Anda akan selalu dapat mengambil kalkulator dalam pengaturan "dunia nyata", tetapi menghafal ini tidak hanya meningkatkan kecepatan Anda dalam tugas yang lebih kompleks, tetapi juga mempromosikan pemahaman yang lebih menyeluruh tentang prinsip-prinsip dasar.
Misalnya, Anda harus mengetahui beberapa algoritma penyortiran, cara penerapannya, cara kerjanya, kapan paling baik digunakan, dan kapan tidak menggunakannya. Ini selalu bisa dilihat, tetapi seharusnya tidak harus - lebih dari seorang ahli matematika harus mencari 6 kali 8.
sumber
Ini sering diajarkan dengan cara ini karena guru umumnya tidak tahu cara lain menguji pemahaman. Perasaan Anda sepenuhnya benar karena tidak ada gunanya diajarkan seperti ini. Cara orang dididik pada umumnya sangat membutuhkan reformasi!
Hidup menjadi lebih baik, setidaknya di UIUC saya telah menemukan bahwa semakin tinggi Anda pergi di kelas CS Anda semakin sedikit ujian berorientasi seperti yang Anda jelaskan dan di sebagian besar kursus saya kami telah diizinkan lembar contekan untuk semua omong kosong bahwa Anda mungkin sudah googled jika Anda benar-benar duduk di depan komputer.
Yang sedang berkata, semakin tinggi saya telah pergi di kelas saya semakin sedikit mereka benar-benar mengajari Anda tentang bahasa atau bagaimana menerapkan sesuatu. Sebenarnya saya hanya punya satu kelas di mana mereka sebenarnya mengajarkan kami apa saja tentang pemrograman, itu sebagian besar konsep matematika abstrak dan kami diharapkan hanya mencari tahu bagian pemrograman sendiri (asalkan mereka selalu senang untuk membantu tetapi ini adalah tidak pernah ada sesuatu dalam ujian).
sumber
Jangan biarkan sekolah mengganggu pendidikan Anda.
- Mark Twain
Saya seorang Meksiko dan memberi tahu Anda hal ini karena di Meksiko sebenarnya bukan tempat yang baik untuk pendidikan (dalam tingkat apa pun), setidaknya dalam pendidikan publik.
Nah, di tengah karir saya (CS) saya merasa persis sama seperti yang Anda rasakan, jadi saya mulai belajar sendiri dan saya menghabiskan satu tahun belajar algoritma, linux, scripting, bagaimana komputer saya bekerja, sedikit relasional database, html, css, dll (sedikit tentang semua). Dan tentu saja, saya harus melewati kelas *, menurunkan nilai saya * dan lulus satu tahun setelah *, semua untuk belajar.
Setelah tahun itu, saya kembali ke rutinitas "normal", kembali ke kelas reguler, pekerjaan rumah, ujian, dan proyek. Kelas-kelasnya masih membosankan, tidak ada yang baru untuk dipelajari, semuanya sama. Jadi saya memutuskan untuk masuk ke situs kontes pemrograman seperti hakim UVA online , juru kode dan euler proyek , kemudian saya menonton beberapa ceramah di MIT Open Course Ware dan saya masih belajar sendiri, tetapi dengan cara yang berbeda.
Pelajaran: Jangan biarkan hal-hal terjadi, buatlah hal-hal terjadi. Jika Anda tidak puas dengan cara Anda belajar, ubahlah!
* Bukan keputusan paling bijak yang telah saya buat.
sumber
Itu tergantung pada apa yang Anda coba hafalkan ...
Untuk mempelajari matematika, misalnya, Anda harus terbiasa dengan aljabar dan Anda harus sering menjadi kreatif dalam cara melakukan manipulasi aljabar untuk menyederhanakan persamaan. Tetapi Anda harus mengingat blok-blok bangunan tertentu agar dapat fokus pada potongan-potongan menarik itu. Anda harus, misalnya, hafal tabel perkalian Anda dengan hati dan Anda harus tahu beberapa identitas sehingga Anda bisa mengenali cara memanipulasi persamaan untuk menggunakan identitas itu.
Untuk mempelajari ilmu komputer, Anda juga harus terbiasa dengan struktur dan algoritma data blok bangunan dasar karena Anda perlu menerapkannya pada masalah tingkat yang lebih tinggi. Sangat tidak mungkin bahwa Anda akan pernah, misalnya, menulis implementasi daftar tertaut Anda sendiri di dunia nyata, Anda hanya akan menggunakan yang disediakan oleh perpustakaan Anda. Tetapi mengetahui bagaimana daftar tertaut diterapkan dan bagaimana menerapkan daftar Anda sendiri, Anda akan dapat mempertimbangkan di mana dan apakah akan menggunakan daftar tertaut ketika Anda mulai bekerja pada masalah tingkat yang lebih tinggi. Demikian pula, Anda tidak akan pernah menulis fungsi pencarian biner Anda sendiri tetapi penting untuk memahami cara kerjanya sehingga Anda dapat mempertimbangkan hal-hal seperti di mana database dapat menggunakan indeks dan di mana tidak bisa.
Setelah Anda menghafal beberapa blok bangunan dasar, jauh lebih mudah untuk melakukan hal-hal seperti menafsirkan dokumentasi. Dokumentasi mungkin menunjukkan bahwa daftar sedang digunakan dan berasumsi bahwa pemrogram secara implisit tahu bahwa ini berarti memasukkan adalah O (1) dan pencarian adalah O (n). Blok bangunan juga jauh lebih stabil dari waktu ke waktu - Anda sangat mungkin menggunakan debugger baru setiap beberapa tahun, Anda cenderung menggunakan pencarian biner yang sama sepanjang karier Anda.
sumber
"Mengapa CS diajarkan berfokus pada menghafal ... sebagai kebalikan dari mengajarkan keterampilan yang berguna" - Saya pikir Anda terlalu sedikit menghafal. Sama seperti Anda harus berlatih menulis kode, menafsirkan dokumentasi, menggunakan debugger, Anda juga harus berlatih menghafal.
Anda mungkin terkejut betapa efisiennya jadinya jika Anda tidak harus sering-sering pergi ke referensi API atau mencari banyak perintah debugger.
Salah satu hal terbaik yang saya pelajari di sekolah menengah adalah dengan mengamati seorang teman yang tidak pernah membuat catatan apa pun di kelas. Argumennya adalah dia bisa mengingat apa yang penting. Saya mulai melakukan hal yang sama dan berpikir bahwa itu meningkatkan keterampilan menghafal saya yang saya temukan sangat berguna setiap hari bahkan dengan semua referensi API yang tersedia.
sumber
Ujian pena dan kertas benar-benar masuk akal jika tujuannya adalah untuk menguji pemahaman yang lengkap tentang subjek yang ada. Saya mengikuti ujian Ilmu Komputer AB hampir satu dekade lalu dan saya setuju dengan metode pena dan kertas.
Anda harus cukup tahu tentang algoritma apa pun yang Anda pelajari di tingkat yang lebih rendah dari Ilmu Komputer untuk dapat menjelaskan bagaimana menulis kode implementasi dalam bahasa target Anda. Siswa juga harus dapat menulis kode dengan tangan dengan sebagian besar sintaks yang benar. Kita semua terkadang melewatkan tanda titik koma atau tanda kurung :). Juga keterampilan debugging dan desain dapat diuji tanpa inferensi dari IDE yang bermanfaat.
Jika seorang siswa tidak dapat melakukan ini, maka mereka tidak memiliki penguasaan topik itu, hanya mungkin suatu keakraban yang lewat.
sumber
Dalam pengalaman saya, menghafal datang dengan latihan sederhana dan sama sekali tidak perlu mengajarkannya sama sekali. Lebih penting lagi, pendekatan ini hanya berarti menghafal apa yang sebenarnya perlu Anda ingat dalam apa pun yang Anda lakukan, bukan sekelompok sampah acak yang guru Anda harapkan mungkin Anda butuhkan dan selalu Anda tidak akan mengingatnya. Waktu yang dihabiskan untuk mengingat implementasi beberapa algoritma bisa jauh lebih baik digunakan untuk beberapa penyebab lainnya.
Lagi pula, mengapa Anda perlu berlatih menulis algoritma? Setelah Anda menulis sekali, Anda dapat menggunakannya kembali untuk semua waktu - bahkan pada kesempatan yang sangat jauh bahwa orang lain belum menulis implementasi yang tersedia secara bebas untuk bahasa pilihan Anda dan bahwa lingkungan Anda belum menyediakan seperti itu sebuah algoritma untuk Anda gunakan, yang sepele tidak benar untuk sebagian besar algoritma sederhana seperti pengurutan dan semacamnya. Mempraktikkan sesuatu di tempat yang sangat tidak mungkin Anda harus melakukannya sejak awal dan bahkan jika Anda melakukannya, Anda hanya perlu melakukannya sekali saja? Bukan penggunaan waktu yang berharga.
Hal penting yang perlu diketahui tentang Heapsort bukanlah bagaimana menerapkannya sama sekali. Ini kompleksitas operasi dalam kasus terbaik dan terburuk, dan hal-hal serupa. Tapi, yang mengejutkan, ada tabel berguna-keren di Wikipedia yang akan langsung memberi Anda informasi ini. Jadi sekali lagi, tidak ada gunanya memiliki pengetahuan itu. Ini langsung tersedia untuk Anda kapan pun Anda inginkan dari sekarang hingga akhir waktu tanpa biaya. Jadi mengapa Anda ingin menghafalnya? Tidak ada gunanya.
Dalam pengalaman saya, sama sekali tidak ada alasan untuk meminta siswa untuk menghafal apa pun. Jika Anda mengajukan pertanyaan yang dapat dijawab dari sumber referensi, maka Anda mengajukan pertanyaan di mana dapat menjawabnya tidak memiliki nilai.
sumber
ORDER BY
dan C ++std::sort
.