Zawód programisty od kilku lat owiewają liczne legendy, mity i plotki. Wśród nich są tematy zarobków, zakresu zadań, używanych technologii, czasu potrzebnego na przygotowanie do zawodu czy sposobów nauki programowania.
Postanowiliśmy odczarować tę profesję i wspólnie z serwisem Antyweb zorganizowaliśmy akcję „Miesiąc Programowania”. Przez cały miesiąc będziemy publikować wysokiej jakości materiały skierowanie do programistów oraz wszystkich osób, które chciałyby rozpocząć swoją przygodę z programowaniem.
fot. unsplash.com
Jednocześnie chcemy żeby nowe wersje pojawiały się jeszcze szybciej i były jeszcze bardziej funkcjonalne. Rzadko kiedy zastanawiamy się, ile pracy oraz jaka ilość osób pracuje codziennie, żeby taka aplikacja mogła w ogóle istnieć, a co dopiero działać bezproblemowo na różnego rodzaju urządzeniach, dbając w tym samym czasie o bezpieczeństwo naszej korespondencji.
Czasy kiedy aplikacje tworzone były przez jednego programistę, przy użyciu prostego edytora tekstu, już dawno minęły. Dzisiejsi developerzy nie wyobrażają sobie dnia bez tak zwanych narzędzi programistycznych (z ang. software development tools).
Przez narzędzia programistyczne rozumiem każdy program komputerowy (czy to w formie aplikacji z graficznym interfejsem użytkownika czy też z interfejsem linii komend) używany do tworzenia, projektowania, debugowania czy zarządzania tworzonym oprogramowaniem.
Oczywiście dla każdej technologii / języka programowania zestaw tych narzędzi będzie się prawdopodobnie różnił. W trosce o kompatybilność
pracy członków zespołu, firmy narzucają programistom pewien zbiór zalecanych narzędzi. Kolejnym aspektem wpływającym na to z jakimi narzędziami będziemy mieć do czynienia jest r ozmiar projektu – w większych projektach poszczególne osoby odpowiedzialne są tylko za wybraną cześć developmentu aplikacji, co tym samym zmniejsza ilość potrzebnych narzędzi do codziennej pracy (nie jest to jednak reguła).
W mniejszych projektach całość procesu tworzenia oprogramowania spada na barki jednej czy dwóch osób, zmuszając je do znajomości znacznie większej ilości narzędzi, celem usprawnienia własnej pracy.
Ilość dostępnych tooli może przyprawić o zawrót głowy młodego adepta programowania. Warto wybierać najbardziej popularne narzędzia, ze względu na ich stały support i rozwój oraz sporą ilość pomocnych materiałów znajdujących się w sieci. Same narzędzia developerskie możemy podzielić na te, które są w zasadzie niezbędne do codziennej pracy oraz takie, które w znacznym stopniu są w stanie ułatwić, usprawnić, poprawić jakość a co ważniejsze dla biznesu przyspieszyć tworzenie oprogramowania. Najłatwiej jednak będzie nam pogrupować je ze względu na pełnioną funkcję.
1. Edytory kodu źródłowego ( source code editors)
Są to programy zaprojektowane specjalnie do tworzenia i edycji kodu źródłowego aplikacji. W nich programiści spędzają większość swojego czasu (mocno generalizując ze względu na ogólność tego artykułu). Nic nie stoi na przeszkodzie, by kod był tworzony nawet w najprostszym edytorze tekstu dostępnym w większości nowoczesnych systemów operacyjnych.
Jednak nie są one przystosowane stricte do tego zadania, co znacząco utrudnia/spowalnia pracę. Dostępne obecnie edytory kodu źródłowego wspierają wybrane języki programowania, podpowiadając poprawną składnię języka, kolorując kod, by był bardziej zrozumiały oraz zapewniając lepsze formatowanie.
2. Assemblery, kompilatory, linkery i interpretery (assemblers, compilers, linkers and interpreters)
W bardzo dużym skrócie jest to oprogramowanie, które tłumaczy i optymalizuje kod napisany przez programistę (najczęściej kodu wysokiej abstrakcji) na taki, który jest zrozumiały i uruchomiony później przez komputer. Narzędziem odwrotnym jest dekompilator (decompiler). Są to jedne z bardziej niezbędnych narzędzi.
3. Debugger to… program do debugowania
Pomaga on w procesie znajdowania i redukowania błędów logicznych (tak zwanych bugów) w tworzonym oprogramowaniu. Program ten uruchamiany jest równolegle z tworzoną aplikacją i pozwala programiście między innymi na zatrzymanie aplikacji w dowolnym momencie (manualnie lub w skutek wystąpienia zdefiniowanego wcześniej warunku) i inspekcje jej obecnego stanu w pamięci komputera. Niezwykle przydatne narzędzie posiadające tonę możliwości. Opanowanie jednak jego obsługi w bardzo zaawansowanym stopniu nie jest jednak zadaniem trywialnym.
4. Systemy do kontroli wersji (version/revision control system)
Najpopularniejszym obecnie takim systemem jest chyba Git – zwłaszcza w mniejszych firmach i projektach ze względu na jego rozproszoną architekturę i łatwość użycia. Istnieją bardziej scentralizowane jak np. CVS czy Subversion – te wykorzystują raczej większe/starsze korporacje. Ich głównym zadaniem jest śledzenie zmian dokonywanych na kodzie źródłowym oraz pomoc w integracji naniesionych zmian przez poszczególnych programistów.
5. Continous Integration i Continous Deployment
Te narzędzia często wrzucane są do jednego worka, ze względu na ich podobny sposób integracji oraz dobrą logikę łączenia ze sobą. Spełniają one jednak oddzielne funkcje. Pierwsze z nich służą do ciągłego automatycznego sprawdzania poprawności dodanego/edytowanego kodu do naszego repozytorium, poprzez uruchomienie testów automatycznych sprawdzających poprawność logiki kodu w połączeniu z resztą systemu. Systemy continous deployment mają za zadanie w zdefiniowanych warunkach automatycznie zbudować wersję testową/produkcyjną aplikacji i dostarczyć ją do określonej grupy odbiorców określonym kanałem dystrybucji. Narzędzia takie łączą się często z zewnętrznymi serwisami zarządzającymi dystrybucją, użytkownikami aplikacji, czy systemami jej późniejszego nadzoru, czyli np. tak zwanymi Bug tracking systems, które zbierają informacji o pojawiających się błędach w aplikacji. Są to bardzo pomocne systemy, gdyż bardzo szybko można wychwycić w jakich miejscach oprogramowania najczęściej pojawiają się błędy i określić gdzie programiści powinni ich szukać, jeśli już wystąpią.
6. Narzędzia do analizy kodu źródłowego
Zwykło się mówić, że nie ma oprogramowania bez błędów. Fakt ten przestaje dziwić, jeśli tylko uświadomimy sobie jak skomplikowany jest proces jego tworzenia i jak niewiele trzeba, by taki błąd powstał. Programiści próbują walczyć z tymi problemami budując kolejne to narzędzia pozwalające zawczasu je wychwycić i poprawiać.
Narzędzia do analizy kodu mogą być statyczne (działać jeszcze w edytorze kodu uwidaczniając potencjalne problemy jakie z nim mogą wystąpić) lub dynamiczne (analizują kod w trakcie działania aplikacji). Poza tym istnieje cała masa narzędzi do inspekcji czy to użycia zasobów (procesora, pamięci, baterii) czy szybkości działania aplikacji, dzięki którym developerzy mogą optymalizować działanie tworzonego przez nich oprogramowania lub doszukiwać się występujących problemów.
7. Narzędzia pomocy projektowania aplikacji (Unified Modeling Language Tools – UML)
Nie samym kodem developer żyje. Etap kodowania zwykle powinna poprzedzać faza projektowania / tworzenia architektury. W tym właśnie celu używa się UML – jest to swojego rodzaju język esperanto dla developerów, zrozumiały niezależnie od technologii, w której tworzone jest oprogramowanie. Istnieje wiele narzędzi do budowy diagramów w tym języku, a nawet takie, które automatycznie zaprojektowane diagramy tłumaczą na kod źródłowy aplikacji.
Ponieważ obecne systemy już w 99% są systemami z interfejsem graficznym, spora część pracy to budowa i projektowanie tych interfejsów. Projekty tworzone przez grafików w jakiś sposób muszą zostać wdrożone przez programistów. Aby ułatwić ten proces istnieje szereg narzędzi, w których graficy tworzą swoją wizje wyglądu aplikacji, a developerzy w prosty sposób eksportują assety, które potem osadzają w tworzonej aplikacji.
8. Zintegrowane środowiska programistyczne
Cały czas mówimy o oddzielnych narzędziach. Warto więc wspomnieć, że istnieją programy, które agregują w sobie wiele narzędzi, celem jeszcze większego ułatwienia i optymalizacji pracy. Takie agregaty noszą nazwę Zintegrowanych środowisk programistycznych (i ntegrated development environment – IDE) . Mogą one łączyć w sobie od kilku do nawet kilkuset różnych narzędzi programistycznych w jednym miejscu. Aby ukazać skalę ilości dostępnych narzędzi zachęcam do zapoznania się z listą porównawczą wybranych IDE
Dobrego programistę łatwo poznać po tym, że jeśli przyjdzie mu się zmagać z tym samym problemem więcej niż raz, będzie się starał zoptymalizować ten proces, choćby przy pomocy prostego skryptu automatyzacyjnego (który też jest już w pewnym sensie narzędziem developerskim!).
Kilka dekad i miliony programistów na całym świecie przyczyniły się do tego, że dziś przeciętny programista będzie miał problem ze zliczeniem używanych narzędzi na palcach dwóch rąk. Czy to źle? Oczywiście, że nie!
Wszystkie te narzędzia przyczyniają się do tego, by pisanie aplikacji było łatwiejsze i przyjemniejsze, a tworzone produkty bezpieczniejsze, stabilniejsze i ładniejsze.
—
Bartłomiej Trzciński
CTO Untitled Kingdom
Absolwent Informatyki Stosowanej na Wydziale Elektrotechniki, Automatyki, Informatyki i Elektroniki AGH. Podczas studiów pełnił funkcję przewodniczącego Koła Naukowego. Wtedy też rozpoczął pracę jako programista w Untitled Kingdom, gdzie od 2012r. pełni funkcję CTO. W ramach pracy zajmuje się m.in rozwojem Elvie, rozpoznawalnego na całym świecie produktu IoT. Dwukrotny uczestnik konferencji Apple WWDC, fascynat nowych technologii i sportów motorowych.