Jak nadrobić zmarnowany czas? Czy można wybić się, rozpoczynając bieg dwa lata po startowym gwizdku? No cóż… DO ROBOTY!
Po cudownym oświeceniu, opisanym w poprzednim odcinku, miotałem się. Trochę C++, trochę Javy, trochę webówki. Przeraziłem się, że tak naprawdę to ja NIC NIE WIEM! No i… nic nie wiedziałem. Bo niby skąd?
Do tej pory w cyklu Procentografia ukazały się następujące odcinki:
- #1 Nieprogramistyczne Preludium
- #2 Narodziny programisty
- #3 Narodziny pasji
- #4 Wyjście z cienia
- #5 Na podbój świata
- (...)
All in
Najtrudniejsze – identyfikacja problemu i mocne postanowienie poprawy – było już za mną. Ale z drugiej strony… wszystko, co przede mną, też było najtrudniejsze. Założyłem sobie plik c:\programowanie.txt, gdzie dopisywałem rzeczy, których muszę się nauczyć. I ten plik tak szybko puchł, że życie zdawało się być za krótkie na ogarnięcie tego wszystkiego. Ale wraz z nim, o dziwo, puchła motywacja.
“Samo się nie nauczy“, co nie? Najważniejsze, że bardzo, ale to bardzo mi się chciało. Malując te przeklęte balkony – myślałem o programowaniu. Po powrocie do domu programowałem. W weekendy – programowałem. Po zakończeniu wakacji i starcie III roku – programowałem jeszcze więcej. Do 1, 2 3 rano.
Przedmioty na studiach zeszły na dalszy plan, teraz już nawet nie pamiętam co na tym III roku mieliśmy. Ale uczelnia jako źródło wiedzy nigdy nie plasowała się u mnie zbyt wysoko, więc większych problemów ten fakt nie generował. Po prostu… uczyłem się sam. Tego czego chciałem i potrzebowałem. Programowania!
Dzieła
Przed monitorem siedziałem masę czasu. Normą było kodowanie do 5 rano, żeby po 3-4 godzinach snu siąść znowu do kodu. Z rozrzewnieniem wspominam, jak niezniszczalny był mój młodzieńczy organizm. Teraz po dwóch takich nockach umieram, ale wtedy: superman! Albo superdev!
Moje palce rodziły kolejne potworki. Ale to nieważne, bo w końcu, po raz pierwszy w życiu, poczułem, że mam… “hobby”. Inne niż napierdzielanie w gierki.
Ucząc się JSa, CSS i HTML zrobiłem np coś takiego:
I coś takiego:
Przeżywałem również okres zafascynowania koncepcją zegarów binarnych:
Dłubiąc w C++ stworzyłem mechanizm do generowania animowanych wygaszaczy ekranu. Narobiłem ich tyle, że jeden kumpel zaczął mnie nazywać “Baronem Wygaszaczy”, #lolerz. Na nich starałem się nawet zarobić, wystawiając je na Allegro po 5zł. Zarobiłem zero i dostałem tam bana. Bezczelni.
Jedno wiem: bardzo się cieszę, że kilka kodów z tamtego czasu przetrwało kolejne formaty, przeprowadzki, zmiany sprzętu. Pamiętajcie, że wówczas koncepcja “backupu online” nie istniała w powszechnej świadomości. “Chmura” kojarzyła się z deszczem. DropBoxa czy Google Drive nie było, nie mówiąc już o GitHubie. Nawet pendrive nie każdy miał – drogie cholerstwo.
Jeżeli jesteś teraz na etapie eksperymentów i generowania okropnych szlaczków, co się ledwo kompilują: zrób sobie przysługę i zachowaj je. Za kilkanaście lat spojrzysz na nie z błogim uśmiechem.
Moja nauka nie była przesadnie efektywna – przez pierwsze miesiące bardzo długo siedziałem nad każdą małą pierdołą. Po prostu: nie umiałem się uczyć. Nie wiedziałem za co się złapać. Skakałem po tematach i technologiach. Tu liznę, tu zerknę, tu dotknę.
Cieszyłem się tym jak małe dziecko, ale jednocześnie czekałem na jakiś znak od losu. Na wskazanie dalszej drogi, bo tak nie można w nieskończoność. Drogę wskazał mi, znany wielu z Was z tego bloga, z konferencji i z Ultrico, Robert.
Koło naukowe
W różnych dokumentacjach siedziałem bardzo dużo i czasami na stronach Microsoftu coraz częściej zauważałem durny ciąg znaków: “.NET”. Kiedyś się nawet chwilę zastanawiałem co to znaczy, ale jakoś nigdy nie poświęciłem czasu na krótkie nawet śledztwo. Przez myśl mi nie przeszło, że ktoś może w taki sposób nazwać technologię. Surprise!
Jesienią 2004 na mojej uczelni wystartowało koło naukowe: “Grupa .NET Politechniki Białostockiej“. Poszła fama, że Microsoft wypuszcza “taką lepszą Javę”. Właśnie Robert namówił mnie, żeby się tam przejść. Ciągle poszukiwałem swojego tech-miejsca, a to wydawało się całkiem ciekawą opcją. Ucząc się wcześniej Javy czy C++ siłą rzeczy czułem się trochę jak mały zasikany szczeniaczek w wilczym stadzie: oni już wszystko umieją i patrzą z politowaniem na ambitnego, ale jeszcze nieopierzonego “dev-wannabe”. Natomiast .NET oferował piękną możliwość: mogłem uczyć się czegoś, czego jeszcze nikt nie umie, bo to się dopiero rodzi!
Na spotkania Grupy przychodziło po kilkanaście osób. .NET składał się wtedy z 4 obszarów: Windows Forms (przed WPF), ASP.NET (WebForms, nie było MVC), Web Services (asmx, WCF pojawił się później) oraz Windows Mobile (na palmtopy, bo telefony nie były wtedy “smart”, szczyt marzeń to Java, obsługa MIDI i wężyk). To było coś niesamowitego: razem poznawaliśmy ten kompletnie nowy świat. Byliśmy “on the bleeding edge of technology” – w naszym Białymstoku nasze mózgi chłonęły to samo, co cały świat. Ależ się nam trafiło! A polski oddział Microsoftu robił wówczas (i chyba robi nadal) świetną robotę na uczelniach. Mieliśmy książki, mieliśmy motywację, a prowadzący grupę (SC – “Student Consultant”) otrzymywał wsparcie pomagające ogarniać zajęcia, prowadzić prezentacje i… na koniec mógł pochwalić się bardzo fajnym wpisem w CV.
To były najciekawsze zajęcia na V semestrze, mimo tego, że nie prowadził ich pracownik uczelni. A może właśnie dlatego? Niektóre spotkania organizował jakiś członek grupy (sam się raz do tego zgłosiłem), ale większość tematów przedstawiał nasz SC, Łukasz (vel Boruch), mega ogarnięty gość. Zdecydowana większość osób to IV i V rok, więc była okazja poznać kilku “starszaków”, choć wtedy niezbyt garnąłem się do ludzi. A luźna atmosfera panująca w tym gronie nie pozostawiała wiele do życzenia. Na przykład pewien koleś z dziwaczną fryzurą wstaje na krzesło i demonstruje “jak zalogować się do Windowsa dupą” – mało kabla od klawiatury nie urwał. To był mój pierwszy kontakt z ziomeczkiem, z którym do dziś – 12 lat później – trzymamy sztamę. A konferencyjne towarzystwo w tak frywolnym usposobieniu bez problemu rozpozna Karola T, prawda? Pozdro zią! Innym razem grupowo zastanawialiśmy się jak to możliwe, że w jakiejś-tam popularnej wówczas grze pojawił się bug: pojazdy, po wjechaniu na płaski teren, przestawały się poruszać. Ktoś wpadł na jeden z możliwych scenariuszy: “pewnie mieli flagę ‘jeździj_po_płaskim’ ustawioną na false!“. Pewnie nie, ale w każdym razie – wesoło.
Dzięki planowi zajęć na Kole Naukowym miałem wreszcie strukturę pozwalającą na efektywniejszą naukę. To, na co zerkaliśmy na spotkaniach, rozkładałem w domu na czynniki pierwsze. I do kodowania siadałem codziennie z jeszcze większym zacięciem. Boże, jakie to było zajebiste!
Dzieła.NET
Często dostaję z bloga pytania: “jak się nauczyć programowania?“, “jak zacząć jako programista?“. Zawsze polecam dokładnie to, co robiłem sam: wymyśl sobie dowolny program i go napisz. W książkach i necie szukaj rozwiązań problemów, które napotkasz – a nie odwrotnie.
Ja, poznając .NET, najpierw napisałem desktopowy programik do sprawdzania rozkładu autobusów. Ściągałem HTML ze strony komunikacji miejskiej i kroiłem stringi. Nauczyłem się wtedy co nieco o socketach, TCP i HTTP. Po raz pierwszy odbiłem się też od wyrażeń regularnych – finalnie chyba zrezygnowałem z użycia regexów bo nijak nie potrafiłem pojąć jak to działa.
Napisałem też własnego klienta do GaduGadu (łojej, jaki jestem stary). Nie było wtedy żadnych RESTów, JSONów, tylko czysta komunikacja binarna. Ustawiało się bajty w odpowiedniej kolejności i słało na serwer. Gdy po takiej operacji w “prawdziwym” kliencie po raz pierwszy wyskoczyło powiadomienie o nowej wiadomości, to mi z kolei mało serce nie wyskoczyło z dumy. Oficjalnej dokumentacji ten gadugadowy protokół nie posiadał – tylko “spiracone” opisy większości komunikatów – więc nieraz trzeba było posłuchać na sieci (wiresharkiem czy innym ustrojstwem, nie pamiętam co wtedy było na topie) i poanalizować przesyłane między klientem a serwerem zera i jedynki. Do dziś pamiętam podekscytowanie, gdy z takiej analizy wyszło mi, że co X minut trzeba wysłać na serwer PINGa, bo inaczej klient zostanie rozłączony. Świetne doświadczenie. A czego można się było nauczyć? Głównie serializacji i wątków, choć wtedy też musiałem zapoznać się ze strukturami (“struct”) i możliwościami układania ich w pamięci. Siłą rzeczy poczytałem również o stosie, stercie, garbage collectorze itede. Same mądre rzeczy.
I tak dalej.
Skrzydła
Było tego więcej. Było tego dużo. Myślałem głównie o programowaniu, zajmowałem się głównie programowaniem. Jakieś wyjścia zdarzały się nadal, jednak czasem nawet po powrocie z “szampańskiej” imprezy siadałem do klawiatury i wyrzucałem z siebie kolejne megabajty słabego – choć coraz lepszego – kodu. Znalazłem swoje powołanie.
Oprócz Mansona towarzyszył mi wówczas Miles Davis z genialnym “Kind of Blue”. Pamiętam, jak w ciągu jednego tygodnia, codziennie po kilkunastogodzinnej sesji kodowania, włączałem sobie inną część Obcego. A po Obcym: Miles i fajeczka w oknie, uśmiechając się spełniony do wschodzącego słońca, przed pójściem do łóżka. Te chwile zostaną ze mną do końca życia. Davis już nie żył, a ja się rodziłem na nowo przy dźwiękach jego trąbki.
Mówi się, że programowanie to zajęcie dla introwertyków. Siedzisz, klepiesz, wślepiasz się i koniec. Zamykasz się w sobie. A właśnie że nie! Mi programowanie pomogło stawać się kimś, kto nie wywołuje we mnie nienawiści. Kogo jestem w stanie nawet… szanować? Zobaczyłem, że być może do czegoś się nadaję. Że w czymś mogę być dobry. Każdy z kolejnych mini-projekcików napawał mnie dumą.
Don’t pick the scabs or you will never heal
The world shudders as the worm gets his wings
Tak naprawdę to kilka miesięcy wcześniej wcale nie musiałem niczego zmieniać. Mogłem nadal chlać, obijać się, nicnierobić i udawać, że jest okej. Ale na szczęście tak się nie stało.
ZMIANA – i wytrwanie w niej – dała mi skrzydła. No, przynajmniej ich zalążek.
A niedługo potem, między V a VI semestrem, na początku 2005r, nastąpił przełom.
C.D.N.
Do tej pory w cyklu Procentografia ukazały się następujące odcinki:
[…] Procentografia #3. Narodziny pasji. […]
Fajny seria wpisów.
A propo takiej tematyki, czyli jak coś robić dobrze – idealnie pasuje film Krzysztofa Gonciarza “Krok pierwszy” – https://www.youtube.com/watch?v=LXM_tGHcuMo&spfreload=10
Niby banalne co mówi Krzysiek w tym filmie, ale opisuje wszystko co trzeba zrobić, aby np. w pewnej dziedzinie stać się ekspertem.
Tomasz,
W komentarzach pod którymś poprzednim odcinek też pojawił się ten link:). Good stuff, thx.
Zbiera się materiał na książkę “Ja. Programista” ;)
Ta tego typu przemyślenia chyba się teraz sprzedają :) Chociaż fajnie się czyta, to czegoś i tak mi w tym brakuje, tylko jeszcze nie wiem czego.
Swoją drogą- fajne kapele na tej stronce. Refactoring gallery? :)
Pawelek,
Jak się dowiesz czego brakuje to daj znać :). Starałem się aby “wszystko” było.
A kapele – no ba, najlepsze!
Bogusz,
W sumie to jest właśnie ona, jeśli można to tak nazwać :).
Przypomniało mi się parę rzeczy, gdy czytałem Twój wpis, głównie dlatego, że też byłem na etapie fascynacji łamania komunikatora GG:) Tylko dla wybrańców-programistów było wysyłanie takich komunikatów poza oficjalnym softem. Mnie też się udało. Na lewo i prawo dało się rozsyłać komunikaty do dowolnego numerka. BA! Działało nawet coś w stylu:
for (int nrGG=0; nr++; nr<nieskoczonosc) {
//send message
}
Podobne rzeczy można było bezkarnie robić z mailami. Niesamowite czasy dla spamerów z wiedzą koderską;] W liceum, a więc z 16 lat temu spłodziłem całkiem pokaźny serwerek i klientów, którzy…i w ogóle lepiej tu uciąć ;)…w każdym razie takich problemów z prawem jak opisywałeś Ty to nie miałem, ale na trzeźwo sobie teraz myslę, że cudem udało mi się przebrnąć bez konfliktu z internetowym prawem.
A przed Wiresharkiem korzystało się z Ethereala;)
Kamil,
Tak jest, Ethereal!
Faktycznie można było niezłe jazdy robić, samowolka totalna :).
A i BTW: problemów z prawem nigdy nie miałem, nikt za rękę nie złapał, jedyne moje “udowodnione” przewinienia to przekroczona prędkość, ale to już dużo później.
No tak, informatyk – dziewczyna przy nim zasypia, a ten myk-myk do komputera. :D Też mam taki plik z listą do nauczenia się! Program do rozkładów jazdy też jest w kolejce, aczkolwiek to bardziej dla relaksu, bo umiejętności już mam raczej większe. I początkowa, żenująca twórczość też gdzieś się zachowała, ale już nieuruchamialna, bo w równie żenujących technologiach. Tylko o grupie .NET nie dowiedziałam się w odpowiednim czasie, czego żałuję, bo wspólne kształcenie się w naprawdę pożądanym kierunku potrafi niesamowicie motywować.
Mała,
Jak zasypia i od razu budzę to zła, więc coś trzeba robić, nie? ;)
Przy okazji: wczoraj w garażu znalazłem plik starych płyt CD, a na nich wszystkie moje projekty ze studiów, wszystkie eksperymenty i smutne kodziki, które w opisywanych czasach wychodziły spod mych dłoni. Wsiąkłem w to na kilkadziesiąt minut.
Cześć,
Bardzo mi się ta “procentografia” podoba. Moja historia jest trochę inna – byłaby to historia jak odejść od typowego programowania i potem do niego wracać.
To co mnie uderzyło w tym wpisie to “Jeżeli jesteś teraz na etapie eksperymentów i generowania okropnych szlaczków, co się ledwo kompilują: zrób sobie przysługę i zachowaj je.”. Moim zdaniem to powinno być motto każdej książki czy kursu o programowaniu. Moje pierwsze próby się w większości nie zachowały: część została wyrzucona – były to wydruki, być może część dałoby się po prawie 30 latach odczytać z dyskietek. Dzisiaj, można by trawersując wieszcza, napisać “Dziś piękność twą w całej ozdobie Widzę i opisuję, bo tęsknię po tobie.” :D Z kilku (późniejszych) znalezisk byłem po ich odnalezieniu tak szczęśliwy, że praktycznie od razu się ze światem podzieliłem (http://tinyurl.com/zxbqftg). Taka podróż we własną przeszłość zawodową bardzo dystansuje od aktualnych problemów – pokazuje też przemijanie technologii, rozwój.
Kuba,
To się cieszę że się podoba, takie spojrzenie wstecz było mi chyba potrzebne. Powrót do korzeni.
A spojrzenie na kodzik sprzed X lat faktycznie dystansuje – fajnie popatrzeć jakie się kiedyś miało problemy :).
Co tam książka, ja czekam na wersję filmową! Zwłaszcza ekranizacja dwóch poprzednich postów zrobiłaby furorę. ;)
[…] Procentografia #3. Narodziny pasji. […]