niedziela, 7 października 2012

Agile i skany mózgu

Poniżej link do bardzo ciekawego tekstu starającego się interpretować "zwinną rzeczywistość" podpierając się skanami mózgu. Bardzo polecam aby każdy sam przeczytał ten tekst. Znajdziecie w nim pomiedzy innymi takie o to informacje:

http://www.infoq.com/articles/brain-scrum-maza

  • Groźba wydalenia z grupy powoduje takie same reakcje neuronalne jak ostry ból. Ludzie są stworzeni do tego aby pracować w oparciu o kontakty społeczne wewnątrz grupy
  • Bez względu jak wielu domorosłych psychologów będzie swoje wywody na grupach podpierać piramidą Maslova - to jednak nie jest ona do końca poprawna
  • Naturalne motywatory : autonomia oraz uczciwe zasady społeczne (nie jest to wspomniane w przytoczonym tekście ale ten czynnik jest krytyczny. Jednakże aby go zrozumieć potrzebny jest osobny artykuł). Zamiast tego pojawia się nowy model SCARF.
  • Wytwarzanie oprogramowania to nie "seryjna produkcja rzeczy" i tutaj obowiązują inne zasady pracy niż w fabryce.
  • I wiele innych...

niedziela, 30 września 2012

Mobilizacja 2012 jako przykład samoorganizacji

Miłe słowa i podziękowania

Na początek trochę miodu. Jeszcze raz chciałbym podziękować wszystkim, którzy przybyli na konferencję za to, że stali się częścią tego fantastycznego wydarzenia. Wydarzenia, który przynajmniej od strony informatycznej ożywia to trochę senne miasto jakim jest Łódź.

Gdy rok temu Marek Defeciński i Mariusz Saramak rzucili pomysł aby zrobić w naszym mieście konferencję pokroju dawnej Javarsovii wszyscy na około raczej przejawiali nastawienie w stylu - "chyba was pojebało". W trakcie pierwszej edycji zawitało na mobilizację około 150 osób ale to wystarczyło aby ludzie zaczęli wierzyć w powodzenie tego z pozoru szalonego przedsięwzięcia :). Tym razem gościliśmy prawie 500 słuchaczy i możemy śmiało mówić, że mobilizacja jest jednym z największych wydarzeń kulturalnych w Łodzi i jednym z ciekawszych wydarzeń IT w Polsce.

Samoorganizacja

W opisach konferencji w tym miejscu zazwyczaj następuje lista notek z poszczególnych prezentacji. Jednak dziś skupię się na innym fascynującym temacie - samoorganizacji organizatorów w trakcie organizacji konferencji :) Nie było żadnych gantów, żadnych menadżerów, czy rozliczania tasków. Były za to cotygodniowe siedzące stand-upy w makdonaldzie, ciągła i równoprawna dyskusja na grupie oraz grupowe współtworzenie rozproszonych dokumentów na google docs.

O samoorganizacji można pisać i pisać - powstają pewnie także całe książki na ten temat. Dlatego dzisiaj zerknijmy tylko na dwie ciekawe koncepcje.

Variety (Różnorodność)

http://en.wikipedia.org/wiki/Variety_(cybernetics)

Link powyżej koncentruje się co prawda bardziej na stabilności danego systemu aniżeli stanach wyjściowych ale idea generalnie jest taka - traktujemy zespół jako system i im więcej ten system ma stanów tym więcej możliwych wyników generuje. Wynikami w tym przypadku są decyzje i pomysły. Jeśli więc w zespole będziemy mieli tylko absolwentów informatyki około 25 lat, gdzie każdy gra po godzinach w sapera i doczytuje książki o Javie to możemy liczyć na limitowany zestaw stanów.

Z drugiej strony zmieszajmy w tyglu ekstrawertyzm z domieszka introwertyzmu, trochę nieobliczalności z rezerwą oraz doświadczenie ze świeżym spojrzeniem. Dostaniemy całe spektrum pomysłów, z których oczywiście część będzie zjebana ale inne takie jak wojskowa grochówka na obiad, mundury dla załogi czy "kontakt z bazą" spotka się z miłym przyjęciem (przynajmniej tak ludzie mówili :))

Darkness principle

Each element in the system is ignorant of the behavior of the system as a whole [...] If each element ‘knew’ what was happening to the system as a whole, all of the complexity would have to be present in that element

Uwzględniając to prawo zgadzamy się z tym, że gdyby jedna osoba chciała wszystkim zarządzać to musiałaby ogarnąć cały system, ogarnąć cały problem bez żadnych uproszczeń (każde uproszczenie generuje ryzyko pomyłki). Z drugiej strony dzieląc problem na wszystkich uczestników zespołu sprawiamy, że każdy koncentruje się na części modelu co znacznie redukuje złożoność samego problemu.

Logika podpowiada, że potrzebna jest jakaś synchronizacja wysiłków, informacji i sub-domen problemu. Ktoś mógłby napisać, że tutaj pojawia się rola dla kogoś w stylu project managera. Niekoniecznie. Okazało się, że "ciałem zarządzającym złożonością całego problemu" był sam zespół. Spotkania w Maku i wymiana informacji na grupach wystarczyły

Czekając na mobilization 2013

Mobilizacja jest wciąż młodą konferencją i każda pomoc się przyda. Jeśli drogi czytelniku byłeś na konferencji, podobała ci się ona i prowadzisz jakąś formę bloga - podziel się swoją opinią. Do zobaczenia (oby ;)) w 2013

czwartek, 6 września 2012

Filozoficzny model projektu

Metafory i modele

Metafory są zjebane - zwłaszcza wtedy kiedy nie są pomocne. Wystarczy znaleźć jedno malutkie podobieństwo pomiędzy diametralnie różnymi sytuacjami by zacząć dowodzić dowolnej głupoty. Można sobie zrobić z programistów murarzy bo i tu i tam pojawia się słówko "architekt". Albo coś lepszego : projekt to ciąg pewnych decyzji i szachy to ciąg pewnych decyzji - więc w projekcie czasem warto poświęcić "pionki" by chronić króla. Kiedyś chyba zorganizuję nawet konkurs na najbardziej debilną metaforę IT


Co innego modele! Model z założenia nie jest prawdą. Specjalnie wszedłem na wikipedię aby upewnić się, że używam odpowiedniego słowa i odebrać oręż potencjalnym trolom. Mamy taki oto cytat : "system założeń, pojęć i zależności między nimi pozwalający opisać (zamodelować) w przybliżony sposób jakiś aspekt rzeczywistości" . (co prawda inne znaczenie to "wieś w województwie mazowieckim") . Tworząc model wcale nie twierdzę, że coś jest takie a nie inne, nie rzucam dogmatów wyrażających złote prawa prowadzenia projektów ( z cyklu : "jest powszechnie wiadome, że ...") czy też nie udaję, że moje zdolność telepatyczne rozwinęły się na tyle, że mogę ogarnąć psychikę całej populacji ( "wszyscy wiedzą, że ..."). Model jest uproszczeniem. Model nie jest prawdą. Ale może pomóc dostrzec pewne reguły kiedy odfiltrujemy szum.

Dawno dawno temu - podstawy modelu

Filozofia do stworzenia podstaw naszego modelu pochodzi od pana z obrazku obok - owy dziadu to Arystoteles. Zanim jeszcze Grecy przestawili się na biznes turystyczny i każde cięcia budżetowe witali falangą najebanych restauratorów, Arystoteles miał ciekawą myśl :
  • Wszystko jest złożone z tzw. Substancji
  • Substancja jest w ciągłym Ruchu
  • Substancja osiąga kombinacje form posiadających Stan Aktualny i Potencjał
I na przykład weźmy takie drewno jako substancję. Drewno ma pewne potencjalne stany - może być np. stołem albo laską. Ale kiedy już osiągnie stan laski to już wśród jego potencjału nie ma stanu stołu. Jednak dla odmiany Szkło może być lampą lub butelką - i gdy osiągnie jeden ze stanów to teoretycznie drugi z nich jest cały czas dostępny ale będzie to wymagało większego ruchu.

I teraz czas na IT.

  • Wszystko jest złożone z substancji zwanej Kodem
  • Kod jest w ciągłym ruchu powodowanym przez Motywację programistów
  • Kod osiąga kombinację form przynoszących Aktualną Mamonę i Potencjalną Mamonę

Energetyczny graf przejścia stanów

Wspomniana MAMONA będzie formą energii jakiej użyjemy do umotywowania ruchu po grafie stanów projektu. Jednostka mamony to $

Zaczynamy nasz projekt w węźle 1 i założenie jest takie, że im większy węzeł tym większa wartość aktualnej Mamony . Jeśli skupimy się tylko na tym czynniku to idziemy do dwójki i mamy więcej aktualnej mamony niż w trójce. Ale teraz pojawia się problem bo z dwójki możemy już iść tylko do szóstki czyli potencjalna Mamony już tak atrakcyjnie nie wygląda. Najlepiej byłoby trafić do 6 i "nabrać" sporo aktualnej mamony.

Owe tajemnicze strzałki na grafie symbolizują sumę decyzji o architekturze, funkcjonalności, morale teamu i jakości papieru toaletowego czyli wszelakie moce sprawcze, które sprawiają, że projekt jest w takim a nie innym stanie. No i czasem zdarza się tak, że nasza substancja czyli KOD tak sprawnie porusza się po grafie i zmienia stan tak umiejętnie, że projekt osiąga najwartościowszy węzeł.

Pomyślmy co takiego dokładnie powoduje Ruch? No niby napisałem, że motywacja developerów ale i ta wielkość jest wynikiem działania różnych czynników : pieniądze, pizza, uznanie,szacunek, karabin maszynowy MG 42. Czas ubrać to w odpowiednie abstrakcje.

Dwie mityczne siły

Wyobraźmy sobie, że na naszą substancję działają dwie niesamowite siły.


SIŁA AKTUALNOŚCI

Ta siła ciągnie do jak najszybszej przemiany mamony w wartość aktualną.

Niebezpieczeństwo : zamykamy przed sobą bardzo zyskowne stany aplikacji.

Przykład : "Teraz zakodujmy jak najwięcej, będzie sukces to testy dopiszemy później"

SIŁA POTENCJAŁU

Ta siła ciągnie do osiągnięcia jak największej liczby możliwych przemian stanu

Niebezpieczeństwo : Nie osiągamy wartości aktualnej.

Przykład : "Zróbmy piętnaście warstw abstrakcji tak na wypadek gdyby w przyszłości ktoś miał podłączyć się pegasusem do naszej aplikacji"

Lepszy Przykład : "ej przepiszmy wszystko na Grailsy"

Przemyślenia jakie powstają po analizie tych dwóch przykładów, mogą doprowadzić do wniosku, że owe dwie siły muszą jakoś sobie przeciwdziałać, tak aby docelowo doprowadzić projekt do najlepszego stanu.

To dlaczego się ku*wa nie udaje?

Asymetria sił - czyli dlaczego projekty się nie udają

To był upalny czerwcowy dzień. Roman podjechał swoim najnowszym Audi A6 na zarezerwowane miejsce parkingowe. W głębi duszy cieszył się, że zajmuje pozycje jaką zajmuje. Inaczej musiałby krążyć po okolicznych trawnikach i kamienicach w poszukiwania pustego skrawka dla swojego samochodu. Rozejrzał się dookoła przyciskając guzik automatycznego pilota. Jego wzrok raz za razem przeskakiwał z opuszczających najnowsze modele sportowych samochodów sylwetek ludzi. Każdy z nich był w pewien sposób podobny do Romana. To oni stanowili o sile tej firmy, to oni każdego dnia zamieniali dzięki swym niezwykłym umiejętnościom idee w zyski, to oni cieszyli się niesamowitym szacunkiem za swoje dokonania. Podobnie jak Roman - wszyscy byli Inżynierami.

Roman nie mógł się doczekać aż zasiądzie do klawiatury i zakończy kolejny fascynujący moduł systemu. Jeszcze pozostała mu tylko jedna sprawa do załatwienia. Musi przygotować dzisiejsze zadania dla project managerów. W głębi serca Roman czuł wielką sympatię do tych ludzi, gdyby nie oni musiałby spędzać cenne godziny swojego czasu na dopracowywaniu detali projektowych. Współczucie pogłębiła jeszcze myśl, że ludzie ci nie cieszyli się takim statusem jak Roman - jak ich nazywał HR? - chyba "zasobami" czy coś takiego. Cóż każdy musi jakoś zacząć, jeśli będą się starać i wykażą umiejętność analitycznego myślenia - być może wtedy będą mogli pokusić się o awans na stanowisko inżyniera i kto wie - może kiedyś będą mieli swoje miejsce na parkingu...

Asymetria sił - czyli dlaczego projekty się nie udają - powrót do rzeczywistości

Powyższe akapity wydają się fantastyką? Być może gdyby ewolucja poszła innymi drogami tak by wyglądał nasz świat ale jednak (podobno) kiedyś biegaliśmy po drzewach i jedliśmy banany. Przez eony ewoluowaliśmy w otoczce struktury hierarchicznej aż parenaście tysięcy lat temu modne stało się "okazywanie" braku potrzeby pracy (Teoria klasy próżniaczej). Nic dziwnego, że wydaje nam się że "tak po prostu jest".

A co gdyby jednak obydwie siły z naszego modelu współpracowały? Co gdyby wzorzec "Command-and-control" zastąpić wzorcem "wzajemne zaufanie i szacunek"? Czy tak trudno wyobrazić sobie, że synergia (bardzo ładne słowo) warstwy technicznej i biznesowej może nas doprowadzić do osiągnięcia wymarzonego stanu ogromnej mamony? Wiele osób bez mrugnięcia okiem podkreśla jak to programiści nie radzą sobie "biznesowo" ale ze względu na istniejącą asymetrię niewiele osób ma odwagę krzyknąć, że tzw "biznes" nie ma pojęcia (takiego prawdziwego pojęcia) o tworzeniu systemów informatycznych! Jeśli czyta to programista to wiedz, że twoją rolą jest obrona jakości technicznej projektu. Ludzie, którzy zostali sztucznie postawieni ponad tobą w hierarchii firmowej najczęściej (bo nie zawsze) nie mieli okazji nabyć odpowiedniej wiedzy aby się tym zająć. Umiesz liczyć - licz na siebie i zespół. No i żeby nie było niejasności. Wszystkie te zdania i słowa wyobraź sobie w kontekście jak najbardziej szczerej współpracy.

Współpraca - bardzo ładne słowo - ale czy istnieją jakieś prawa i zasady tej współpracy? Za rogiem czai się bardzo ciekawy temat, coś czego jeszcze chyba nie było. Ostatnie lata minęły (przynajmniej dla mnie) pod znakiem pojedynku Agile vs. Wodospad. Wodospad jest dobry dla procesów w fabryce drobiu zaś Agile sprawdza się najlepiej dla grupy doświadczonych developerów z 30 letnim stażem. Czy jest trzecia droga? Niech to będzie przedsmakiem : http://en.wikipedia.org/wiki/Complex_adaptive_system

A ponieważ nie znalazłem fajnego obrazka przedstawiającego wizualizację koncepcji teorii systemów dlatego na koniec wklejam zdjęcie kota popierdalającego przez galaktykę na keybordzie.

niedziela, 19 sierpnia 2012

Syndrom wesołego Cześka

Ktoś inny posprząta nasze gówno

Nie tak dawno temu kamera jednej z telewizji uchwyciła uroczą rozmowę dwóch polityków. Słowo w słowo jej nie pamiętam - na necie też znaleźć nie mogę ale sens był mniej więcej taki :

- Teraz trochę tutaj pożyczymy, trochę tutaj damy i będzie spokój
- no ale z czego to oddamy?
- a o to już będą się martwić w następnej kadencji

Cytowanie polityków z imienia i nazwiska jest bardzo ryzykowne dlatego też nadajmy naszemu politykowi pseudonim : "Czesław". Otóż Czesław myśli w bardzo cwany sposób : my zaciągniemy dług i z nami ludzie będą kojarzyć poprawę, a ktoś inny będzie to spłacać i z tym kimś innym biedne społeczeństwo zwiąże negatywne uczucia.

Teraz. Ten akapit powinien stanowić jakieś eleganckie przejście od polityki do informatyki - dlatego tez teraz elegancko przechodzimy od polityki do informatyki

Wesoły Czesław w projektach IT

Z pamiętnika informatyka :

  1. Zaczyna się projekt. Nawet jeśli jest to najbardziej hardkorowy wodospad to on też ma jakąś tam iterację
  2. W trakcie tej pierwszej iteracji developer - nazwijmy go Czesiek - napierdala całkiem szybko działający kawałek funkcjonalność
  3. Decydenci są wniebowzięci bo oto powstał pewien "produkt" ciągnący za sobą potencjalne zyski - Czesiek zdobywa plusy w oczach managementu
  4. To czego nie wiedzą ludzie w garniturach to to, że Czesiu napisał ten kod kosztem wszelkich reguł czytelności - masę zagnieżdżonych pętli, ogromne klasy i inne cuda na kiju. Ci biedni ludzie tego nie rozumieją - działa? No działa!
  5. Projekt trzeba rozbudować - niech zajmie się tym jakiś junior developer, utrzymaniowieć czy coś w tym stylu - Czesiek jest za dobry - potrzebujemy go do naszych "miszyn kritikal."
  6. I teraz biedny zamiennik siada do tego gówna i płacze i próbuje coś napisać i męczy się i trwa to długo
  7. I taki kierownik budowy sobie myśli " no tak jak przewidywałem - Czesiu jest zajebisty a ci to nawet nie umieją jednej rzeczy sprawnie dopisać. Ehhh trzeba znowu zadzwonić do Cześka"
  8. Wróć do punktu pierwszego

Licznik długu technicznego

Dług techniczny to bardzo ciekawe pojęcie - pełni role mostu porozumienia pomiędzy abstrakcją biznesową i techniczną. Generalnie już jest w powszechnym rozumieniu fakt, że dług techniczny jest zły, że spowalnia prace, że trzeba go spłacać - ale przynajmniej w moim przekonaniu mało kto dokładnie rozumie skąd ów dług się bierze.

Dzisiaj ograniczymy się tylko do stwierdzenia faktu, że w naszym przykładzie generatorem długu technicznego jest Czesiu a niebezpieczna gra, którą prowadzi sprawia, że widzowi trudno jest odróżnić kto jest czarnym a kto białym(?) charakterem tej historyjki. Skoro nie widz to kto ma powstrzymać Czesia? Jedyne co przychodzi mi do głowy to zespół developerów, którzy operując pojęciem długu technicznego otworzą komu trzeba oczy na rozlewające się po projekcie gówno.

poniedziałek, 23 lipca 2012

Warunkowanie społeczne - poznaj swojego największego wroga

Materiał, który przedstawię w tym odcinku jest dla mnie wyjątkowy a to dlatego, że każdy ma w życiu takie momenty kiedy pewne puzzle w jego głowie łączą się w całość powodują radosny okrzyk "Eureka!!!" albo "o kurwa ja pierdole! trzy dekady ?! potrzebowałem na to trzy dekady?!". Oto synteza niesamowicie ciekawej teorii z pogranicza ewolucyjnej teorii grupy oraz psychologii indywidualnej. Zrozumienie tego materiału może być ważnym krokiem w kierunku osiągnięcia "lepszej wersji siebie" (dotyczy też informatyków bo to w końcu blog informatyczny).

Misie i wilki

Żeby zrozumieć jak działa warunkowanie społeczne musimy najpierw zrozumieć po co zwierzęta łączą się w grupy, jak działają grupy i dlaczego niektóre osobniki pomimo tego, że mają przejebane to nadal zostają w grupie. Na obrazku obok siedzi sobie miś. Misie to bardzo aspołeczne zwierzęta. Rzadko kiedy można je spotkać w jakiejkolwiek grupie i generalnie mają wszystko w dupie. Jak są głodne to skoczą na rybkę czy odrobinę miodu do czego pomocy innych misi (misiów?) nie potrzebują. A jak już im się odechce to walą w kimę na kilka miesięcy.

A teraz zerknijmy na inne zwierzątko, które stwierdziło, że zamiast rybek woli zjeść sobie jakiś większy kawał mięcha. Poza innymi gustami kulinarnymi wilki od misia różni także struktura społeczna, którą tworzą aby owe mięcho upolować. I bynajmniej nie jest to demokratyczna utopia : Watahą dowodzi najsilniejsza para, która jako jedyna ma prawo się rozmnażać. Resztę watahy tworzą zwykle osobniki z nimi spokrewnione. Każdy wilk w stadzie ma ściśle określone miejsce, wyznaczające m.in. kolejność jedzenia zdobyczy. Zależności te podkreślane są przez rozbudowany system gestów dominacji (m.in. podniesiony ogon i uszy) i poddaństwa (np. skulony ogon, kładzenie się na grzbiecie). Poza hierarchią znajdują się młode, którymi opiekuje się cała wataha. Młode samce po osiągnięciu dojrzałości czasem są przepędzane przez parę alfa, by nie zagrażały ich dominacji. W społeczności wilków każdy z nich pełni określoną funkcję. W związku z tym możemy wyróżnić specjalistów od węszenia niebezpieczeństwa, szukania tropów, zabijania łupu, chronienia dzieci pary alfa, przedniej straży na polowaniu. Od wymierzania kar jest zastępca przywódcy. Nie jest on lubiany przez pozostałe wilki, w związku z czym nigdy nie zostaje samcem alfa. Wymierzanie kar odbywa się zawsze w sposób symboliczny. Wilk-zastępca otwiera szeroko pysk, w który wkłada swoją głowę winowajca.

I teraz najważniejsze - wilki nie mają jakiegoś wilczego spisanego kodeksu prawnego. Nie ma przepisów, nakazów czy zakazów. Wilki nie rozwinęły myślenia abstrakcyjnego, nie umieją używać narzędzi czy tworzyć zaawansowane planów. Słowo, klucz do zrozumienia praw rządzących stadem wilków to - instynkt., który bardziej fachowo możemy nazwać reakcjami nieświadomymi. Co powoduje, że inne wilki pozwalają się wykorzystywać przez główną parę w stadzie?

Teoria ewolucji, samolubne geny...

Selekcja naturalna,selekcja seksualna, pola morfogenetyczne i wiele innych Zjawisk. Nie sposób w skrócie wypisać wszystkich koncepcji jakie poprzez miliony lat i tysiące pokoleń wpłynęły na zachowania gatunków. Dla zainteresowanych lektura jest dostępna w necie a na potrzeby tego artykułu przyjmijmy opisany wyżej podział za fakt.

Szympansy i ludzie

Przeskoczmy teraz od wilków do zwierząt od których (podobno) wyewoluowaliśmy. Szympansy mają jeszcze bardziej skomplikowaną (i niesprawiedliwą) strukturę społeczną niż wilki. O szczegółach jak to samce i samice wszystko ustalają możecie poczytać sobie w necie natomiast tutaj skupmy się na innym ciekawym problemie. Skąd dany szympans wie jaką zajmuje pozycję w stadzie?

Ten akapit jest najważniejszy

Żeby to zrozumieć przyjmijmy, że istnieje wielkość zwana "wpływem", który może np. charakteryzować jako ogólną sprawność fizyczną i zdolność do zdobycia pożywienia. Przyjmijmy teraz, że mamy stado szympansów

  1. Najsilniejszy szympans 10 jednostek wpływu
  2. szympans 2 - 8 jednostek wpływu
  3. szympans 3 - 7 jednostek wpływu
  4. szympans 4 - 5 jednostek wpływu
  5. szympans 5 - 3 jednostek wpływu
  6. szympans 5 - 2 jednostek wpływu
Teoretycznie każdy z szympansów nie ma szans w starciu z szympansem nr1, ale jeśli szympansy 2 i 3 ustanowią sojusz to łatwo mogą "zdetronizować" pierwszego. dlatego też pierwszemu opłaca się zawrzeć sojusz z drugim albo trzecim (albo obydwoma) i w ten sposób zapewnić wspólny wpływ np. 10+8=18 jednostek. Jest to wystarczające aby przeciwstawić się reszcie szympansów o wpływie 7+5+3+2=17. Nawet jeśli szympansów o mniejszej sile byłoby więcej to wystarczyłoby kontrolować (rozbijać) tworzenie się pomniejszych sojuszy. Słabszym szympansom opłaca się mimo wszystko pozostawać w stadzie gdyż w ten sposób mają przynajmniej jako taką szansę przeżycia.

Ale ale ale. Powyższe obliczenie jest zawiłe same w sobie dla niejednego człowieka więc jak to ma działać w przypadku małp? Zarówno my jak i nas dalsi kuzyni możemy przetworzyć świadomie ograniczoną ilość informacji . Co innego nasz umysł podświadomy - tutaj mamy potężną maszynkę obliczeniową - maszynkę, która przesyła umysłowi świadomemu rozkazy w postaci uczuć. I np. Jak taki szympans o małym statusie będzie np. chciał wyrwać więcej jedzenia to u silniejszych małp pojawi się uczucie agresji zaś jeśli pojawi się sytuacja odwrotna to u małpy z "mniejszą wartością" pojawi się uczucie strachu, które być może uratuje jej życie.( w sensie nie wyjebią jej ze stada lub nie zrzucą z dębu)

Warto przetrwać jeszcze z jednego powodu. Z czasem dynamika grupy może się zmieniać. Pierwsza małpa zostanie pożarta przez tygrysa, a może 4 małpa zdobędzie nową umiejętność lub zasób, które dodadzą jej jednostek wartości? I najciekawszy przypadek - w stadzie pojawią się nowe osobniki, które będąc nieustannie gnębione poprzez inne małpy z dołu hierarchii pozwolą tym ostatnim przesunąć się względnie w górę drabiny społecznej.

Po tych wszystkich zoologicznych rozważaniach pora w końcu odnieść cały ten opis do naszego życia codziennego.

Kapitalizm, produkty , frustracja i ciągła pogoń za wartością

Rewolucja przemysłowa trochę przetasowała zasady. Mamy technologie pozwalające nam podróżować w miejsca, o których ludziom się nie śniło (chociaż narzekamy na ceny). Mamy opiekę medyczną, której kiedyś nie mieli królowie (chociaż narzekamy na ceny). Mamy bezpieczne schronienia i nie musimy się martwić o jedzenie (chociaż narzekamy na ceny). Co prawda stare mechanizmy stadne i walka nadal zdają się funkcjonować w polityce i na wysokich stanowiskach korporacyjnych ale to temat na inny artykuł.

W tle tych przemian pojawił się inny problem. Jak tak wszystko dookoła jest coraz lepsze to jak zmusić ludzi do kupowania coraz to nowszych produktów?

Z pomocą naszym przyjaciołom z marketingu przychodzi opisany wcześniej mechanizm warunkowania społecznego.

  1. Kup nasz produkt i zyskaj "wartość" (poczuj się lepiej)
  2. Jeśli nie kupisz naszego produktu stracisz na wartości (poczujesz się gorzej)
Oczywiście nasz "szympans numer 1" został dawno odstrzelony a jego miejsce zajął miraż stworzony przez przemysł marketingowo-rozrywkowy. Niedościgniony horyzont oczekiwań przesuwany przez coraz to nowsze i "lepsze" produkty. Powoduje to epidemię "uczucia wycofania", apatii i strachu podobnie jak u naszych szympansów, które "czuły", że nie mają wystarczającej wartości aby "sięgnąć po więcej".

Mechanizm działa następująco :
CZŁOWIECZEK -----PING : CZY MOGĘ CZUĆ SIĘ DOBRZE----> SPOŁECZEŃSTWO (MIRAŻ)
CZŁOWIECZEK <----- NIE MASZ STATUSU/ POTRZEBUJESZ PRODUKTÓW -- SPOŁECZEŃSTWO (MIRAŻ)

Można jeszcze inaczej


CZŁOWIECZEK -----WARTOŚĆ WYTWORZONA PRZEZ PASJĘ----> SPOŁECZEŃSTWO
CZŁOWIECZEK <-----WARTOŚĆ WYTWORZONA PRZEZ TECHNOLOGIĘ---- SPOŁECZEŃSTWO
Każdy wybierze to co mu pasuje bardziej. Generalnie druga wersja generuje więcej lepszych programistów i sprawia, że pracuje się znacznie przyjemniej i wydajniej (bo to w końcu blog programistyczny to po tym całym pierdoleniu o zwierzętach coś napomknąć wypada)
I na koniec bardzo mądre słowa od ciekawego człowieka, który powinien wszystko wytłumaczyć znacznie lepiej niż ja :

niedziela, 8 lipca 2012

Bazodanowy model hipotezy insulinowej

Poniższy tekst zawiera masę uproszczeń oraz niedopowiedzeń i ma na celu jedynie zainteresować Cię ważnymi tematami prozdrowotnymi. Jeśli (mam nadzieję) kogoś zaciekawi wspomniane zagadnienie to powinien udać się do literatury fachowej po bardziej dogłębną wiedzę.

Po co się przejmować

Seria pytań retorycznych

  • Czy jakość sprzętu wpływa na jakość oprogramowania, który na nim działa?
  • Czy gdyby nagle pozmieniały się statystyki elementów elektronicznych komputera to bez względu na doskonałość napisanego programu zacząłby on działać niepoprawnie?
  • Jeśli zaczniemy dostarczać do kompa coraz mniej energii to prędzej czy później wszystko zacznie się jebać?
  • Wiedząc, że odpowiedź na powyższe pytania jest twierdząca odpowiedz sobie na pytanie dlaczego nie szanujesz swojego "hardware" (oraz "swojego sprzętu")

Zacznijmy od otyłości. Bez problemu możesz wpisać w googlach frazy podobne do "wpływ otyłości na umysł" by znaleźć masę artykułów i badań opisujących jak niekorzystnie ten stan organizmu wpływa na umysł - mniejszy mózg i szybsza utrata oraz starzenie tego organu to tylko jeden z wielu skutków. I chociaż widzę, że wiele osób stara się coś z tym zrobić poprzez (niestety często nieregularne) ćwiczenia fizyczne to jednak nieznajomość (wcale nie elementarnych) zjawisk w naszym organizmie prowadzi do tego , że więcej ćwiczeń fizycznych może prowadzić do większego magazynowania tłuszczu!

Ale zacznijmy od początku

Blokada na odczyt

wyobraźmy sobie, że stworzyliśmy system charakteryzujący się następującym działaniem:
  • Program magazynuje słowa w bazie danych
  • Aby program mógł działać musi wykorzystać część zmagazynowanych słów albo ulegnie anihilacji
  • Ilość słów, która musi zostać zużyta jest wprost proporcjonalna do ilość już zmagazynowanej
  • Gdy zaczyna brakować słów do wykorzystania to wtedy nasz program zaczyna pochłaniać wszelki tekst w zasięgu wzroku :)
  • I najważniejsze! - podstawą działania programu są dwie transakcje : odczytująca i zapisująca, gdzie zapisująca ma prawo wywłaszczyć odczytującą

Prześledźmy przykładowe działanie programu

  1. Dostarczamy do naszej aplikacji 100 słów , transakcja zapisująca dostaje blokadę na bazie danych i zaczyna wprowadzać słowa co zajmuje pewien czas T1
  2. W tym czasie nie możemy niczego odczytać a program nadal musi "jeść" słowa
  3. Do modułu wprowadzania wysyłane są sygnały o "braku" słów co zmusza go do "połykania" kolejnych słów z otoczenia
  4. Ilość słów w bazie danych rośnie co sprawia, że nasz program musi wykorzystać coraz więcej słów do swojego działania ale jeśli działa transakcja odczytująca to nie możemy korzystać z już z gromadzonych słów
  5. Sytuacja się powtarza cyklicznie aż baza danych nie jest w stanie pomieścić ogromnej ilości słów i rozpierdala się od wewnątrz
Powyższy przykład jest bardzo uproszczony i być może wykorzystuje zbyt dużą abstrakcję do zbudowania metafory gdyż sytuacja w naszym organizmie wygląda trochę (bardzo) inaczej. W przeciwnym przypadku nie przeżyli byśmy nawet jednego dnia. Z drugiej strony poprzez złe odżywianie wszystko może się zjebać. Zaraz wszystko się wyjaśni.

Transakcja w naszym organizmie - Insulina i Glukagon

System transakcyjny w naszym organizmie (ponownie w dużym uproszczeniu) wygląda następująco :

  • Insulina - zapis do bazy
  • Glukagon - odczyt z bazy

Ten mechanizm powstał na bazie wielu milionów lat ewolucji i w kontekście życia jaskiniowca wygląda zajebiście. Według teorii kiedyś ludzkie życie było przeplatającymi się okresami głodu i ucztowania. Gdy więc brakowało jedzenia organizm pobierał energię z tkanki tłuszczowej i do dzieła ruszał Glukagon a jak upolowaliśmy mamuta to magazynowaliśmy tłuszcz (ale nie tylko!) przy pomocy Insuliny. System wydaje się być pełen harmonii, rozsądku i zdrowego pragmatyzmy.

Później przyszedł kapitalizm i ludzie sami sobie zhakowali ten system

Blokada do zapisu

Są dwie sytuacje kiedy Insulina wywłaszczy Glukagon i uzyska wyłączność do zapisu

  1. Skok poziomu cukru we krwi
  2. Insulinoodporność - co jest powiązane z pkt 1
Co do cukru we krwi to kiedyś jedynym źródłem węglowodanów prostych o wysokim indeksie glikemicznym (do tego nie zawsze dostępnym) był miód (z owocami sytuacja jest bardziej skomplikowana). Obecnie do wielu produktów dodawane są różnego rodzaju cukry,słodziki i inne gówna co powoduje nagłe skoki insuliny. I podobnie jak z przykładem naszej aplikacji zobaczmy co się dzieje :
  1. wpierdalamy cukiereczki (do tej aktywności ewolucyjnie nie jesteśmy przygotowani)
  2. insulina skacze i blokuje odczyt tłuszczu z komórek
  3. wpierdalamy cały czas cukiereczki i zapijamy kolą
  4. insulina wpycha tłuszcz do komórek ale organizm potrzebuje cały czas energii
  5. Ponieważ zmagazynowany tłuszcz jest niedostępny to organizm wysyła kolejne sygnały "chce kurwa jeść!".
Innym znanym przykładem działania tego mechanizmu jest pojawienie się po piwkowej gastro-fazy, gdyż jeśli spojrzymy sobie w dostępne na necie tabele to zobaczymy, że piwo ma jeden z wyższych indeksów glikemicznych. (Jednocześnie ogólny wpływ alkoholu na metabolizm organizmu jest zagwozdką samą w sobie).

W przypadku tego punktu wystarczy pilnować się z tym aby węglowodany proste jeść rano lub po wysiłku fizycznym. A to dlatego, że jest jeszcze jedno źródło, w które organizm będzie upychał rezerwy energetyczne w pierwszej kolejności - glikogen. Jeden jest w mięśniach a inny w żołądku. Z samego rańca jego rezerwy są wyczerpany i to jest dobry moment żeby zjeść sobie jakąś czekoladę czy banana. Później wszystko pójdzie w oponkę.

Groźniejszą sytuacją jest wspomniana w punkcie drugim insulinoodporność

Blokada totalna

Tutaj jedyną przewidywalna zależność można określić następująco : Im więcej insulina działa na komórki tym bardziej komórki uodparniają się na działanie insuliny . Kiedy uodpornią się całkowicie to mamy do czynienia z cukrzycą typu 2. Ale zanim ten czarny scenariusz stanie się faktem mogą dziać się dwie interesujące rzeczy

  1. Komórki wątroby uodparniają się szybciej niż reszta organizmu przez co generują więcej cukru co wyzwala większe wyrzuty insuliny. Pozostałe komórki organizmu w tym czasie są zablokowane i magazynują tłuszcz - tyjemy
  2. Komórki wątroby uodporniają się w tym samym tempie co reszta organizmu. Dana osoba jest "szczęściarzem", który może jeść i nie tyje - ale reszta konsekwencji zdrowotnych jak wysokie ciśnienie czy choroby serca jest obecna.

(Istnieje teoria mówiąca, że odpowiednio przyjmowany alkohol może obniżyć insulinoodporność)

Podsumowanie uproszczonego wywodu

Jak już wspominałem na samym początku - tekst ten obrazuje moje rozumienie tematu i ze względów pojemnościowych jest uproszczony. To co chciałbym aby zapadło wszystkim w pamięć po jego przeczytaniu to świadomość potrzeby dbania o jakość swojego "hardware" (i sprzętu), co jest wyzwaniem samym w sobie biorąc pod uwagę, że większość ludzi (nie tylko programistów) ma poważne problemy emocjonalne dnia codziennego, które stawia na pierwszym miejscu.

Po drugie nie należy do tekstu podchodzić jako do 'pochwały fizyczności szczupłej sylwetki' i należy wypierdalać z tekstami i myślami w stylu "ale ja akceptuje siebie takim jakim jestem i chuj". Jak będziecie za kilka lat (odpukać“) wprowadzali insulinę strzykawką w żyły to mało kogo będzie obchodzić wasza samoakceptacja

No i najważniejsza uwaga - na necie są badania potwierdzające, że mózg osób otyłych działa gorzej niż szczupłych jednakże w tle pojawiają się kontrowersje wynikające z tego, iż nie wiadomo co w tym przypadku jest jajkiem a co kurą.

PS. Oczywiście insulina to jeden z wielu elementów misternej układanki naszych organizmów. Jeśli np. będziemy niewiele jeść ale żyć w ciągłym stresie to też przytyjemy poprzez działanie kortyzolu ale tutaj już trzeba osiągnąć stand słodkiej nirvany mienia wszystkiego w dupie.

wtorek, 26 czerwca 2012

Organizacja Matcherów w testach

Bardzo krótkie wprowadzenie

Do niedawna sądziłem, że pojęcie "matchera" jest wszystkim znane ale przy okazji niedawnej prezentacji o testach mutacyjnych na naszym kochanym łódzkim JUGu okazało się, że część osób ta wiedza ominęła. W skrócie: standardowo w Junit można było napisać coś takiego :

assertEquals(resultDomainObject.getProstawaratosc1,prostawartosc)
assertEquals(resultDomainObject.getProstawaratosc2,prostawartosc)
assertEquals(resultDomainObject.getProstawaratosc3,prostawartosc)
assertEquals(resultDomainObject.getProstawaratosc4,prostawartosc)


Dzięki matcherom możemy przygotować sobie mechanizm do ładnego i zrozumiałego przedstawiania asercji.

assertThatIn(resultDomainObject).thereIsExpectedState().andSomeSomethingElseFulFillsCondition(condition)


Do wyboru z tego co wiem mamy dwie biblioteki:

Organizacja matcherów, która się nie sprawdziła

Początkowo wrzucaliśmy matchery obok testów co okazało się katastrofalnym pomysłem, gdyż nie dość, iż niejednokrotnie pisaliśmy te same matchery po dwa razy to tak naprawdę trudno było kontrolować co już zostało napisane a co jeszcze czeka na wyrzeźbienie.


Wyglądało to tak:
  • paczka1
    • test11
    • test12
    • matcher1
  • paczka2
    • test21
    • test22
    • matcher2


Organizacja matcherów, która może się sprawdzić

Zamiast doklejać matchery do testów dajmy im ich własne pakiety ładnie poukładane według funkcjonalności.
  • testy
    • paczkatestow1
    • paczkatestow2
    • paczkatestow3
  • matchery
    • funkcjonalnosc1
      • konkretnyMatcher1
        konkretnyMatcher2
    • funkcjonalnosc2
      • konkretnyMatcher3
        konkretnyMatcher4
    • Wspolne cegielki
      • cegielkaMatcher1
        cegielkaMatcher2
Na poniższym rysunku widzimy, że dana funkcjonalności ma swój własny i niepowtarzalny matcher, który jest zbudowany na bazie wspólnych, cegiełkowych matcherów :



Czy to dobre rozwiązanie? Czas pokaże.

Konkretny przykład

Poniższy rysunek przedstawia konkretną organizację matcherów w paczkach:



Wykorzystanie matchera wyższego poziomu w teście wygląda tak :

 

 assertThatOnBillingPageRepresentedBy(resultPage).inFirstRow().hasValue("NLD").inCountryCell();



Zaś zastosowanie matchera cegiełkowego do sprawdzania wartości w komórce tabeli wygląda tak: :

 

  assertThatInTableRowHtml(choosenRow).inCellNumber(CELL_NUMBER_OF_CITY).hasValue(expectedValueInCell);



I na końcu jest standard z FESTa :

 

 assertThat(cellText).isEqualTo(value);