Dzisiaj jest środa, 23 sierpnia 2017
Historia mojego... sukcesu?Jak nie tracić czytelników blogaDlaczego jesteś przegrany?
Jak nie zostałem zawodowym programistą

Jak nie zostałem zawodowym programistą

poniedziałek, 2017-05-22574software, na luzie

Chociaż znacie mnie głównie jako grafika, to zająłem się tym trochę przez przypadek. Moim dziecięcym marzeniem już od podstawówki było zostać programistą. Czy mi się to udało?

Ręce pochodzą z banku zdjęć Fotolia

Jeśli nie masz ochoty czytać, to od razu sobie odpuść zamiast pisać tl;dr, bo obiecuję, że będzie długo (to drugi pod względem długości tekst na blogu) :)

Pierwszy komputer

W latach 80-tych #komputer był towarem #luksusowym ale ja już wtedy chciałem być #programistą
Zatweetuj

Pamiętam jak dziś, gdy w 1985 roku odwiedziłem z rodzicami znajomych i tam pierwszy raz widziałem na własne oczy komputer. To było 8-bitowe Atari 65XE a ja chodziłem wtedy do 3 klasy podstawówki. Urządzenie kosztowało krocie i jako towar luksusowy dostępne było tylko w Pewexach. Podłączało się to do telewizora a programy wczytywało z kaset. Stacje dysków były wielokrotnie droższe od samego komputera.

Swoją drogą niedawno rozmawiałem z Leszkiem, który jest fanem takich staroci i powiedział, że ta dysproporcja wciąż się utrzymuje, chociaż ceny są oczywiście bardziej przystępne.

Preliminary Monty, Swat PatrolNinja pamiętam do dziś, ale przełomem w moim życiu było, gdy kolega uruchomił BASIC i pokazał mi, jak narysować kilka kresek i zmienić kolor tła. To było piękne i już wtedy wiedziałem, że w przyszłości będę programować komputery.

Michał już po kilku odwiedzinach chyba mnie znielubił, bo komputer był albo „w naprawie” albo „pożyczony” albo cokolwiek-innego.

Na swój własny przyszło mi czekać jeszcze jakieś sześć lat. W międzyczasie z poznanych tu i ówdzie komend BASIC-a zapisałem kilka zeszytów losowo „wygenerowanymi” poleceniami i parametrami. Wydawało mi się, że tak właśnie pisze się oprogramowanie.

Gdy w Sondzie pojawiały się tematy związane z komputerami, to niemal dostawałem orgazmu, chociaż wtedy nie znałem tego pojęcia. Siłą nie można mnie było odciągnąć od telewizora. Byłem jednym z nielicznych dzieciaków, którego takie rzeczy kręciły bardziej niż samochody. Zresztą do dziś nie mam nawet prawa jazdy.

Atari 65 XE

Atari pochodzi z banku zdjęć Fotolia

Wybór szkół był oczywisty

#Elektronika w najmniejszym stopniu mnie nie kręci i tak naprawdę nie muszę jej znać, żeby #programować #komputery
Zatweetuj

Przynajmniej dla mojej rodzicielki. Stwierdziła, że skoro chcę programować, to komputery powinienem poznać od podstaw, czyli elektroniki. W ten oto sposób trafiłem to Technikum Łączności przy Zespole Szkół Elektronicznych w Lublinie. Dosyć szybko zorientowałem się, elektronika w najmniejszym stopniu mnie nie kręci i tak naprawdę nie muszę jej znać, żeby zajmować się programowaniem. Ale tu już lenistwo i wygoda wzięły górę, nie chciało mi się już przenosić.

Nigdy już się nie dowiem, czy ta decyzja była słuszna. Gdybym poszedł do liceum o profilu mat-fiz, miałbym co najmniej 2 lata informatyki. W technikum miałem tylko rok i była to wyłącznie obsługa komputera, DOS-a i kilku podstawowych programów użytkowych np. edytora tekstów TAG. Swoją drogą ciekawe narzędzie dla pisarzy, bo pozwalał w jednym dokumencie trzymać różne teksty podzielone na rozdziały i podrozdziały.

Kontynuując lenistwo i wygodę wylądowałem na Politechnice Lubelskiej na wydziale Elektrycznym, bo egzamin wstępny był połączony z maturą i już podczas rozdawania świadectw wiedziałem, że mam 3 miesiące wakacji. Razem ze mną przeszła tam zresztą ponad połowa klasy.

Tu jednak informatyki był tylko semestr (obsługa Windowsa i Worda), który dla mnie i tak skończył się po dwóch tygodniach. Załatwiłem sobie szybkie zaliczenie zajęć i nie było sensu, żebym zajmował miejsce. Wtedy na jeden komputer przypadały 2-3 osoby i było dosyć ciasno.

W międzyczasie zrealizowałem z Sebastianem ciekawy projekt na elektrotechnikę (jeszcze o tym napiszę) i tak się skończyła moja nauka informatyki.

Mój pierwszy własny komputer

Programem #MusKey na #Atari wygrałem 300tys. złotych, za które kupiłem sobie #zegarek
Zatweetuj

Dostałem go dopiero w drugiej klasie technikum i... to był dokładnie ten sam model Atari 65XE. Komputery były już nieco bardziej dostępne (nie tylko w Pewexach), ale ceny wciąż dla większości nieosiągalne. Mi się udało przekonać rodzicielkę, że kasę ze sprzedaży stojącego na działce, przerdzewiałego  Volkswagena Garbusa lepiej zainwestować w rozwój syna niż spłatę zaległego czynszu. Dziękuję Ci Mamo!

Na zwrot inwestycji przyszło jednak nam czekać jeszcze bardzo długo.

Pierwsze co zrobiłem z nowym urządzeniem, to zacząłem wklepywać moje spektakularne dzieła z zeszytów. Już po kilku linijkach okazało się, że to jest bez sensu, bo komendy ze Spectrum czy Commodore nie zadziałają na Atari.

W tym czasie na rynku zaczęła się pojawiać literatura branżowa. Co prawda BajtekTop Secret istniały już wcześniej, ale teraz Atarowcy mieli coś specjalnie dla siebie: Tajemnice Atari! I nie były to magazyny tylko dla graczy, ale solidna dawka wiedzy dla świadomych użytkowników. To z TA nauczyłem się programować w BASICU a potem w Assemblerze, co zaowocowało wygraną w konkursie 6 strona programem MusKey. Nagrodą było 300tys. zł (starych oczywiście), za które kupiłem sobie zegarek Casio.

Po latach zrobiono nawet ze mną wywiad na AtariOnline.pl

W ciągu dwóch lat, po wielu nieprzespanych nocach udało mi się zajechać malutki telewizorek Junost i oczy. A w szkole przylgnęła do mnie ksywa Cyborg. Niestety używana raczej w celu dokuczenia i docinania. Byłem jednym z tych typowych nerdów znanych z amerykańskich filmów, którym dokucza się przez całą szkołę. Jednak życie to nie film i nie było zakończenia, w którym „to ja im pokazałem”.

PC XT

Czasy zaczęły się trochę zmieniać. Komputery PC powoli wypierały inne urządzenia i nawet Amiga czy Atari ST długo się nie utrzymały.

Pod koniec technikum udało mi się zdobyć drugi komputer. Szału nie było, bo w czasach popularności komputerów z procesorami 386 i kolorowych monitorów VGA, ja działałem na starym, wielokrotnie używanym XT z monochromatyczną kartą Hercules, bursztynowym monitorem i twardym dyskiem o gigantycznej pojemności 20MB. I stacją dysków 5,25”, bo te 3,5” nie współpracowały dopiero z 286. Jeśli chodzi o programy to też nie miałem zbyt wielkiego pola manewru. Jakiś stary DOS, BASIC, wspomniany edytor tekstów TAG (zwędzony ze szkolnej pracowni komputerowej) i gra The Secret of Monkey Island, którą w niepojęty sposób udało mi się uruchomić.

Dorwałem też kompilator Turbo Pascala, który o dziwo też ruszył. Napisałem w nim mój pierwszy poważny program na zaliczenie pracy dyplomowej (wciąż mam źródła). Przy tej okazji opracowałem dwie biblioteki w Assemblerze do bezpośredniej obsługi pamięci w trybie tekstowym i graficznym, co dawało porządnego kopa aplikacji - te Pascalowe były  strasznie wolne. Teraz już ten numer by nie przeszedł.

Projekt na zaliczenie w Pascalu

Pierwszy komputer z Windowsem

W jedną z moich gier (odmiana #TRON) koledzy w akademiku tłukli całymi nocami
Zatweetuj

Rok po premierze Windowsa 95, dzięki pomocy chrzestnej udało mi się nabyć w miarę porządny, jak na tamte czasy, komputer. Był wzięty na tyle rat, że już w połowie ich spłaty kolega kupił taniej dwa razy lepszą maszynę i to z drukarką. Osobiście udało mi się spłacić tylko dwie, bo zamiast szukać pracy, siedziałem i klepałem różne programiki, ku uciesze swojej i kumpli.

Jeden z nich  (prosta odmiana gry TRON-a dla dwóch osób) dałem do zabawy kolegom w akademiku i podobno całymi nocami  w niego tłukli. Aż dziw, że takie gówienko miało taką grywalność. Kod źródłowy zajmuje 6kB i wciąż go mam :)

Finalną aplikacją był projekt zaliczeniowy z elektrotechniki, który napisałem do spółki z Sebastianem w 1999 roku. Program wyjaśniał w prosty, wizualny sposób działanie sieci trójfazowej, dokonywał też obliczeń i robił wykresy dla realnie wprowadzonych danych. Podobno był pomocą naukową do czasu, kiedy przestał się uruchamiać na nowszych systemach Windows.

Level up podczas choroby

Przesiedziałem w domu ponad dwa tygodnie, ale pożyczyłem od znajomego książkę o Turbo C i przez ten czas całkiem znośnie opanowałem zasady języka. Nie na tyle, żeby pisać zajebiście dobry kod, ale wystarczająco, żeby go zrozumieć i pokochać. To co wiele osób uważa za wadę (łatwo można było popełnić błąd), ja uznałem za zaletę. Po prostu trzeba wiedzieć co się robi. A dzięki dosyć luźnemu podejściu do kontroli poprawności kod źródłowy i wynikowy są małe i szybkie. Taki był zresztą cel twórców - kodować przy jak najmniejszej ilości uderzeń w klawiaturę. Teraz taką cechę ma PHP (poza szybkością) i za to go uwielbiam.

W tych czasach napisałem sporo różnych programów i gier. Niestety z czasem podzieliły los tych pisanych w Pascalu. Wraz z rozwojem Windowsów przestały się uruchamiać.

Windows przyszłością jest, więc...

Lubię mieć 100% kontroli nad kodem źródłowym a walka o #efektywność została mi z czasów #Atari i trwa do dziś.
Zatweetuj

Pierwsze aplikacje pod Windowsa zacząłem pisać już po studiach. Znalazłem świetne swego czasu środowisko IDE o nazwie Dev-Cpp z kompilatorem Gcc, w którym poznałem tajniki WinApi. Szkoda, że środowisko nie jest już rozwijane.

Przesiadka wymagała całkowitej zmiany sposobu myślenia. Pod Windowsem działanie oparte jest na zdarzeniach. W innych środowiskach automat sam tworzy klasy i metody, które trzeba wypełnić odpowiednim kodem, tutaj wszytko trzeba wklepać „z palca”. Dla dużych firm, gdzie godzina pracy programisty słono kosztuje, jest to nieopłacalne. Dla takich świrów (Cyborgów) jak ja, jest to świetna sprawa, bo daje 100% kontroli nad kodem źródłowym a wynikowy jest bez porównania krótszy i szybszy. Ta walka o efektywność została mi z czasów Atari (wolny procesor, mało pamięci) i trwa do dziś.

Jeśli chodzi o naukę programowania Windowsa, to był też inny problem. Literatury było niewiele (w Lublinie tylko dwie księgarnie miały tego typu publikacje, ale głównie były to podstawy samego języka niż konkretnych tematów związanych z Windowsem), w internecie też jeszcze niewiele. Zresztą własny domowy założyłem dopiero jakieś dziesięć lat temu, wcześniej tylko tyle co w pracy.

Niemniej zaparłem się i metodą prób i błędów zmuszałem moje aplikacje do działania. Powstał wtedy między innymi klon systemowego Notatnika, który we wczesnych wersjach (chyba jeszcze nawet na Windows XP) miał ograniczenie do 64kB tekstu. Mój Notesik (używam go do dziś) spokojnie rusza wielokrotnie większe pliki, ale ze względu na to, że cały tekst trzyma w pamięci odradzam otwieranie plików powyżej 100MB :)

Popełniłem też kilka gier, które tym razem powinny działać już z każdym Windowsem.

Kilka aplikacji do #Lotto się nie sprawdziło, chociaż świetnie sobie radziły z analizą wszystkich wyników od powstania gry
Zatweetuj

Jeszcze od czasów PC XT byłem zafascynowany grą w Lotto (gimby nie znajo, ale wtedy pojawił się Multilotek). Trochę grałem, ale więcej czasu spędziłem nad algorytmem typowania „pewniaków”. Programów wspomagających typowanie powstało sporo, ale ja chciałem mieć swój własny. W efekcie powstały nawet trzy. Świetnie i szybko radziły sobie z przeliczaniem wszystkich wyników od powstania gry (pliki można sobie pobrać ze strony Lotto) i wyświetlały ciekawe wyniki. Gorzej było jednak z ich analizą i wyciąganiem wniosków. Po latach zrozumiałem, że umiejętność programowania to nie wszystko. Przydałaby się też znajomość analizy statystycznej, a był to najbardziej znienawidzony przeze mnie dział matematyki. Teraz wiem, że trzeba było zrobić to co inni - zamiast szukać odpowiednich liczb dla siebie, powinienem sprzedawać licencje naiwniakom szukającym szybkiej wygranej.

Moja poważna przygoda z językiem C/C++ skończyła się, gdy wszyscy zaczęli tworzyć oprogramowanie pracujące w sieci. Coś tam sobie jeszcze od czasu do czasu dłubałem, ale były to małe aplikacje na własne potrzeby. Wiedziałem, że nie dogonię już czołówki i odpuściłem sobie. Może to i lepiej...

Nawiedzony programista

Nawiedzony programista pochodzi z banku zdjęć Fotolia

Internety robię!

Wtedy nikt się nie przejmował poprawnością kodu, #strony robiło się na ramkach i tabelkach a #SEO chyba jeszcze nie istniało
Zatweetuj

Do agencji reklamowej trafiłem przez przypadek. Wkręcił mnie znajomy, który wiedział, że chcę pracować przy komputerze. Akurat był wakat a ja udałem, że znam Photoshopa (pomylił mi się z PainShopPro) i że szybko się uczę. Uwierzyli i zostałem przyjęty na okres próbny, przez który musiałem udowodnić, że nie wciskałem kitu.

Internety robił tam wtedy Tomek. Byłem gotów mówić do niego „mistrzu”, ale okazał się jeszcze większym burakiem niż ja. Poza tym programował w jakimś dziwnym Perlu czy coś. Dla mnie czarna magia.

Podstawy HTML poznawałem więc sam przy pomocy Kursu HTML Pawła Wimmera, ale tylko „przy okazji” mojej głównej pracy jako grafik. Spodobał mi się JavaScript (składnia języka oparta na C/C++), dzięki któremu mogłem znacznie uprościć tworzenie kolejnych podstron serwisu. Wszystkie powtarzalne elementy zamykałem w funkcjach, a menu czy galerię zdjęć generowałem „dynamicznie” z utworzonej wcześniej tablicy. Dzięki temu aktualizacja serwisu była bardzo prosta... dla mnie. A potem poznałem PHP.

Tomek odszedł z agencji i zostałem tam jedyną osobą ogarniającą jako-tako strony internetowe. No więc ogarniałem. Głównie w HTML i JavaScripcie, z czasem doszedł CSS. Do tych bardziej wymagających używałem PHP. Zrobiłem strony dla prawie każdej agencji, w której pracowałem. Dziś się ich wstydzę, ale wtedy byłem z siebie dumny i blady. Nikt nie umiał tego robić a ja umiałem.

Zalążki mojego własnego CMS-a

Zgadnijcie, skąd wzięła się nazwa mojego Systemu Zarządzania Treścią - #Alib #CyMeS?
Zatweetuj

Zanim napisałem pierwszą bibliotekę, na której oparłem swój CMS, popełniłem kilka serwisów z systemem CMS-opodobnym. Wszystko robiłem pod konkretny projekt, bazą danych były pliki tekstowe a o czymś takim jak przyjazne adresy nawet nie miałem pojęcia. Ale mało kto miał. Zresztą do dzisiaj trafiam na „profesjonalne” strony, których autorzy o tym nie słyszeli.

Jednym z większych zleceń było napisanie aplikacji do obsługi magazynu. Miałem zaorać ówczesny, dosyć słabo działający system i zastąpić go swoim, nowoczesnym. Wyceniłem się niestety groszowo (zdarza się, gdy się coś robi pierwszy raz), ale zyskałem coś, czego nie da się przeliczyć na pieniądze. Przynajmniej nie bezpośrednio.

Po pierwsze nauczyłem się obsługi bazy MySQL i napisałem własną bibliotekę do jej obsługi, której w lekko zmodyfikowanej formie używam do dziś. Po drugie napisałem zestaw funkcji, które zebrałem w bibliotekę a następnie klasę i nazwałem Alib (od Andy Library). Jest ona obecnie główną klasą CMS-a - stąd jego nazwa: Alib CyMeS. A po trzecie i najważniejsze, uwierzyłem, że jestem świetnym programistą (nie ma to jak „skromność”) i mogę na tym oprzeć swoją freelancerską działalność. Zrezygnowałem więc z etatu i założyłem własną firmę. Co prawda trochę się z tym przeliczyłem, ale i tak uważam, że była jedna z lepszych decyzji w moim życiu.

HTML

Wzorowałem się na WordPressie

Projektując Alib CyMeS mocno wzorowałem się na #WordPressie a jednocześnie upraszczałem wszystko to, co można było uprościć
Zatweetuj

Jeszcze przed wspomnianym zleceniem, miałem do zrobienia dwie strony dla galerii handlowej na WordPressie. Było to moje pierwsze zetknięcie z „profesjonalnym” CMS-em.

WP założenie ma podobne jak Makowy OSX. Wszystko wyklikać z istniejących komponentów. Nie trzeba nawet umieć programować, co na wielu stronach niestety widać. Wadą tego rozwiązania jest to, że system jest wielki i dosyć powolny a oprogramowanie własnych komponentów stosunkowo skomplikowane. Coś w tym jest, bo inni zaawansowani programiści darzą go podobną niechęcią, za to laicy kochają za wyklikiwalność.

Te dwie strony dały mi w kość i już wtedy w głowie pojawiła mi się myśl, że przecież mogę sam napisać CMS-a, który, podobnie jak C/C++ i PHP, przejmie na siebie tylko najważniejsze czynności a resztę pozwoli programiście zrobić po swojemu. Poza tym musi być jak najmniejszy i mieć jak najprostszą strukturę.

Może to śmiesznie zabrzmi, ale napisanie własnego CMS-a było dla mnie łatwiejsze niż opanowanie któregoś z istniejących.

Projektując Alib CyMeS mocno wzorowałem się na WordPressie (także wizualnie jeśli chodzi o panel admina), a jednocześnie upraszczałem wszystko to, co można, a nawet trzeba, było uprościć. Miałem tą przewagę, że nie musiałem być kompatybilny z poprzednimi (nie zawsze dobrze przemyślanymi) wersjami, bo ich nie było. Robiłem wszystko od zera.

Czy mi się to udało?

Kod CMS-a to niecałe 100 plików ułożonych w kilku prostych folderach i zajmuje około 500kB (nie licząc grafik i fontów, Adminera oraz edytora TinyMCE). Baza danych składa się z 7 tablic, ale można je spokojnie skrócić do 4. Komentarze w kodzie ograniczyłem do minimum, stawiam na samokomentujący się kod. Jeśli po roku nie mogę go ogarnąć, to znaczy, że wymaga przepisania.

Alib CyMeS to w zasadzie połączenie CMS-a i frameworka

Obecnie planuję napisanie solidnej dokumentacji w PDF (i może internetowy manual) i udostępnić kompletny system (obecna wersja jest trochę okrojona i wciąż bez dobrej dokumentacji), żeby stał się konkurencją dla WordPressa (śmiejcie się, ale ja wierzę, że to jest możliwe). Trochę przeraża mnie ogrom pracy. To nie będzie kilkanaście stron instrukcji panelu admina, jaką daję klientom, tylko kilkusetstronicowa cegła. Nie obraziłbym się, gdyby znalazł się inwestor również wierzący w mój system, który pozwoli mi na półroczne, pełnoetatowe zajęcie się dokumentacją. I dorzuci tłumacza na angielski. Myślicie, że Google byłoby zainteresowane?

Dlaczego nie jestem zawodowym programistą?

#Standardy wymyślono po to, żeby w zespole mógł odnaleźć się każdy, bez względu na  poziom zaawansowania
Zatweetuj

Po pierwsze nie mam żadnego wykształcenia kierunkowego. Programowania nauczyłem się sam i jestem świadom tego, że mój kod jest zupełnie inny od tego, co się uznaje za standardy. Mi osobiście to pasuje, bo idealnie się w nim odnajduję i tworzę zwięzły, efektywny kod kosztem lekkiego zaciemnienia. Wolę nieco skomplikować i wydłużyć linijkę kodu i mieć całą funkcję na jednym ekranie niż naklepać spacji i enterów a potem przewijać kod, żeby go wzrokowo ogarnąć.

Standardy jednak wymyślono po to, żeby w zespole równać w dół i nie liczyć na to, że każdy zrozumie bardziej skomplikowaną formułę. Niemal zawsze jest to jednak kosztem efektywności.

Po drugie nie umiem pracować w zespole. Taki mam charakter, że się w tym nie odnajduję (między innymi dlatego nie zatrudniam pracowników, nie umiałbym z nimi współpracować a wyłącznie zarządzać też nie chcę). Nawet w szkole nie przepadałem za piłką nożną czy koszykówką. Ale szachy, ping-pong czy inne gry, gdzie gra się jeden na jednego, jak najbardziej mi podchodziły.

Po trzecie lubię mieć 100% kontroli nad kodem (pewnie to w jakimś sensie wynika z powyższego). Zastanawiam się, co będzie, gdy w końcu oddam światu Alib CyMeS i inni będą go rozwijać. Czy nadal będę chciał mieć z nim do czynienia czy zajmę się czymś innym?

Internety robię

Jeśli podoba Ci się wpis,
koniecznie zalajkuj,
skomentuj i zapisz się na