Jakość czy też jak woli empik “Jakaść”

Siedzę na tej zsyłce, patrze i napatrzyć się nie mogę – jak można pewne proste rzeczy tak spierdolić. Proste sprawy jak odczytanie ramki z sieci, prosty switch w środku i jak to może nie zadziałać? Ano może się okazuje – jak się chce to koledzy z B. centrum chujozy potrafią. Jak? A to proste! Nikt tutaj nie robi review kodu, a jeżeli zrobi się i to tak mają to głębiej my. Może dlatego że używają operatora “?” – z tym, nic strasznego, każdy na studiach musiał poznać zasadę działa tego dziada. Ale tutejsi przechodzą samych siebie, przykład: “a?b:c?d:e?f:g?h:i;” są tutaj takie kwiatki. Kod poprawny, a potem jak chcesz to zrozumieć to gorzej. Rozumiem goto, nawet polubiłem bo czasem ratuje dupsko, ale czy taki kod jest w porządku:

success:
  return S_OK;
fail:
  assert( FALSE );
  return E_FAIL:

Do tego dochodzi magiczny sposób formatowani kodu, który czytelny staje się nie wiem kiedy. Jeszcze nigdy nie widziałem tak złego formatowania. Bardzo często zdarza mi się uznać wywołanie funkcji za definicje jakiejś struktury (sic!).

Być może jest jeszcze jeden problem, a nawet dwa. Obiecuję dzisiaj więcej nie kaleczyć języka polskiego.
Raz – podczas pracy siedzią na facebook czy na czatach i zamiast być skupionym na robocie, wchodzić w zone, zen, nirwane, czy co tam klikają to, nie lubię tamtego i umawiają się na randki.
Dwa – brak odpowiedzialności. Jak się coś zjebie, to wszyscy bekną. Jak muszkieterzy 😉 Nie ważne czy robisz czy klikasz, masz pensję, a robotę jak nie ty, to ktoś inny odwali. Jak się zjebie, to trudno, przecież to nie ja pisałem.

Panowie wystarczy chcieć pisać dobrze, a z czasem się wszystko ułoży.
Tym oto mądrym zdaniem kończę kolejny żałosny wpis.

release, debug, #ifdef

Czytam i czytam kod, staram się go zrozumieć. Czasem każą mi coś poprawić albo napisać testy. Ale jak widzę, że kod dla release, debug, czy np. QAC zachowuje się inaczej to lekki nerw mnie łapie. Pomijam różnice w dodatkowym kodzie z “logprint” czy “assert” – ok, to nie zmienia logiki aplikacji (chyba że jest app jest time-driven [sic!]). Ale! Jak można prześledzić zachowanie aplikacji, kiedy w jednej wersji zachowuje się inaczej niż w drugiej? Ja tego nie potrafię zrozumieć.
I jeszcze jedna dziwna rzecz, która do tej pory do mnie nie dotarła. Ktoś u klienta powiedział “mają być asserty“. No więc są:

if( warunek == ok )
{
    // do stuff 
}
else
{
    // assert( false );
}

I bardzo proszę mądrość internetową, która może tutaj kiedyś zawita o wytłumaczenie mi takiego kodu. Dodam że to w embedded, więc liczę na jakiś głębszy ukryty sens.

siara jak zwykle ale trzeba
uściski!
js

//łupdejt
Poprawka do formatowania kodu

test pass

Tutaj na zesłaniu poznałem dziwną i niezwykle innowacyjną sztukę testowania, właściwie to chodzi o podejście jakiego się używa podczas fazy testowania. Framework z którego korzystam, które jest autorstwa firmy z którą aktualnie współpracuje, nie zawsze nadąża za aplikacją która jest testowana, szczególnie na maszynach z więcej niż jednym rdzeniem. W związku z tym, stosuje się sztuczki, np. zwiększenie priorytetu dla aplikacji testującej, czy też odpowiednie ustawienie affinity [wikipedia] dla aplikacji testowanej i testującej plus dodatkowe ostrzeżenie od testera, który miał już z tym do czynienia “don’t touch anything now”. Szczerze mówiąc do tego momentu jestem jeszcze w stanie wszystko zrozumieć. Ale! Dodał o jedno stwierdzenie za dużo: “Jeżeli się nie uda, to odpal jeszcze raz i jeszcze raz, aż przejdzie”. WTF? Jakiej jakości będzie/jest ten kod? Czy testy się pisze z nadzieją, że może sie uda? Czy może po to żeby znaleźć i wyeliminować błędy? Czy jedna na dziesięć prób , która się powiedzie mówi że wszystko jest ok, czy jedna nieudana na dziesięć udanych mówi, że powinieneś się zastanowić, bo chyba czegoś zapomniałeś w kodzie zrobić jak należy.
A ty po ilu testach się uśmiechniesz?

Środowisko programistyczne

Jak pisałem uczę się Androida i jednocześnie piszę mały projekcik w C#, mam więc dobrą okazję do porównani dwóch środowisk programistycznych. Projekt w C# pisany jest w msvc2k8, do nauki Androida używam Eclipse 3.4 plus pakiet ADT od Google. Od razu powiem, że nigdy nie przepadałem za Eclipsem, ale postaram się być obiektywny i dać mu szansę.

Edytor to w zasadzie kwestia gustu i dobrania kolorów, co kto lubi i co uznaje za wygodne. Szybkość edytora i działanie inteli-sens jest w obu przypadkach w porządku, na plus Eclipsa wypada dobry system podpowiedzi generowany z dokumentacji znajdującej się w kodzie. Nie korzystam z tej funkcjonalności, ale doceniam ją i co najważniejsze nie przeszkadza w pisaniu. Microsoft w VC2k8 postarał się o edytor dla C# i pisanie kodu dla tego języka to czysta przyjemność. Szybkie podpowiedzi, generowanie stub funkcji dla delegatów czy innego ustrojstwa to piękna sprawa.

Kompilacja/build w obu IDE edytor na bieżąco informuje o problemach ze składnią czy literówkach. Eclipse pozwala na wyłączenie tej opcji w VC nie wiem, nie sprawdzałem bo nie miałem takiej potrzeby. Niestety w Eclipse domyślne ustawienia CTRL+B dla builda nie chce tak do końca dobrze działać z każdego miejsca w edytorze i często trzeba i tak kliknąć opcje build z menu żeby ruszy – ale to pierdółki.

Debug/runtime tutaj niestety często kończy się moja cierpliwość dla Eclipse. Szczegóły: wybieram opcje Project->Run i okazuje się, że jednak pomimo tego, że jakimś cudem udało się zbudować projekt nie wszystko jest poprawnie i trzeba poprawiać. Nie wiem, nie znam się, może to wina ADT – nie interesuje mnie to. Dla mnie i tak jest to Eclipse. Dalej – aplikacja po dłuższej walce i poprawkach pozwala wreszcie na uruchomienie się na emulatorze. Pojawia się komunikat jak z poprzedniego posta – nie wiem o co chodzi, szukam, walczę, pocę się nie miłosiernie, nic nie kumam. Znowu mija czas. Wreszcie po przełączeniu się na odpowiedni widok jest jakaś informacja o tym co poszło nie tak. To chyba nie to chodzi? Środowisko powinno ułatwiać pracę , a nie przyprawiać go o ataku szału. Możemy sobie psioczyć na Microsoft, ale uważam i pewnie długo jeszcze będę tego zdania, że Visual Studio to najlepszy pakiet programistyczny z jakim dane mi było pracować. Tam wszystko działa tak jak powinno, pracuje mi się z tym bardzo intuicyjnie, jeżeli coś nie działa to wszystkie informacje znajduję w jednym okienku.

Cena – jasne, za pakiet z ms trzeba zapłacić jeżeli chce się mieć wypasioną wersje. Choć teraz można korzystać całkiem przyjemnie z VC w wersji express, która też sprawuje się całkiem przyjemnie. Eclipse jest całkowicie za darmo i fajnie. Ale jak przeczytałem gdzieś na dzone (o ile dobrze pamiętam) – na rzeczy i usługi, które otrzymujemy za darmo patrzymy z lekkim podejrzeniem. Tutaj zapożyczę sobie przykład, który brzmi mniej więcej tak: “czy oddalibyście bliską osobę do chirurga, który wykona operacja za przysłowiowego browara czy tego który będzie żądać od was jakieś opłaty za przeprowadzenie operacji” i od siebie: wszystko co dobre kosztuje.

Nie chce wystawiać oceny żadnemu z tych programów, moje negatywne nastawienie do Eclipse, to pewnie wina tego, że nie zdążyłem się jeszcze z nim w pełni zapoznać. Może musi minąć trochę czasu i odkryje wreszcie cały wypas, który kryje się gdzieś tam – ukryty pod milionami opcji.

Przydatne linki:
Eclipse
Visual Express 2008

I co wy na to?