Wpisy w kategorii: ‘moja Droga’

Big project

niedziela, 30.10.2011

Pierwszy raz w życiu zdarza się… jeden raz.

Do tej pory maksymalna ilość osób z którymi pracowałem na danym zadaniem programistycznym ograniczała się do 2 lub 3, ale to max. Zazwyczaj zadania, na których się opierałem wykonywałem sam i byłem za nie odpowiedzialny osobiście. Same zadania, także w poprzedniej pracy nie ograniczały się do jednego klienta, jednego systemu, itp. itd.

Team work - praca zespołowa

Team work - praca zespołowa

Teraz jest zupełnie inaczej. Jestem jednym z elementów dość dużego zespołu programistów. Sama już nasza ilość (w tym momencie, a jest niedziela 21:20, na Skype widać siedmiu, którzy pracują), a ogólnie jest nas kilkunastu, co robi na mnie spore wrażenie. Czasem jest to powodem drobnych nieporozumień, czasem utrudniamy sobie pracę nawzajem. Aby tego wszystkiego było mało, ten projekt, jest w sumie outsourcingiem, czyli jest jeszcze jeden klient pod klientem głównym.

Jak już wspomniałem, to jest coś innego:

  • jest jeden projekt, jedna aplikacja, jeden klient
  • jest jeden język (PHP) i jedna baza (Mysql)
  • jest wielu ludzi, dość mocno skupionych na swoich zadaniach, jednak którym w pewnym stopniu przyświeca myśl, że mamy wspólny cel i starają się sobie pomóc nawazajem
  • są ściśle wyznaczone terminy i etapy
  • używamy systemu umożliwiających pracę zbiorową (SVN, Redmine, Skype)

To dość ciekawe doświadczenie. Jestem jednym, z tych mniej doświadczonych programistów. Jedno co łączy to doświadczenie z poprzednim jest ogólne zwątpienie („ja się nie nadaję!”, „co ja tutaj robię”, „jestem za wolny!”), kiedy zadania, które wykonuje się 5 razy wolniej od reszty załogi, przeplatane z ekstazą jak wiąże się z tworzeniem, jakąś bystrą modyfikacją, czy możliwością pomocy programistycznej koledze.

Czasem czuję się jak kopciuszek programistyczny. Moje kodowanie jest rzadko wymyślne, zmyślne czy tym bardziej powabnym, choć chciałbym oczywiście aby było inaczej. Często stosuję metodę KISS i asekurację w modyfikacji tego co działa, szczególnie jeśli w grę wchodzą transakcje i pieniądze.

Największy stres oczywiście jest kiedy zrobi się commita i nagle pojawiają się błędy, coś nie działa, a jakaś podstrona na serwerze na którym działamy wywala błędami. Wtedy człowiekowi wstyd, że czegoś nie dopilnował, gdzieś popełnił błąd, zapomniał dodać tabeli do bazy na serwerze głównym, a to przecież nie powinno się zdarzyć. Ehhh, ten brak koncentracji i dyletanctwo.

Jednak największym problem jaki mam, to szacowanie czasu potrzebnego na wykonanie zadań. Trudno mi oszacować, nietrudno mi przekroczyć dany czas. Dlatego cieszę się, kiedy nie muszę tego robić. Intensywnie pracuje nad powierzonym zadaniami, nie musi mnie nawet nikt z tego rozliczać co do godziny, żebym czuł presję.

Nie mniej jednak uczę się tego i mam z tyłu głowy fakt, że ja też muszę być ważny dla siebie w tej układance. Za niedługo projekt w PHP (jedyny w tej firmie dla tego języka) może się skończyć, tak samo jak moja umowa i nie wiadomo jaka może okazać się przyszłość. Możliwe, że dostanę szansę przebranżowienia, ale może != na pewno.

Koncepcje po byku…

czwartek, 10.02.2011

Siedzę siedzę sobie spokojnie w domku … i pracuję, bo do pracy po wypadnięciu dysku nie dałem rady się doturlać. Akurat zmieniałem dla szefa szablon newslettera i w zasadzie kończyłem pracę, kiedy dostałem OPR, że ktoś puścił newsletter i nie dość że wadliwego to jeszcze kilkadziesiąt . Oczywiście, od razu na mnie (bo kiedyś cron-a źle ustawiłem ;) ), a że wziąłem to do siebie, to szukałem swojego błędu. Na logikę szablon nie powinien wpłynąć na takie kuriozalne błędy, ale dziarsko zabrałem się do sprawdzania tagów HTML. W międzyczasie okazało się, że … strona z której został wysłany newsletter nie działa!!! Czy można sobie wyobrazić coś bardziej kuriozalnego? Jak najszybciej wyłączyłem cron-y. Kolega wyłączył newslettera i strona znowu się pojawiła, a ja zrobiłem sobie fajrant z pół godzinnym poślizgiem ;).

Kilka dni później dostałem zadanie poprawy i włączenia już poprawionej wersji do defaul-towej wersji naszego CMS-a. W trakcie studiowania plików, które zostały wyłączone z cron-a okazało się, że … nie są one odpowiedzialne za newsletter-a. Fajnie –  pomyślałem. Ciekawe jak do jasnej cholery to działa?

W trakcie dalszego research-u wyjaśniło się dlaczego cała strona umarła po włączeniu newsletter-a. Przy każdym włączeniu strony, dokonywała się wysyłka newsletter-a. W tym wypadku występował akurat błąd i oczywiście strona padała.

Znalazłem dobrze działającą wersję skryptu. Zrobiłem try{} catch{} na fragmencie odpowiedzialnym za wysyłkę i dodatkowe filtrowanie adresu email przed wysłaniem. Przy wysyłce jednak okazało się, że doszły 2-3 emaili do każdego z użytkowników.

Okazało się, że w dziesiątkach CMS-ów wysyłka jest podłączona w taki sposób metoda pobiera całą listę zapytaniem „SELECT * FROM wysylka” subskrybentów dla danego newsletter i potem idzie pętlą wysyłając i usuwając wpis w bazie danych.

A jaki z tego morał ?:

  • Jeśli ty modyfikowałeś kod po raz ostatni to ty dostaniesz w dupę za to, że ktoś nie pomyślał
  • Nigdy to, ale nigdy nie myśl, że coś jest super przemyślane bo działa od jakiegoś czasu i nikt nie zauważył błędu
  • Jeśli coś poprawiasz albo napiszesz, zawsze staraj się to.. spieprzyć, bo wtedy „zwiększasz sumę swojego ubezpieczenia”
  • Nikt, ale to nikt nie robi samych mądrych i przemyślanych rzeczy

„Co cię nie zabije, to cię … w idiotyczny sposób zestresuje.” :D

Trudne początki

piątek, 05.11.2010

Minął miesiąc i parę dni. Był to okres wytężonej pracy, porażek i sukcesów.

Codziennie trzeba było przyjąć taką wiedzę, że trudno sobie wyobrażać czasem jak człowiek może rozszerzyć swoje możliwości pochłaniania informacji i analizowania ich w locie. Czasem mózg się przegrzewał.

Weekendy okazywały się najgorsze. Samodzielna praca, jest dużo trudniejsza kiedy pewne rzeczy nie przychodzą prosto, a wręcz uparcie oddalają się odpowiedzi na wydawało się proste pytania. Wgłębianie się zupełnie obcy system, czasem po prostu milimetr po milimetrze okazywał się często tak szorstkim i dołującym doznaniem, że siły do „walki” wracały dopiero z nastaniem drugiej części niedzieli. Czasem jeszcze weekend okraszony był próbami zapoznania się z Pythonem, którego to języka szefo oczekiwał, że dość szybko się nauczę.

Ostatni, długi weekend,  z takich czy innych powodów okazał się owocny głównie w świdrujące myśli:

„Ja się do tego nie nadaję. Jestem za wolny. Za wolno kojarzę. Popełniam za dużo głupich błędów. ”

Pikowanie w dół 1 listopada zostało zakończone następnego dnia rano. To był przykry poranek. Nie byłem w stanie nic wziąć do ust, wiedziałem że muszę jeszcze przed pracą zakomunikować swoje postanowienie szefowi. Myśli o porażce miażdżyły także moje ogólne poczucie własnej wartości, a nie tylko wartości jako programista.

Wszedłem do biura. Szef zapytał się co się stało i z czym przyszedłem. Ja przez chwilkę stałem, nie wiedząc jak zacząć. Po chwil odezwałem się łamiącym się głosem:

„Ja się do tego nie nadaję… Pracuję za wolno… Szkoda na mnie czasu… Głupio mi brać pieniądze, kiedy nie widać efektów mojej pracy”

Wiem, że wyglądałem wtedy żałośnie. Gdzieś w oku kręciła się łza. Czułem porażkę, czułem, że zaraz wyjdę i już pewnie nie wrócę do programowania, a stanie się to jedynie moim hobby.

Nie wnikając w szczegóły dalszej części tej rozmowy powiem, że wyszedłem z pracy dopiero o 16. Zresztą tak jak każdego dnia :).

Dalej staram, się rozwiązywać problemy programistyczne, czasem nawet na siłę, we własnym zakresie. Po tej rozmowie jednak nie przekraczam pewnych granic w tym względzie, bo czasem nawet podzielenie się problemem sprawia, że nad głową zaświeca się kreskówkowa żaróweczka. Teraz jedynym programistą jest dość ciekawy gość z 30-letnim stażem (kolega który mnie prowadził przez miesiąc przeprowadził się do Bydgoszczy), trochę bardziej się interesuje tym co robię (zacząłem raportować pod koniec dnia pracy na email), ale już się nie wychylę do komputera obok się z zapytaniem „masz chwilkę”, bo on akurat raczej większość pracy programuje poza firmą.

Cieszę się, że programuje. Nie liczy się rodzaj umowy i kasa, ważne że człowiek podejmuje wyzwania każdego dnia.

Jedno co bym chciał zmienić to podejście do większych czy też bardziej skomplikowanych problemów programistycznych z podejścia

„To mnie przerasta ;(…”,

na

„Ale będzie jazda! ;)”

A słowo problemy przechrzcić na puzzle.

Nowe rozdanie

środa, 29.09.2010

Od pierwszego października nastąpi nowe rozdanie. Zwalniając się z pracy na stacji benzynowej nie myślałem, że na tak trudnym dla programisty rynku, jak ten w Bielsku-Białej, tak szybko dostanę pracę. W trakcie poszukiwań, udało mi się nawet przeżyć profesjonalną rozmowę kwalifikacyjną w Gliwicach (dużo się nauczyłem o sobie samym).

Przypadkowo, przychodząc na rozmowę w sprawie pracy przy zapleczu pozycjonerskim, dostałem możliwość wypróbowania swoich sił jako programista. Dostałem dość proste zadanie wyłuskania określonych danych ze strony HTML. W Obiektowym PHP zajęło mi to trochę więcej czasu niż chciałem, ale wyszło nieźle.

Programista Jacek stwierdził jednak, że większość ich roboty teraz jest w Pythonie, dodał też, że to bardzo podobne do siebie języki. Także późnym popołudniem zabrałem się za poznawanie nowego języka, a następnie postanowiłem napisać na podstawie skryptu PHP skrypt w Pythonie.

Pythona wcześniej nie widziałem nawet na oczy, a jeśli to bardzo krótko. Co za tym idzie było to ciekawe wyzwanie. Kilka godzin eksperymentów i efekt prawie żaden. Wybiła godzina 3:00 i trzeba było się poddać, gdyż na 7:00 do pracy. To był piątek. W pracy nastąpiła wymiana e-maili z Programistą Jackiem za pomocą komórki. Werdykt: w PHP nieźle. Podał mi też nazwę parser-a, który w łatwy sposób rozprawi się z problemem.

Postanowiłem na poniedziałek przygotować skrypt w Pythonie. Udało się. Skrypt spełniał podstawowe cele zadania. Werdykt: w Pythonie średnio.

Miesiąc próby

Od pojutrza nastąpi miesiąc próby. Dostanę konkretny projekt i będę miał szansę się wykazać.  Z tego co wiem będzie to projekt związany z CMS i językiem PHP, także jestem dobrej myśli. Nie mniej jednak jestem przygotowany na codzienne parenaście godzin pracy by sprostać wymaganiom.

Tak mnie to cieszy, że nawet to za ile w końcu będę pracował i jaka będzie forma umowy, schodzi na dalszy plan. Mam jedną tylko nadzieję, że nie znienawidzę programowania pod presją ;) .

Opowieść o pewnym znaku

piątek, 20.02.2009

No cóż, opowieść zaczyna się wprawdzie ponad tydzień temu, ale to tylko bitwa, przygotowania do niej zaczęły się dużo wcześniej jeszcze w duchu systematyczności kiedy to jeszcze z książką, kartką i przyborami do pisania przedzierałem się przez zagadnienie Opcji (pewnego rodzaju ubezpieczenia na ryku finansowym).

Ale cóż, nadjechała sesja i to nie pkp, ale szybko koleją. Trzeba więc było zacząć kombinować, ale jako, że temat nie do końca przystawały do mojej wiedzy ekonomicznej, trzeba było go gdzie nie gdzie uszczuplić, gdzie nie gdzie trochę przyjemnie utuczyć aplikację, no tak żeby „ryrało” ;). I tak powstała analiza niby większego zagadnienia, czyli całego Portfela Opcji, ale tak naprawdę uboższego we wskaźniki ekonomiczne. Ot takie polskie rozwiązanie problemu, takie BMW z silnikiem od Citroena.

Po 2 dniach walki z aplikacją przerwaną innymi walkami na froncie sesji, dotarłem do szkoły by już na miejscu bitwy przygotować się do niej (no żeby w końcu k^*#$% zaczęło działać). Ucieszony jak małe dziecko kiedy zaczęły się pojawiać się pierwsze wykresy, usuwając tzw. „sprawdzenia danych” tak aby zaczęło to wyglądać w miarę, kończąc aplikację kiedy już pierwsze osoby swoje programy obroniły.

Obrona.

Chłopczyk już przygotowany (tak „za 5 dwunasta”), wykresy działają. Zaczyna się maglarz. Są pytania na kartce, są i odpowiedzi. Chłopczyk jest chyba przygotowany. A tu nagle jest error, jest błąd, choć jeszcze się kłuci. Przecież wszystko jest dobrze, wzory żywcem z Pańskiej książki – stęka. Nie może uwierzyć, że to już koniec, że trzeba tu za tydzień wrócić i jeszcze za to groszem zapłacić. Patrzy na ten wykres jeszcze, zagląda do książki i zauważa, że faktycznie wygląda zupełnie inaczej. Plus dla wykładowcy, bo tylko przy pewnych danych dało się to zauważyć. Minus dla studenta, bo takiej oczywistości nie sprawdził. Teraz zrezygnowany, zmęczony swoją porażką siedzi i marudzi.

Chwilkę posiedział i powkurzał się trochę, i myśli. Myśli gdzie jest błąd. Otwiera edytor. Patrzy na kod. Nie może uwierzyć. Nie ma możliwości tutaj na błąd. Ale walczy. Nie chodzi by zaliczyć, chodzi o honor, by znaleźć ten pewnie, jak to zawsze w jego przypadku bywa, trywialny błąd. Patrzy z niedowierzaniem na przykładowe tabele wyników. Chłopczyk postanawia nagle popracować na tych danych z książki, wpisując je w tablicę programu.

Kiedy pojawia się wynik opracowany na książkowych danych. Widać, że do połowy tabeli wyników programu, wyniki odpowiadają tym w książce. Obrazowo można powiedzieć, ktoś kto kupił Opcję zawsze prawie na niej zarabiał – osobiście sprzedałbym wszystko co mam i zapożyczył się na 100 lat, by kupić te Opcje, bo przecież zysk gwarantowany. W życiu nie ma tak dobrze…

Chłopczyk wrócił do wzorów, które przepisał z książki. A były tam 2 wzory składowe prawie bliźniaczek z jedną tylko różnicą, że w drugim na końcu odejmowało się pewną zmienną kiedy w pierwszym dodawało się ją, oby dwa potrzebne do uzyskania wyniku końcowego. Co się okazało. Chłopczyk nie zauważył, że wzory różniły się jeszcze jedną malutką rzeczą, przed drugim wzorem widniał „jak byk” znak minusu. Ten minus zmieniał połowę wykresu.

Chłopczyk w końcu znalazł błąd. Patrzył teraz pokornie na wykładowcę by pozwolił mu jeszcze raz pokazać efekt swoich poprawek (trochę się niestosownie zastosował przy pierwszym podejściu chłopiec). Dwa dni później, ale też z problemami program uzyskał ocenę 4, a dwie godziny później maraton sesyjny skończył się bez żadnej poprawki :).

Widzę, że opieprzacie, bo dotarliście aż tutaj :P.

Wnioski.

Jakie błędy popełnił Chłopczyk:

  1. Nie myślał o tym jaki efekt (wykres) powinien uzyskać i z czego ten wynik się miał wziąć
  2. Jeśli ktoś kto się zna na rzeczy uważa, że popełniłeś błąd to… nie wiadomo czy go popełniłeś :P, ale jest wielce prawdopodobne, że gdzieś się tam chochlik schował ;)
  3. Zobaczył jedną różnicę i zrezygnował z przepisania ręcznie drugiego wzoru, skopiował pierwszy i zmienił znak przed zmienną, a wzory różniły się dwoma niuansami
  4. Źle zachował się po „werdykcie”

Jakich błędów uniknął Chłopczyk:

  1. Nie poddał się! Walczył do końca i nie dał zmarnować swojej pracy, patrzył na kod, aż znalazł błąd i go poprawił, a następnie przekonał wykładowcę, żeby dał mu drugą szansę bo znalazł błąd – i to był klucz do zwycięstwa.
  2. Wierzył, że to co zrobił było dobre i poprawne, bronił swojego projektu, aż dostał argumentacje, która jasno stwierdzała, że program liczy źle, a co za tym idzie pokazuje błędne wykresy.
I to wszystko dzięki jednemu głupiemu

znakowi „-” !!!

który jednak był tam bardzo potrzebny ;)

Pozdrawiam

No cóż, noworoczne postanowienie

sobota, 03.01.2009

Najlepszym sposobem nauki jest oczywiście praktyka. Nie nauczymy się nigdy programować wertując książki i czytając jak książki Paolo Coelho. Zaiste po kilku intensywnych miesiącach liznąłem wszystkiego po trochu. Może nawet za szeroki był wachlarz technik, które chciałem zgłębić.

Nadchodzi nowy rok i czas na nowe postanowienia, także te programistyczne. Przy poprzednim wpisie przyszedł mi pomysł na pierwszą stronkę, taką pod którą jednocześnie mógłbym się podpisać imieniem i nazwiskiem, i jednocześnie mógłbym zacząć uczyć się na swoich błędach, by za rok czy półtorej roku podjąć decyzję czy chcę się tym zajmować. Zrobię stronkę poświęconą dość wąskiemu zakresowi, ale w sumie nie o to tu chodzi. Będzie częścią projektu CaseStudy, jego pierwszą kompletną odsłoną.

    Tematyka:

  • Adresacja IP, Adresacja Mac i wszystko pokrewne
    Założenia:

  • jak najgłębiej wgryźć się w materiał i pokazać to w formie serwisu
  • budowa i treść powinna być na tyle prosta by każdy laik w temacie mógł uzyskać potrzebne mu informacje, a do tego przechodzić z łatwiejszy tematów do tych skomplikowanych
  • użyć systemu szablonów PHPTAL, czyli względnie oddzielić treść od fasady
  • strona ma być przejrzysta
  • wszystko ma się walidować
  • strona ma się dobrze pozycjonować
  • no i nie może mnie zawstydzać ;)
    Czas wykonania:

  • Opublikowanie kompletnej strony do końca stycznia – mając na uwadze to że grafik w moje pracy na styczeń opiewa na bite 204 godziny i projekty, które trzeba do kończyć na studia to jest w sumie wyzwanie ;)
    Motywacja:

  • Jako że się już pochwaliłem to nie wypada mi tego nie zrobić ;)
  • Jak nie teraz to kiedy??


If you don’t go when you want to go, when you go, you’ll find you’ve gone.
– World’s Fastest Indian

I znowu ściana

wtorek, 09.12.2008

Najgorsze w procesie uczenia się jakiejś zupełnie nowej techniki programowania jest to, że każda źle postawiona kropka, przecinek czy inny, jednak nie mniej wredny znak, może unieruchomić nas na wiele godzin, a nawet dni, już na samym starcie. Kiedy do tego nasze Poznanie, opiera się na błędnych tekstach i podpowiedziach, bardzo łatwo zarzucić takową technikę. Technikę, która mimo naszych oczekiwań zawiodła nas swoim skomplikowaniem, tudzież jeszcze gorzej to my samych siebie zawiedliśmy nie mogąc podołać czemuś, co dla tak wielu naszych kolegów jest do podźwignięcia.

I tak pewnie często się dzieje, że coś co miało pięknie się zacząć, po dniach czy tygodniach bez wejścia w rytm zarzucamy, by nie marnować swojego czasu, który możemy wykorzystać na programowanie w taki sposób jaki już poznaliśmy i jaki nam do tej pory najbardziej wychodzi.

Właśnie dotarłem do takiej ściany.

Tak więc, wywalam wszystkie niedziałające skrypty, zmieniam źródło swojej wiedzy, odświeżam potrzebne biblioteki, robię herbatkę i zaczynam od samiutkiego początku.

I NIECH MOC BĘDZIE ZE MNĄ, TYM RAZEM ;)


„Boję się człowieka czerpiącego wiedzę z jednej tylko książki. „
                                                                                Tomasz z Akwinu