
Mówiąc najprościej architekt oprogramowania to taki programistyczny wizjoner. Tworzy i dogląda całościowej wizji projektu pod kątem technicznym i pilnuje by części tworzone przez programistów łączyły się w spójną i dobrze funkcjonującą całość. Często oznacza to konieczność zdefiniowania mniej lub bardziej abstrakcyjnej architektury systemu, nad którym trwają prace (np. podziału na komponenty i klasy wyrażonego w języku UML – Universal Modeling Language).
Architekt oprogramowania z reguły odpowiada także za decyzje technologiczne, np. za to jaki software stack (tj. zestaw komponentów, bibliotek lub programów) czy narzędzia zostaną użyte. Doradza developerom i rozwiązuje problemy, z którymi ci sobie nie radzą lub też których sposób rozwiązania będzie miał daleko idące konsekwencje dla dalszej realizacji projektu, długofalowych kosztów jego utrzymania czy zmiany. By temu podołać trzyma rękę na pulsie i wie, w którą stronę IT światek zmierza. Wie, które technologie są wystarczająco rozwinięte i stabilne, by nadawały się do użytku, a z których należy powoli rezygnować.
Jednocześnie to ktoś, kto niekoniecznie jest najlepszym programistą w firmie czy nawet zespole projektowym, ale za to posiada znacznie szersze i bogatsze doświadczenie niż senior developer. Może nie zna na wylot wszystkich niuansów danej biblioteki, ale wie, że świat się na niej nie kończy i można zastąpić ją pięcioma innymi, z których jedna spowoduje problemy z bezpieczeństwem danych, druga z wydajnością, a trzecia będzie w sam raz. Zarabiał bowiem na życie uczestnicząc w różnorodnych projektach, a takie kwestie jak dobre praktyki projektowania obiektowego czy wzorce projektowe to jego druga naturą.
Jak więc możecie się domyśleć nie jest to pozycja, od której można zacząć przygodę z pracą (czy to zdalną czy stacjonarną), ale może stanowić dobry drogowskaz na drodze do zostania cenionym i bardzo dobrze opłacalnym zdalnym specjalistą. No dobrze, ale w takim razie, czego się od takiego wizjonera wymaga, poza wieloletnim i różnorodnym doświadczeniem w tworzeniu oprogramowania?
Dobry architekt to prawie szafa samogracją. Nie tylko powinien dobrze znać problematykę baz danych (obecnie zarówno relacyjnych jak i no-SQL), mieć doświadczenie z rozmaitymi systemami cache’owania danych czy popularnymi ostatnio systemami wyszukiwania tekstowego (jak np. Elastic Search), ale też pokruszyć przynajmniej kilka zębów na big data (a najlepiej uczeniu maszynowym). Jakby tego było mało wypadałoby też, by dobrze orientował się w takich kwestiach jak systemy kolejkowe (np. Rabbit MQ czy Amazon SQS), oczywiście był obyty z technologiami chmury (np. Azure czy Amazon Web Services), nie najgorzej znał problematykę wirtualizacji i konteneryzacji (np. w rodzaju popularnego ostatnio Dockera), a nawet platformy służące do zarządzania nimi (w rodzaju googlowego Kubernetes).
Oczywiście porządny software architect powinien też mieć dobrze rozwinięte umiejętności komunikacyjne i społeczne, by sprawdzać się w roli tech leada, który zarówno pomoże kolegom rozwiązać problemy programistyczne jak i tchnie w nich ducha współpracy i podnoszenia własnych umiejętności. Nie jest wykluczone także, że pracując na takim stanowisku trzeba będzie współpracować z testerami (wypadałoby więc znać się co nieco i na bieżących trendach, np. automatyzacji czy TDD w różnych odmianach) albo nawet komunikować się z klientem docelowym (choć to już raczej buty project managera).
Oprócz tego trzeba mieć konkretne doświadczenie programistyczne i naprawdę znać język programowania, w którym rozwijany jest projekt. Dobry architekt nie buja w obłokach nierealistycznych wielopoziomowych abstrakcji, gdyż wie, że jego projekty będzie musiał ktoś zaprogramować (czasem też sam w tym uczestniczy), więc tworzy je tak, by miały ręce i nogi i nie sprawiały developerom nadmiernych trudności implementacyjnych.
Czyli… aby marzyć o tej roli trzeba bardzo dobrze znać przynajmniej jeden język programowania, a do tego dobrze orientować się w tym, co dzieje się w całym obszarze tworzenia oprogramowania i widzieć dalej, niż czubek własnego kodu.
Zapytacie: jaki język programowania? Krótka odpowiedź byłaby: jakikolwiek. I choć byłaby to prawda, najwięcej ofert znajdziemy oczywiście w wypadku dwóch najpopularniejszych obecnie języków: Java i C++ (a także C i C#). Jeżeli chcecie wiedzieć jakie konkretne technologie są obecnie na topie zerknijcie na dwa kolejne akapity, jeśli nie, możecie je spokojne pominąć (są mocno techniczne).
Jeśli Java i architektura oprogramowania to musimy postawić na Java Enterprise Edition (J2EE). Poza znajomością standardowych bibliotek nie obejdzie się bez znajomości pary, która od lat dominuje na rynku skomplikowanych aplikacji, czyli Spring oraz Hibernate. Spring to ogromny framework, który składa się z kilkudziesięciu komponentów dostarczających prawie całej funkcjonalności, jakiej może potrzebować duża aplikacja. Dostarcza moduły odpowiadające np. za bezpieczeństwo, zarządzanie użytkownikami czy ułatwiające tworzenie REST’owych lub SOAP’owych web service’ów oraz tworzenie oprogramowania w oparciu o wzorzec Model-View-Controller.
Hibernate natomiast dostarcza narzędzi do łatwej integracji aplikacji z relacyjnymi bazami danych i prostego mapowania ich treści na obiekty (tzw. ORM – Object-Relational Mapping).
W przypadku C# odpowiednik J2EE stanowi .NET Framework. Oczywiście same standardowe biblioteki nie wystarczą i musimy wiedzieć coś więcej. Co konkretnie? Ano przydałoby się dobrze znać ASP.NET MVC (Microsoftowa odpowiedź na Spring MVC), ASP.NET Web API i coś do obsługi baz danych. Najlepiej zarówno Microsoftowy ADO.NET jak i Entity Framework, który kilka lat temu jako osobny projekt został wydzielony z .NETu.
Do tego nie zaszkodzi, jeśli będziemy naprawdę dobrze znać Visual Studio oraz jakiś inny język z rodziny C (np. C++ albo C).
Jako, że nie ma róży bez kolców to i bycie architektem nie jest pozbawione wad. Pierwszą z nich może być to, że w zasadzie jesteśmy ograniczeni do pracy dla dużych korporacji. Wynika to z tego, że z jednej strony małe firmy rzadko potrzebują specjalistów o tak rozległej wiedzy, a z drugiej, nawet jeśli ich potrzebują, to z reguły nie są w stanie spełnić ich wymagań finansowych. Drugi minus ponikąd wynika z pierwszego i jest nią pewna trudność w znalezieniu pracy zdalnej. Duże korporacje często wolą mieć ludzi na miejscu, choć i to się powoli zmienia (pamiętacie o wspomianej o stworzonej przez Forbesa liście 100 najlepszych firm do pracy zdalnej? Znajdują się na niej prawie same korporacje). Ponadto można zapomnieć o małych zleceniach złapanych na UpWork czy podobnych serwisach. Nikt raczej nie zatrudnia software architecta na miesiąc czy dwa, by trochę pomógł przy projekcie. Trzecią wadą jest to, że raczej nie ma szans, na znalezienie pracy w niepełnym wymiarze godzin, a przecież taki układ byłby w tropkiach najlepszy. Pracując jako architekt oprogramowania, ze względu na poziom skomplikowania problemów do rozwiązania, musimy nastawić się na przynajmniej 40-godzinowy tydzień pracy.
Jak już wspomniałem można zapomnieć o małych projekcikach łapanych przez UpWork, Freelancer.com lub podobnych serwisach. To nie jest posada, na której można złapać coś krótkoterminowo. Najlepszym rozwiązaniem wydaje się albo aplikowanie bezpośrednio do korporacji, które znane są z tego, że zatrudniają specjalistów zdalnie (vide wspomniana lista Forbesa) albo szukanie szczęścia w mniejszych firmach, które zatrudniają wyłącznie zdalnie (np. Zapier czy Meet Edgar) licząc się z tym, że przyjdzie nam trochę poczekać nim znajdziemy firmę na tyle dużą (i bogatą), że będzie potrzebowała architekta. Jeszcze inną opcją jest spróbowanie szczęścia w Crossover, które zatrudnia tylko i wyłącznie pracowników zdalnych, a jednocześnie umożliwia pracę nad skomplikowanymi projektami.
No dobrze, wygląda na to, że aby dostać pracę zdalną jako architekt oprogramowania trzeba wiedzieć prawie wszystko. Zobaczmy więc, jak przekłada się to na zarobki. Zgodnie z oczekiwaniami całkiem nieźle. Choć nie jest to do końca prawda, można powiedzieć, że “sky is the limit”. No bo na dobrą sprawę jak inaczej okreslić syutację, w której dostajemy przynajmniej 20 tysięcy złotych miesięcznie na umowę B2B (zakładając że pracujemy dla przeciętnej firmy IT w Polsce) czy też sytuację, w której zatrudnia nas jedna z czołowych firm sektora technologicznego i najbiedniej proponuje jakieś 60 tysięcy złotych miesięcznie? (na umowę o pracę, za wielką wodą?) Albo sytuację, gdy pracujemy za trochę mniej, bo “jedynie” 30 tysiący złotych na miesiąc na B2B, ale za to zdalnie z Tajlandii lub Filipin, gdzie koszty życia są niższe lub porównywalne do Polskich, o zachodnich nie wspominając?
Zatem… jeśli myślicie o karierze w IT może warto obrać sobie za cel zostanie w przyszłości własnie architektem oprograwowania? Będziecie mogli mierzyć się z bardzo skomplikowanymi problemami i wyznaczać sposoby rozwijania dużych projektów informatycznych bez rezygnacji z kodowania na rzecz samego zarządzania. Przy okazji zarobicie całkiem przyzwoite pieniądze (o ile do tego czasu sztuczne inteligencje nie zabiorą ludziom pracy ;-)).
A jeśli już spełniacie wymagania stawiane z reguły przed architektami, to może nadszedł czas by porzucić ciepłą posadkę i znaleźć pracę zdalną?
Jeśli ten artykuł był ciekawy, polub, skomentuj, udostępnij!
___
Chcesz pracować zdalnie z dowolnego miejsca na świecie? Dołącz do grupy: Cyfrowi Nomadzi na Facebooku, przywitaj się, poznaj ludzi, którym już się udało!
CrossOver to jest ściema. Prawie pół roku temu udało mi się tam dostać właśnie na stanowisko architekta. Przez te pół roku nie dostałem ani jednej oferty, dopiero ostatnio ktoś zadzwonił bo szukali administratora i migratora intranetu. Ale i tak się chyba na to nie załapałem, bo widzę że oferta bez wyjaśnienia zniknęła z ich biednego systemu dla członków.
Jedno dobre co przyszło z CrossOvera dla mnie to to, że dzięki nim dowiedziałem się o Toptalu i właśnie zaczynam tam kolejne zleconko 🙂
3 komentarze
Żeby zostać takim architektem oprogramowania to równie ciężka harówa jak zostać lekarzem i zanim nie zdobędziesz wielu lat doświadczenia to nikt Ci zdalnej pracy nie zaoferuje. Zbyt duża odpowiedzialność. A te ofertę z CrossOver Java Architect 100k widzę już chyba od ponad roku i mega cuchnie ściemą 🙂
To prawda Tomku. Nie jest to pozycja zawodowa, od której zaczyna się pracę czy stacjonarną czy zdalną. Ale może to być ciekawy cel, jaki można przed sobą postawić. A co do oferty Crossover to dlaczego “cuchnie Ci ściemą”? Rozwiniesz? Może z ich strony to nie wynika wprost, ale oni nie szukają 1 osoby na stanowisko architekta oprogramowania, lecz raczej kilkunastu-kilkudziesięciu osób (jeśli nie więcej), bo są pewnego rodzaju pośrednikiem, a nie klientem ostatecznym. A klientów docelowych mają wielu…