Projekt zespołowy
Prowadzący
Jakub Sygnowski (<moje_nazwisko> na gmailu)
Opis
Proponuję bardzo praktyczne warsztaty z informatyki, których celem będzie napisanie jednego większego projektu informatycznego. Z (własnego) doświadczenia wiem, że w liceum mało kto ma okazję pracować nad czymś większym niż 200 linijkowy kod na olimpiadę. Pisanie większego projektu wymaga skupienia się na trochę innych aspektach programowania (np. pisanie czytelnego kodu, kontrola wersji). Z drugiej strony, ja nigdy nie próbowałem ogarniać projektu, który pisałoby więcej niż 4 osoby, także też mam nadzieję się czegoś nauczyć ;)
Temat samego projektu zostanie wybrany (pewnie w głosowaniu) spośród (sensownych) propozycji uczestników i moich[1]. Mam nadzieję, że powstanie coś fajnego, albo przynajmniej będziemy się dobrze bawić ;)
Program zajęć
Wstępnie program zajęć widzę tak:
- podział na 2-3 osobowe grupy, zastanowienie się nad schematem aplikacji, uzgodnienie API między zespołami
- klepanie
- integracja pracy poszczególnych zespołów
Wymagania
- Java
Żeby dać szansę wszystkim się przygotować do warsztatów, już na początku wybieram język i system kontroli wersji, którego użyjemy. Będą nimi: Java i git[2]. Zakładam, że typowy uczestnik warsztatów miał jakąś styczność z programowaniem jako takim wcześniej, a na warsztaty poznał podstawy nowego języka (oraz gita). Jednakże na warsztaty zapraszam też osoby, które nie programują, a np. umieją robić grafikę, czy generalnie mają ochotę i pomysł jak zrobić coś fajnego w ramach projektu (w sumie to trochę zależy od tego, co będziemy pisać/ile będzie osób piszących) - takie osoby proszę o maila (po zakwalifikowaniu się na WWW), gdyż nie za bardzo mam pomysł, jak uwzględnić je w kwalifikacji.[3]
Podejrzewam, że podczas programowania wyjdzie dużo różnych problemów związanych z samym językiem, technologią, integracją, etc.. Oczywiście będę starał się pomagać, ale cenna będzie umiejętność samodzielnego wygóglowania sobie rozwiązania szukanego problemu. Przy okazji, w przypadku programowania, polecam góglowanie po angielsku
- Git
Git to jeden z popularniejszych (jeśli nie najpopularniejszy) system kontroli wersji. Tego typu narzędzia służą do integracji pracy kilku osób na jednym kodzie źródłowym, przechowują historię zmian, ułatwiają peer review. To narzędzie bardzo nam się przyda, jednakże (znowu) nie wymagam jakiejś szczególnej jego znajomości; na początek warto poznać polecenia: status, log, diff, clone, commit, push, pull, potem ewentualnie tworzenie gałęzi (branchy).
- Leksykon
Zakładam też (intuicyjną) znajomość pojęć takich jak:
klasa (abstrakcyjna), obiekt, (publiczne/prywatne/statyczne) pole, metoda, API, (G)UI, IDE, dziedziczenie, diagram UML, <miejsce na to, co mi się przypomni>
Warto też znać jakiś mechanizm automatycznego formatowania kodu. Eclipse ma jakiś; jak nie, to zdarzało mi się używać astyle.
- Własny laptop
Do programowania może się przydać komputer. Nie wiem, jak będzie z dostępem do komputerów w Węgorzewie, podejrzewam że kiepsko; tak czy inaczej na swoim się wygodniej pisze.
Materiały
- Java
Generalnie do pisania w Javie polecam użycie jakiegoś IDE. Sam używam Eclipse'a, którego polecam (ma dużo opcji, których większości nie znam, ale te które znam, są fajne). (Żeby mieć zintegrowanego Gita w Eclipsie należy doinstalować plugin EGit). Jednakże jest dosyć 'ciężki' - z lżejszych IDE słyszałem, że netbeans też jest ok, a jeszcze lżejszych, to polecam SublimeText2.
Nauka javy - imo najlepiej uczy się pisząc kod, ale na początek może warto przejrzeć tutorial.
- Git
Tutoriali gita dostępnych w internecie jest mnóstwo, mi podoba się np. ten tutorial lub ten (od 7 strony) tutorial2, o jeszcze ten.
Zadania kwalifikacyjne
Kontakt
Lubię dostawać maile, więc zachęcam do kontaktu ze mną jeśli coś jest niejasne, albo ma się problem z zadaniami kwalifikacyjnymi. Bardzo zachęcam do zabrania się za zadania kwalifikacyjne wcześniej, wtedy a) ja będę miał więcej czasu na ich sprawdzenie, b) jest szansa dostać feedback wcześniej i coś poprawić
Pytania:
SJ: Jaką bibliotekę graficzną polecasz do rysowania map w zadaniu drugim?
JS: Moim założeniem było, żeby te mapy rysować w konsoli (tak, jak były narysowane przykładowe mapy)
MZ: 'rozwiązać konflikt…' - ale jaki konflikt? Robię wszystko na swoim branchu/forku, więc nie mam konfliktu
JS: Istotnie, mogłeś nie mieć konfliktu, jak tak się zdarzyło, to ok.
Uwagi
Jeśli jest zapotrzebowanie na materiały po polsku, nie bój się do mnie o to napisać
Moje nastawienie do prowadzonych przeze mnie warsztatów jest takie, że jestem tylko jedną z kilku(nastu? byłoby fajnie ^^) osób biorących w nich udział, więc jeśli masz jakieś uwagi, chciałbyś, żeby coś wyglądało inaczej - proszę o informację.
Footnotes
- ^ mam nadzieję, że moje będą sensowne; w szczególności, jeśli ja będę oceniał sensowność, to będą
- ^ wybrałem javę, bo a) ją lubię b) dużo łatwiej w niej integrować różne części, niż np. w C++, który podejrzewam znacie lepiej c) myślę, że warto się jej nauczyć :P
- ^ W szczególności, musiałbym wymyśleć dla nich osobne zadania kwalifikacyjne związane z tematami, na których się nie znam :P