Od czasu do czasu uczę wprowadzenia do programowania z wykorzystaniem Java . Chcę dać moim uczniom ekscytujące zadania, z którymi mogą się odnosić lub które mogą być interesujące . Przynajmniej chcę zadań, które mają sens i mają wewnętrzną spójność (na przykład niektóre bardzo złe ćwiczenia programistyczne wydają się być opracowane tylko po to, abyś musiał użyć najnowszego omówionego konstruktu programistycznego).
Aby dać Ci pojęcie o zakresie, oto, co jest omawiane :
- Przypisania muszą odbywać się w Javie, przy użyciu biblioteki zewnętrznej można wykonać, ale musiałby to być prosty interfejs API, a nie pełny framework
- Zmienne, prymitywy i łańcuchy
- Wejście i wyjście konsoli
if
,for
,while
- Operatory arytmetyczne i logiczne
- Prosta grafika z rysowaniem linii i kształtów
- Metody statyczne
- Tablice jednowymiarowe
Uczniowie nie będą wchodzić w zaawansowane tematy (np. Brak rekurencji, brak nacisku na dziedziczenie). Dlatego nie szukam skomplikowanych projektów: „Poproś, aby napisali kompilator C. Zrobiłem to, gdy miałem 5 lat i to był jedyny sposób, którego się nauczyłem!”
Jeśli masz pomysły bardziej zaawansowane niż zakres, prześlij je na poniższe pytanie „Trudne”, a nie to.
Zamiast tego szukam interesujących pomysłów, które można zrealizować w krótkim programie. Na przykład:
Uczniowie mogą napisać konsolową wersję generatora „Star Wars Name” . To skutecznie czyta napisy i używa
substring
, ale myślę, że to zabawne. Podobną odmianą byłby program „ Mad Libs ”. Użyłem tego pięć lat temu i być może już jest „nieświeży”.Korzystając z dostarczonych im wyzwalaczy, uczniowie mogą rysować regularne wielokąty i tworzyć ciekawe spiralne kształty.
Nie jest wykluczone użycie prostej klasy animacji z większością dostarczonego kodu. A jeśli znasz serwis Twitter lub Facebook, do którego można uzyskać dostęp za pomocą prostego interfejsu API, byłbym bardzo zainteresowany.
Pamiętaj, że to pytanie różni się od pytania „ Trudne pytania Java dla początkujących ”. Nie szukam wyzwań per se, po prostu interesujących. Myślę, że jeśli uczniowie pracują nad czymś, w czym mogą łatwo odpowiedzieć „dlaczego ktokolwiek miałby chcieć to zaprogramować?” wtedy nauczą się lepiej.
Nawet proste problemy, takie jak obliczanie Mil na galon, mogą być dobre. Chociaż, jeśli istnieje sposób, aby go zaktualizować, aby był bardziej odpowiedni, tym lepiej. Jeśli masz ćwiczenie skądinąd (książka lub strona internetowa), przytocz źródło.
Aby pomóc Ci pomyśleć o typowym studentach pierwszego roku, zapoznaj się z listą myślenia Beloit , zawierającą wiele przykładów, które z pewnością sprawią, że poczujesz się stary.
źródło
Odpowiedzi:
Biorąc pod uwagę ograniczenia, sugerowałbym wdrożenie wersji Hangmana. Pozwoliłoby to uczniom zademonstrować wszystkie techniki, które wprowadzasz, bez nadmiernej złożoności.
Może być również wykorzystywany jako projekt rozwijający się w miarę postępu kursu. np. po omówieniu ciągów znaków i zmiennych zaczyna się jako wersja tekstowa
na przykład
następnie wprowadź pętle, aby usunąć wycięty i wklej element z kodu, gdy 10 odgadnięć odlicza ... budowanie do posiadania grafiki liniowej i wieszania / zapisywania osoby pod koniec 5-tygodniowego kursu.
Podobnie jak większość innych osób, które mają doświadczenie w rekrutowaniu i przeprowadzaniu wywiadów z programistami, naprawdę czuję się przygnębiony, że ten poziom czesnego jest potrzebny na uniwersytecie, ale niestety prawdopodobnie będzie nadal potrzebny, dopóki szkoły nie potraktują programowania jako poważnego przedmiotu na równi z matematyka lub nauki ścisłe
źródło
Wygląda na to, że tekstowa gra przygodowa może być świetnym zadaniem gdzieś w połowie semestru. Miałem zajęcia, które zmusiły nas do gry w Colossal Cave Adventure, a następnie do stworzenia własnej gry. Nauczył mnie wielu podstawowych konstrukcji na początku i było fajnie, że wszyscy się w to wcielili.
źródło
Co powiesz na użycie jednego lub dwóch problemów ze strony http://projecteuler.net/ Niektóre z nich są dość interesujące i można zauważyć korzyści płynące z napisania programu do ich rozwiązania. Są na tyle małe, że kilka można wykonać jako zadania. Innym, którego lubię używać, jest znalezienie 1,00 USD słów. Każda litera w alfabecie jest warta swojej pozycji w centach, tj. A = 1, b = 2. Ile słów 1,00 $ można znaleźć? Może to obejmować operacje wejścia / wyjścia pliku (czytanie w słowniku), tablice, zapętlanie itp.
źródło
Zaimplementuj grę Monopoly. Monopol ma oczywistą sekwencję i bardzo łatwo dzieli się na funcitony. Wymaga również tylko jednowymiarowej tablicy i kilku podstawowych klas. Logika jest na tyle prosta, że uczniowie zastanowią się więcej nad „jak” niż „co” i da to coś, co można pokazać innym.
Daj im zaszyfrowany plik, który został zaszyfrowany przy użyciu pewnej odwracalnej reguły i poproś, aby napisali dekoder (choć uprość to). Daje to dodatkową motywację do rozwiązania tego problemu z powodu tajemnicy dotyczącej treści wiadomości.
Nie wiem, dlaczego obejmujesz tylko tablice jednowymiarowe, a nie macierze (tak naprawdę nie są aż tak różne), ale jeśli chcesz włączyć to do sylabusa Gra życia Jona Conwaya jest również stosunkowo łatwa i daje w wyniku coś zabawa.
Gra taka jak szachy wymaga przemyślenia, ale nadal mieści się w zakresie tego, co początkujący może zrobić przy minimalnym dziedzictwie (konkretne elementy dziedziczą z kawałka klasy ogólnej, a na planszy znajdują się obiekty typu Piece) oraz tablice 2D (możesz wybrać uprościć to, nie wymagając implementacji trudnych rzeczy, takich jak wykrywanie gwiaździstych gali lub niemożność zamku, jeśli pionki wroga zagrażają ścieżce roszady).
źródło
W szkole stworzyliśmy całkiem sporo projektów z tylko we / wy, funkcjami i operatorami warunkowymi. Wszystko zrobione, zanim dowiedzieliśmy się o programowaniu obiektowym. Projekty te postępowały powoli, by stawać się coraz trudniejszym. Wystarczy powiedzieć, że 4 godziny, które mieliśmy każdego tygodnia, nie były prawie wystarczające pod koniec roku.
Wszystkie te projekty zostały wykonane przy użyciu tylko funkcji i operacji we / wy:
Gra, która się uczy. Bierzesz kilka patyków, komputer bierze kilka patyków. Powtarzać. Ostatni, który trzyma kij, traci. Musieliśmy stworzyć prosty program do nauki, który był lepszy po każdej grze. Dobry przykład do nauki tablic 2D.
Łamacz kodów. Znasz szyfrowanie Cezara, wybierz literę i dodaj wartość litery do każdej litery twojego słowa. Np. Klucz = „a” i słowo = „sekret”. Oznaczałoby to „tfdsfq”. Można tego dokonać, czytając plik, a następnie tworząc tabelę częstotliwości dla każdej litery. Czytasz także w angielskiej biblii. Następnie możesz po prostu zobaczyć, że najczęściej używaną literą w alfabecie angielskim jest „e” i rozwiązać ją. Dodatkowe wyzwanie: użyj klucza takiego jak „ab”, co było naszym zadaniem. Dobre ćwiczenie na zrozumienie we / wy.
Kreator kodów kreskowych. Ten program był ćwiczeniem do wywołania biblioteki zewnętrznej. Masz kod i musiałeś wygenerować obraz z kodem kreskowym. Do wygenerowania obrazu użyto zewnętrznej biblioteki.
Algorytm genetyczny do rozwiązania problemu podróżujących sprzedawców. Był to bardziej zaawansowany projekt dla 2 lub 3 osób. Zaczynasz od losowej trasy i ta trasa cały czas się poprawia, aż do uzyskania „dobrej trasy”. Bonus: utwórz mapę z trasą.
Działający program do kompresji Lzw . To był ostatni projekt dla 4 osób. Parametry były dość proste. „Zip file.txt file.zip” lub coś podobnego. Zabawny projekt, ale zrozumienie algorytmu Lzw zajęło trochę czasu.
źródło
Kalkulator byłby dobrym projektem do nauki operacji arytmetycznych. Możesz uczynić go prostą aplikacją konsolową opartą na menu lub graficznym interfejsem użytkownika. Cztery funkcje (+, -, *, /) na start, z dodatkowymi punktami dla bardziej złożonych rzeczy, takich jak pierwiastek kwadratowy itp.
W przypadku obsługi ciągów sugerowałbym pewne problemy z weryfikacją. Przychodzą mi na myśl adresy e-mail - pozostawienie ich niezaznaczonych może prowadzić do luk w iniekcji SQL lub innych rzeczy, a ich weryfikacja jest stosunkowo prosta. Do dołączania może mieć program, który może przyjmować pierwsze, środkowe i nazwiska oraz łączyć je ze spacjami, a także brać pełną nazwę i parsować ją w każdym komponencie. Pierwszy jest używany bardziej niż drugi w prawdziwym życiu, ale nie byłem w stanie wymyślić innego scenariusza analizowania, który byłby wystarczająco prosty.
Aby zademonstrować metody statyczne, możesz przypisać problem z wyszukiwaniem wiadomości e-mail. Posiadaj plik nazw i wiadomości e-mail, a konstruktor statyczny może umieścić nazwy / wiadomości e-mail na liście za pomocą statycznej metody znajdowania wiadomości e-mail dla danego imienia.
Mam nadzieję, że te dadzą ci kilka pomysłów! Powodzenia w twojej klasie.
źródło
Jedną z bardzo interesujących i fajnych rzeczy do wykonania zadania jest napisanie implementacji Gry Życia Conwaya w 2D. Bardzo dobrze odwzorowuje podstawowe struktury danych tablicowych, jest zabawny i dość łatwy do zrobienia, ale wciąż wymaga myślenia. Może to także wywołać ciekawość i eksperymenty (AI).
Zaawansowani uczniowie mogą napisać wersję w 3D za dodatkowe punkty.
źródło
Chciałbym przeprowadzić iterację na generatorze liczb pierwszych.
Zadania
źródło
Korzystam z Biblioteki ACM, aby pomóc uczniom wprowadzającym w tworzeniu prostych grafik i gier. Byliśmy w stanie tworzyć podstawowe, oparte na kliknięciach gry dla dwóch graczy, z niczym więcej niż umiejętnościami, które przedstawiłeś. W tym tygodniu grają w Fox and Hounds .
Starałem się trzymać jak najdalej od wejścia / wyjścia konsoli. Jest to obca koncepcja dla wielu studentów, ponieważ wszyscy dorastali z GUI. Dlatego skupiam się na MVC, poprawie modelu i dodaniu GUI dopiero po przetestowaniu jego modelu. Testowanie odbywa się za pomocą zautomatyzowanych testów jednostkowych i Code Pad w BlueJ . Nigdy nie
public static void main()
jest konieczne.źródło
Uczyłem wstępu w ostatnim stuleciu i było to PODSTAWOWE, ale tak jak ty chciałem zachęcić uczniów do zabawy w ich własny projekt. Zasugerowałem więc kilka możliwości:
... lub cokolwiek, co pomyśleli uczniowie. Przyszli do mnie i powiedzieli „a może program do XYZ?” i zawsze mówiłbym „Świetnie”, a potem może trochę ich poprowadziłem, żeby nie komplikował.
Zazwyczaj ich projekty zawierały kilkaset linii kodu i zawsze im się podobało.
PS Przypisałem to zadanie, gdy uczniowie znali podstawowe struktury kontrolne, operacje we / wy, tablice i pliki sekwencyjne. Był to projekt terminowy, znaczna część ich oceny, a ja miałem pośrednie zadania pośrednie, takie jak zarys częściowy, więc nie próbowali zrobić tego wszystkiego na końcu i uderzyli w ścianę. Chciałem zaangażować ich w to jak najwcześniej w semestrze, kiedy mieli wystarczająco dużo umiejętności, aby zacząć, zwykle około 6 lub 8 tygodnia.
źródło
Miałem nauczyciela, który napisał program, dla którego napisałeś moduły. Zasadniczo była to gra i trzeba było napisać algo, aby ją rozwiązać, wszystko było po to, aby była graficzna, ładna i ładnie działała. Być może powinieneś napisać własne środowisko gry i dać im podstawowe narzędzia, które są głupimi wersjami fajnych rzeczy, które mogą zrobić później poza pudełkiem, w którym je umieściłeś.
źródło
Na moim wstępie utknęły we mnie trzy projekty
Napisz program do wyświetlania losowego obrazu Mondriana
Napisz pierwszą część gry BrickBreaker, odbijając piłkę w wyznaczonym obszarze
Napisz tekstową grę przygodową
Z mojej klasy algorytmów
zaimplementuj trójkąt Serpinski
Te cztery projekty pozwoliły mi doskonale zrozumieć przetwarzanie ciągów, randomizację, grafikę, rekurencję i animację.
źródło
Czy wszyscy uczniowie w klasie kierunków CS? Domyślam się, że nie. Wymyśliłem zadania dostosowane do głównych kierunków w klasie.
Przykłady:
Studenci sztuki mogliby napisać program, który przyjmuje wymiary kawałka płótna, a ramka do obliczenia ilości płótna byłaby niedostępna do malowania (z powodu owijania i zszywania płótna wokół ramy).
Studenci Econ mogli obliczyć odsetki złożone od przedmiotu.
Studenci matematyki mogli wybrać problemy z projektu Euler.
źródło
W szkole średniej wziąłem lekcję programowania wprowadzającego i korzystaliśmy z Karela J. Robota . Zapewnia GUI do przeglądania robota i ma bardzo podstawowy zestaw czujników i metod ruchu, które musisz rozszerzyć, aby robić ciekawe rzeczy. Myślę, że jest to dobre, ponieważ roboty są łatwe do zrozumienia dla osób, które jeszcze nie zrozumiały różnicy między oprogramowaniem.
Istnieje również Processing , który właśnie odkryłem, który pierwotnie został zaprojektowany do nauczania programowania, a także w Javie.
źródło
Będę tutaj dysydentem. Myślę, że powinieneś dać im ważne problemy biznesowe, aby rozwiązać problemy z zabawkami. Jeśli nie są wystarczająco poważni, aby być zainteresowani i zmotywowani pracą, którą faktycznie wykonają jako profesjonaliści, wolałbym, żebyś ich oblał podczas kursu wprowadzającego. Prawdziwa praca nie polega na tworzeniu fajnych rzeczy, ale na zaspokajaniu potrzeb klienta. Widziałem też wielu ludzi, którzy nie potrafią; skoczyć między tym, czego uczą się w grze, a wykorzystaniem tych samych technik w programowaniu biznesowym.
Każdy starszy programista i menedżer ds. Rekrutacji, których znam, jest oburzony jakością ostatnich absolwentów. Spróbuj skoncentrować się na tym, czego potrzebują, aby nauczyć się pracować w prawdziwym świecie, i zapomnij o tym, aby było fajnie.
źródło
Zadanie polegające na zbudowaniu głupiego widgetu na ich telefonach komórkowych. Coś, co mogliby pokazać swoim znajomym. Mam niedrogi telefon AT&T i wymaga plików jar.
źródło
Najważniejsze zadania, które widziałem, zmuszają ludzi do myślenia o czymś, czego inaczej by nie rozważyli. Coś całkowicie poza prostym materiałem kursu, coś, co wydaje się niemożliwe. Coś, co ma wiele poprawnych rozwiązań.
Kilka, które zrobiły na mnie wrażenie:
Roshambo AIs (używane na kursie AI w UOA). Prosta funkcja, która zwraca -1, 0, 1 dla kamienia, papieru, nożyczek. AI są przeciwko sobie, a statystyki są gromadzone przez zagregowany program narzędziowy. Zadanie to nieustannie zaskakuje ludzi, ile podejść jest wykonalnych (i ilu osiąga tak słabe wyniki).
Proste problemy z sortowaniem o niemożliwych cechach. Posortuj plik o nieskończonej długości za pomocą skończonej pamięci. Ten problem wstrząsnął moimi podstawami myślenia w algorytmach. Istnieje wiele powiązanych problemów: średnie okienkowe dla danych o nieskończonej długości itp., Każde z nich wymusza rozwiązanie czegoś z pozoru niemożliwego.
Problemy z symulacją, które wydają się trywialne. Symulacje ruchu (pojazd, sieć), symulacje samochodu wyścigowego (lewy, prawy, szybszy, wolniejszy), symulacje sklepu spożywczego.
Problemy z siecią (duża słabość wśród absolwentów, z którymi pracowałem przez ostatnie kilka lat). Problemy z siecią równorzędną z urządzeniami przenośnymi, na przykład dowodzenie złożoności problemów z synchronizacją n, aktualizacjami równorzędnymi, zaufaniem równorzędnym itp.
Małe języki (kolejna słabość ostatnich stopni). Opracuj mały język dla prostej gry AI (warcaby, roshambo, czołgi, CSS mojo, boty na Twitterze). Myślenie o koncepcjach projektowania języka, interpretacji i działań jest fundamentalne.
źródło