Jakie czynniki wpływają na wybór technologii do projektu IT?
Dagmara Czarnota , 5 maja 2021
Każda technologia ma pewne ograniczenia, dlatego nie warto z niej korzystać w dowolnym projekcie. Narzędzia techniczne należy stosować do celów, do których zostały stworzone. Przykładowo tę samą grę można napisać w różnych językach programowania w tym m.in. w C++, C# i Javie. Mając do wyboru kilka technologii programista wybierze tę, którą lepiej zna i w której dobrze się czuje.
Języki C++ i C# bardzo dobrze sprawdzają się przy tworzeniu gier 3D i tytułów klasy AAA (wysokobudżetowych gier charakteryzujących się świetną jakością i niesamowitą grafiką). Umożliwia tworzenie szybkich i pięknie wyglądających rozwiązań. W przypadku budowania prostszych gier lepszym wyborem może okazać się Python lub JavaScript. Obie technologie są łatwiejsze do nauki od C++ i C# oraz szybciej się w nich koduje. W rezultacie pisanie kodu prostej gry w Pythonie lub JavaScripcie zajmuje mniej czasu.
Już widać, że wybór technologii zależy od budowanego produktu. Poniżej przedstawimy najważniejsze czynniki wpływające na wybór technologii do projektu IT.
Użyteczność
Użyteczność technologii zależy od problemu i celu produktu. Przykładowo do zbudowania aplikacji webowej można wykorzystać Pythona, PHP lub JavaScript. W przypadku gdy celem aplikacji jest rozpoznawanie obiektów, najrozsądniejszym wyborem wydaje się Python posiadający bogate biblioteki związane z obszarem uczenia maszynowego (machine learning). JavaScript może być lepszą opcją w przypadku budowy rozwiązania prezentującego pewne dane w czasie rzeczywistym.
Różne technologie umożliwiają realizację innych projektów, ponieważ dopasowane są pod określone rodzaje rozwiązań technologicznych. Dzięki temu budowanie produktu przebiega sprawnie i szybko. Istnieje możliwość napisania rozwiązania w języku, który nie jest dostosowany do danego typu produktu. Tylko po co to robić? Nie dość, że budowa rozwiązania zajęłaby więcej czasu, to jeszcze produkt prawdopodobnie byłby gorszej jakości i działał wolniej. Dlatego nie warto kombinować, lecz trzeba wybierać technologie zaprojektowane pod budowę konkretnych rozwiązań.
Znajomość technologii
Dany produkt można z łatwością zbudować w kilku technologiach. Jeżeli chcesz w tym samym czasie stworzyć dwie wersje aplikacji mobilnej obsługiwane przez systemy operacyjne Android i iOS, skorzystaj z technologii hybrydowych. Do wyboru masz między innymi takie frameworki jak React Native, Flutter czy też NativeScript. Technologie również między sobą się różnią, jedna posiada więcej bibliotek i jest lepiej wspierana od drugiej, jednak końcowe rozwiązania są do siebie bardzo podobne. Wybór platformy może być podyktowany stopniem jej znajomości. Programiści zbudują rozwiązanie w technologii, którą lepiej znają i w której tworzyli już projekty.
Nie jest to decyzja wynikająca tylko z wygody zespołu programistycznego, ale również z innych czynników takich jak czas i pieniądze. Jeśli zlecisz stworzenie produktu w technologii, z której programiści nie czują się zbyt silni, musisz liczyć się z dodatkowymi godzinami pracy developerów poświęconych wyłącznie na naukę własną obsługi nowych narzędzi. Każda dodatkowa godzina pracy zespołu programistycznego wydłuża czas realizacji projektu i tym samym zwiększa koszty. Mogąc stworzyć rozwiązanie w jednej z dwóch technologii, warto wybrać to narzędzie, które się po prostu lepiej zna.
Popularność
Kolejnym czynnikiem wpływającym na decyzję o wyborze technologii do projektu jest jej popularność, którą rozumie się m.in. przez liczbę programistów korzystających z danego rozwiązania. Im więcej programistów zna konkretną technologię, tym większa tworzy się wokół niego społeczność, która wzajemnie sobie pomaga. Warto podkreślić fakt, że o wiele łatwiej znaleźć i pozyskać specjalistów od popularnej technologii.
Popularne technologie tworzą wokół siebie duże i zaangażowane społeczności. Dzięki temu zmagając się z pewną trudnością, łatwiej znaleźć osobę, która poradziła sobie z podobnym problemem i zechce podzielić się rozwiązaniem. Dodatkowo popularność technologii pozytywnie wpływa na jej rozwój. Część programistów tworzy autorskie, wysokiej jakości biblioteki, które udostępniają pozostałym członkom społeczności.
Każdego roku Stack Overflow publikuje ranking najpopularniejszych technologii stosowanych przez programistów. W 2020 r. najczęściej używanymi językami programowania były JavaScript, HTML/CSS i SQL. Python znalazł się tuż za podium. Porównując rankingi Stack Overflow z różnych lat można łatwo zauważyć, które języki zyskują, a które tracą na znaczeniu. W 2017 r. czołówkę tworzyły JavaScript, SQL i Java. Python znajdował się zaraz za C# na piątym miejscu, a szósta pozycja należała do PHP. W przeciągu zaledwie trzech lat oba języki C# i PHP spadły o dwie lokaty. Taka analiza pozwala również zauważyć języki, które bardzo szybko zyskują nowych zwolenników. Przykładem jest Go, którego społeczność powiększyła się dwukrotnie w przeciągu tych trzech lat.
W ten sposób można również spróbować określić perspektywę trwania technologii w przyszłości. Analizując rankingi Stack Overflow widać, że Objective-C z roku na rok traci na znaczeniu. Przyczyną tego zjawiska jest rozwijanie nowego języka Swift, który ma takie samo przeznaczenie, co wspomniany Objective-C. Oba języki wykorzystywane są do pisania oprogramowania na systemy stosowane w produktach Apple. Sama firma Apple zachęca do korzystania ze Swifta, cały czas dba o jego rozwój i większość swoich rozwiązań buduje w tej właśnie technologii. To wszystko powoduje, że z Objective-C korzysta coraz mniej programistów.
Wsparcie technologii
Wsparcie technologii można rozumieć w dwojaki sposób: jako pomoc oferowana przez społeczność oraz jako wsparcie udzielane bezpośrednio przez twórców technologii. Ten drugi rodzaj pomocy odnosi się głównie do tworzonej dokumentacji. Staranna, dokładna i prawidłowo napisana dokumentacja techniczna pomogła już niejednemu programiście w rozwiązaniu problemu. Taki dokument powinien zawierać przede wszystkim opisy działania poszczególnych bibliotek i zastosowanych algorytmów oraz ukazywać sposób rozmieszczenia i działania poszczególnych komponentów, klas i funkcji. Czasem w dokumentacji znajduje się dodatkowa sekcja FAQs, która jest bardzo przydatna, ponieważ zawiera odpowiedzi na najczęściej zadawane pytania dotyczące technologii i jej użytkowania. Przykładowo w dokumentacji technicznej Pythona sekcja FAQs składa się z kilku podrozdziałów, z których każdy podrozdział określa kategorię zadawanych pytań. W tej sekcji poruszane są kwestie związane m.in. z kodowaniem w Pythonie, dostępnymi bibliotekami i GUI.
Jednak sama dokumentacja techniczna nie jest wystarczająca. Jeśli programista zmaga się z problemem, z którym nie umie sobie poradzić, może zwrócić się z pomocą do społeczności.
Kolejnym czynnikiem wpływającym na wybór technologii do projektu jest jej znajomość i użytkowanie przez wewnętrzny dział IT. Firmy często zlecają budowę produktów technologicznych zewnętrznym dostawcom, jednak sami zamierzają zająć się jego utrzymaniem. Jeśli rozwiązanie zostanie zbudowane w technologii, której pracownicy działu IT nie znają, nie będą w stanie się nią zająć i przedsiębiorstwo będzie zmuszone zatrudnić nowego pracownika znającego tę technologię lub zlecić utrzymanie produktu firmie zewnętrznej, co zwiększy koszty jego utrzymania.
Dojrzałość i stabilność
Dojrzałość i stabilność technologii może być związana z jej wiekiem. Starsze technologie posiadają na ogół większą liczbę bibliotek i frameworków od młodszych. Dodatkowo te narzędzia są zazwyczaj lepszej jakości, gdyż były już niejednokrotnie modyfikowane i ulepszane. Stabilność oznacza, że rozwiązanie posiada ugruntowaną pozycję na rynku i tworzy wokół siebie dużą społeczność dbającą o jej rozwój. Dzięki temu nie trzeba się obawiać, że za parę lat technologia przestanie być wspierana i rozwijana. Młode narzędzia technologiczne nie dość, że posiadają niewiele gotowych bibliotek, to jeszcze ich jakość również często pozostawia wiele do życzenia. Aby nie mieć w przyszłości problemów z dalszym rozwojem lub utrzymaniem produktu, lepiej wybierać dojrzałe i stabilne technologie do projektu.
Skalowalność
Na możliwości skalowalności produktu zwracają szczególną uwagę firmy, które zamierzają w przyszłości go rozwijać. W takim przypadku trzeba się upewnić czy dana technologia pozwala na szybkie i łatwe skalowanie rozwiązania. Budując produkt technologiczny powinno się dobierać narzędzia w taki sposób, aby nie tylko ułatwić obecne prace projektowe, ale również przyszłe. Przed rozpoczęciem projektu warto porozmawiać z klientem na temat skalowalności i dopytać się o to, czego konkretnie ma ona dotyczyć. Czy w przyszłości planuje dodać nowe funkcje do rozwiązania? Skalowalność produktu związana jest również z rozwojem biznesu klienta i planowaną ekspansją. Jeśli przedsiębiorca planuje poszerzyć swoją działalność o nowe rynki, będzie potrzebował kolejnych wersji językowych produktu. Wraz z ekspansją pojawią się również nowi użytkownicy. Aby rozwiązanie cały czas wydajnie działało i szybko obsługiwało zwiększającą się liczbę użytkowników, należy je stale ulepszać. Mając świadomość tego, że klient zamierza rozwijać swój biznes, warto wybrać technologię umożliwiającą w miarę łatwe skalowanie produktu.
Czas i koszt budowy produktu w danej technologii
Koszt budowy produktu w pewnym stopniu zależy od stosowanej technologii i stawki godzinowej jej specjalistów. Z raportu No Fluff Jobs wynika, że w pierwszej połowie 2019 r. najwyższe przeciętnie wynagrodzenie otrzymywali programiści specjalizujący się w technologii Node.js. Zaraz za nimi znajdowali się eksperci od Javy i Pythona. Specjaliści .NET zajmowali piątą pozycję, a eksperci od Angulara siódme miejsce. Wyższa stawka godzinowa pracy programisty zwiększa koszt budowy produktu, ponieważ większość projektów informatycznych rozlicza się w systemie uwzględniającym liczbę przepracowanych godzin przez deweloperów.
Drugą kwestią jest czas tworzenia rozwiązania. W niektórych technologiach pisanie kodu zajmuje mniej czasu niż w innych. Przykładowo ten sam kod zostanie zdecydowanie szybciej napisany w Pythonie niż Javie, ponieważ Python charakteryzuje się zwięzłą i czytelną składnią, co znacznie usprawnia kodowanie, gdyż do uzyskania tego samego efektu, potrzeba mniej kodu. Zwięzła i czytelna składnia nie tylko pozwala na szybsze pisanie kodu, ale także znacznie skraca czas wykonywania czynności związanych z usuwaniem błędów. Krótszy czas potrzebny na zbudowanie produktu w danej technologii może zrównoważyć wyższe wynagrodzenie specjalisty.
Należy pamiętać, że czas i koszt realizacji projektu zależy również od ustalonego harmonogramu i posiadanego budżetu. W niektórych przypadkach te elementy są sztywno określone i nie mogą ulec zmianie. Taka sytuacja ma miejsce w przypadku klienta, który otrzymał grant lub dofinansowanie z funduszy europejskich i musi trzymać się wszystkich ustaleń zawartych w formularzu. Wtedy zespół programistyczny musi dopasować technologię i rozwiązanie do zasobów pieniężnych i czasowych.
Dobranie odpowiedniej technologii do projektu wcale nie jest łatwym wyborem i zależy od kilku czynników m.in. tworzonego produktu, poziomu znajomości technologii przez programistów oraz jej popularności, dojrzałości i stabilności. Programiści dopasują rozwiązanie pod potrzeby klienta, dlatego tak ważne jest, aby podczas rozmowy z zespołem projektowym przekazać wszystkie ważne informacje dotyczące celu budowanego produktu i jego zastosowania, a także planów związanych z jego rozwojem.
Trzeba jednak pamiętać, że technologia sama w sobie nie rozwiązuje problemów. Zdarza się, że podczas realizacji projektu pojawią się problemy z wydajnością. Użycie innych narzędzi technologicznych w projekcie nie sprawi, że te trudności znikną. Aby pozbyć się problemu, trzeba zająć się optymalizacją systemu, a nie myśleć o zmianie technologii.