Saya akan terlibat dengan semacam 'hari terbuka' di universitas saya dalam beberapa minggu. Sebagai bagian dari waktu ini, saya (bersama seorang rekan kerja) diberikan sejumlah besar siswa tingkat sekolah menengah selama dua jam, serta lab komputer yang cukup besar untuk menampung semuanya, dan saya harus melakukan semacam aktivitas atau serangkaian kegiatan dengan mereka untuk mendorong mereka melakukan ilmu komputer (di universitas saya, idealnya, tetapi secara umum juga). Saya benar-benar bingung apa yang harus dilakukan di sini, dan menyambut setiap dan semua saran.
40
Jawaban:
sumber
Lihat Ilmu Komputer Unplugged . Dari situs mereka:
sumber
Sebagian besar mahasiswa Ilmu Komputer yang saya tahu menganggap belajar program sebagai bagian yang paling menyakitkan dan melemahkan pendidikan mereka. Karena itu saya akan tinggal jauh dari apa pun yang berkaitan dengan pemrograman itu sendiri. Seperti yang sudah ditunjukkan oleh scphantm , Anda mungkin juga tidak akan punya waktu untuk ini.
Apa yang Anda cari adalah latihan dua jam yang memuaskan dua tujuan:
Tujuan pertama cukup independen dari apa yang sebenarnya akan Anda tunjukkan dan lebih banyak berhubungan dengan menjadi guru / presenter yang baik. Praktik didaktik yang baik, yaitu menjaga audiens tetap berjalan, membiarkan mereka mencoba hal-hal kecil dalam kelompok, memberi mereka istirahat setiap 15 menit, dan seterusnya.
Tujuan kedua adalah sedikit rumit, dan apa yang saya pikir paling baik di sini adalah untuk mengambil masalah yang dapat dijelaskan dengan pengetahuan mereka saat ini, menunjukkan bagaimana Anda dapat menggambarkan solusi secara algoritmik, dan kemudian menunjukkan bagaimana solusi itu dapat dianalisis dan ditingkatkan.
Contoh yang baik adalah masalah jalur terpendek dalam grafik, atau dikenal sebagai sistem navigasi GPS. Tidak perlu penjelasan. Anda bisa memberi mereka peta kecil dengan bobot tepi / panjang ditarik dan sekelompok krayon untuk benar-benar mengeksekusi algoritma saat Anda menggambarkannya.
Anda kemudian dapat memulai diskusi tentang bagaimana Anda akan menemukan jalur terpendek, dan seterusnya, biarkan mereka mencoba untuk merumuskannya sebagai suatu algoritma, dll ... Kemudian Anda menggambarkan algoritma Dijkstra , membiarkan mereka mewarnai simpul sebagai dikunjungi , sementara , dan set yang belum dikunjungi . Bam. Anda punya algoritme!
sumber
Jika Anda hanya memiliki 2 jam, Anda tidak akan menyelesaikan banyak pengkodean. Hanya belajar sintaksis akan sulit pada saat itu, tetapi ada banyak hal yang dapat dilakukan sebagai gantinya.
Sebagai saran, cobalah mengajari mereka mengontrol aliran dan pentingnya menjadi spesifik:
Sebagai tugas contoh, siapkan beberapa bak bola berwarna berbeda, dengan potongan kertas berwarna yang sesuai di tempat lain dan ember kecil yang cukup untuk setiap pasangan robot / pemrogram. Tugasnya adalah membuat robot mengisi ember dengan bola, namun untuk melakukannya mereka hanya bisa mengambil bola yang cocok dengan selembar kertas tertentu. Jika tidak ada lagi bola dengan warna seperti itu dalam sebuah bak, maka robot harus mengembalikan selembar kertas dan mengumpulkan yang baru.
Tugas ini membutuhkan percabangan bersyarat, pengulangan, penanganan kesalahan, dan berpikir secara prosedural. Semua hal yang perlu dilakukan oleh seorang programmer, terlepas dari bahasa atau aktivitasnya.
Jalankan sesuatu seperti ini dua kali sehingga "robot" dan "programmer" dapat bertukar. Di antaranya, berikan pelajaran kecil tentang pola pemikiran di atas, dan mereka akan melakukan jauh lebih baik di yang kedua, ditutup dengan pembicaraan kecil tentang acara-acara besar dalam pemrograman - mengalahkan Nazi, pergi ke bulan, internet, dan Anda akan memiliki ruang programmer yang potensial dan terlibat!
sumber
Saya sudah melatih banyak programmer. Jika yang Anda miliki hanya 2 jam, jangan repot-repot mengajari mereka cara membuat kode. Laboratorium komputer juga tidak perlu. Untuk beralih dari nol ke halo dunia, Anda akan kehilangan setengah kelas dan menghabiskan waktu 45 jam dari 2 jam Anda berurusan dengan gangguan dan tidak menyelesaikan apa pun.
Anda mungkin lebih beruntung menunjukkan kepada mereka bagaimana rasanya berpikir seperti seorang programmer. Beri mereka masing-masing kertas dan pena dan beri tahu mereka untuk menulis sebuah program dalam bahasa mereka sendiri tentang cara mengangkat telepon seluler mereka dari meja dan melakukan panggilan telepon. Berjalanlah melalui jawaban mereka. Jika kode Anda sedikit garam, Anda dapat melangkah melalui program mereka dan memberi tahu mereka cara membuatnya lebih baik dan bagaimana menyesuaikan detail yang harus Anda miliki. Kemudian mintalah mereka untuk menulis sebuah program dengan kata-kata mereka sendiri untuk melakukan sesuatu yang biasa. Kenakan celanamu, sikat gigi, buka pintu, apa pun. Lakukan hal yang sama dengan program itu.
Beri mereka rasa bagaimana rasanya BERPIKIR seperti seorang programmer. Mereka pasti akan mendapatkan lebih banyak dari itu daripada Anda mencoba mengajari mereka Python dalam 2 jam.
sumber
Anda mungkin mencoba Alice . Ini adalah IDE dan API untuk animasi 3D. Ia memiliki semua jenis objek bawaan (kelinci, alien, pohon, bangunan, ...) yang dapat Anda tempatkan dalam adegan awal, dengan metode tingkat sangat tinggi: seperti
walk(north)
(yang menggerakkan lengan dan kaki saat karakter bergerak) dansay("my name is Winky")
yang dapat menyebabkan gelembung kartun keluar dari mulut karakter.Ini memungkinkan Anda untuk menghubungkan acara-acara keyboard dan mouse sehingga Anda dapat melakukan hal-hal yang interaktif.
Bahasa pemrograman yang mendasarinya adalah Java, tetapi IDE memberi Anda varian grafis tempat Anda menyeret dan melepaskan bagian ekspresi ke jendela editor. (Itu tidak akan membiarkan Anda membuat kesalahan sintaks.)
Saya pikir Anda bisa mengatur semuanya dengan sebuah adegan sehingga seseorang tanpa pengalaman pemrograman dapat melakukan sesuatu yang menarik hanya dalam beberapa jam.
sumber
Pengodean, bahkan dalam mainan atau bahasa grafis, tampaknya dibuat-buat dalam waktu satu jam. Sial, saya tidak yakin bisa menjemput Alice lagi dan melakukan apa pun yang bermanfaat dalam 2 jam. Mungkin akhir pekan, tetapi tidak 2 jam.
Saya sarankan mendidihkan CS ke hal-hal mendasar: pemecahan masalah dan analisis. Bagi kelompok menjadi beberapa tim. Luangkan 10 menit untuk menjelaskan beberapa masalah komputasi tingkat tinggi. Ini harus menjadi masalah mudah yang dapat dengan mudah dijelaskan kepada orang-orang dengan sedikit latar belakang matematika atau CS. Contohnya termasuk:
Ambil 10 menit lagi untuk diskusi lebih lanjut, dan untuk menjelaskan tugas tersebut. Setiap kelompok diberi satu masalah, untuk itu mereka melakukan brainstorming solusi. Tim akan memiliki waktu setengah jam untuk secara kolaboratif mencari solusi atau solusi untuk masalah yang ditugaskan kepada mereka. Kemudian, luangkan satu jam untuk membahas solusi di seluruh kelompok, dan biarkan anak-anak mencari tahu apakah mereka bekerja atau tidak, apakah ada cara yang lebih cepat / lebih baik untuk menyelesaikan masalah, dll.
Jika anak-anak tidak mendapatkan solusi yang benar / optimal, tidak apa-apa. Namun, jangan hanya memberikan jawabannya - ini sangat penting. Alasan mengapa anak-anak tidak melakukan STEM lagi adalah karena pendidik memberi kesan pada anak-anak bahwa semuanya sudah diketahui. Dibutuhkan konselor yang sangat dewasa untuk membiarkan anak-anak mencoba memecahkan masalah ini, dan untuk berhasil atau gagal, sendiri. Mendapatkan jawaban yang tepat bukan itu intinya. Intinya adalah memberi anak-anak masalah yang menarik dan menunjukkan kepada anak-anak tentang ilmu komputer: menyelesaikan masalah, dan mengevaluasi solusi untuk kebenaran dan efisiensi. Membiarkan anak-anak memberikan jawaban mereka sendiri akan memberi mereka rasa memiliki dan membantu mereka merasa terlibat.
Tentu saja, jika anak-anak bertanya apakah mereka mendapat jawaban yang benar / baik / paling terkenal, katakan yang sebenarnya. Tetapi jangan hanya memberikan jawaban, kecuali mereka muncul secara organik sebagai hasil dari mendiskusikan solusi siswa. Untuk meringkas:
sumber
Saya 17 sekarang dan saya mulai pemrograman sekitar waktu saya berusia 16 tahun. Saya akan menceritakan kisah saya dan daripada membuat beberapa saran: Ketertarikan saya pada pemrograman dimulai ketika saya sedang menonton seorang teknisi komputer yang saya panggil main-main dengan daftar saya dan command prompt ( walaupun dia ingin $ 500 untuk memperbaiki BSOD saya dan saya tidak membayar, saya memperbaikinya sendiri) Jadi saya mencari "command prompt language" di Google dan menemukan bahwa ada sesuatu yang disebut "kode sumber" dan itu memungkinkan Anda untuk memprogram . Pada saat itu saya tidak tahu apa itu c ++, saya bahkan tidak berpikir pernah mendengarnya. Jadi saya melanjutkan dengan cpp.com (tutorial yang sangat buruk, Anda akan belajar praktik buruk dan usang) dan mulai mempelajari dasar-dasarnya. Pikiran saya menjadi gila dan saya benar-benar mengetahui bahwa virus yang saya terinfeksi menyebabkan masalah saya ditulis dalam c ++, yang semakin membuat saya tertarik. Saya kemudian mulai membaca, belajar berkumpul dan bahasa tingkat tinggi lainnya. Pertama saya mulai ingin belajar tentang malware dan pemrograman Grafik dan saya lakukan.
Lego Mindstorms adalah Ide yang bagus. Jika Anda tidak ingin mengambil rute panjang dan menggunakan bahasa utama, ia dilengkapi dengan bahasa pemrograman gaya blok yang dapat Anda gunakan. Saya menemukan bahasanya dalam sekitar 30-40 menit, semuanya berbaris ketika Anda memikirkannya
Anda dapat dengan cepat mengembangkan aplikasi dan memamerkannya, berbicara kepada mereka tentang $$ yang dapat berasal dari pengembangan aplikasi.
sumber
beberapa favorit saya
menghasilkan fraktal . mereka memiliki tautan kuat ke matematika mendalam dan grafik komputer, dan juga mereka secara alami cocok untuk paralelisme. itu menggambarkan kompleksitas dan perilaku yang muncul , khususnya ketika Anda memperbesar skala yang sewenang-wenang, dan memiliki ikatan yang kuat dengan ilmu pengetahuan dan fenomena alam. tidak sulit untuk menulis beberapa kode fraktal paralel yang berjalan pada banyak mesin. satu percobaan adalah membuat setiap mesin menampilkan garis acak yang diprosesnya (mis. mesin "budak" yang memproses garis dari antrian) dan kemudian mesin pusat menampilkan hasil gabungan.
robotika lego (atau kit robotika lainnya, mis. perangko ). mindstorms adalah mainan, tetapi bisa menjadi mainan yang sangat canggih yang berfungsi sebagai demonstrasi nyata dari konsep-konsep abstrak. perangkat lunak yang dapat dijalankan dengan mereka bisa sangat kompleks, dan mereka dapat memiliki loop / algoritme akal-pikir-tindakan yang rumit. ada banyak buku konstruksi yang bagus. juga mengesankan adalah pemecah kubus Rubiks , baru-baru ini memecahkan rekor dunia.
raspberry pi adalah platform murah baru yang melihat banyak minat dan penggunaan. dapat digunakan untuk mendemonstrasikan pemrograman linux, robotika dll, dan memiliki output HD, dll. lihat misalnya supercomputer Southhampton raspberry pi dengan rak Lego.
Logo seperti yang disebutkan dalam jawaban lain adalah klasik lama. sudut lain yang lebih baru adalah pemrograman game misalnya dengan bahasa populer baru yang muncul yang disebut Scratch (ditemukan di MIT ). dapat mengajarkan banyak topik CS alami / lanjutan.
sumber
ada sudut lain. ada begitu banyak masalah terbuka yang menarik atau teknologi yang muncul dalam ilmu komputer di garis depan pemahaman ilmiah yang dapat memicu keingintahuan / keajaiban, yaitu eksplorasi terra incognita terdekat . jika Anda mengangkat masalah dan kemudian minta kelas berpartisipasi dalam diskusi tentang konsekuensi solusi, yang dapat memicu minat / inspirasi yang signifikan. [karena Anda menyebutkan ketersediaan lab komputer, juga dimungkinkan untuk membuat beberapa latihan komputer secara langsung terkait dengan bidang-bidang ini.]
ini bisa mengambil perasaan sci-fi tetapi dalam CS tidak seperti bidang lain, itu mengubah apa yang dulunya scifi menjadi kenyataan dalam waktu singkat. mereka juga bisa menjadi kontroversial dan tepat waktu, berhubungan dengan tajuk utama hari ini, dan siswa dapat mulai memahami betapa CS ada di mana-mana di dunia / masyarakat kita, dan seberapa signifikan hal itu, ketika ditafsirkan secara luas. berikut adalah beberapa yang besar:
Masalah pelipatan DNA menjadi protein . apakah ada algoritma untuk menghitungnya secara akurat?
kecerdasan buatan pada umumnya. apa itu mungkin? apakah ada etika yang terlibat?
robotika memiliki berbagai bidang utama yang muncul. mis. otonom / mengemudi . itu di cakrawala nearterm. bagaimana ini akan mempengaruhi masyarakat? video dari kontes DARPA belum lama ini mengesankan. Tulisan Kurzweil memiliki banyak hal untuk dibahas. drone adalah topik rumit yang jarang dibahas secara terbuka dan akan semakin sering digunakan di dalam negeri. para penemu mars adalah teknologi luar biasa dan ada kisah-kisah menakjubkan di baliknya, seperti bagaimana sistem harus di-debug dari jarak jauh — secara antar-plan ketika mereka gagal.
Sistem surveilans berbasis IT untuk mendeteksi kejahatan / terorisme menjadi berita utama akhir-akhir ini.
bos Higgs tidak dapat ditemukan dan supercollider tidak dapat berfungsi sama sekali tanpa sistem berbasis CS besar untuk menganalisis "data besar".
Hukum Moore . seberapa jauh itu akan berlanjut? berapa banyak sudah mempengaruhi masyarakat / kemanusiaan?
Komputer kuantum . apakah mungkin? apakah mereka akan lebih cepat? akankah mereka menjadi orang-orang dengan biaya rendah atau selalu tidak sehat? Dwave adalah studi kasus yang penuh warna, ada artikel SciAm yang bagus dari Aaronson, dll
Algoritma Google PageRank adalah salah satu keajaiban multibilliondollar dari ilmu komputer modern. apakah akan diperpanjang? bagaimana cara kerja penyaringan spam? perusahaan tampaknya bergerak ke arah menganalisis gambar, dll.
algoritmik / perdagangan frekuensi tinggi sekarang menggerakkan volume / nilai perdagangan dalam jumlah besar. apakah itu baik / buruk? apakah itu meningkat / menurun? apakah ini akan diatur di masa depan? perlombaan senjata komputasi seperti apa yang terlibat?
superkomputer sangat besar, memecahkan masalah yang luar biasa, dan semakin besar. apakah ada batasan? apa yang mereka hitung dan apa yang akan mereka hitung di masa depan? agak terkait, Big Data dan datamining .
situs jejaring sosial memiliki implikasi besar dalam pertumbuhan kurang dari satu dekade. mereka terlibat dalam memicu pemberontakan populer misalnya musim semi Arab dan Occupy wall st . apa masa depan mereka?
sumber
Saya punya usul itu
Kami telah mengadakan lokakarya kecil dengan siswa sekolah menengah tentang Minesweeper . Lokakarya kira-kira akan seperti ini:
Mari kita mainkan game ini sedikit (paling tahu itu).
Apa yang baru saja kita lakukan? Apa masalah yang kita coba selesaikan? Bisakah kita merumuskan aturan umum?
Ini biasanya akan memakan waktu cukup lama. Anak-anak tidak terbiasa merumuskan masalah dalam hal input dan output agar aturan umum untuk menyelesaikannya tidak. Mereka yang telah memprogram sebelumnya akan menghargai upaya; referensi "kode spageti" dapat membantu. Namun demikian, sebagian besar aturan sederhana, mengingat hanya satu sel pada satu waktu.
Menunjukkan masalah dengan aturan.
Pada titik ini, Anda ingin memperkenalkan simulator Minesweeper . Yang dibuat oleh Bayer, Snyder dan Chouiery tidak sempurna tetapi memungkinkan Anda menunjukkan skenario yang dirancang dengan cermat.
Tingkatkan aturan untuk mencakup lebih banyak skenario.
Ini biasanya akan mengarahkan siswa untuk menyelidiki lebih banyak sel bersama-sama. Anda juga dapat mendorong mereka ke arah pendekatan "selesaikan semua" seperti mengekspresikan informasi yang ada sebagai sistem persamaan linear - ini muncul jika Anda mencoba untuk mengekspresikan informasi yang tersedia dalam istilah matematika. Siswa sudah tahu bagaimana menyelesaikan sistem seperti itu!
Batasan catatan.
Pertama, ada skenario yang tidak memiliki solusi (deterministik). Selain itu, kita dapat membedakan kekuatan kasar dengan strategi yang dikembangkan. Bisakah kita menukar kecepatan dengan daya? Jika pendekatan sistem persamaan muncul, perhatikan bahwa kita hanya dapat menyelesaikan ini secara efisien di atas real, tetapi kita membutuhkan jawaban biner. Tidak terlalu sulit untuk membangun skenario yang mengarah ke runtimes besar (kami menggunakan aljabar komputer untuk menggambarkan).
Bergantung pada kelompoknya, pendekatan ini memungkinkan untuk mencakup beberapa prinsip ilmu komputer dengan cara alami: mendefinisikan masalah, menjelaskan algoritma umum, pemecahan masalah berulang serta masalah komputabilitas dan kompleksitas semua dapat disentuh.
Umpan balik oleh siswa secara keseluruhan positif; mereka merasa terlibat dan mengekspresikan minat pada konsep. Penting bagi mereka untuk melakukan sebagian besar pekerjaan, hanya dengan hati-hati mendorong mereka ke arah yang diinginkan dengan mengajukan pertanyaan yang tajam.
sumber
Anda memiliki banyak hal yang harus dilakukan ... tetapi satu hal yang kelihatannya sangat menarik adalah "uang", jadi tanyakan pertanyaan "P ≠ NP" dan hadiah tujuh milenium, ketika saya di sekolah menengah saya membacanya meskipun saya tidak tahu notasi satu-satunya hal yang saya mengerti: ada hadiah dan pertanyaan besar! hal lain akan menghadirkan koneksi matematika dan ilmu komputer seperti: memecahkan persamaan, memeriksa solusi menggunakan komputer.
hal lain yang saya sarankan adalah menghadirkan Alan turing "bapak ilmu komputer" dan menceritakan kisahnya. hal terakhir yang saya sarankan adalah nol bukti pengetahuan dan permainan "di mana waldo?" dan bermain tanpa curang dan kriptografi dan serangan dunia maya.
sumber
Lakukan apa saja dengan facebook, mereka menyukainya. Mungkin ini sulit bagi pemula, tetapi Anda dapat membiarkan mereka menggambar grafik koneksi, yang menunjukkan bagaimana profil mereka terhubung satu sama lain. Saya akan merekomendasikan Javascript sebagai bahasa pemrograman.
sumber