Wielokrotnie na blogu dawałem do zrozumienia, że programista i administrator to osoby o dwóch różnych specjalizacjach i zestawie umiejętności. Obie są informatykami i pracują w firmach IT zajmujących się np. oprogramowaniem. Natomiast nie wszystkie software house'y dysponują administratorami, podobnie jak istnieją firmy, które oferują wyłącznie usługi serwerowe. Co ważniejsze, nie każdy programista będzie umiał pomóc w kwestiach wdrożeniowych, podobnie jak administratorzy nie mają w zwyczaju debuggować i poprawiać kodu aplikacji. Ta uwaga dotyczy także freelancerów, tak popularnych u niektórych klientów - są wśród nich świetne osoby, jednak nie należy ich traktować jako "specjalistów od wszystkiego".
Dlaczego o tym piszę? Ponieważ klientom zdarza się myśleć, że specjalista IT będzie jego "jednoosobową armią", a przy większych systemach tak się po prostu nie da. Dzisiaj porozmawiamy (a właściwie popiszemy i poczytamy) sobie, z czego to wynika, jakie są różnice pomiędzy programistami oraz administratorami, a także dlaczego trudno znaleźć specjalistów od jednego i drugiego.
Czym zajmują się te osoby?
Na początku odpowiemy sobie na pytanie, kim jest programista. W skrócie - jest to osoba, która pisze programy, ale nie tylko. To również specjalista od konstruowania i analizy software'u, aby zapewnić nie tylko wymaganą funkcjonalność, ale też elastyczność, bezpieczeństwo i dobrą architekturę (choć tutaj moglibyśmy się już spierać, czy nie zahaczamy o rolę architekta oprogramowania, obecnej w większych firmach). Programista to zatem człowiek, który przygotuje kod składający się na paczkę, która będzie udostępniona na serwerze (zakładamy, że mówimy o aplikacjach webowych).
Jednak tę paczkę na serwerze trzeba również umieścić w konkretny sposób i w odpowiednim środowisku. I o ile programiści często faktycznie wrzucają swoją aplikację w wyznaczone miejsce, o tyle zwykle nie są odpowiedzialni za przygotowanie samego środowiska. Tym zajmuje się zazwyczaj administrator, a więc osoba, która doskonale zna się na systemach operacyjnych (w tym przypadku serwerowych) oraz konfiguracji pozwalającej na optymalne wykorzystanie zasobów i działanie kodu. To także specjalista wiedzący, jakie paczki instalacyjne powinny być zainstalowane, aby spełnić potrzeby nie tylko oprogramowania, ale też np. bezpieczeństwa. To on lub ona tworzy odpowiednie uprawnienia, zarządza nimi i zabezpiecza serwer przed niepowołanym dostępem. Może też coś podpowiedzieć w kwestii optymalizacji wykorzystania zasobów lub zwyczajnie zapewnić dodatkowe możliwości środowiska. Administrator jest też często człowiekiem znającym strukturę sieci, wszystkie przekierowania i odpowiada za ustawienie serwera HTTP oraz systemu do zarządzania bazami danych.
Krótko mówiąc i upraszczając wiele aspektów, programista tworzy to, co administrator później utrzymuje na serwerze. Różnice leżą nie tylko w umiejętnościach czy zakresie odpowiedzialności (o czym jeszcze będzie dalej), ale także w czasie pracy. Koderzy zwykle pracują w normalnym trybie, czyli 8 godzin dziennie (no... standardowo) w dni robocze. W przypadku adminów sprawa jest bardziej skomplikowana, gdyż opieka nad serwerem w większości przedsięwzięć IT teoretycznie powinna przebiegać w trybie 24 godziny przez 7 dni roboczych. Oczywiście, nie jest to fizyczne możliwe bez całego zespołu administratorów, którzy nawzajem się zmieniają. Dlatego bywa, że wyznacza się godziny "urzędowania" (co jest łatwiejsze w przypadku aplikacji typowo użytecznych dla jednej firmy) lub organizuje to wszystko w ramach umowy serwisowej, gdzie specjalista zapewnia pewną pulę godzin do wykorzystania w ciągu pewnego okresu. Dodatkowo, działania administracyjne nie są "pracą stałą" - poza zleceniami od klienta na skonfigurowanie serwera czy wzmocnienie maszyny, jest to często obsługa incydentów. Rozmawiając z administratorami można usłyszeć opowieści o tym, jak to bywały miesiące, w których musieli być tylko dyspozycyjni oraz czuwać, ale gdy przychodziły zadania, to wszystkie naraz i z adnotacją "na wczoraj".
Do tego dochodzi konieczność współpracy pomiędzy programistami oraz administratorami. Trzeba uczciwie przyznać, że różnie z tym bywa - jako że admini są odpowiedzialni za przygotowanie środowiska, a każda dodatkowa aplikacja wymaga konfiguracji oraz może wpłynąć na już inne, zainstalowane, to zazwyczaj nie jest chętny, aby dołączać do systemu wszystkie zachcianki programistów. Z kolei programiści chcieliby mieć wszystkie potrzebne narzędzia do dyspozycji, a jednocześnie w przypadku problemów liczyć na admina. Tym niemniej, nie jest tak źle - w profesjonalnym świecie jak najbardziej te dwie strony dogadują się bez problemów i zachowują zdrowy podział. Natomiast wiele osób interesuje się tym, co się dzieje, kiedy na serwerze wystąpi błąd. Bywa, że wówczas jedni wskazują na drugich, a drudzy na pierwszych. Prawda jest taka, że wszystko zależy od natury błędu i tego, co odpowiada strona WWW, która przestała działać. Jeśli w ogóle się nie wyświetla lub np. widoczny jest błąd certyfikatu SSL, zwykle odpowiada za to administrator. Jeśli jednak dostęp do aplikacji istnieje, ale następuje błąd podczas jej uruchomienia lub dostępu do danej strony, to zazwyczaj działanie spada na barki programistów. Obie strony mają do dyspozycji logi i na tej podstawie mogą ocenić, co się tak naprawdę stało. Ważne, aby współdziałać i znać swoje możliwości oraz zakres odpowiedzialności, a nie bezsensownie walczyć. Pamiętajcie - szacunek przede wszystkim.
Co łączy te role, a co różni?
Specjaliści w obu obszarach mają dużą wiedzę w zakresie działania oprogramowania i orientują się w nowych narzędziach służących uruchamianiu aplikacji. Oczywiście, taka znajomość i umiejętności są bardziej kojarzone z programistami, natomiast trzeba pamiętać, że administratorzy również muszą być na bieżąco, aby móc odpowiednio świadczyć usługi i umieć doradzić. Nierzadko osoby opiekujące się serwerami dla wielu firm muszą więcej doczytywać, aby móc obsługiwać technologie stosowane i "klarowne" dla każdego zespołu, który jest ich klientem. Przedstawiciele obu ról radzą sobie też z Linuxem, który jest standardem branżowym (choć programiści jak najbardziej też pracują na Windowsie oraz macOS).
Różnica polega na podejściu obu ról do narzędzi programistycznych. W przypadku programistów jest to wiedza związana z tworzeniem i projektowaniem oprogramowania. To oni koniec końców wiedzą, jak to wszystko działa w środku, jakie są możliwości rozbudowy i de facto co potrzebują pod kątem paczek na serwerze. Natomiast często nie są w stanie w szczegółach ustalić, jakie parametry konfiguracyjne serwera są potrzebne, jaka ilość pamięci RAM będzie wystarczająca oraz co dokładnie trzeba zrobić, aby serwer HTTP prawidłowo serwował stronę internetową.
Z kolei administratorzy właśnie w tym są mistrzami, a dodatkowo umieją zaproponować odpowiedni sprzęt do danego zastosowania. Doskonale orientują się w możliwościach Linuxa i to w obszarach, do których programiści zwykle nie zaglądają. Dbają też o aktualizację systemu operacyjnego na serwerze, mają większą wiedzę hardware'ową, a także o środowisku sieciowym. Potrafią również obsługiwać narzędzia zabezpieczające środowisko na wypadek ataków, analizują logi, reagują w przypadku braku zasobów (np. dysku)... Natomiast kwestię tego, jak działa aplikacja i czy konstrukcje programistyczne użyte przez software house są poprawne, zupełnie nie muszą ich interesować. Co najwyżej podpowiedzą, że widzą np. znaczne użycie pamięci w sytuacji, która nie powinna tego powodować, natomiast nie są w stanie powiedzieć "przestaw te dwie pętle oraz napisz ten warunek inaczej".
To, co piszę, to dość szablonowe przedstawienie różnic pomiędzy obiema rolami i domyślam się, że niektórzy poczują się urażeni oraz ogłoszą, że przecież znają programistów, którzy sami potrafią zadbać o serwer, a także administratorów, którzy jak najbardziej są w stanie napisać aplikację. I to racja. Dlatego zaraz o tym porozmawiamy.
Czy jedna osoba może pełnić obie role?
Jak zawsze, są specjaliści, którzy potrafią odnaleźć się w obu obszarach - zarówno programują lub przygotowują oprogramowanie, jak i potem je wdrażają oraz utrzymują. Często wspomniani już freelancerzy są całkowicie samodzielni i oferują klientom swoje usługi dotyczące skonfigurowania serwisu na podstawie CMS, a później zadbania o nie na serwerze. A nawet nie tylko na podstawie CMS, ale też samodzielnie napisanej aplikacji. Czy zatem osoby, które nie potrafią pełnić obu funkcji są... wybrakowane? Absolutnie nie, gdyż wszystko zależy od skali.
Każdy programista ma (a przynajmniej powinien mieć) minimalną wiedzę o administracji serwerem, aby zrozumieć drugą stronę. Podobnie dobrze by było, gdyby admini potrafili zrozumieć, dlaczego takie, a nie inne decyzje podjęli programiści. Dzięki temu strony mają dla siebie więcej zrozumienia i szybciej potrafią wypracować rozwiązanie napotkanych problemów. Jeszcze lepiej, gdyby przedyskutowali te kwestie przed rozpoczęciem prac, aby znaleźć ewentualne problemy z usługą, na której planuje się postawić system. Natomiast nie ma co ukrywać, że w przypadku większych aplikacji, skrojonych pod potrzeby klienta, znalezienie kogoś będącego ekspertem w obu dziedzinach to swego rodzaju trafienie na garniec złota na końcu tęczy. O wiele bardziej pasuje tutaj powiedzenie "jeśli coś jest do wszystkiego, to jest do niczego", mimo że może być to obraźliwe dla paru osób.
Specjaliści mający wiedzę i umiejętności pozwalające na programowanie lub administrowanie dużymi systemami muszą te elementy pozyskać. I to nie poprzez przeczytanie miliona książek czy tutoriali, ale praktykę z produkcyjnymi systemami, prawdziwymi potrzebami klientów oraz problemami w działaniu. Niestety - na to potrzeba czasu i zaangażowania. Siłą rzeczy człowiek poznaje ten drugi obszar niejako przy okazji rozwijania się w tym pierwszym, ale nie jest w stanie być ekspertem w obu naraz. Zwłaszcza, że praca administratorów często wymaga zastosowania przygotowanej wcześniej wiedzy w krótkim momencie, nierzadko w ciągu kilku godzin czy nawet minut od zaistnienia potrzeby. I teraz wyobraźcie sobie programistę, który ma szybko postawić firewalla na serwerze i wpisuje w wyszukiwarkę "how to enable firewall on ubuntu", poniewać "coś kiedyś czytał, ale nie jest teraz pewien, a nie chce zepsuć".
Natomiast istnieje rola, która łączy te dwa obszary w bardzo dużych firmach, często zajmujących się swoimi autorskimi projektami, choć nie tylko. Jest to termin pewnie Wam znany - mianowicie chodzi mi o specjalistę DevOps, gdzie "DevOps" (będący metodyką) pochodzi od "development and operations". Nieprzypadkowo też dodałem słowo "specjalista", gdyż chodzi o osobę, która tę metodykę uskutecznia, aczkolwiek często mówi się też po prostu "DevOps". Jest to człowiek będący pomostem pomiędzy zespołem programistów a administratorów w sytuacjach, kiedy wydania (ang. realeses) oprogramowania są bardzo częste, obejmują dużą skalę i siłą rzeczy to wszystko musi być zautomatyzowane. De facto DevOps bardziej kojarzy się z administracją niż z programowaniem, natomiast to nie do końca tak jest - są to osoby, które sterują i wręcz ustalają proces zautomatyzowanej budowy paczek z oprogramowaniem, wersjonowania ich, konfigurują odpowiednie środowisko programistyczne oraz same serwery, korzystając przy tym najczęściej ze skryptów uruchamianych w takich narzędziach jak Ansible, Puppet czy Terraform. Popularyzacja tego obszaru IT wyrosła z uwagi na coraz bardziej skomplikowane oprogramowanie, większe potrzeby skalowania aplikacji, konteneryzację (DevOps może np. tworzyć pliki Dockerfile i rozwiązywać problemy związane z kontenerami, gdyż szybciej się w tym odnajdzie niż programista) oraz zintensyfikowanie stosowania chmur. Dlatego ta rola w mniejszych firmach nie jest aż tak potrzebna jak w większych zespołach, co nie oznacza, że nie może występować.
Czy zawsze firma IT potrzebuje administratora?
Są firmy, które posiadają swój zespół administracyjny, wdrożeniowy czy specjalistów DevOps, ale istnieją też takie, które polegają na zewnętrznych dostawcach i usługodawcach. Najczęściej zależy to od rozmiaru zespołu IT, a także zwyczajnie potrzeb. Nie da się ukryć, że rola administratora na miejscu wzrasta w momencie, kiedy firma tworzy własne oprogramowanie na rynek, często aktualizowane lub projektów IT jest tyle, że - mówiąc obrazowo - nie ma nudy. W przypadku, kiedy okresy wdrożeniowe są od siebie bardzo oddalone lub charakterystyka techniczna aplikacji jest dość prosta, najczęściej korzysta się z outsourcingu.
Natomiast istnieje jeszcze jeden aspekt, o którym należy pamiętać - administratorem nie musi być tylko osoba, która utrzymuje oprogramowanie dla zewnętrznych użytkowników. Ten termin może oznaczać też człowieka, który zarządza wdrożeniami wewnątrz firmy i reaguje w przypadku wystąpienia różnych problemów, np. z siecią. Każdy z nas zna pewnie pojęcie "informatyka w urzędzie" czy "informatyka zakładowego" (pozdrowienia dla Tomka Zielińskiego), który w równym stopniu jak usługami na potrzeby organizacji, odpowiada również za systemy uprawnień, sprzęt, sieć komputerową i jest konsultantem przy wszystkich zakupach informatycznych czynionych przez urząd lub firmę. To też osoba, którą można nazwać administratorem, tylko o innym zakresie odpowiedzialności.
Podsumowanie
Najważniejsze kwestie to potrzeba rozróżnienia ról programisty oraz administratora - to nie są te same typy informatyków i o ile pewne aspekty są wspólne, o tyle usługi zapewniane przez ludzi z obu obszarów są diametralnie różne i nierzadko wykonywane w innym trybie czasowym. Klient musi też rozumieć, że nie wszystko jest w stanie ustalić z programistą bez uczestnictwa ze strony administratora. A w tym wszystkim przewija się jeszcze metodyka DevOps, tak modna (i nie ma co ukrywać - potrzebna) w dzisiejszych czasach.
Pozdrawiam i dziękuję - Jakub Rojek.