niedziela, 29 stycznia 2012

Chybiona metafora

Niedawno internet obiegła poltka głosząca, iż po raz kolejny polski system stał się ofiarą ataku hakerskiego. Nie chodzi tutaj bynajmniej o ataki na strony premiera związane z wprowadzeniem ACTA ale "atak" na system prawny. Najnowszy hak to przerobienie samochodu na bankowóz tak aby móc odliczyć za niego VAT. I Chociaż o tym temacie specjalistą nie jestem to szukając informacji po necie natrafiłem na masę wpisów w stylu "jak wykorzystać luki w systemie na swoją korzyść".Coś dobudujemy,coś przystosujemy i odpowiednio zaksięgujemy.


No fajnie ale co ta informacja robi na blogu,który choć trochę, zajmuje się kwestiami programistycznymi?

Otóż :
Kroczą po tym świecie ludzie, którzy uważają, że programisci to debile.

Od murowania...





Co rusz na forach dyskusyjnych napotykam się na opinie głoszące : "programista jest jak murarz". Chciałbym w tym momencie móc zaznaczyć, że owe opinie tworzy jakaś określona - łatwo rozpoznawalny zbiór ludzi lecz niestety klasyfikacja ta nie jest taka prosta. Do tej grupy niestety zalicza się cały przekrój ról projektowych.

Na chwilę obecną dzielę owych osobników na dwie grupy :

  • ludzi dążących do zbytniego uproszczenia rzeczywistości

    Tutaj dosyć często pojawiają się programiści przemianowani na project managerów.Być może ze względu na zbyt małe doświadczenie w nowej roli a być może ze względu na jakieś introwertywne cechy charakteru próbują oni zredukować dynamiczne i nieliniowe prawa zachodzące w grupie do prostych zasad w stylu programista jest jak murarz i powinien słuchać a nie dyskutować.

  • ludzi posiadających jakieś nieuświadomione kompleksy wymagające ciągłej kompensacji.

    Wiem coś o tym bo sam to miałem. Polega to na deprecjonowaniu każdej odmiennej roli w projekcie. Taki rasizm projektowy. Manager będzie twierdził, że jego obowiązki są kluczowe dla projektu, i każdy musi się mu podporządkować, podobnie analityk, programista czy ktoś tam inny.
    A prawda jest taka, że nie ma roli "ważniejszej". ale o tym kiedy indziej


...do stanowienia prawa





Dlaczego wcielanie w życie projektu IT nie jest jak budowanie domu?

Weźmy kawałek kodu :

public class App 
{
    public static void main( String[] args )
    {
        System.out.println( "Dupa" );
    }
}

Pytanie : co sie właśnie stało?

Otóż nic się nie stało!! Ten kod tutaj nie zadziała podobnie jak wklejenie planów domu na stronę nie sprawi, że zbuduje się nagle dom. TAK!!! owe instrukcje to plany architektoniczne dla kompilatora jak ma zbudować wykonywalny kod maszynowy. Czy to jednak znaczy, że metafora jest dobra a programista jest jak architekt budynków?

No też nie. Każdy kto czyta tego bloga może sobie przekleić ów kod, (jeśli tylko ma zainstalowane JDK) skompilować i być świadkiem narodzin działającej funkcjonalności.
Gdybym umieścił tutaj plany budowy domu to również każdy mógłby je skopiować a później.., no właśnie co później. Trzeba by znaleźć jakąś firmę, która by owe plany wprowadziła w życie.


Cegła w IT jest ku*wa mać za darmo!!!!


W przeciwieństwie do budowy domu mogę zrobić prototyp, pokazać go klientowi a później wyrzucić. Mogę sobie robić refactoring (ta, jestem ciekaw czym w budowaniu domu miałby być refaktoring) i masę innych rzeczy, które po prostu nie miałyby miejsca przy budowaniu domu bo tam takie zabawy kosztują.


Gdzie jeszcze można tak swobodnie manipulować produktem?

BUG #16543 : Po zamontowaniu kratki w samochodzie użytkownicy mogą odliczyć podatek VAT.

Polskie prawo to jeden wielki kod źródłowy , bez żadnych testów jednostkowych, który jest non stop interpretowany przez przeróżne organy. Do czasu wypuszczenia produktu na produkcję można prototypować rozwiązania, robić przeróżne refactoringi czy hot fixy na znalezione bugi - buble prawne. Ostatnia sławna poprawka podegrana na produkcje zdaje się naprawiała bug z lekarzami i aptekarzami.

Podobieństw jest oczywiście więcej ale bynajmniej nie chodzi tutaj o to aby problemy w IT rozwiązywać poprzez analogie do systemu prawnego. Sądzę nawet, że wzór mógłby działać w przeciwną stronę. Jednak to co tutaj chcę uzyskać to skończyć ze stosowaniem zjebanych metafor projektów IT i wiążącym się z tym pewnym błędem logicznym :

Jeśli dziedzina A jest w jakimś stopniu taka jak dziedzina B to wtedy wszystkie problemy w A można rozwiązać poprzez analogiczne rozwiązania w B 


Także jeszcze raz dużymi literami : PROJEKT IT NIE JEST JAK BUDOWANIE DOMU A PROGRAMIŚCI TO NIE MURARZE !



EDYCJA:

Natrafiłem an ciekawą prezentację, która w pewnym stopniu porusza przedstawiony tutaj temat.Oto ona:

http://www.infoq.com/presentations/Questions-for-an-Enterprise-Architect

niedziela, 8 stycznia 2012

Gra o dolara

"Kiedy zorientujesz się, że jesteś w dołku, przestań kopać."

Kiedy przestać kopać? Po czym poznać, że poruszamy się w złym kierunku? Czterdzieści lat temu powstałą pewna prosta acz podstępna gra - "licytacja o dolara".Jej zasady są dosyć przejrzyste :

  1. Przedmiotem licytacji jest jeden dolar
  2. Wygrywa osoba, która zalicytuje największa sumę
  3. Osoba, która licytowała drugą w kolejności stawkę również musi ponieść opłatę ale nie otrzymuje nic w zamian!


Licytacja zaczyna się od jednego centa, wydaje się więc ze wszech miar logiczne aby wziąć udział w tejże aukcji. Pierwsza osoba daje jednego centa, druga osoba chce zarobić 98 centów wiec podbija do dwóch centów i tak dalej. Okoliczności ulegają zmianie gdy stawka dochodzi do 1 dolara. OD tego momentu obydwie osoby tak naprawdę będą starać się nie zarobić a zminimalizować straty.

Gra jak i eksperymentu są opisane w internecie (Można zacząć szukać od frazy "Martin Shubik").
Podobno w jednym przypadku dolar został sprzedany za 25 dolarów plus drobne. Przeanalizujmy to jeszcze raz - zestaw jakże racjonalnych kroków doprowadza do sytuacji, która z racjonalnością ma tyle wspólnego co politycy ze szczerością : Zwycięzca płaci za dolara 25 dolarów a druga osoba płaci 24 dolary za niezbędne do życia lecz dostępne pod dostatkiem powietrze.

A teraz czas na obserwację poprzez analogię.


Licytacja o implementację


Sytuacja z implementacją nie jest w stu procentach analogiczna acz bardzo podobna.

Jakiś czas temu mieliśmy do zrealizowania prostą funkcjonalność wyświetlania statusów procesów działajacych się po stronie serwera. Wybór wydawał się logiczny - prosta funkcja JavaScriptu odpytująca się asynchronicznie serwer o listę wyników do wyświetlenia. Wydawało się, że jeden dolar został kupiony za 50 centów. Drugim graczem, który cały czas podbija stawkę jest oczywiście "zmiana" a dokładniej "zmiana w samej funkcjonalności". Tak więc licytacja toczy się dalej a my dokładamy do już wyłożonej sumy kodu. I chociaż za każdego kolejnego dolara płacimy coraz większymi sumami implementacji to pozornie logicznym wydaje się brnięcie dalej w ten proces gdyż przecież nie wyrzucimy od tak sobie kodu, który został już stworzony i już działa.

Gdy już babraliśmy się w oceanie coraz mniej czytelnych funkcji JavaScriptu nastała ta magiczna chwila gdy racjonalność wzięła górę na racjonalnością pozorną i przepisaliśmy całe rozwiązanie uzyskując efekt, który ograniczył "dopłacanie" do kolejnych funkcjonalności. Nie należy tej sytuacji mylić ze zwykłym refaktoringiem , bo chociaż narzędzia są podobne to jednak procesy inne. Podobnych sytuacji w ostatnim roku było więcej i za każdym razem stajemy przed tym samym pytaniem: czy to już czas przestać kopać? W opisie eksperymentu z dolarem możemy przecztać, iż nie ma prostego kryterium decydującego o zakończeniu licytacji, podobnie jak nie ma prostej obiektywnej zasady kiedy przestać brnąć w daną implementację. Z drugiej strony istnieje bardzo prosta subiektywna zasada...



Możemy mianowicie wykorzystać samoobserwację brzmiącą Dlaczego czuję, że to kurwa nie powinno wymagać tyle pracy?. Mamy w swoim mózgu zwoje odpowiedzialne za wykrywanie przekombinowanych rozwiązań. Mamy niestety coś jeszcze. Spuściznę pojaskiniową nakazująca nam brnąć dalej, gonić małego zwierza zamiast ryzykować pościgu za większym. Dlatego niestety, gdy z jednej strony czujemy, że trzeba skończyć to z drugiej strony jesteśmy bombardowani cała kolekcją pseudo racjonalizacji. Czasami dochodzi do tego takie Romatyczne utożsamienie się programisty ze swoim dziełem, które jest nawet przydatne gdy chodzi o jakość kodu lecz może przeszkadzać w trzeźwiejszej ocenie sytuacji.

Stwierdzenie, że wypadałoby zapanować nad tymi uczuciami ma taki sam sens jak apelowania do palacza aby zapanował nad usilną chęcią kolejnego strzała w płuco czy też jak apelowanie do przepełnionej frustracją i kompleksami młodzieży o zapanowanie nad chęcią szukania nieustannej akceptacji na facebooku. To wszystko odbywa się w zwojach poza kontrolą świadomości ale może być sterowane pośrednio. Oto kilka przykładowych ćwiczeń, które powinny pomóc przezwyciężyć lęk przed zmiana źle dokonanych inwestycji:

Na turystę


To w zasadzie technika prosta do wykonania a trudna do zaaranżowania. Wystarczy wyjść radośnie na jakąś ładna trasę turystyczną i po jakimś czasie zorientować się, że idziemy w przeciwną stronę. Ponieważ kontynuowanie tej wycieczki byłoby (zazwyczaj) przejawem debilizmu toteż pozostawiamy kierunek ale zwrot zmieniamy na przeciwny. I nagle ku swej radości (jak tylko opanujemy wewnętrzną złość) przekonamy się iż nie dość, że koniec świata nie nastąpił to do tego (najprawdopodobniej) kierujemy się w dobrą stronę. Do ćwiczenia polecam ściągnąć aplikację "kompas" na Androida która pokazuje kierunki w sposób losowy.

Na gracza


W tym przypadku wybierz sobie jedną z tych gier, w których ludzie kompensują swoje porażki życiowe rozwijaniem jakiejś postaci.Najpierw zacznij rozwijać postać w jakimś mało przydatnym kierunku aby później zmienić klasę na coś przydatniejszego. Np. z pijącego woźnego 7 poziomu zacznij się rozwijać jako właściciel firmy sprzątającej. Polecana jest także wariacja tego ćwiczenia polegająca na tym aby po osiągnięciu danego poziomu swoją postacią wyjebać grę i zająć się czymś pożytecznym w życiu.


Na pakernie



Na pakernie chodzi się aby zdrowo żyć i przez kompleksy albo przez kompleksy i aby zdrowo żyć. Tak czy inaczej aby zbudować mięśnie trzeba jeść a jak się je to rośnie też tłuszcz. A jak rośnie tłuszcz to trzeba go potem zrzucić - i tutaj meritum ćwiczenia - ów tłuszcz się zrzuca z częścią mięśni. Jeśli podobnie jak ja cierpicie na kompleks małego samochodu to łatwiej wam będzie wyobrazić sobie, jakie to bolesne rozstawać się z mięśniem ale jeśli nie chce się być grubym knurem trzeba pójść w kierunku redukcji. Mechanizm ćwiczenia jest dobry.
A ponieważ dodatkowo żyjemy w społeczeństwie a większość społeczeństwa lubi masowo uczestniczyć w alkoholowym procesie samokastracjach to też i ta sytuacja pomaga we wspomnianej kategorii ćwiczeń.


PS.
Powyższy tekst (broń Boże) nie miał na celu ukazania programistów jako ludzi z problemami emocjonalnymi, którzy nie mogą poradzic sobie z rzeczywistością wymagającą zmian. Nie może również służyć na potrzeby przerzucenia odpowiedzialności za ogarnięcie zmian tylko na programistów. Otóż obok "pragmatycznego podejścia do racjonalnej zmiany" występuje coś co można określić jako "emocjonalne podejście do debilnej zmiany". Ma ono miejsce wtedy gdy osoba o wątpliwych zdolnościach analitycznych bierze na siebie definiowanie wymagań co powoduje wyrzucanie do śmieci kolejnych to kawałków kodu. Aby to dobrze zrozumieć należy odróżnić sytuację gdy będąc świadkami wypadku podejmujemy próbę udzielenia pierwszej pomocy, z sytuacją gdy po obejrzeniu "Było sobie życie" obwieszczamy się chirurgiem i wbiegamy na sale operacyjną operować. Czasami ktoś musi udzielić pierwszej pomocy i zebrać wymagania ale chyba nie ma bardziej wkurwiającej rzeczy dla programisty niż wyrzucanie w błoto krwi, potu i łez "bo ktoś się nie dogadał".


http://pl.wikipedia.org/wiki/Aukcja_o_dolara

niedziela, 11 grudnia 2011

Pierwszy lans video



Rozpoczynając jak zwykle skromnie, powyżej pierwszy oficjalny lans video w moim wykonaniu. Prezentacja odbyła się w ramach jednego ze spotkań grupy miłośników Java w regionie Łódzkim.
Prezentacja jakaś wybitna nie jest : ja cały czas uczę się wysławiać i prezentować, koledzy uczą się nagrywać tak aby cokolwiek było widać i cokolwiek było słychać. Mowę ciała mam jeszcze zjebaną ale powinno dać się to oglądać. OTO przed wami:



Problem jakości w teorii i praktyce czyli dlaczego wszyscy (poza Tobą) tworzą nieczytelny kod

Główna ideą prezentacji było uzmysłowienie wszystkim zebranym, że nie potrafią programować ;). Tak, jest to dosyć kontrowersyjne stwierdzenie ale bazując na obserwacjach, które cały czas przeprowadzam wydaje się być prawdziwe. Oczywiście ja również łapię się do zbioru "wszyscy zebrani" i jest to wbrew pozorom fantastyczna rzecz. W październikowym wydaniu "Focusa" była wzmianka o badaniach twierdzących jakoby najbardziej myliły się osoby nie mające kompletnie żadnego pojęcia o danym temacie, jak również osoby uznające, że w danej dziedzinie są spejcalistami. Jak to wszystko o czym tutaj wspominam składa się w logiczną całość prezentacji?



o co chodzi w programowaniu?



Dlaczego większość osób zajmujących się extremalnym użyciem klawiatury woli robić nowe projekty zamiast utrzymywać cudze? Niby jedno i drugie to przecież "programowanie". Utrzymanie jednak polega zazwyczaj na spędzeniu około dwóch tygodni na próbie zrozumienia jak działa dany kod a następnie na dodaniu kliku linijek. Ani programiści nie są z tego zadowoleni ani zapewne szare eminencje zajmujące górne warstwy korporacyjne. Przecież czas to pieniądz. Gdyby tak programista znał doskonale kod, z którym pracuje, to namierzenie miejsc wymagających wprowadzenia zmiany zajmowało by relatywnie odpowiednio zajebiście mniej czasu.


To o czym tutaj piszę na obrazku można zauważyć w czerwonym prostokąciku. Jest to meritum zrozumienia czytelności kodu, droga do zdobycia świętego grala wszystkich zespołów programistycznych i zapowiedź wolności emocjonalnej załóg działów utrzymania. Aby znaleźć wszystkie odpowiedzi na pytania odnośnie czytelnego kodu trzeba podróżować na granicy techniki i psychologii. Nie wiem czy kawałek prezentacji omawiający to zagadnienie będzie zrozumiały gdyż z tego co widziałem próbki kodu prezentowanego na tablicy są nieczytelne. Ale nawet jeśli to tylko zaproszenie do osobistego zgłębiania tematu. Interesujace hasła to : psychologia, percepcja, nlp, teoria pamięci i tym podobne.


No a jak już wiadomo co trzeba zrobić nadchodzi etap drugi, czyli faktyczna zmiana. Tutaj w grę wchodzą wszelakie wzorce pozwalające programiście wywrzeć duży wpływ na system stosunkowo małym kosztem



Dlaczego sama teoria nie wystarczy?





Efekt aureoli,Efekt halo ,błędy percepcyjne - ma to wiele określeń ale zawsze chodzi o to samo - "jest ładny to jest i mądry", "samochód jest czysty to się nie psuje", "towar ma ładne opakowanie i jest drogi to na pewno jest dobry", " w pracy mówią na mnie architekt to znaczy , ze dobrze programuję", "w pracy tworzę słynny portal X, który zarabia miliony to zanczy ,że dobrze programuję". nie, wcale tak nie znaczy .

  • programowanie wielowątkowe
  • programowanie obiektowe
  • programowanie bazodanowe
  • czytelne programowanie

Co mają wspólnego poszczególne pozycje na tej liście: ano obrazują one niezależne umiejętności.
Aby nabyć dana umiejętność trzeba podejść do tego wyzwania świadomie:

Weźmy takie programowanie wielowątkowe. Znam masę osób, które owego zagadnienia nie znają a kilka latek już kodują. Dlaczego nie znają? Bo byli skoncentrowani na czymś innym. Sam fakt, że tworzysz działające programy przez dłuższy czas, i że one działają wcale nie znaczy, że twoje programy są czytelne.


Dla osób zainteresowanych zdobywaniem nowych umiejętności : wpiszcie sobie w google "model TOTE"



Ostatnia część prezentacji to omówienie statycznej analizy kodu ale to temat na inny post.

niedziela, 20 listopada 2011

"A Refaktoring zrobimy później"

Co mają wspólnego rzodkiewki,czekolada i programowanie?
Zanim odpowiemy sobie na to fascynujące pytanie zróbmy krótką symulację poprawy błędu z punktu widzenia programisty.


W systemie jest błąd.


Aby go znaleźć składamy w głowie kawałki logiki niczym puzzle tak aby uzyskać pełny obraz układanki.
Znaleźliśmy.
Wygląda na to że błąd jest tylko małym objawem ogólnie zjebanego kawałka logiki systemowej. Trzeba go teraz jakoś naprawić.
Może wystarczy szybki hak?.

W zależności od poziomu motywacji (wzbogaconej o własne poczucie jakości i solidności oraz zmieszanej z rozsądkiem i przewidywaniem ryzyka) jakim nas uraczyła korporacja , możemy chcieć zastosować coś porządniejszego niż zwykła plastelinowa łatka, która za 5 minut się odklei.

Ale co jest złego w takiej łatce?
Rezultat będzie osiągnięty, manager szczęśliwy a statystyki wypicowane.
Zrobić to dobrze czy zrobić to szybko?
W zasięgu jest szybka gratyfikacja ale jednocześnie pojawia się świadomość konsekwencji takiego kroku.
Może jednak łątka i szybki rezultat?
Nie, nie można zostawić takiego zjebatorstwa.
A może jednak


Kiedyś widziałem prezentację (psychologiczną), która takie dialogi nazywała dialogami dziecko-rodzic . Dziecko chce zaspokoić swoje potrzeby natychmiast zaś rodzic zważa na wszelkie konsekwencje. Jaki to wszystko ma wpływ na programowanie. Ano ma wpływ kurewsko duży. Czas na rzodkiewki.


Wyczerpanie EGO



Eksperymentów było kilka a więcej szczegółów można znaleźć pod frazą "ego depletion" lub szukając nazwisk "Roy Baumeister" czy "Mark Muraven".

Skupmy się na jednym z nich.


Badanych podzielono na grupy. Każda z osób biorących udział w eksperymencie wpuszczana byłą do pomieszczenia gdzie czekały na nią dwa talerze : jeden z rzodkiewkami zaś drugi z czekoladą. Każdy z uczestników opuścił jeden posiłek toteż czuł pewien głód. Teraz : pierwsza grupa mogła skosztować słodkich czekoladek zaś drugą poproszono o to aby zwalczyła instynkty, opanowała chęci i zamiast czekoladek skupiła się na rzodkiewkach.

Dlaczego tak bardzo lubimy czekoladki? Ano dzięki węglowodanom prostym, które natychmiast dostarczają energię do organizmu. Miało to sens eony temu jak zwierz był szybki a kolacja niepewna. W dobie ogólnoświatowego śmietnika gastronomicznego cały ten mechanizm prowadzi do czegoś co nazywa się "plagą otyłości".

Rzodkiewki cukrów chyba nie mają. Zdrowe bo zdrowe ale energii tak szybko nie dostarczą zwłaszcza kiedy żołądek zaczyna trawić cię od środka.

Gdy badacze przestali pastwić się na badanymi nastał czas na druga część eksperymentu. Każdy z badanych dostał do rozwiązania specjalnie spreparowaną łamigłówkę. Tak spreparowana aby nie dało się jej rozwiązać. To co było istotne to jak długo każdy z badanych będzie próbował ową układankę rozwiązać zanim się podda. Teraz zgadnijcie kto wytrwał dłużej.

Czekoladki wygrały. Naukowcy obwieścili istnienie formy wyczerpywalnej energii, która wydaje się zmniejszać za każdym razem gdy nasz świadomy umysł jest poddawany wysiłkowi.
Energię tę można rozumieć jako pewną abstrakcję ukrywającą cała masę procesów hormonalnych i psychologicznych dziejących się w umyśle.


Zesramy się a nie "zrefaktoryzujemy."


Zerknijmy teraz na analogie. Wprowadzenie dowolnej zmiany w kodzie składa się z wieloetpaowej układanki: naprzemienne składanie aktualnej logiki w głowie, tworzenie nowej układanki na potrzeby zmiany, a wszystko to w kontekście ciągłego dylematu czy zrobić to szybko (czekoladki) czy dobrze (rzodkiewki).


Co się teraz stanie jeśli postanowimy najpierw zrobić projekt "żeby działał" a "poprawimy później". System będzie jednym wielkim zbiorem poplątanych układanek.

Po pierwsze :

Złożenie zjebanej układanki wyczerpie ego przez co poddamy się szybciej przy układaniu następnych co zaowocuje kolejna zjebaną architekturą.

Po drugie :

Wydłuży się czas po którym zobaczymy jakikolwiek funkcjonalny efekt. Wydłuży się czas po którym nakarmimy się radosnym uczuciem zamiany potencjalnej energii kodu w energie funkcjonalności.
A jak jest się głodnym to co? to czekoladkę.


Tym skromnym postem autor chciał pewnym środowiskom zabrać pozorne poczucie kontroli nad jakością projektu wyrażane w słowach "zróbmy teraz co chce biznes a poprawimy później".
Oczywiście biorąc pod uwagę odpowiednio duże środki finansowe może to się zdarzyć tak samo jak przy odpowiednich środkach finansowych Widzew Łódź może wygrać ligę mistrzów. Trzeba tylko zbudować nową drużynę.



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

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"

niedziela, 25 września 2011

Motywacja szkoleń

Dzisiaj krótko i Bez zbędnego wstępu:

Więcej wyciągasz ze szkoleń jeśli masz świadomość, że sam będziesz musiał je przeprowadzić

  1. Wniosek powyższy żywo wypływa z badań prowadzonych przez --> prof. Edwarda Deci
  2. O samych badaniach można poczytać w wikipedi ---> "teoria określania siebie"
  3. Oraz w polecanej w większości źródeł nawiązujących do tych badań książce ---> Why We Do What We Do: The Dynamics of Personal Autonomy

Badania wykazały istnienie motywatorów zewnętrznych i wewnętrznych, i to właśnie te drugie tłumaczą założenie : "Więcej wyciągasz ze szkoleń jeśli masz świadomość, że sam będziesz musiał je przeprowadzić". Jest tam spisana wzmianka o potrzebie - jaką przejawia każdy w miarę zdrowy psychicznie człowiek - "bycia postrzeganym jako osoba kompetentna". I choć intuicyjnie wydaje się logiczne, że utrwalamy wiedzę przeprowadzając szkolenie, na którym byliśmy tylko odbiorcami, to wspomniane wyżej badania wskazują, iż jeśli będziemy tego faktu świadomi w momencie naszej szkoleniowej partycypacji to uzyskamy dodatkowy efekt silnej podświadomej motywacji by wyciągnąć z kursu jeszcze więcej.