Wybrałem się na tegoroczny polski Pycon do Ustronia. Oficjalną relację zamieszczą zapewne organizatorzy, poniżej trochę moich - bardzo subiektywnych - notatek.
Istotna uwaga: bardzo dawno nie byłem na żadnej branżowej konferencji, oceniam Pycona zestawiając go z własnymi oczekiwaniami.
Przed przejściem do szczegółow, jeszcze podziękowania. Szefowi - za wolny dzień i pokrycie kosztów konferencji. Rodzinie - za weekend spędzony beze mnie. Organizatorom i prezenterom - za włożoną pracę.
Dla kogo
Konferencji zabrakło jasno ustalonego profilu uczestników.
Choć zjechało sporo osób o solidnej wiedzy i dużym doświadczeniu, znaczna część prezentacji była wyraźnie zaadresowana do bardzo początkujących. Ilu takich było w milczącej części sali, trudno mi ocenić, ale uczestników zainteresowanych zaawansowanymi tematami i wymianą praktycznych doświadczeń na pewno było sporo - a tu pozostał wyraźny niedosyt.
Chyba najbardziej dobitnie ilustrowały to wykłady Wesleya Chuna. Człowiek o znanym nazwisku, ściągnięty z drugiej półkuli, wygłosił banalne prezentacje, które mogłaby równie dobrze przygotować połowa jego słuchaczy. Na pewno można było go wykorzystać lepiej.
Z pozytywów: ludzie byli faktycznie zainteresowani udziałem, sala była zawsze pełna, wiązały się też interesujące rozmowy kuluarowe. O ile uda się utrzymać zainteresowanie, Pycon może mieć spory potencjał.
Ale ja go widzę w organizowaniu spotkania biegłych programistów wymieniających się doświadczeniami, dyskutujących nowinki i poznających niebanalne techniki programowania. Dla elementarnych tutoriali nie warto jeździć setek kilometrów, do nich pasują popularyzatorskie spotkania lokalne.
Wyjazdu tak czy siak nie żałuję, z części wykładów, spontanicznych dyskusji oraz rozmów kuluarowych wyłowiłem dosyć, by nie uznać tego czasu za stracony.
Podsumowanie w pigułce
Najlepszą prezentacją konferencji było - moim zdaniem - wystąpienie Marcina Mierzejewskiego na temat Orange. Kilka innych także mi się podobało, o nich dalej.
Z gości najsilniej zaznaczył swą obecność Honza Král (czeski developer Django), który mocno angażował się w konferencję, pojawiał się na cudzych prezentacjach i uczestniczył w prowadzonych po nich dyskusjach, był bardzo aktywny w kuluarach. No i miał sporo wartościowych rzeczy do powiedzenia.
Przyjazd Wesleya Chuna, jak już wspomniałem, był rozczarowaniem. Za mało było (tylko jedne) zajęć warsztatowych, związanych z praktycznym programowaniem. Nie wyzyskano też obecności silnych grup miłośników Django i Plone - o ile na rywalizację w programowaniu było chyba za mało czasu, o tyle na pewno można było się pokusić o dyskusję na temat zalet i wad tych CMSów w praktycznych zastosowaniach.
Organizacyjnie - materiały czekały, wszystko zaczynało się i kończyło terminowo, nagłośnienie działało, laptopy pasowały do rzutnika, ogólnie - osoby odpowiedzialne za techniczną obsługę swoje zrobiły (chwilowe problemy z prądem trzeba zakwalifikować jako siłę wyższą).
Gorzej wypadł wybrany ośrodek ale za ośnieżone góry za oknem i dobry dojazd jestem skłonny wybaczyć takie drobiazgi jak niedogrzane pokoje, zimną wodę czy bardzo kapryśne wi-fi.
Subiektywna kronika wydarzeń
Pokrótce o przebiegu konferencji.
Django i Pinax
Miałem nadzieję na szczegółowe informacje o wykorzystywaniu komponentów Pinaksa w praktycznych projektach, tymczasem była to czysto popularyzatorska informacja Django to świetny framework webowy a Pinax pozwala mieć gotowy serwis społecznościowy lub CMS za darmo.
Zostało to całkiem sprawnie wygłoszone i pokazane (było widać, że bracia Wiśniowscy się napracowali przy przygotowaniach), na jakieś popularyzatorskie pokazy może być warte zachowania, ale na Pycon w moim odczuciu było tu po prostu zdecydowanie za mało informacji. Demonstracja niespersonalizowanej instalacji Pinaksa mogłaby ten wykład zaczynać, a nie go kończyć.
Dwa wartościowe linki wspomniane w dyskusji po wykładzie: Sphene Community Tools - forum i wiki zaimplementowane w Django - oraz Django Pluggables (w chwili, gdy piszę artykuł, nie działa, tu link do strony na PyPi) - warte przejrzenia przykłady.
Python References and Memory Model
Python dla początkujących: jeśli napiszemy
a = [1, [2,3], 4] b = a a[1][0] = 0
to b
także się zmieni. Lepiej nie pisać range(10000000)
.
Pythonowe zmienne można klasyfikować ze względu na storage (skalary
i kontenery), update (modyfikowalne i niemodyfikowalne) oraz
access (bezpośredni - jak przy liczbach, sekwencyjny - przy
stringach, tuplach lub listach, słownikowy). Tablicę można zmieniać,
a tuplę nie. Tupla jest w języku głównie dla obsługi parametrów i
wyników funkcji. I parę pokrewnych zagadnień (jedyne trudne - weakref
- wspomniane
tylko hasłowo).
Jednej rzeczy nie wiedziałem - liczby całkowite z zakresu (-5, 257)
są utrwalane (konia z rzędem temu, kto przetłumaczy lepiej interned),
nie podlegają odśmiecaniu i są reużywane (wszystkie zmienne zainicjowane
wartością 3 wskazują ten sam obiekt).
Emocjonująca przerwa związana z nagłym brakiem prądu, podziw dla autora, który mimo wszystko próbował kontynuować wykład. I wyraźne rozczarowanie sali po wznowieniu - gdy wszyscy oczekiwali przejścia do bardziej zaawansowanych kwestii, wykład się ... skończył.
Był też pozytyw: bardzo mi się podobał sposób prowadzenia prezentacji. Spokojnie, zdecydowanie, z dbałością o szczegóły. Wesley Chun naprawdę potrafi wykładać i przyjemnie było obserwować, jak to robi.
Szkoda, że nie obrał ciekawszego tematu.
Lightning Talks (1)
Bardzo spodobał mi się pomysł Lightning Talks. Każdy może się zapisać, może mówić o czym chce (byle miało jakiś związek z tematyką konferencji), na początku powinien się wyraźnie przedstawić (by zainteresowani mogli się z nim później skontaktować), na wypowiedź ma absolutnie nieprzekraczalne 5 minut, po których traci mikrofon (organizator pomaga dyskretnie pokazując kartki 3 minuty, 2 minuty, 1 minuta). Można podłączyć laptopa i rzucić kilka slajdów ale trudności techniczne oznaczają kasację wystąpienia (zatem lepiej sprawdzić wcześniej czy wszystko działa). Nie ma możliwości zadawania pytań ale można łapać opowiadających w kuluarach albo kontaktować się z nimi elektronicznie po konferencji.
Fajna metoda na pochwalenie się swoim projektem, hasłowe zaprezentowanie wartościowego narzędzia lub pokazanie ciekawego skrawka kodu. Zarazem operacja niskiego ryzyka - nawet jeśli występujący porusza nieciekawy temat, zaraz skończy.
Na tym Pyconie było to jeszcze trochę chropawe - chyba wszystkie szybkie wypowiedzi były improwizowane albo szykowane tuż przed wystąpieniem - ale i tak interesujące.
Pierwsza sesja odbywała się bez prądu, zatem tylko na tablicy.
Norbert Wójtowicz chwalił się BizCarder.com, wspominał o szukaniu kontaktu z startupami poszukującymi inwestora, a pobocznie zadeklarował wiarę w ... Haskella.
Ja próbowałem agitować za zabawą na ProjectEuler i zachwalać Sage. Jeśli kogoś zaciekawiłem, polecam uwadze artykuł o konkursach programistycznych oraz dłuższy opis Sage.
Łukasz Langa wspomniał o kilku konkretnych problemach z Django. Zapamiętałem z nich sprawę kaskadowego kasowania rekordów (i ryzyka usunięcia zbyt dużej ilości danych), z rekomendacją zastąpienia kasowania przez flagowanie rekordów jako usuniętych. Ta wypowiedź i jej kontynuacja wzbudziły spore zainteresowanie - widać, że na sali było wiele osób mających ochotę na rozmowy o praktycznym programowaniu.
Jeden z kolegów (chyba Radomir Dopieralski) dzielił się pozytywnym wpływem testów jednostkowych i zarządzania wersjami na swoje projekty.
Panel dyskusyjny o pracy dla programistów Pythona
Temat potencjalnie chwytliwy, kontekst pozornie korzystny (na sali byli i pracodawcy i szukający pracy) ale dyskusja szła bardzo opornie, ożywiając się głównie na poboczach głównego tematu.
Dla mnie najbardziej interesujące było kilka wypowiedzi Honzy Krála. Mówił między innymi, że:
- wszystkich czeskich pythonowców i djangowców zna, więc ich poszukiwanie ogłoszeniami o prace mija się z celem, zatrudnia za to często programistów innych języków (PHP) i ich szkoli,
- zaletą takiego podejścia jest możliwość połączenia szkolenia z języka ze szkoleniem dobrych praktyk (jak Test Driven Development),
- daje zadania parom programistów, przy czym nie chodzi mu o pair programming w ujęciu XP (jeden komputer) ale o zwykłą współpracę i współodpowiedzialność - wymusza to na programistach przemyślenie zadania (by podzielić się pracą, muszą je zaplanować) i wzajemne review kodu,
- przy szkoleniu używa Dive into Python (zaleta: czytający - czyli zmieniający język programiści - nie są traktowani jak idioci, którym trzeba tłumaczyć co to jest zmienna i pętla) a potem już książki specyficzne dla Django,
- zachęca do zadawania pytań i dba, by było wiadomo, kogo pytać.
I jeszcze dobrze brzmiący cytacik - writing code is easy, reading it is hard, we want to learn how to write readable code.
Także Maciek Dziergwa opowiadał trochę o specyfice zatrudniania programistów, min. wspominając o poszukiwaniu u ludzi autentycznej pasji, wymaganiu pisania kodu na rozmowie kwalifikacyjnej (z typowym przykładem sortowania tablicy po wyniku funkcji albo atrybucie), potrzebie wzmacniania zespołu ludźmi z praktycznym doświadczeniem, przydzielaniu nowym pracownikom opiekuna i ... problemach przy współpracy z freelancerami (brak stałej więzi z firmą, dzielenie czasu między kilka projektów).
Na boku, jako sponsor, pokazał się krótko MegiTeam - firma oferująca hosting dla aplikacji pisanych w Pythonie i Ruby. Recenzować jej w tej chwili nie będę ale życzę im wszystkiego najlepszego (i polecam ich usługi uwadze osób, które obawiają się konfigurować własny VPS lub nie mają na to czasu).
A na większości uczelni ciągle uczą Pascala.
Test driven development
Prowadzony przez Konrada Delonga i Krzysztofa Goja warsztat. Zadaniem było napisanie generatora listy poprawnych ruchów dla podanej - w formie tablicy napisów - pozycji w Othello (gra znana też jako Reversi).
Programowanie należało dogmatycznie zaczynać od testów, a praca odbywała się w parach - tym razem w pełnym XP-owym trybie z jednym laptopem na dwóch, konwencją ten bez laptopa instruuje tego stukającego w klawisze i zamianą ról co parę minut (w parze Maćkiem Ziębą zmienialiśmy się z grubsza co funkcja).
O ile testy nie były dla mnie niczym nowym, o tyle praktycznie programować w parze jeszcze mi się nie zdarzyło - i doświadczenie oceniam bardzo pozytywnie. Przez półtorej godziny programowaliśmy bardzo intensywnie, bez żadnego przestoju i ze stałą motywacją, którą przy samotnej pracy utrzymać istotnie trudniej. Dość sprawnie wyłapywaliśmy też sobie nawzajem błędy. Jestem mocno przekonany, że gdybyśmy wykorzystywali dwa laptopy, praca posuwałaby się znacznie oporniej.
Dodatkowa pochwała dla autorów ćwiczenia za prawidłowe dobranie zadania do czasu przeznaczonego na jego wykonanie.
A niezależnie od tego, cieszyła sama możliwość poprogramowania. Szkoda, że tylko jedna na tej konferencji.
Aha: za zalecenie jeśli ktoś z pary używa Emacsa, korzystamy z laptopa drugiej osoby kiedyś się jakoś zemszczę ;-)
Lightning talks (2)
Adam Zieliński opowiadał o smartupz.com (patrz też na flakerze).
Michał Sawicz pokazał moovida.com - interesujący projekt centrum medialnego w którego rozwijaniu uczestniczy.
Maciek Dziergwa z Wojtkiem Lichotą pokazali migawkę przyszłego Plone, z ajaksową edycją treści wyświetlanej strony. Wyglądała bardzo smakowicie.
Wojtek dodatkowo króciutko pochwalił Deliverance - bardzo obiecujące narzędzie do przekształcania stron HTML.
Ja próbowałem (bez specjalnego powodzenia) narysować obrazek z tego artykułu i zachęcić do zainteresowania się programowaniem zdarzeniowym. W ujęciu pythonowym - przy pomocy Twisted.
Ciąg dalszy nastąpi
Powyższe to opis pierwszej połówki konferencji (do soboty w południe). Ciąg dalszy już nastąpił.
Uwaga dla osób wymienianych z nazwiska: jeżeli chcecie by podlinkować Wasze adresy email albo jakieś strony sieciowe, dajcie znać.