Ten rok pracy na stanowisku programisty dał mi sporo wiedzy i otworzył mnóstwo nowych horyzontów. Jak zaczynałem to umiałem tylko czystego PHP’a w którym napisałem w życiu dość dużo, m.in. cały silnik do gry przeglądarkowej (proceduralnie, potem przepisane na obiektówkę). Nauczyło to mnie dobrze posługiwać się SQL, gdyż wszystkie zapytania do bazy pisałem z palca, to po jakiś 2 -3 latach weszło mi trochę do głowy. Ogarniałem dobrze JavaScript (napisałem w nim tony gier na przeglądarkę) początkowo w JQuery potem Vanilla JS.
Z takim pakietem umiejętności i zaczątkami innych nowych technologi webowych wbiłem się do pierwszej pracy.
Na frontendzie, szybko ogarnąłem SASS, czyli ciekawą odnogę CSS, a gdy poznałem jeszcze Pattern 7-1 to dało mi już piękną architekturę styli i łatwość zarządzania nimi. Bootstrap pokazał, że wygląd i mobilności strony jest dziecinnie prosta i zajmuje mało czasu, a w zamian mamy całkiem dobrze wyglądająca stronę/aplikację. Niedawno opanowałem LESS i zaczątki standardu BEM, który wprowadza ciekawe standardy nazewnictwa class.
Często mnie to denerwuje, że tak prosta i malo istotna dla działania aplikacji rzecz jaką jest frontend zaczyna przejmować taką role. Umiejąc node.js, angulara i reacta, czyli sam frontend, będziemy mogli być czołowymi programistami. Już teraz jak widzę ogłoszenie o prace dla „programisty WordPress” to się załamuje.
Z JavaScriptu dowiedziałem się, ze ES6 robi niezły przełam, dodatkowo rozwiniecie takich technologi jak node.js (czyli backend pisany w JS) stawia frontend jako alternatywę dla PHP i innych języków serwerowych. Zacząłem uczyć się React`a aby potem prześlizgnąć się na node.js i pojąć jakoś tą technologie. A, że bawiłem się React`em już na tyle długo, sądzę że to może być mój drugoplanowy kierunek w przyszłości, po backend’zie. Angulara nie bardzo miałem ochotę poznawać, dlatego go omijam, uznałem, że React to lepszy kierunek, a nie można przecież robić wszystkiego. Miałem juz okazje napisać pierwsza aplikacje w React w pracy. Dodatkowo załapałem RequireJS który mega pomaga przy czystym JS oraz Underscore który mega zmniejsza liczbę linii kodu swoim zasobem funkcji i ułatwia pracę z obiektami, listami i tablicami.
W PHP wbiłem się jak w ogien. Od razu zostałem rzucony na fale frameworków. Najpierw pierwszy miesiąc Code Igniter, okazał się dość prosty, i nie daje sporej liczby rozwiązań w porównaniu do Symfony, w którym przepracowałem już 5 miesięcy na 3/5 etatu oraz godzin nauki jego w domu. Jest to obecnie największy framework PHP`owy i zarazem najtrudniejszy. Jestem mega zadowolony z tego ze znam go na dość dobrym poziomie. Bez problemu mogę postawić całą uwierzytelnianie użytkownika, tworzyć dowolne formularze, uploadery plików, proste CMS i wiele innych ciekawych rozwiązań.
Symfony pchnęło mnie od razu w stronę ORM, czyli obiektowej bazy danych. Widać tutaj pięknie jak obiektowość przejmuje władze w coraz niższych językach, w postaci frameworków. Nauczyłem się Doctrine ORM, którą wspierało Symfony. Relacyjność baz danych stała się banalnie prosta. One-to-one, many-to-one, one-to-many oraz many-to-many, spełniają moje oczekiwania co do architektury relacyjności. Tworzenie CRUD`a jest banalnie proste. Zamierza iść dalej w ten framework i jak najmocniej się go trzymać bo uważam, że poznanie takich możliwości jakie daje, pozwoli mi się wysoko ustawić w karierze.
Nauczyłem się obsługi GIT`a, sądzę, że to potężne narzędzie, które ułatwia sprawę, szczególnie kiedy w projekcie jest więcej osób. Aby dobrze poznać jego możliwości, systematycznie wgłębiam się w niego coraz bardziej, i staram się wyłapywać najlepsze praktyki z nim związane.
Poznałem też sporo narzędzi do zarządzania modułami, paczkami i usprawniające cały workflow. Grunt do kontroli kompilatorów, minifikacji JS, SASS, ogólnie jako taki task runner. Webpack do React`a, npm od node, które odmienia całkowicie prace na fronendzie. Dodatkowo composer do PHP który gwarantuje ogarniecie całego burdelu spowodowanego sporą ilością framework`ów i rozszerzeń do nich.
Oprócz technologi, sporo nauczyłem się o zarządzaniu zespołem, projektami. Ogólnie sporo z roli Project Menagera. Od wielu metod przyspieszających pracę programisty do polepszania relacji w zespole i rozwiązywania najtrudniejszych problemow łącząc wiele umysłów w jeden. Dodatkowo w CI i Vanilla JS rozwijam od 3 miesięcy Program do zarządzania projektami w firmie (stronek www oraz sklepów). Przełożyło się to bardzo na moją pracę w domu, rozwijanie wielu dziedzin i ogarniecie ich. Dążenie do multitaskingu.
Powoli zaczynam interesować się BigData. Duże bazy SQL i operacje na nich. Optymalizacja wyników wyszukiwania, inteligentne wyszukiwania. Fajnie by było ogarnąć dobrze tą dziedzinę bo ma przyszłość.
Czy jestem zadowolony z rezultatów jakie osiągnąłem w programowaniu po roku doświadczenia komercyjnego?
Podsumowanie:
- Jest jedna rzecz która mnie denerwuje najbardziej. Jedna a zarazem najważniejsza. Ogrom technologi, pełno alternatyw, to wszystko mnie bardzo rozprasza, bo zamiast skupić się na jednym i rozwijać się dalej (poznawać coraz więcej dobrych praktyk, rozwiązań architektonicznych, wzorców projektowych, czy algorytmiki) to jestem zmuszony poznawać ciągle od zera nowe frameworki, zmieniać co chwila technologie i niestety mam odczucie, że blokuje mnie to.
- W mojej opinii nie można skupiać się na technologii (chociaż czasem dobre ogarnięcie języka programowania czy frameworka ma duże znaczenie), ale starać się wyuczać rzeczy które są ponadto. Np ORM nie jest stricte związany z technologią, jest wykorzystywany na wielu frontach. Dlatego jego dobre poznanie gwarantuje, ze zmiana technologi nie będzie problemem. Tak samo z innymi cennymi wartościami jak wzorce czy algorytmy.
- Jestem bardzo zadowolony z rezultatów jakie osiągnąłem czasie jednego roku. Sporo się nauczyłem rzeczy i praktyk których ciężko było bym ogarnąć samemu. W domu nie poświęcałem zbyt dużo czasu na rzeczy związane z pracą, starałem się jak najwięcej załapać w czasie pracy, gdyż nie miałem na to zbyt sporo czasu. Inne zainteresowanie i sprawy prywatne znacznie go skracają.
Cele na przyszłość:
- Najważniejsze dla mnie jest zaprojektowanie aplikacji RESTowej na bazie Reacta i Symfony 3, ktora planuje juz od dłuższego czasu. Bedzie ona dla mnie dobrą praktyką oraz wizytówka w przyszłości.
- UNIX linux konsolka – miałem sporo okacji aby je troche wykozystywac, szczegolnie dobrze poznałem UNIXa jak pracowalem na macbooku.
- Wzorce projektowe, kilka razy sie przymierzałem ale za kazdym razem nie starczalo czasu ;/ (szczegolnie na bazie Symfony)
- BigData
- Algorytmika, kiedyś bardzi dużo rozwiązywałem zadan algorytmicznych z OI, potyczek czy wielkiej przesmyckiej. Nie chce aby to wszystko gdzieś zniknęło w otchłani czasu, dlatego powoli musze świadomie używać nabyte wczesniej umiejętności w praktyce i pracy.
- Powoli zawężać scieżki i zacząc rozwijać sie w góre. Nie wykluczam zmiany technologi np na Jave, C++ czy inną gdzie będe mogł zagłebiać się w głąb ich architektory i mieć wolną drogę do rozwoju, gdyż bede mogl bazowac na konkretnej technologi