Jedno słowo będzie Ci towarzyszyć zawsze. Tym słowem jest zmiana
Inżynierowie oprogramowania są jednym z bardziej poszukiwanych zawodów na rynku od kilku lat. Doprowadziło to do szybkiego wzrostu liczby firm oferujących kursy programowania. Na rynku jest też wiele poradników, z których dowiecie się jak rozpocząć karierę w IT. Dziś chciałbym opowiedzieć swoją historię od zera do senior software engineera.
Lucjan Wilczewski. Senior Software Engineer w Solveq.io. Pierwszy program napisał w BASICu na Atari 65XE w latach 90-tych. Na poważnie do branży IT wszedł w 2007 roku. Od tamtej pory programował aplikacje przeglądarkowe i mobilne, prowadził zespoły jako lider i menadżer, wdrażał nowych programistów i wziął udział w ponad setce spotkań rekrutacyjnych z kandydatami. Wierzy, że można pracować inaczej i od lat z zainteresowaniem śledzi firmy wdrażające turkusową organizację.
Na początku będzie gorzko: niestety, 3-miesięczny kurs nie zastąpi odpowiedniego wykształcenia i doświadczenia. Ponadto kurs tworzenia oprogramowania jest dla wielu jego uczestników punktem zwrotnym w życiu zawodowym. Skokiem na nowe i nieznane wody. Miałem do czynienia z kucharzami, farmaceutami czy absolwentami kierunków zarządzania nieruchomości, którzy w nadziei na odmianę trybu życia czy lepiej płatną pracę decydowali się na zmianę zawodu.
Owi entuzjaści, często bardzo bystrzy i o wysokim potencjale, wchodzą na rynek, na którym firmy niechętnie zatrudniają juniorów. I minie wiele lat, zanim ci neofici w tworzeniu oprogramowania staną się doświadczonymi członkami społeczności inżynierów. Jakiej rady udzieliłbym tym odważnym osobom, będąc programistą z 12-letnim doświadczeniem?
Spis treści
Nauka nigdy się nie kończy
Ukończony kurs dał ci podstawy. To czego Cię nauczono jest jednak tylko wierzchołkiem góry lodowej. Nawet jeśli niektóre firmy organizujące kursy robią co w ich mocy, aby praca w czasie kursu jak najwierniej odzwierciedlała Twoją przyszłość zawodową, nadal są one dalekie od rzeczywistości.
W rozwoju oprogramowania jest jedna rzecz, której możesz być pewien: zmiana. Narzędzia i rozwiązania zmieniają się cały czas. Oznacza to, że nie można spocząć na laurach i będzie trzeba się cały czas uczyć. Stanie w miejscu, to niestety pozostanie w tyle.
Dlatego pamiętaj, aby ciągle doskonalić swoje umiejętności. Poniżej znajdziesz kilka wskazówek, jak doskonalić się w swojej pasji.
Podążaj według wskazań ‘shu-ha-ri’
W japońskich sztukach walki istnieje koncepcja Shuhari, która opisuje etapy uczenia się, aż do osiągnięcia mistrzostwa.
Jaka jest etymologia Shuhari zgodnie z Wikipedią?
Shuhari tłumaczy się jako „trzymać się, upaść, oderwać się”.
shu (守) „chroń”, „przestrzegaj” —tradycyjna mądrość —nauka podstaw, techniki, heurystyki, przysłów.
ha (破) „oderwać”, „dygresja” – zrywając z tradycją – oderwać się od iluzji siebie.
ri (離) „odejdź”, „oddziel” – transcendencja – nie ma technik ani przysłów, wszystkie ruchy są naturalne, stać się jednym z duchem bez przywiązania do form, przekraczając to, co fizyczne.
Jak to przekłada się na rozwój oprogramowania? Najpierw naśladuj bardziej doświadczonych kolegów. Od lat robią to, czego się dopiero uczysz. Na razie nie kwestionuj ich rozwiązań. Zadawaj pytania, aby zrozumieć powody wyboru takiej a nie innej implementacji, struktury lub biblioteki.
Bądź ostrożny, aby nie wpaść w pułapkę podążania za zasadą: „przecież zawsze tak było”. Jako nowy członek grupy wnosisz swoją świeżą perspektywę człowieka z zewnątrz. To na początku może być Twój najcenniejszy wkład.
Pewnego dnia stwierdzisz, że jesteś gotowy na niezależność. Zaczniesz dokonywać własnych świadomych wyborów implementacji, frameworków lub bibliotek. Nie jesteś już tylko tą osobą, która zawsze zadaje pytania, ale osobą, która po prostu rozwiązuje problemy.
Następnie stajesz się osobą, która odpowiada na pytania, rozwiązuje najbardziej złożone problemy. Ktoś, u kogo odpowiedzi szukają inni, mniej doświadczeni programiści.
Wreszcie jesteś gotowy łamać reguły i tworzyć nowe. Wchodzisz na scenę prawdziwych mistrzów, takich jak Martin Fowler, Robert C. Martin czy Kent C. Beck.
Programistyczne kata
Programiści zdają się kochać terminy rodem z wschodnich filmów akcji, ponieważ koncepcja kata jest kolejną zapożyczoną z japońskich szkół sztuk walki.
Kata według Wikipedii: Kata, japońskie słowo, oznaczające dosłownie: „forma” (型 lub 形), jest szczegółowym układem choreograficznym ruchów, które mogą być ćwiczone samodzielnie, ale są również praktykowane w grupach, harmonijnie podczas treningu. Jest praktykowane jako sposób na zapamiętanie i udoskonalenie wykonywanego ruchu.
W rozwoju oprogramowania kata to ćwiczenie w programowaniu, które pomaga programistom doskonalić swoje umiejętności poprzez praktykę i powtarzanie. Jeśli wyszukasz w Google „code kata”, prawdopodobnie znajdziesz wiele przykładów ćwiczeń, które możesz wykonywać.
Jedną z dość popularnych platform do praktykowania kata jest www.codewars.com. Możesz tam rozwiązać zadanie, które automatycznie zostaje zweryfikowane. Na platformie możesz również rywalizować z innymi o najlepszy wynik.
Tym jednak co najbardziej lubię w tej platformie jest to, że po przesłaniu rozwiązania możesz zobaczyć i głosować na rozwiązania dostarczone przez innych. Często odkrywam wówczas znacznie prostsze i bardziej eleganckie rozwiązanie danego problemu niż to, na które sam wpadłem.
Poznaj wzorce projektowe
Chociaż kata doskonale nadają się do ćwiczenia algorytmów i rozwiązywania problemów, pełny kod aplikacji to nie tylko prosta suma jego części.
Aplikacja to kompozycja składowych, z których każda rozwiązuje osobny problem. Te kompozycje są często podobne w różnych zastosowaniach. Owe podobieństwa są określane mianem wzorców projektowych. Niezależnie od problemu, przed którym stoisz, istnieje duża szansa, że ktoś zdefiniował wzorzec rozwiązujący ten problem.
Jednym z najlepszych zasobów wzorców projektowych jest strona zarządzana przez Martina Fowlera, którą gorąco polecam.
Wyjdź ze swojej strefy komfortu
Kiedyś interesowałem się pisaniem beletrystyki, a jednym z najciekawszych źródeł wiedzy na ten temat były lekcje pisania Orsona Scotta Carda.
W jednej z tych lekcji O. S. Card zachęca swoich uczniów do wyjścia poza gatunek i formę, w których zazwyczaj piszą. Żeby spróbować czegoś innego. Jeśli piszesz fikcję historyczną, spróbuj dramatu lub wiersza. Zastanawiasz się dlaczego? Odpowiedź brzmi – aby lepiej zrozumieć obie formy. Może się zdarzyć, że kiedy spróbujesz dramatu, dialogi w twojej fikcji staną się bardziej naturalne lub metafory zaczną przychodzić Ci łatwiej, gdy spróbujesz pisać poezję.
To samo dotyczy mojego doświadczenia w tworzeniu oprogramowania. Przez długi czas byłem programistą backendu w PHP. Backendy w PHP są zazwyczaj synchronicznymi interfejsami API opartymi na zapytaniach lub aplikacjami renderowanymi po stronie serwera. Kiedy miałem okazję zająć się rozwijaniem aplikacji mobilnych w Swift dla iOS, otworzył się przede mną świat operacji asynchronicznych, reaktywnych strumieni, programowania deklaratywnego i funkcyjnego. Musiałem odkryć nowe wzorce architektoniczne, takie jak MVVM, MVP czy VIPER.
W efekcie konieczna była zmiana paradygmatów. Zmienił się mój punkt widzenia na temat tworzenia kodu. Zacząłem w codziennej pracy wykorzystywać doświadczenia z programowania funkcyjnego i łączyłem to podejście z projektowaniem obiektowym. Musiałem nauczyć się myślenia w kategoriach strumieni danych zamiast natychmiastowych synchronicznych odpowiedzi.
Moim następnym przystankiem był rozwój backendu node.js, gdzie dwa powyższe światy częściowo się spotykają. Mogłem wykorzystać oba doświadczenia by efektywniej dostarczać działające oprogramowanie.
Wnioski
Jeśli zdecydowałeś się wybrać ścieżkę programisty, to wiedz, że nauce nigdy nie będzie dość. Porzuć lęk przed ciągłą zmianą. Zrób to, a twoje życie będzie bardziej satysfakcjonujące. Tak jak w tym starym dowcipie:
Pieszy na 57. ulicy widzi muzyka wysiadającego z taksówki i pyta go: „Jak trafić do Carnegie Hall?” Nie zastanawiając się, artysta odpowiada: „Trzeba ćwiczyć”.
Chociaż tworzenie oprogramowania wymaga kreatywności, istnieją wzorce, algorytmy, optymalne przypadki użycia kodu, które mogą przyspieszyć twój postęp i ułatwić codzienne życie.
Jeśli masz jakieś pytania lub inne porady, nie wahaj się poinformować nas o nich w komentarzach poniżej. Z przyjemnością wyciągniemy wnioski z Twojego doświadczenia.
Artykuł został pierwotnie opublikowany na solveq.io. Zdjęcie główne artykułu pochodzi z unsplash.com.