Saya secara berkala mengajarkan pengantar kursus pemrograman menggunakan Java . Saya ingin memberi siswa saya beberapa tugas menarik yang dapat mereka hubungkan atau temukan menarik . Paling tidak, saya ingin tugas yang masuk akal dan memiliki kohesi internal (misalnya, beberapa latihan pemrograman yang sangat buruk tampaknya dibuat-buat sehingga Anda harus menggunakan konstruksi pemrograman yang paling baru tercakup).
Untuk memberi Anda gambaran tentang ruang lingkup, inilah yang dibahas :
- Penugasan harus di Jawa, menggunakan beberapa perpustakaan eksternal dapat dilakukan, tetapi itu harus menjadi API sederhana dan bukan kerangka kerja penuh
- Variabel, Primitif, dan String
- Input dan output konsol
if
,for
,while
- Operator aritmatika dan logis
- Grafik sederhana dengan gambar garis dan bentuk
- Metode statis
- Array satu dimensi
Para siswa tidak akan masuk ke topik lanjutan (mis., Tidak ada rekursi, tidak ada penekanan pada warisan). Jadi, saya tidak mencari proyek yang kompleks: "Mintalah mereka menulis kompiler C. Saya melakukannya ketika saya berusia 5 dan itu adalah satu-satunya cara saya belajar!"
Jika Anda memiliki ide yang lebih maju daripada ruang lingkup, silakan posting di pertanyaan "Menantang" yang ditautkan di bawah ini, dan bukan yang ini.
Sebaliknya, yang saya cari adalah ide-ide menarik yang dapat dicapai dalam program singkat. Sebagai contoh:
Siswa dapat menulis versi konsol dari Generator "Nama Star Wars" . Ini secara efektif membaca String dan menggunakan
substring
, tapi saya pikir itu menyenangkan. Variasi serupa akan menjadi program " Mad Libs ". Saya menggunakan ini lima tahun yang lalu, dan mungkin sudah "basi."Menggunakan beberapa trigonometri yang disediakan untuk mereka, siswa dapat menggambar poligon reguler, dan membuat bentuk spiral yang menarik.
Ini juga tidak keluar dari pertanyaan untuk menggunakan beberapa kelas animasi sederhana dengan sebagian besar kode dipasok kepada mereka. Dan jika Anda mengetahui layanan Twitter atau Facebook yang dapat diakses dengan API sederhana, saya akan sangat tertarik untuk mengetahuinya.
Harap perhatikan bahwa pertanyaan ini berbeda dari Pertanyaan " Menantang pertanyaan Java untuk pemula ". Saya tidak mencari tantangan semata, hanya menarik. Saya pikir jika siswa mengerjakan sesuatu di mana mereka dapat dengan mudah menjawab "mengapa ada orang yang mau memprogram itu?" maka mereka akan belajar lebih baik.
Bahkan masalah sederhana seperti menghitung Mil per galon bisa baik. Meskipun, jika ada cara untuk memperbaruinya agar lebih relevan, semua lebih baik. Jika Anda memiliki latihan dari tempat lain (buku atau situs web), harap sebutkan sumbernya.
Untuk membantu Anda berpikir tentang mahasiswa baru hari ini, lihat daftar Pola Pikir Beloit , untuk banyak contoh yang pasti akan membuat Anda merasa tua.
sumber
Jawaban:
Mengingat kendala, saya sarankan menerapkan versi Hangman. Ini akan memungkinkan para siswa untuk menunjukkan semua teknik yang Anda perkenalkan kepada mereka, tanpa menjadi terlalu rumit.
Ini juga dapat digunakan sebagai proyek pengembangan saat kursus berlangsung. mis. setelah Anda membahas string dan variabel dimulai sebagai versi teks
misalnya
kemudian perkenalkan loop untuk menghapus elemen cut and paste dari kode ketika 10 tebakan dihitung ... membangun hingga memiliki garis grafik dan tongkat orang digantung / disimpan pada akhir kursus 5 minggu.
Seperti kebanyakan orang lain yang memiliki pengalaman merekrut dan mewawancarai pemrogram, itu benar-benar membuat saya merasa ngeri bahwa tingkat kuliah ini diperlukan di universitas, tetapi sayangnya, itu mungkin akan terus dibutuhkan sampai sekolah memperlakukan pemrograman sebagai subjek serius setara dengan matematika atau sains
sumber
Kedengarannya seperti game petualangan teks bisa menjadi tugas yang hebat di suatu tempat pertengahan semester. Saya memiliki kelas yang membuat kami bermain Colossal Cave Adventure dan kemudian membuat game kami sendiri. Itu mengajari saya banyak konstruksi dasar sejak awal, dan itu sangat menyenangkan untuk dilakukan semua orang.
sumber
Bagaimana kalau menggunakan satu atau dua masalah dari http://projecteuler.net/ Beberapa di antaranya cukup menarik dan orang bisa melihat manfaat dari menulis sebuah program untuk menyelesaikannya. Mereka cukup kecil sehingga beberapa dapat dilakukan sebagai tugas. Satu lagi yang saya ingin gunakan adalah menemukan $ 1,00 kata-kata. Setiap huruf dalam alafabet bernilai posisinya dalam uang yaitu a = 1, b = 2. Berapa banyak kata $ 1,00 dolar yang dapat Anda temukan? Ini bisa melibatkan file i / o (membaca dalam kamus), array, perulangan dll.
sumber
Menerapkan permainan Monopoli. Monopoli memiliki urutan yang jelas dan mudah dibagi menjadi fungsi-fungsi dengan sangat mudah. Ini juga hanya membutuhkan array satu dimensi dan beberapa kelas dasar. Logikanya cukup sederhana sehingga siswa akan lebih banyak berpikir tentang "bagaimana" daripada "apa", dan itu menghasilkan sesuatu yang dapat diperlihatkan kepada orang lain.
Beri mereka file terenkripsi yang dienkripsi dengan beberapa aturan yang dapat dibalik dan minta mereka untuk menulis decoder (buat itu cukup sederhana). Ini memberikan insentif ekstra untuk menyelesaikannya karena misteri tentang konten pesan.
Saya tidak tahu mengapa Anda hanya mencakup satu array dimensi dan bukan matriks (mereka benar-benar tidak jauh berbeda), tetapi jika Anda bersedia memasukkannya ke dalam game sylabus Game of Life Jon Conway juga relatif mudah dan menghasilkan sesuatu menyenangkan.
Gim seperti catur membutuhkan pemikiran tetapi masih dalam batas-batas apa yang dapat dilakukan oleh pemula dengan pewarisan minimal (bidak spesifik mewarisi dari kelas Piece umum, dan board memegang objek tipe Piece), dan array 2D (Anda dapat memilih untuk sederhanakan dengan tidak perlu mengimplementasikan hal-hal yang sulit seperti pendeteksian teman sekerja atau ketidakmampuan untuk benteng jika ada musuh yang mengancam jalur kastil)
sumber
Kami menciptakan beberapa proyek dengan hanya i / o, fungsi dan operator bersyarat di sekolah. Semua dilakukan sebelum kita belajar tentang pemrograman berorientasi objek. Proyek-proyek ini maju perlahan menjadi semakin sulit. Cukuplah untuk mengatakan, 4 jam yang kami miliki setiap minggu hampir tidak cukup menjelang akhir tahun.
Semua proyek ini dilakukan hanya dengan fungsi & i / o:
Gim yang belajar. Anda mengambil sejumlah batang, pc mengambil sejumlah batang. Ulangi. Yang terakhir yang memegang tongkat kehilangan. Kami harus membuat program belajar mandiri sederhana yang menjadi lebih baik setelah setiap pertandingan. Contoh yang bagus untuk mempelajari array 2D.
Pemecah kode. Anda tahu enkripsi Caesar, pilih huruf dan tambahkan nilai huruf ke setiap huruf kata Anda. Misalnya kunci = 'a' dan kata = "rahasia". Ini akan menjadi "tfdsfq". Dapat dilakukan dengan membaca file dan kemudian membuat tabel frekuensi untuk setiap huruf. Anda juga membaca dalam Alkitab bahasa Inggris. Kemudian Anda bisa melihat bahwa huruf yang paling sering digunakan dalam alfabet bahasa Inggris adalah 'e' dan menyelesaikannya. Tantangan yang ditambahkan: gunakan kunci seperti 'ab' yang merupakan tugas kami. Latihan yang baik untuk memahami saya / o.
Pembuat barcode. Program ini adalah latihan untuk memanggil perpustakaan eksternal. Anda mendapat kode dan harus membuat gambar dengan kode batang. Perpustakaan eksternal digunakan untuk menghasilkan gambar.
Algoritma genetik untuk memecahkan masalah salesman keliling. Ini adalah proyek yang lebih maju untuk 2 atau 3 orang. Anda mulai dengan rute acak dan rute ini membaik sepanjang waktu sampai Anda memiliki "rute yang baik". Bonus: buat peta dengan rute.
Program kompresi lzw yang berfungsi . Ini adalah proyek final, 4 orang. Parameternya cukup sederhana. "Zip file.txt file.zip" atau yang serupa. Proyek yang menyenangkan tetapi memahami algoritma lzw butuh beberapa saat.
sumber
Kalkulator akan menjadi proyek yang bagus untuk mempelajari operasi aritmatika. Anda dapat membuatnya menjadi aplikasi konsol berbasis menu sederhana, atau GUI. Empat fungsi (+, -, *, /) untuk memulai, dengan poin tambahan untuk hal-hal yang lebih kompleks seperti root kuadrat, dll.
Untuk penanganan string, saya akan menyarankan beberapa masalah validasi. Alamat email terlintas dalam pikiran - membiarkannya tidak dicentang dapat menyebabkan lubang injeksi SQL, atau hal-hal lain, dan mereka relatif mudah untuk divalidasi. Untuk menambahkan, mungkin memiliki program yang dapat mengambil nama depan, tengah, dan belakang dan merangkai mereka bersama spasi, dan juga mengambil nama lengkap dan menguraikannya ke dalam setiap komponen. Yang pertama digunakan lebih dari yang kedua dalam kehidupan nyata, tetapi saya belum bisa memikirkan skenario parsing lain yang cukup sederhana.
Untuk menunjukkan metode statis, Anda dapat menetapkan masalah pencarian email. Memiliki file nama dan email, dan konstruktor statis dapat memasukkan nama / email ke dalam daftar, dengan metode statis untuk menemukan email untuk nama yang diberikan.
Semoga ini memberi Anda beberapa ide! Semoga beruntung dengan kelasmu.
sumber
Satu hal yang sangat menarik dan keren untuk sebuah tugas adalah menulis implementasi Game of Life Conway dalam 2D. Ini memetakan dengan sangat baik untuk struktur data array dasar, itu menyenangkan dan cukup mudah dilakukan, tetapi masih membutuhkan pemikiran. Ini mungkin membuka beberapa keingintahuan dan eksperimen (AI).
Siswa tingkat lanjut dapat menulis versi dalam 3D untuk poin tambahan.
sumber
Saya akan beralih pada generator bilangan prima.
Tugas
sumber
Saya menggunakan Perpustakaan ACM untuk membantu siswa intro melakukan grafik dan permainan sederhana. Kami sudah dapat melakukan permainan dasar, dua pemain, berbasis pemain dengan tidak lebih dari keterampilan yang Anda uraikan. Minggu ini mereka melakukan permainan Fox and Hounds .
Saya sudah berusaha untuk menjauh dari konsol I / O selama mungkin. Ini adalah konsep asing bagi banyak siswa hari ini, karena mereka semua tumbuh dengan GUI. Jadi saya fokus pada MVC, mendapatkan model yang benar, dan menambahkan GUI hanya setelah mereka menguji model mereka. Pengujian dilakukan melalui pengujian unit otomatis dan Code Pad di BlueJ . Tidak
public static void main()
perlu, selamanya.sumber
Saya mengajar dengan cara intro di abad terakhir, dan itu BASIC, tetapi seperti Anda, saya ingin membuat para siswa mengerjakan proyek yang menyenangkan dengan rancangan mereka sendiri. Jadi saya menyarankan banyak kemungkinan:
... atau apa pun yang dipikirkan siswa. Mereka akan datang kepada saya dan berkata "bagaimana dengan program untuk melakukan XYZ?" dan saya akan selalu mengatakan "Hebat", dan kemudian mungkin membimbing mereka sedikit untuk tidak membuatnya terlalu rumit.
Biasanya proyek mereka berakhir menjadi beberapa ratus baris kode, dan mereka selalu menikmatinya.
PS Saya memberikan tugas ini setelah siswa kompeten dengan struktur kontrol dasar, I / O, array, dan file berurutan. Itu adalah istilah proyek, bagian utama dari nilai mereka, dan saya memiliki tugas tonggak menengah, seperti bagian garis besar melalui, jadi mereka tidak mencoba untuk melakukan semuanya pada akhirnya dan menabrak dinding. Saya ingin memasukkan mereka ke dalam ini di awal semester mungkin, ketika mereka memiliki keterampilan yang cukup untuk memulai, biasanya sekitar minggu 6 atau 8.
sumber
Saya meminta seorang guru untuk menulis program yang Anda tulis modulnya. Pada dasarnya, itu adalah permainan dan Anda harus menulis algo untuk menyelesaikannya, semuanya ada di sana untuk membuatnya grafis dan cantik dan berfungsi dengan baik. Mungkin Anda harus menulis kerangka permainan Anda sendiri dan memberi mereka alat dasar yang merupakan versi bodoh dari hal-hal keren yang dapat mereka lakukan nanti di luar kotak tempat Anda memasukkannya.
sumber
Dalam kursus intro saya, tiga proyek menonjol pada saya
Menulis program untuk menampilkan lukisan Mondrian acak.
Tulis bagian pertama dari permainan BrickBreaker, dapatkan bola memantul di dalam area yang ditentukan
Tulis permainan petualangan berbasis teks
Dari kelas algoritma saya,
Terapkan segitiga Serpinski
Keempat proyek ini memberi saya pemahaman besar tentang pemrosesan string, pengacakan, grafik, rekursi, dan animasi.
sumber
Apakah semua siswa di kelas CS jurusan? Dugaan saya tidak. Saya akan datang dengan tugas yang disesuaikan dengan jurusan di kelas.
Contoh:
Siswa seni dapat menulis sebuah program yang mengambil dimensi selembar kanvas dan bingkai untuk menghitung jumlah kanvas tidak akan tersedia untuk melukis (karena membungkus dan menjepit kanvas di sekitar bingkai).
Siswa Econ dapat menghitung bunga majemuk pada suatu item.
Siswa matematika dapat memilih masalah dari Project Euler.
sumber
Di SMA, saya mengambil kelas pemrograman pengantar, dan kami menggunakan Karel J. Robot . Ini memberikan gui untuk melihat robot Anda, dan memiliki serangkaian sensor dan metode gerakan yang sangat mendasar yang harus Anda perluas agar membuatnya melakukan hal-hal menarik. Saya pikir itu bagus karena robot mudah dimengerti bagi orang yang belum mengembangkan pemahaman tentang perbedaan antara perangkat lunak.
Ada juga Pemrosesan , yang baru saja saya temukan, yang awalnya dirancang untuk mengajarkan pemrograman, dan juga di java.
sumber
Saya akan menjadi pembangkang di sini. Saya pikir Anda harus memberi mereka masalah jenis bisnis yang valid untuk diselesaikan, bukan playtoy. Jika mereka tidak cukup serius untuk tertarik dan termotivasi dengan jenis pekerjaan yang sebenarnya akan mereka lakukan sebagai seorang profesional, saya lebih suka Anda gagal dalam kursus intro. Pekerjaan nyata bukan tentang membuat barang-barang keren, ini tentang memenuhi kebutuhan klien. Saya juga melihat banyak orang yang tidak bisa membuat lompatan antara apa yang mereka pelajari dalam game dan menggunakan teknik yang sama dalam pemrograman bisnis.
Setiap pengembang senior dan manajer perekrutan yang saya tahu merasa jijik dengan kualitas lulusan baru. Cobalah berfokus pada apa yang mereka butuhkan untuk belajar bekerja di dunia nyata dan lupakan untuk membuatnya menyenangkan.
sumber
Tugas untuk membuat widget konyol di ponsel mereka. Sesuatu yang bisa mereka tunjukkan pada teman-teman mereka. Saya memiliki telepon AT&T yang sangat murah dan dibutuhkan semacam file jar.
sumber
Tugas paling penting yang saya lihat memaksa orang untuk memikirkan sesuatu yang seharusnya tidak mereka pertimbangkan. Sesuatu yang sepenuhnya di luar materi kursus yang sederhana, sesuatu yang tampaknya mustahil. Sesuatu yang memiliki beberapa solusi yang valid.
Beberapa yang membuat saya terkesan:
Roshambo AIs (digunakan dalam kursus AI di UOA). Fungsi sederhana yang mengembalikan -1, 0, 1 untuk batu, kertas, gunting. AI saling bertentangan, dan statistik dikumpulkan oleh program utilitas agregat. Tugas ini secara konstan mengejutkan orang-orang dalam berapa banyak pendekatan yang layak (dan berapa banyak yang berkinerja sangat buruk).
Masalah penyortiran sederhana dengan karakteristik yang tidak mungkin. Sortir file dengan panjang tak hingga dengan memori terbatas. Masalah ini mengguncang fondasi pemikiran saya dalam algoritma. Ada banyak masalah terkait: rata-rata berjendela atas data panjang tak terbatas, dll., Masing-masing memaksa solusi untuk sesuatu yang tampaknya mustahil.
Masalah simulasi yang muncul sepele. Simulasi lalu lintas (kendaraan, jaringan), simulasi mobil balap (kiri, kanan, lebih cepat, lebih lambat), simulasi toko kelontong.
Masalah jaringan (kelemahan besar dalam lulusan saya telah bekerja dengan selama beberapa tahun terakhir). Peer networking networking with handhelds, misalnya, membuktikan kompleksitas masalah n-sinkronisasi, pembaruan rekan, kepercayaan rekan, dll.
Bahasa kecil (kelemahan lain dalam lulusan baru). Kembangkan sedikit bahasa untuk AI permainan sederhana (catur, roshambo, tank, mojo CSS, bot Twitter). Berpikir tentang konsep desain bahasa, interpretasi, dan tindakan adalah fundamental.
sumber