niedziela, 23 października 2011

Prognozy na przyszłość czyli w Łodzi nareszcie coś się dzieje!

Dlaczego drogi czytelniku miałby Cię zainteresować fakt przeprowadzenia relatywnie dużej konferencji technologicznej? Na pewno masz swoje pole specjalizacji, które w jakimś tam stopniu krzyżuje się ze światem technologicznym ale nie wydaje się to być dla ciebie czymś istotnym. Może nawet jesteś hardcorowym humanistą, który codziennie celebruje wyższość człowieczeństwa nad bezdusznymi narzędziami. Wiedz jedno. Owe narzędzia zmieniają pojęcie człowieczeństwa. Burzą mury pomiędzy dziedzinami zacierając granicę pomiędzy tym co ścisłe a nie ścisłe

Jeśli nie wierzysz to na początek wpisz w google frazę: "software studies" a dowiesz się, iż jest to nowa dziedzina, jeden z najnowszych kierunków, który wzmocniony zachętą gigantów IT pojawił się na zachodnich uczelniach. Ów kierunek- uwaga -zajmuje się badaniem wpływu wytwarzanego oprogramowania na szeroko rozumianą kulturę i społeczeństwa. Inne ciekawe kierunki to Analityka kulturowa czy Kulturomika , podchodzące do kultury jak do ogromnego zbioru danych, w którym można wyszukać konkretne trendy.




Jaki to ma wszystko związek z wydarzeniami w Łodzi? Dnia wczorajszego w tym "smutnym jak pizda mieście" miała miejsce pierwsza poważna konferencja z zakresu IT a konkretnie z zakresu przeróżnych i ciekawych technologii mobilnych. Technologii, które "jutro" będą definiować normę naszego życia. I choć z programowaniem na urządzenia przenośne mam tyle wspólnego co z samochodami drogimi to jednak podzielę się kilkoma osobistymi spostrzeżeniami


Rzeczywistość rozszerzona


Koncepcja wydaje się prosta. Wystarczy nakierować ekran urządzenia na konkretny krajobraz by otrzymać od naszej maszynki dodatkowe informacje odnośnie tego co widzimy: gdzie jest najbliższy Makdonald czy sklep z alkoholem metylowym. W zasadzie nic nie stoi na przeszkodzie aby nakierować taki ekran na człowieka, obedrzeć naszego rozmówcę z resztki tajemnicy i otrzymać szybką syntezę analityczną danej osoby otrzymaną z jego działalności w internecie. A baza ta może być wcale nie mała...



Kultura prezentacji


Niedawno w dodatku do Polityki był artykuł, w którym autor twierdził iż obecnie ludzie nie szukają u innych "głębi emocjonalnej a jedynie traktują ich jako widzów swojego spektaklu (czyt. lansu)". Na konferencji było rzuconych kilka pomysłów, które taki stan rzeczy mogą spotęgować. Już niedługo każdy będzie miał kolorową komóreczkę, która jeszcze bardziej niż teraz umożliwi swojemu użytkownikowi dzielenie się ze światem (czyt. portalami facebookowopodobnymi) tą wersją swojej prywatności, która pokazuje jakie zajebiste mamy życie.

Organizacja


Były bułki, jogurty ,szatnia i dobra pogoda. Nie dotarło kilku prelegentów ale co można na to poradzić jak wystąpienie jest za darmo. Jako że prezentacja miała charakter wojskowy to z odsieczą przybyły posiłki. Na koniec miało miejsce losowanie, w którym można było wygrać m. in. wygodna bezprzewodową klawiaturę. Początek był dobry a za rok liczę na jeszcze większe pierdolnięcie.

Kilka linków


http://en.wikipedia.org/wiki/Software_studies

http://kultura20.blog.polityka.pl/2009/05/17/analityka-kulturowa-drugie-podejscie/

http://en.wikipedia.org/wiki/Culturomics

http://www.humanistykacyfrowa.com/

http://mobiledeveloper.pl/articles/mobilization-raport-z-pola-walki

wtorek, 11 października 2011

Poznaj swoje ograniczenia - psychologiczne podstawy jakości kodu

Celem tekstu, który tutaj tworzę jest wymuszenie bardziej refleksyjnego spojrzenia na rzeczy z pozoru oczywiste


Z pośród całej masy publikacji dotykającej tematyki programowania niewiele jest pozycji, które poruszają specyficzną tematykę tworzenia kodu "ogólnie". Co więcej masa książek noszących inicjały światowej sławy inżynierów prezentuje wręcz kod śmiało nadający się do kategorii "syf" a nie "arcydzieło". Jedna z lepszych pozycji, która nie wymiotuje na czytelnika pseudo przykładami to Czysty kod napisany przez pana mieniącego się : Robert C. Martin.


Jest to jedna z lepszych (jeśli nie najlepsza) pozycji stawiających sobie za cel znalezienie właściwej drogi do tworzenia czytelnego kodu, ale jednak czegoś w niej brakuje. Weźmy taki rozdział o optymalnej ilości parametrów przekazywanych do funkcji :

  • 0 - super
  • 1 - jeszcze ok
  • 2 - zaczyna być groźne
  • 3 - pachnie zjebatorstwem
  • 4+ - niezbędny refaktoring

Niestety autor jedynie stwierdza, że za dużo argumentów funkcji jest po prostu nieczytelne i zadowala się tak płytką argumentacją.


Jest taka profesjonalna biznesowa technika wkurwiania ludzi nazywająca się "5 razy dlaczego" fachurkowo wymawiana przez ludzi piastujących stanowiska nazwane bynajmniej nie po polsku "fajw whais" (5_Whys).
Cała sztuczka polega na zadawaniu pytania "dlaczego" tyle razy aż dojdzie się do bazowej przyczyny problemu. Niestety większość argumentacji pojawiających się w wywodach odnośnie pisania czytelnego kodu byłoby rozerwanych przez tę technikę, bo jak mogłaby wygladać taka rozmowa:

- 3 argumenty funkcji to zdecydowana granica
- dlaczego ?
- bo później kod staje się nieczytelny
- dlaczego ?
- bo pojawia się za dużo kombinacji
- dlaczego fakt, że pojawia się za dużo kombinacji sprawia że trudniej czytać kod
- ...

I ch*j, tutaj już schodzimy na intuicję.W zakresie prasy IT nie znalazłem żadnej, choćby pseudonaukowej próby wytłumaczenia dlaczego 2 parametry mają być dobre a 3 lub 4 już nie.
Może Inżynierowie nie szukali odpowiedzi na to pytanie ale psychologowie znaleźli ja ponad 50 lat temu


"Magiczna liczba 7"


Własnie pół wieku temu przeprowadzono badania, które określiły granice ludzkiej pamięci (krótkotrwałej) i dały odpowiedź na to : ile koncepcji,idei czy obiektów istota ludzka jest w stanie przeanalizować w danej chwili.


Link do dokładnych badań :
http://www.musanim.com/miller1956/

Streszczenie w wikipedii : http://en.wikipedia.org/wiki/The_Magical_Number_Seven,_Plus_or_Minus_Two



Kto ma ochotę może zapoznać się szczegółowo z raportem a dla bardziej leniwych dwa wnioski podsumowania :

  1. Możemy w jednej chwili ogarnąć około 4-6 koncepcji.(liczba 7 jak się okazuje była zastosowana tylko z powodów marketingowych). Dlaczego tyle? Być może przez miliony lat ewolucji taka liczba była najwłaściwsza aby ogarnąć codzienność ówczesnego życia : Tygrys, Kobieta, Ogień , Jaskinia
  2. Pojęcie koncepcji :
    • funkcja(flaga1,flaga2,flaga 3) 
      - od razu zaznaczam, że jest to przykład maksymalnie zjebanego kodu. Funkcja przyjmuje trzy niezależne od siebie parametry, których kolejność interakcji może mieć znaczenie, więc mamy 2^3=8 możliwych interakcji co skutkuje wyjściem poza granicę buforu pamięci krótkotrwałej
    • funkcja(imie,nazwisko,ileKasy)
      - tutaj da się wyodrębnić dwie koncepcje : DaneNadawacy i KwotaPrzelewu, do tego mamy tylko jeden sposób interakcji , który docelowo można nazwać DaneDoPrzelewu

Patrząc na powyższe przykłady można zaryzykować twierdzenie, że pierwsza funkcja jest do wyjebania a drugą można poddać prostemu refaktoringowi.


Wnioski


Przykład był uproszczony to i wnioski wypływające z niego będą uproszczone : Trzy parametry w funkcji nie zawsze oznaczają totalnie zjebany kod ale ta liczba stanowi doskonały wyznacznik dla potencjalnego "smrodu" w kodzie . W firmie ustawiliśmy regułę statycznego sprawdzania kodu w Sonarze na maks 3 parametry w metodzie i jak na razie się to sprawdza. Jak dołożymy do tego masę innych praktyk, o których kiedyś wspomnę to rezultat faktyczny jest taki, że nawet dosyć rzadko pojawiają się w naszym kodzie funkcje z wspomnianymi 3 parametrami.

Ważne aby potencjalnemu czytelnikowi drzewa nie przesłoniły lasu. Parametry parametrami ale głównym zamysłem jaki chcę przekazać z tego artykułu jest zachęta do szukania głębszych wyjaśnień pewnych kwestii a nie zadowalanie się wytłumaczeniem "bo wydaje się to mieć sens"