29 listopada 2010

Po wykładzie na PWSZ w Tarnowie

O planach związanych z wykładem pisałem w poprzednim wpisie - Wykład akademicki na PWSZ w Tarnowie - 29.11 od 9:30 do 18:00 i jak to w życiu bywa - plany swoje, a życie swoje.

Mając niemałe obawy o zakres merytoryczny wykładu, postanowiłem przelecieć większość z tego, co nazwałbym interesującym wycinkiem mojej wiedzy technicznej, aby choć na moment móc podzielić się czymś nowym z uczestnikami. Sądziłem, że uczestnicy większość tematów mają już za sobą, więc pojawiły się produkty IBM, o których, jeśli słyszano, to niewiele praktycznie i choć one gwarantowały mi możliwość przekazania czegoś niezbadanego. Po ostatnich szkoleniach z IBM WebSphere BPM z programowania i administracji nie miałem złudzeń, że w ostateczności wejdę na niskopoziomowe "rozbieranie" trzewi WPS V7 czy WAS V8. Sądziłem, że coś w końcu będzie wartościowe, aby spędzić kilka chwil i wziąć udział w wykładzie.

Do ostatniej chwili nie byłem pewien, czy dobrze dopasowałem tematykę. Czym bliżej wystąpienia, tym nachodziła mnie większa ochota, aby w niej pomajstrować. Wziąłem kilka książek, aby tam znaleźć coś unikatowego, a jednocześnie wartościowego, zabrałem się za lekturę podręczników, itp. Zacząłem odczuwać tremę przed niewstrzeleniem się w oczekiwania (które mogły być podkręcone moimi wycieczkami w różne strony rozwiązań javowych).

Zaplanowałem całkiem pokaźny bagaż tematyczny (vide poprzedni wpis z harmonogramem) i wszystko miało odbyć się bez nawet najdrobniejszego slajdu, aby ostatecznie okazać się, że z grupy około 50 osób niewiele ponad 3 osoby miały styczność z Javą (!) To było chyba najbardziej dla mnie szokujące. Ja tu zmagałem się z JEE6 i poziomy wyżej, przy SCA i BPEL, a okazało się, że należało zacząć od samego początku - samego poznawania języka Java. Trafiłem do mekki programistów C!

Jako, że przygotowany byłem na wprowadzenie do dostępu do bazy danych, przez JDBC, Hibernate, Spring Framework, Hibernate+Spring Framework, JPA i EJB, w zasadzie byłem gotowy zacząć pierwsze kilka kwadransów na wprowadzenie do Javy - bez wycieczek w programowanie OO. Pozostałem przy prostych konstrukcjach typu wyświetl na ekran, pobierz z ekranu i na tym się skończyło wprowadzenie.

Zabrałem się za dostęp do bazy danych. MySQL sprawowało się znakomicie, a NetBeans IDE (wersja rozwojowa z dnia poprzedniego) całkiem sprawnie uwijała się przy składaniu kolejnych części aplikacji. Tutaj i Java Tutorial się przydał, aby pokazać, w jaki sposób można przejść podobną ścieżkę, którą właśnie przechodziliśmy (gdyby komuś przyszło do głowy odtworzyć nasze wspólne poczyniania samodzielnie). Od czasu do czasu NetBeans IDE czkał zamrażając się na dobre kilkadziesiąt sekund, co złożyłem na braku dostępu do Sieci i jego młodzieńczego wieku (w końcu to wersja rozwojowa). Na moment przełączyłem się do Eclipse IDE, ale i jemy przypomniało się, aby zaktualizować/sprawdzić coś w Sieci i zamarzł. Wróciłem do NetBeans IDE.

Na zakończenie pierwszego bloku wykładów pokazałem coś, co określiłbym - impress me. Skąd wzięło się to cudo? Chcąc dopasować się do oczekiwań uczestników, zapytałem, co jeszcze mógłbym im pokazać i padło "Zaimponuj nam czymś w Javie, co sprawiłoby, że zechcielibyśmy się nią zająć". Od razu zabrałem się za...Clojure.

Pewnie pomyślisz sobie, zwłaszcza jeśli znasz mój poziom znajomości tego języka, że to był najgorszy z możliwych wyborów. Co to, to nie. Zdecydowanie NIE. Ja wręcz uważam, że właśnie tym najbardziej ująłem ich za serce i przy tym właśnie temacie miałem wrażenie zdobyłem ich największą uwagę. Takie odniosłem wrażenie i jeśli jakikolwiek temat miał swoje komentarze, to Clojure był zdecydowanym liderem. Dlaczego? Kwintesencją dobrej prezentacji jest dopasowanie przykładu do tematu. I tak właśnie było z Clojure.

Podczas sesji z Clojure pokazałem, jak interaktywie tworzyć aplikację okienkową, gdzie rozpoczynam od "gołej" aplikacji na bazie JFrame i dodaję kolejne elementy graficzne. Kiedy pierwszy raz wpadłem na ten pomysł, wiedziałem, że to będzie cudo. Na dole miałem terminal z Clojure REPL, na górze właśnie otworzone okienko przyszłej aplikacji okienkowej, a pod nimi Eclipse z odtwarzanym skryptem, w którym widać było wpisywane linie kodu w Clojure. Zamierzam, to nagrać w postaci skrinkastu, więc chwila i sam przekonasz się, o czym się tutaj pisze.

Clojure nie jest tutaj jakimś specjalnym czymś, co sprawiłoby, że jest to możliwe. Po prostu, jako język skryptowy - podobnie jak Groovy, JRuby, Rhino, Scala, Jython - daje możliwość nauki API przez wprowadzanie kolejnych wywołań w czymś ala Clojure REPL i natychmiastowego otrzymywania rezultatów z ich uruchomienia. Możnaby to przyrównać do środowiska ciągłej nauki API. Bajka!

Po przerwie, przeszliśmy przez Hibernate, Spring Framework i tworzenie aplikacji z servletami (obsługa formularza) z niewielkim EJB uruchamianym w ramach aplikacji webowej (nowość JEE6). W zasadzie 7 osobom udało się wytrwać do 18:00, kiedy to punktualnie zakończyłem wykład.

Bardzo pomocny okazał się stoper firmy Apimac, który odmierzał równe 40-tominutówki i późniejsze 10-ciominutowe przerwy. Super rozwiązanie, aby zagwarantować pewność utrzymania czasu przez prowadzącego. Polecam!

Czego mi brakowało podczas tego wykładu, to większego udziału publiczności. Znalazło się kilku bardziej aktywnych, ale ogólnie panowała cisza i trudno było zorientować się, czy temat ciekawił, czy warto byłoby poruszyć inne aspekty i w ogóle sprawić, aby spędzony czas był wartościowy merytorycznie. Nieskromnie powiem, że bardzo ucieszyła mnie moja lekkość w zmianie tematu, tempa i dopasowanie do poziomu, ale wolałbym bardziej skrupulatne zajęcie się pojedynczym tematem, np. JEE6 niż przejściem od Java, Clojure, Hibernate, Spring, servlety i EJB. Trochę przypominało groch z kapustą, aczkolwiek zagwarantowało, że wykład spędziłem nie nudząc się ani na chwilę. Liczę, że uczestnicy również.

Sam Tarnów bardzo spokojny. Akurat dzisiaj spadło sporo śniegu, więc wszystko zasypane, ale i tak udało mi się dostrzec tlące się piękno tego miejsca. Po 18:00 w zasadzie zero otwartych sklepów i niepokojąca cisza na ulicy. Może poza Rynkiem jest inaczej?! Ach, zastanawiam się, dlaczego zegar na Ratuszu wybija połówki, kwadrans przed pełną i pełną godzinę?

p.s. Wykład prowadzony był w ramach programu Unii Europejskiej wspierającej wymianę doświadczeń między praktykami i firmy a uczelniami, z korzyścią dla nowej kadry informatycznej - studentów. Pewnie i na Twojej uczelni jest to możliwe. Wystarczy zapytać. Resztą się zajmę. Pisz na priv z prośbą o szczegóły. Na prawdę warto.

14 komentarzy:

  1. Hej, cieszę się, że Tarnów Ci się choć trochę spodobał, szkoda, że jednak nie udało się spotkać. Co do zegara - nie przegapiłeś kwadransów po pełnej godzinie?

    OdpowiedzUsuń
  2. Właśnie w tym cała zagadka, dlaczego nie dzwoni kwadrans po pełnej?! Nawet teraz, 23:45 raz, albo dwa razy zadzwonił, więc na kwadrans przed, ale po nie ma.

    OdpowiedzUsuń
  3. Hej,

    Co do "mekki programistów C" to obawiam, się że jest tak na większości uczelni ... zwłaszcza na tych z "wiekową" kadrą. Jeżeli już wykłada się tam Jave czy C# to nie jest to robione do końca należycie. Mówię to z własnego doświadczenia, a studiowałem na dwóch różnych uczelniach. Jeżeli człowiek sam się nie zainteresuje to wątpię w to żeby uczelnia zaszczepiła takie zainteresowanie w studencie. Patrząc na to z drugiej strony od tego są studia żeby się samemu kształcić, szkoda tylko że kiepsko zachęcają na tej uczelni żeby to robić ...

    OdpowiedzUsuń
  4. To wiesz co Jack... to coś chyba się zmieniło z tym zegarem.... ostatnio cały Ratusz był remontowany, może jest jakaś nowa tradycja? Postaram się temat rozgryźć ale to jak wrócę do Tarnowa.

    OdpowiedzUsuń
  5. Miało być Jacku :D wyszło trochę z amerykańska :)

    OdpowiedzUsuń
  6. Udało mi się wysłuchać więcej - kwadrans po pełnej zegar też bije - raz, później dwa, aby na kwadrans przed uderzyć 3 razy. Teraz to logiczne. Jakimś cudem kwadrans po umknął mojej uwadze (pewnie dlatego, że kiedy już oderwałem swoją uwagę od kompa, było po wszystkim :))

    OdpowiedzUsuń
  7. Co do tego C# to się zgodzę absolutnie, a też mam przyjemność porównać, ze sobą metody dydaktyczne na dwóch wrocławskich wyższych uczelniach i kiepsko. Bardzo wywyższany jest natomiast C++ (ja spotkałam się jeszcze z Pythonem, ale to chyba kwestia numerycznych potrzeb aplikacji). I co? Rzeczywiście! Pozostaje kształcić się samemu, ale nie wiem, czy lepiej nie świadczy o przyszłych zapełniaczu państwowego gara, że poczyni kilka samodzielnych kroków w kierunku pogłębienia swojej wiedzy. Świadczy to później o różnorodności kandydatów do pracy: jest 20 kolesi którzy robią na przykład w C++, Java i niech będzie, że jeszcze PHP, a tylko na przykład 3 z nich robi dodatkowo w C#, i może Ruby, czy Pythonie (bo im się chciało nauczyć się samemu). I kogo szef przyjmie później do pracy? :>

    OdpowiedzUsuń
  8. @Monique

    Ech to jest dyskusja stara jak świat. Po 12 latach w branży i prawie tylu po studiach mam na ten tamat własną, mocną opinię. Mianowicie taką oto, że czekanie na to, że "studia" nauczą kogoś czegoś praktycznego... jest w pewnym sensie naiwnością. Być może wynika to z mojego podejścia do studiów, być może z mojego podejścia do życia, generalnie - ale nie wiem jak można czekać, czy oczekiwać, że ktoś nas czegoś nauczy. To jest nasza domena, nie tych mitycznych "onych". Takie podejście jest we mnie zakorzenione na tyle, że w ogóle nie jestem pewien, czy ma znaczenie, że uczelnia X czy Y uczy języka A czy B. I tak go "nie nauczy". Nauczy teorii, nie praktyki. To tak jak nauka Japońskiego... można znać doskonale teorię, i kilka zdań. Ale to nic nie daje.

    Z perspektywy pracodawcy... Ja, zatrudniając osobę "świeżą" po studiach nie zakładam NIC o jej umiejętnościach jeśli chodzi o znajomość języków, technik, podejścia, wzorców, praktyk (dobrych i tych złych). Nic. Niezależnie, czy ten ktoś napisze, że zna 5 języków programowania, czy jeden. Sprawdzam natomiast umiejętność logicznego myślenia, znajomość logiki, podejście do problemów i umiejętność ich rozwiązywania... Tego oczekuję, że studia dostarczą. A nie znajomości "javy, C#, whatever". Często jest tak, że ta znajomość po pierwsze jest tak odrealniona, a po drugie już spaczona, że łatwiej mi jest poprowadzić osobę zaczynającą od zera... Niż "kolesia" ze znajomością javy ze studiów. Niestety wykładowcy na studiach mają pojęcie o prawdziwym programowaniu jak ja o fizyce kwantowej i robią ludziom sporą krzywdę. Przechodziłem obok wydziału fizyki kilka raz, ot cała moja styczność z nowoczesną fizyką kwantową ;). Często zaczynam z takimi ludźmi od 'unlearn what You've learned'...

    Artur Karazniewicz

    OdpowiedzUsuń
  9. Spóźniając się na wykład zapytałeś mnie po co przyszedłem jeżeli nie jestem programistą Javy (chociaż znam ten język w podstawowym stopniu). Odpowiedziałem Ci, że jestem przekonany, że mnie zainteresujesz - i tak było. Najciekawszym tematem był oczywiście Clojure. Szkoda tylko, że z IV roku przyszły dwie osoby, a pozostała część to II rok. To spowodowało, że większość poruszanych przez Ciebie tematów omawianych było podczas zajęć, np. Servlety i korzystanie z bazy z poziomu Javy. O trochę bardziej zaawansowanych elementach języka (np. Hibernate) opowiadał Tomasz Łabuz też podczas takiego wykładu. Swoją drogą PWSZ w Tarnowie zaprasza tylko programistów Javy:)

    To, że przyszli informatycy na tej uczelni najlepiej znają C nie podlega dyskusji. Akurat II rok już nie koniecznie, bo im się prowadzący zmienił. Ja miałem przyjemność poznawać ten język od najlepszego nauczyciela jakiego spotkałem w życiu (dr Macieja). Śmiem twierdzić, że jest on w stanie nauczyć z (pełnym zrozumieniem) programowania każdego kto wykaże zainteresowanie. Początkowo też myślałem, że C to relikt przeszłości. Ale zrozumienie tego języka sprawia, że nauka innych jest dużo bardziej łatwiejsza. Dla programisty C zrozumienie pewnych konstrukcji jest naturalne np. tekst1 + tekst2 oznacza kopiowanie tablic.

    Mam nadzieję, że w przyszłości odwiedzisz jeszcze nasze miasto i że mgr. Tomasz P. nie będzie musiał zwalniać roku, żeby ktoś przyszedł na Twój wykład:)

    OdpowiedzUsuń
  10. ...dziś sam jestem dziadkiem;)
    ale dobrze pamiętam te językowe przepychanki na studiach pomiędzy C, C z plusami, C z krzaczkiem i Javą (tylko, że wówczas Java i C# były awangardą, teraz są uważane za czerstwe). Kiedyś dałbym sobie rękę uciąć za Javę i teraz bym...

    Natomiast patrząc z dystansu wszystkie te języki są mniej więcej tak samo słabe w sensie siły wyrazu:P

    Poza tym dobry kod i dobry soft w ogólności nie jest w ogóle skorelowany z wyborem języka - język to tylko młotek, który częściej lub rzadzej uderza nas w palucha... IMHO chodzi o coś innego, problemy innych rzędów niż onanizm składniowy:)

    Sławek S.
    http://art-of-software.blogspot.com
    http://ssepp.pl

    OdpowiedzUsuń
  11. Hi there,

    Trochę z innej beczki jeśli można... Czy planujecie w najbliższym czasie jakieś spotkanie w ramach np. JUG (lub inne) traktujące o Clojure? Czy można uczestniczyć w spotkaniach nie będąc członkiem JUG/studentem UW?

    Dzięki, pozdrawiam.

    OdpowiedzUsuń
  12. @cr, 21.12.2010 Jak Clojure koloruje mapy Daniel Janus - patrz http://github.com/warszawajug/website. Każdy ma prawo wejść i aktywnie uczestniczyć w spotkaniach WJUGa. Wstęp całkowicie wolny od jakichkolwiek opłat i zobowiązań. Zapraszam.

    OdpowiedzUsuń
  13. Z językami to trochę chyba jak z modą, czasem ciężko powiedzieć co będzie za lat x.... Jacek miał do niedawna ołtarzyk ;) z Groovy, dzisiaj Clojure... Sławek wspomniał - język to tylko narzędzie, jeden lepszy do tego inny do tamtego, ważne, żeby wiedzieć co się chce i po co to wszystko, a z tym z obserwacji moich i nie tylko jest coraz gorzej, programowanie stało się (poniekąd słusznie) takim samym sposobem na zarobienie na chleb jak każdy inny, więc rośnie odsetek średnio lub wcale nie zainteresowanych tym co na zapleczu, a tylko co przepisać z tutoriala żeby zadziałało tak samo.... a po studiach - każdych, nie tylko IT - bez własnego zaangażowania g...o się umie :)

    OdpowiedzUsuń
  14. @Jacek Laskowski
    Dzięki za informację. Pojawię się. Pozdrawiam.

    OdpowiedzUsuń