Kiat untuk mengajar menggunakan Pengodean Langsung

11

Saya terlibat dalam kursus pemrograman dan algoritma tahun pertama. Dalam sebuah kuliah baru-baru ini, saya memutuskan untuk mempresentasikan materi menggunakan live coding , yang pada dasarnya berarti bahwa saya duduk di belakang keyboard dan menulis kode dan mengevaluasinya, menggunakan emacs untuk memfasilitasi proses.

Ini cukup berhasil dan siswa berkomentar tentang betapa mereka menghargai format (inter) yang lebih aktif. Karena ini adalah upaya pertama saya menggunakan format pengajaran ini, saya tahu itu tidak berjalan dengan sempurna. Beberapa masalah terkait dengan tidak sepaham dengan emacs seperti yang seharusnya, dan yang lain berkaitan dengan membiarkan pertanyaan siswa membuat saya terlalu jauh dari naskah saya. Saya tahu saya bisa melakukan yang lebih baik.

Apa saja pedoman untuk memberikan kuliah (dan demonstrasi lainnya) menggunakan kuliah coding langsung?
Apa jebakan yang harus dihindari?

Dave Clarke
sumber
2
Saya merasa ragu tentang live coding (kebanyakan tentang throughput dan ilusi pemahaman). Namun demikian, dua saran: 1) Sudahkah Anda mempertimbangkan menggunakan sistem respons kelas untuk menyusun pertanyaan? 2) Saya tidak tahu seberapa praktis itu, tetapi menggunakan sesuatu seperti ideone.com mungkin menarik karena siswa dapat mengakses kode Anda setelah kuliah dan menjalankannya tanpa harus menginstal barang.
Raphael
@ Raphael: Saya mendapat perhatian mereka jauh lebih baik dari sebelumnya, yang tentunya merupakan nilai tambah. Dua saran Anda sangat bagus. 1) Saat ini hanya orang-orang yang benar-benar mengikuti yang menawarkan umpan balik. 2) Bahasa saya tidak ada dalam daftar. Yang mengatakan, semua kode tersedia dalam slide (yang saya abaikan).
Dave Clarke

Jawaban:

8

Berikut adalah beberapa tips dan jebakan yang saya kumpulkan setelah menggunakan live coding selama seminggu, dan dari berbicara dengan seorang kolega.

LAKUKAN

  • Persiapkan skrip untuk diikuti dan cobalah untuk tetap menggunakannya.
  • Bersihkan buffer sesering mungkin untuk fokus pada bagian yang relevan.
  • Mulai lagi untuk setiap topik baru.
  • Gunakan font yang lebih besar.
  • Kuasai alat yang Anda gunakan, untuk menghindari membuang terlalu banyak waktu untuk hal-hal sepele.
  • Memiliki fungsi latar belakang yang sudah diprogram. Jika tidak terlalu relevan, pastikan mereka dapat diimpor, daripada muncul di file kerja.
  • Idealnya bekerja dalam bahasa yang memberi Anda umpan balik segera. Bahasa dengan shell interaktif adalah yang terbaik dalam hal ini.
  • Saat menggunakan yang diketik, berikan jenis fungsi yang Anda tulis yang diharapkan. Ini memberikan cahaya penuntun bagi siswa.
  • Bebas melakukan kesalahan (meski tidak terlalu banyak). Langkah melalui bagaimana ini harus diperbaiki.
  • Jangan lupa - sebuah gambar melukiskan ribuan kata: slide interleave dan pekerjaan papan tulis / hitam dengan sesi coding Anda.
  • Miliki slide ringkasan untuk poin yang telah Anda bahas
  • Terkadang, saat memodifikasi kode, mungkin membuat salinan dan memodifikasi salinan. Ini memberikan titik perbandingan.
  • Bersihkan kode secara berkala.
  • Terima bahwa Anda akan membuat kesalahan dan secara terbuka mengizinkan siswa untuk mengoreksi Anda --- ini membuat pekerjaan Anda lebih mudah dan memberdayakan mereka.
  • Tulis kode dengan gaya Anda sendiri. Misalnya, Anda mungkin telah menyalin kode dari tempat lain. Tetapi ini akan sulit direproduksi. Lebih baik menulis dengan gaya Anda sendiri. Sebagai contoh, saya selalu menulis fungsi kari, karena saya memprogram sebagian besar Haskell. Tetapi Standar ML lebih jarang menggunakan idiom. Mengharapkan fungsi kari adalah kesalahan paling umum yang saya buat di kelas.
  • Secara fisik, pastikan ruang Anda sudah diatur dengan baik. Keyboard yang bagus, pada ketinggian yang tepat, kabel semua di tempat yang tepat, hambatan fisik keluar dari jalan, dll. Luangkan waktu sebentar sebelum Anda mulai membuat ruang Anda bekerja untuk Anda, bukan melawan Anda.
  • Salah satu pendekatan adalah menulis apa pun yang dikatakan siswa, meskipun itu salah. Ini membuat siswa melakukan pengkodean, dan perbaikannya. Sebaiknya bersihkan kode di bagian akhir. Pendekatan ini dapat membuat model kelas perhatian dan interaksi, karena siswa perlu memperhatikan untuk mengikuti apa yang sedang terjadi.

JANGAN

  • Jangan optimalkan kode Anda dengan cepat dan hancurkan sedemikian rupa sehingga Anda tidak dapat memperbaikinya.
  • Hindari berbicara dengan komputer. Bicaralah dengan siswa!
  • Hindari mengetik terlalu banyak, terutama kode boilerplate. Manfaatkan lingkungan Anda untuk membantu Anda mengeluarkan template untuk Anda.
  • Jika Anda menggunakan editor teks, hindari terus-menerus mencari. Ini akan menyebabkan mabuk perjalanan yang mereka coba ikuti.
  • Jika Anda menggunakan editor teks, sebelum membuat perubahan radikal pada kode Anda, peringatkan siswa bahwa Anda akan melakukannya, sehingga mereka dapat melacak apa yang sedang terjadi.
Dave Clarke
sumber
1
Berapa banyak murid di kelasmu? Saya suka DO Anda ke arah interaktivitas tetapi bertanya-tanya bagaimana itu menskalakan hingga 50, 100, 250 siswa.
Raphael
1
Apakah Anda menerbitkan kode setelah kelas? Saya membayangkan repositori Github di mana siswa dapat menelusuri berbagai versi yang Anda buat (mungkin termasuk versi komentar yang dipoles dan tidak pernah muncul di kelas) dan melihat perbedaannya. Mereka juga bisa mengkloning repositori untuk dengan mudah menggunakan algoritma yang pernah ditulis sebagai subrutin dalam pekerjaan rumah mereka (jika itu diinginkan).
Raphael
1
Apakah Anda mempersiapkan unit test untuk menjalankan kode Anda? Saya tidak yakin apakah itu sesuai di setiap kelas (apakah fokus mempelajari prinsip-prinsip bahasa pemrograman, pengembangan perangkat lunak atau algoritma?) Tetapi mungkin mengajarkan beberapa praktik terbaik di sepanjang jalan.
Raphael
2
1) 128 orang mendaftar untuk kelas ini, meskipun sekitar 60-80 muncul. 2) Saya sudah memiliki kode pada slide, tetapi saya tidak menggunakan slide. Jadi para siswa memiliki versi tentang apa yang saya lakukan, tidak pernah ada langkah menengah. Saya tidak begitu yakin betapa menariknya memiliki semua variasi. 3) Tidak, saya tidak, meskipun mereka menulis spesifikasi informal. Fokusnya adalah belajar bahasa pemrograman pertama dan beberapa algoritma / struktur data. Tapi saya setuju. Tes unit adalah sesuatu yang kami anggap akan lebih terintegrasi ke dalam kursus. Terima kasih atas pertanyaan / kiat implisitnya.
Dave Clarke