Saya mengajar pemrograman pengantar di tingkat perguruan tinggi. Itu adalah kursus roti dan mentega, semua fakultas melakukannya, dan saya pikir kami melakukannya dengan cukup baik. Kami mengikuti teks umum dan ujian umum, tetapi kami masing-masing memiliki metode kelas kami sendiri yang berhasil. Sudah lama sejak itu, tapi kadang-kadang saya bisa mengajar beberapa anak dalam pemrograman, dan seluruh gambar hampir sama.
Cara saya melakukannya adalah mulai dari bawah, sekonkret mungkin. Apa yang siswa ketahui adalah sebuah struktur. Mereka sudah punya banyak konsep. Saya sedang membangun konsep lebih lanjut di atas semua itu, dan saya memangkas konsep yang mungkin mereka bentuk yang kontra-produktif. Pada saat yang sama, saya membuat mereka belajar sambil melakukan .
Saya telah membangun komputer kecil dengan chip Intel 8008, beberapa EPROM, dan beberapa sirkuit. Saya telah memprogramnya untuk memainkan duet kecil ketika chip I / O terhubung ke beberapa speaker. Saya akan menjelaskan bagaimana program kecil itu bekerja, dengan loop dalam untuk menghitung mundur sebuah penghitung. Itu akan bertindak sebagai penundaan. Maka itu akan beralih bit output dan melakukannya lagi. Itu akan melakukan itu untuk sementara waktu, dan kemudian beralih ke penundaan lain, memberikan nada lain, dan seterusnya. Chip memori memiliki timer kecil, dan jika saya memasukkan kapasitor di bawah salah satu input timer, program akan berjalan dengan lambat . Kelas dapat mendengar speaker berbunyi klik, klik, klik ... Saya ingin kelas memahami bahwa komputer melakukan hal-hal yang sangat sederhana selangkah demi selangkah. Lalu saya akan melepaskan kait kapasitor, dan "musik" akan meledak. (tepuk tangan)
Kemudian saya membangun simulator untuk komputer desimal yang sangat sederhana, memiliki 1000 lokasi memori, masing-masing memegang angka desimal 4 digit yang ditandatangani. Itu opcodes yang sangat sederhana seperti "tambahkan ke akumulator", "lompat jika negatif", dan sebagainya. Saya ingin mereka menulis program kecil dalam "bahasa mesin" ini, seperti menambahkan dua angka, atau menambahkan daftar angka. Kemudian mereka bisa menontonnya bekerja dengan satu langkah, atau menekan tombol Enter untuk menontonnya berjalan "cepat".
Inti dari ini adalah untuk meletakkan konsep bahwa komputer hanya dapat melakukan sejumlah kecil operasi dasar yang berbeda, dan mereka melakukannya satu per satu. Ini untuk melawan kesan bahwa mereka memiliki komputer yang rumit, dan bahwa mereka melakukan semuanya sekaligus, dan membaca pikiran Anda dengan murah.
Dari sana kami melanjutkan ke pemrograman dalam bahasa "nyata" (BASIC :), dimulai dengan program yang sangat sederhana namun menarik, bekerja melalui persyaratan, loop, array, file, penggabungan, dan sebagainya. Tujuannya adalah menempatkan seperangkat keterampilan yang cukup sehingga mereka dapat mengambil proyek yang mereka pilih sendiri, karena itulah satu-satunya hal yang membuat pemrograman menarik - penggunaan yang dapat Anda gunakan. Saya akan membuang beberapa ide untuk proyek, dan kemudian mereka akan mengambilnya dari sana. Saya akan meminta ide-ide tertulis, dan kemudian membuat laporan, agar mereka tidak menundanya hingga menit terakhir dan kemudian panik. Saya pikir proyek adalah bagian terbaik, karena mereka belajar di bawah kekuatan mereka sendiri.
Landasan awal itu dalam pemahaman yang sangat konkret tentang apa yang dilakukan komputer membuatnya lebih mudah untuk mengajarkan konsep di kemudian hari yang akan menjadi benjolan-benjolan kecepatan nyata, seperti array atau (dalam kursus nanti) petunjuk. Kita cenderung mengagungkan konsep "abstraksi" sebagai hal yang luar biasa ini, tetapi perlu dibangun di atas fondasi beton, bukan di udara.