26 października, 2012

Bezwzględne testowanie

O testach modułowych pisałem już wcześniej, tak jak i o DevDay, ale wykład Grega Younga wzbudził u mnie pewien rezonans. Ten sam wykład z innej konferencji można obejrzeć np. tutaj. Polecam wszystkim chętnym.

Greg Young otworzył mi oczy na zupełnie nowe spojrzenie na testowanie programów. Od pewnego czasu miałem wrażenie, że napisanie dobrych testów nie jest łatwe i że jeszcze trudniej zmierzyć jakość testów, ale to były tylko przeczucia, a Greg pokazał, jak można do tego podejść w sposób bardzo ścisły i konsekwentny. Jednak nie to przykuło moją uwagę najbardziej.


Photo by kabils
Najciekawszą częścią wykładu była dla mnie część, w której autor postulował celowe zmiany w kodzie aby sprawdzić, czy testy się wysypią. Bingo! Dodałeś do zmiennej 'x' 1? A jeżeli zmienię zamienię 1 na 5, to co się stanie? Program ewidentnie się zmieni, ale czy te super-testy które napisałeś się wysypią? A jeżeli zamiast dodać odejmę, co wtedy? Kiedy o tym poważnie pomyśleć, to jest jedyny sposób sprawdzenia, czy testy działają. Gdybym miał czujnik przeciwpożarowy, który nie podniesie alarmu, kiedy przytknę do niego zapaloną zapałkę... nie czuł bym się do końca bezpiecznie. Najbardziej Greg zaimponował mi kiedy powiedział, że pracują nad narzędziem, które będzie wprowadzało takie zmiany automatycznie. Wow.

Później przyszła jeszcze jedna refleksja: ja już o tym gdzieś czytałem. Pragmatyczny programista, porada 64: "Użyj sabotażystów żeby testować swoje testy". Po raz kolejny okazuje się, że w informatyce wymyślono już multum dobrych idei, które tylko czekają na swój czas.

Dwa wnioski na dziś:

  1. Koniecznie przeczytać jeszcze raz Pragmatycznego programistę.
  2. Przydałby się post na temat tej książki i innych, które miały na mnie największy wpływ.

19 października, 2012

Wielokulturowość, wielonarzędziowość

Już wcześniej pisałem o powiązaniach pomiędzy językiem a myśleniem i o tym, jak osoby bikulturalne potrafią myśleć inaczej na ten sam temat, w zależności od tego, w jakim języku zadamy pytanie. Te przemyślenia skorelowały mi się z wystąpieniem Martina Mazura na DevDay, o którym pisałem w zeszłym tygodniu. Jeżeli ktoś ma ochotę to można ten wykład obejrzeć tutaj, choć to nagranie z innej konferencji.

Myślę, że to kuszące, jeżeli jedynym narzędziem, jakie posiadamy jest młotek, aby traktować wszystko jak gwóźdź. -- A. Maslow 
Ten cudowny cytat z Maslowa pokazuje cały problem, jaki wynika z ograniczania zestawu narzędzi, których używamy; w życiu, w pracy, w myśleniu. Dodatkowa trudność polega na tym, że kiedy już widzimy dookoła tylko gwoździe, to ciężko się przekonać, że być może istnieją inne problemy i inne narzędzia do ich rozwiązania.

Ja miałem szczęście. Udało mi się znaleźć środowiska, które wymusiły na mnie poszukanie nowych narzędzi. Mówię między innymi o kursach on-line, w których wziąłem udział. Jednak wcześniej była jeszcze potrzeba przygotowania pewnego narzędzia wewnętrznego w moim obecnym projekcie, która wymusiła na mnie poznanie Perla i... to było olśnienie.

Zanim jeszcze zostałem zawodowym programistą (czyt. zaczęli mi za to płacić) poznałem Pascala, C, C++ i C#... pomijając pierwszą pozycję już na pierwszy rzut oka widać tu obrzydliwą spójność gatunkową. Poznanie Perla było dla mnie wejściem w zupełnie nowy wymiar w którym o dziwo poczułem się dobrze. Perl jest tak elastycznym narzędziem, że poczułem się jakbym zakładał na mózg dobrze dopasowaną rękawiczkę.

Photo by Bill Liao
Podczas kursów Coursery poznałem kolejne narzędzia, które może nie były do mnie już tak dobrze dopasowane, ale świetnie nadawały się do rozwiązywania problemów, które stawiali przed nami wykładowcy. Kiedy myślałem o tym, jak rozwiązywałbym te same problemy w językach, które już znałem, już na etapie koncepcji stawała mi przed oczami wizja wbijania śrubek młotkiem. Niepiękna to wizja.

Prawda jest taka, że moja skrzynka z narzędziami stała się ostatnio dużo cięższa i kiedy zabieram się dziś do nowego problemu robię wcześniej sumienny przegląd narzędzi.

Poza językami programowania odkryłem jeszcze inne narzędzia, ale to już temat na osobny post.

12 października, 2012

DevDay 2012, minirelacja

W zeszłym tygodniu byłem z kuzynem na konferencji DevDay 2012 w Krakowie. Jak ktoś nie wierzy, to może mnie poszukać na zdjęciach z konferencji. ;-)

Krótka relacja z kolejnych prezentacji tego dnia:

  • Wykład otwierający w wykonaniu Scotta Hanselmana był dokładnie taki, jak oczekiwałem. Pogadanka o dbaniu o zdrowie psychiczne będąc programistą, dużo humoru, fajne rady i spostrzeżenia. Gdyby odwołano resztę konferencji nadal nie żałowałbym 22 godzin w pociągach.
  • Na drugim wykładzie Mark Rendle pokazywał, w jak niepojęte sposoby można wygiąć C#  dla własnych potrzeb i jak ciekawe efekty można dzięki temu uzyskać. Interesujące i mocno techniczne.
  • Dość dziwny wykład w wykonaniu Sebastiena Lambli. Może po prostu nie interesuje mnie cachowanie HTTP? Za to ciekawa uwaga ze strony prowadzącego - w jego opinii nikt na sali nie zajmował się "współczesną web-developerką" i wezwanie do obudzenia się: Guys, there's a world out there! Mocne.
  • Występ Roba Ashtona z mocno komediowymi akcentami poświęcony javascript'owi. Ashton pokazał jak sobie radzić z niedogodnościami pisania w języku, którego się nie lubi i który rzekomo nie ma odpowiednich narzędzi. Fajny wykład i plus za Vim'a,
  • Polsko-norweski kodujący wiking czyli Martin Mazur opowiadający o tym, co można wynieść z relacji międzykulturowych i obalenia podziału na "naszych" i "innych". Dobry balans pomiędzy techniczną i miękką stroną prezentacji. Sporo jego uwag pokrywa się z tym w co gorąco sam wierzę.
  • Trochę irytująca samochwałka w wykonaniu Antka Piechnika. Każdy ma prawo chwalić swoją firmę, ale wyszło ciut zbyt nachalnie, szczególnie że wiele pomysłów mało oryginalnych. Jeden ciekawy pomysł na narzędzie typu fire-and-forget konfigurujące środowisko developerskie. Przy dużych projektach to może zaoszczędzić ogrom czasu podczas onboardingu.
  • Trochę niespodziewany bardzo dobry wykład na zamknięcie konferencji w wykonaniu Grega Youga. Świetne przykłady data-miningu na systemach kontroli wersji i na zależnościach pomiędzy modułami. Dało mi sporo do myślenia i dużo funu.
Po wszystkim krótki wypad na after-party, gdzie można było się pointegrować z innymi uczestnikami konferencji, a potem niestety 11-godzinna randka z PKP.

Duży szacunek dla ABB, sponsora konferencji, za bardzo profesjonalne podejście poprzez brak nachalnego marketingu. Poza tym ekipa organizacyjna spisała się na medal. Pełny profesjonalizm. W przyszłym roku znów spróbuję się wybrać i polecam to samo każdemu.,

05 października, 2012

Coursera, minirecenzja

Pod koniec kwietnia 2012 zacząłem przygodę z serwisem Coursera, gdzie zapisałem się na dwa kursy on-line: o kompilatorach i o machine learning. Obecnie ciągnę kurs z algorytmów(który niestety chyba obleję...) oraz programowania funkcyjnego w Scali. Chciałem się podzielić skrótem z wrażeń:

  • Machine Learning to bardzo fajny kurs. Niezbyt trudny, szczególnie jeżeli ma się podstawy algebry i znajomość octave albo matlaba. Kurs traktuje o bardzo ciekawych zagadnieniach i pokazuje praktyczne przykłady zastosowania technik z zakresu "machine learning". W ramach kursu napiszemy własny system rekomendujący filmy czy sieć neuronową do rozpoznawania zeskanowanych cyfer. Fun!
  • Kompilatory to kurs, moim skromnym zdaniem, fundamentalny dla każdego programisty. Nie powtórzcie mojego błędu i nie bierzcie na siebie tego kursu wraz z innym albo jeżeli nie wiecie, czy będziecie mieli na niego czas. W ramach tego kursu napisałem swój własny kompilator i kompletnie zmieniłem sposób, w jaki myślę o programach. Kurs zaliczyłem z problemami, ale nie żałuję ani godziny na niego poświęconej.
  • Algorytmy są bardzo ciekawym kursem, ale też wymagającym odrobiny czasu. Prowadzący są ewidentnie kompetentni i zadają bardzo ciekawe problemy do rozwiązania w ramach zadań domowych. Niestety nie udało mi się wyłuskać wystarczającej ilości czasu, żeby spokojnie zaliczyć kurs, ale już wiem, że go powtórzę przy następnej edycji.
  • Programowanie funkcyjne w Scali to najlepsza rzecz, jaka zdarzyła mi się od sięgnięcia po Code Complete McConnel'a. Bardzo fajny kurs, który zmienia mózg w sposób, który ciężko opisać... jeżeli nigdy nie programowaliście funkcyjnie, a chcielibyście poćwiczyć szare komórki, to gorąco polecam. Dodatkowym plusem jest fakt, że kurs prowadzi jeden z autorów języka Scala, Martin Odersky.

Photo by Rickydavid
Poza tym staram się monitorować EdX i Udacity. Jeżeli znajdę któryś z tamtejszych kursów interesującym, to dam znać.

Ogólna rekomendacja brzmi: idźcie i uczcie się!