Czy C# i platforma .Net wciąż będą dobrym wyborem dla programistów w 2022 roku?
Rok 2020 przyniósł wszystkim bardzo dużo zmian. Podczas gdy inne branże bardzo dotkliwie odczuły skutki pandemii, dla IT otworzyły się całkiem nowe horyzonty. W trakcie lockdownów duża część naszego życia przeniosła się do wirtualnego świata. Na znaczeniu nabrały rozwiązania związane z transformacją cyfrową przedsiębiorstw, digitalizacją danych czy automatyzacją działań. Serwisy streamingowe, e-commerce czy usługi uruchamiane w chmurze zarejestrowały niespotykane dotąd wzrosty przychodów. Stworzyło to nowe możliwości i jeszcze większe zapotrzebowanie na usługi programistyczne.
Piotr Zieliński. FullStack Developer (.NET + Angular) z ponad 10-letnim doświadczeniem. Obecnie pracuje w Inwedo Sp. z o.o., gdzie dodatkowo jest rekruterem technicznym oraz mentorem. Pisze również artykuły na firmowy blog inwedo.com/blog, a od niedawna prowadzi także swojego bloga piotrzielinski.dev.
Wiele firm związanych z branżą technologiczną, w tym wytwarzania oprogramowania, przyjęło zasadę permanentnej pracy zdalnej, co w skrócie oznacza, że możemy teraz pracować z dowolnego miejsca dla dowolnej firmy na świecie. Koronawirus przyniósł jednak zauważalną zmianę ilości ofert pracy dla programistów na początku kariery. Firmy w niepewnych czasach są mniej skłonne do inwestowania w mniej wykwalifikowanych specjalistów, więc większość ofert pracy skupia się na doświadczonych inżynierach. Sprawiło to, że osoby, które chcą wejść do tej branży, muszą bardzo dokładnie przeanalizować rynek pracy i zainwestować w te technologie i języki, które najlepiej rokują na najbliższe lata.
Popularność C# w 2021 roku
W sierpniu 2021 roku serwis stackoverflow.com opublikował swoją coroczną ankietę dla deweloperów. Wnioski płynące z jej wyników stały się przyczynkiem do rozważań, czy C# jest dalej językiem godnym uwagi zarówno dla nowych, jak i doświadczonych programistów.
Źródło: stackoverflow.com Developer Survey 2021
W 2021 roku 29,81 proc. z 58 031 respondentów pracujących w zawodzie programisty wykorzystuje język C#. Gdy porównamy te dane z wynikiem tej samej ankiety za rok 2020 tj. 32.3 proc. przy 47 184 ankietowanych, da się zauważyć tendencję spadkową jego popularności.
Źródło: stackoverflow.com Developer Survey 2020
Ta sama ankieta na rok 2021 dostarcza również ciekawych informacji w szczególności dla nowych developerów.
Źródło: stackoverflow.com Developer Survey 2021
W zestawieniu „Most loved, dreaded” język C# wypada całkiem nieźle. 61,96 proc. programistów wykorzystujących ten język na co dzień jest nim zachwycona. Wątpliwości co do przyszłości języka mogą pojawić się, gdy spojrzymy na chęć poznania go przez nowe osoby.
Źródło: stackoverflow.com Developer Survey 2021
Ankieta sugeruje, że tylko 6,45 proc. programistów zainteresowanych jest rozpoczęciem nauki i pracy z C#. Teoretycznie jest to ponad 3 razy mniej niż w przypadku najpopularniejszych dziś języków, takich jak Python czy JS (którego i tak de facto nie unikniemy, jeśli chcemy tworzyć aplikacje webowe). Warto jednak podkreślić że .NET i C# daje naprawdę duże możliwości i nie należy obawiać się ewentualnego dużego progu wejścia w ten język, co postaram się przedstawić w niniejszym artykule.
Największe wyzwania i trendy w wytwarzaniu oprogramowania na rok 2022
Inżynieria wytwarzania oprogramowania cały czas ewoluuje, aby z jednej strony sprostać oczekiwaniom stawianym przez użytkowników, a z drugiej – dostosować się do aktualnych trendów i technologii. Kiedyś większe znaczenie miały aplikacje desktopowe uruchamiane na komputerze użytkownika. Od dłuższego czasu jednak prym wiodą aplikacje, których można używać za pomocą przeglądarek internetowych, uniezależniając je tym samym od urządzenia, na którym są uruchamiane. Przełomem dla tego rodzaju aplikacji było wprowadzenie języka HTML5, który wyparł Adobe Flash w zakresie bogatego, responsywnego interfejsu. Na pewnym etapie doszło również do odwrócenia tego trendu, ponieważ z narzędziami takimi jak np. Electron można tworzyć aplikacje, korzystając z technologii webowych i uruchamiać je jak aplikacje desktopowe.
Przez ostatnią dekadę przeżyliśmy również niemałą rewolucję w zakresie hostowania aplikacji, które w przypadku aplikacji .NET było dość drogie w porównaniu do php czy node.js. Wcześniej, gdy chcieliśmy udostępnić nasze rozwiązanie szerszemu gronu odbiorców, trzeba było zainwestować sporo pieniędzy w zakup i utrzymanie fizycznych serwerów, na których będzie ono publikowane. Obecnie na znaczeniu zyskały usługi uruchamiane w chmurze publicznej, gdzie za stosunkowo nieduże pieniądze możemy wydzierżawić serwer, uruchomić na nim naszą aplikację i wraz ze wzrostem jej popularności kilkoma kliknięciami myszki dostosować naszą wirtualną infrastrukturę do obciążenia. Szczególne znaczenie ma to dla startupów, które mogą dość szybko i niewielkim kosztem stworzyć rozwiązanie MVP i jak tylko pojawi się zwiększony ruch na stronie, szybko zareagować i bardzo łatwo wyskalować cały serwis. Kolejny krok milowy w zakresie hostowania przyniosła również konteneryzacja, dzięki której technologia użyta do developowania naszego WebApi przestaje mieć tak duże znaczenie.
Poniżej wybrałem kilka trendów i wyzwań, które mają bądź będą miały szczególne znaczenie dla wytwarzania oprogramowania w latach 2021/2022. Oto jak adresuje je język C# oraz platforma .NET.
1. IoT – Internet rzeczy
W dzisiejszych czasach przedrostka SMART można już praktycznie oczekiwać od wszystkich sprzętów, które wspierają jakość naszego życia. Mamy inteligentne domy, sprzęt AGD, oświetlenie, gniazdka elektrycznie czy nawet ubrania. Wszystkie te urządzenia mogą łączyć się z siecią oraz w sieć, tworząc Internet Rzeczy.
Microsoft, wychodząc naprzeciw oczekiwaniom rynku i twórców inteligentnych rozwiązań wprowadził we wrześniu 2019 roku, przy okazji .NET Core 3.0, wsparcie dla GPIO Raspberry Pi i procesorów ARM64 w systemie Linux. Dzięki temu otrzymaliśmy możliwość użycia tego samego frameworka i języka C# do budowania aplikacji, które będą np. zbierać dane z inteligentnych czujników oraz przekazywać je do naszej aplikacji zarządzającej temperaturą czy wilgotnością w domu.
Ponadto mamy do dyspozycji .NET nanoFramework – rozwiązanie oparte o ChibiOS, wspierające kilka różnych typów mikrokontrolerów. Otwiera nam on perspektywę wykorzystania .NET i C# do tworzenia rozwiązań na tzw. urządzenia wbudowane (embedded devices).
2. Progressive web applications
Mimo, że technologia PWA nie jest niczym nowym, a Google promuje tego typu rozwiązania od kilku lat to fakt, że dołączył do niego Microsoft daje nam jasny sygnał, że znajdzie się ona wśród trendów programistycznych na kolejne lata. Progressive Web Application pozwala na uzyskanie przez użytkownika smartfona doświadczenia zbliżonego do pracy z aplikacją natywną przy wykorzystaniu rozwiązań przygotowanych z myślą o przeglądarkach. Aplikacja taka uruchamia się podobnie jak natywna z menu start, ekranu głównego itp. i otwiera nowe okno, które nie przypomina przeglądarki (choć może, jeśli taka konieczność zaistnieje). Pozwala to w założeniu oszczędzić koszty związane z potrzebą tworzenia dwóch różnych rozwiązań dla web i mobile.
Jeśli chcemy stworzyć nową aplikację webową w .NET np. w oparciu o Blazor WebAssembly to od dodania do niej wsparcia dla PWA dzieli nas jedno kliknięcie.
Spis treści
3. Rozwiązania cross-platformowe dla aplikacji mobilnych
Aktualnie na rynku urządzeń mobilnych rządzi dwóch głównych graczy – Android i iOS, którzy razem dzierżą 99 proc. rynku. Gdy chcemy, aby nasze rozwiązanie mogło trafić na obie platformy, mamy właściwie dwie możliwości. Albo zatrudniamy dwa zespoły programistów i dla każdej z platform tworzymy aplikację przy wykorzystaniu specyficznych dla niej języków i narzędzi, albo korzystamy z narzędzi cross-platformowych. Wybór wydaje się oczywisty, choć nie pozbawiony wad. W dobie niepewności i balansowania kosztami produkcji oprogramowania rozwiązania cross-platformowe będą dominować ten rynek.
Wraz z .NET 6 Microsoft wprowadzi na rynek następcę jednego ze swoich cross-platformowych frameworków dla developerów aplikacji mobilnych – Xamarin’a. W założeniu .NET Multi-platform App UI (.NET MAUI) ma pozwolić na tworzenie aplikacji natywnych dla Android, iOS, iPadOS, macOS oraz Windows przy użyciu jednego, wspólnego kodu napisanego w C# i .NET. Warstwa wizualna natomiast implementowana jest w oparciu o język XAML.
4. Uczenie maszynowe (ML)
Sztuczna Inteligencja (AI), bardzo często przedstawiana w literaturze s-f jako główny antagonista ludzkości, zdobywa coraz większą popularność i niezauważalnie przenika w coraz kolejne dziedziny naszego życia. Z jednej strony powoli wypiera człowieka z niektórych zadań, a z drugiej pozwala rozwiązywać problemy, dotychczas niedostępne dla typowych bloków if/else/switch. Niezależnie od tego, czy powinniśmy się bać technologii AI, czy nie, już nie ma przed nią odwrotu. Powinniśmy zatem rozwijać swoje kompetencje w tym zakresie, aby wyróżnić się na rynku pracy i otrzymywać najbardziej intratne propozycje. A jest o co walczyć, bo wg prognoz Forrestera rynek oprogramowania AI osiągnie 37 miliardów USD do 2025 roku.
Źródło: Forrester blog
Microsoft wspiera nas w tym zadaniu dwutorowo, udostępniając usługi uczenia maszynowego, będącego działem AI, za pośrednictwem Azure Machine Learning, ale także bibliotekę Machine learning ML.NET. Biblioteka ta pozwala na wejście w tematykę uczenia maszynowego, poprzez łatwe stworzenie modelu w oparciu o predefiniowane scenariusze, następnie wytrenowanie go z użyciem udostępnionych przez nas danych. Tak przygotowany model możemy wykorzystać w dowolnej aplikacji .NET, np. do prognozowania zapotrzebowania na podzespoły do budowania robotów.
5. Cloud computing
Platformy “chmurowe” dla branży wytwarzania oprogramowania są przełomem porównywalnym do wynalezienia silnika spalinowego w branży transportowej. Zapewniają one niespotykaną wcześniej elastyczność, skalowalność czy dostępność naszych aplikacji. Tworząc nowe API nie musimy się zastanawiać, gdzie będzie ono hostowane i czy będzie tam dostępny np. nasz ulubiony silnik bazy danych. Wszystko to i nie tylko mamy dostępne od ręki, w jednym miejscu i w ramach przewidywanych kosztów.
Najciekawszym trendem ostatnich kilku lat w zakresie Cloud Computing jest definiowanie infrastruktury naszego rozwiązania, częstokroć zbudowanego z wielu współzależnych od siebie serwisów i usług (w tym serverless) poprzez Infrastructure as Code (IaC). Podobnie, gdy pisząc aplikację opisujemy naszą logikę biznesową za pomocą kodu, tak w przypadku IaC definiujemy naszą infrastrukturę za pomocą języka deskryptywnego wspieranego przez daną platformę. Dzięki temu zyskujemy pewność, że przy każdym wydaniu nowej wersji naszej aplikacji zostanie ona zainstalowana na takim samym środowisku, zbudowanym w tym samym procesie, co kod źródłowy. Dzięki temu nasz dział „operations” będzie mógł się zająć optymalizacją kosztów i reagowaniem na incydenty, a nie ręcznym konfigurowaniem infrastruktury.
Programując w języku C# i .NET otrzymujemy wsparcie ze strony Microsoftu, właściciela drugiego co do udziału w rynku dostawcy rozwiązań chmurowych. Nie musimy się jednak ograniczać do jednego dostawcy, ponieważ platforma .NET wspierana jest zarówno w systemach Windows, jak również Linux i MacOS. Ponadto możemy skonfigurować naszą solucję, tak aby była hostowana jako kontener (Docker, Podman, K8, itp.), co w chwili obecnej jest najbardziej uniwersalnym sposobem wdrażania aplikacji i uniezależnia nas od środowiska, na którym ją uruchamiamy.
6. Quantum computing
Komputery kwantowe powoli stają się faktem, a nie tylko obiektem badań fizyki teoretycznej. Należy podkreślić, że sprawdzają się one w rozwiązywaniu określonych problemów algorytmicznych, z którymi komputery klasyczne zasadniczo nie są w stanie sobie poradzić.
Microsoft udostępnia platformę Azure Quantum, jak również język Q# i „Quantum Development Kit”. Dzięki tym trzem elementom możemy tworzyć i uruchamiać programy języka Q# na sprzęcie kwantowym. Możemy również tworzyć biblioteki Q#, które następnie konsumujemy w aplikacji .NET napisanej w języku C#.
C# and .NET wciąż się rozwija
Język C# i platforma .NET mają już prawie 20 lat. Niemniej jednak wciąż się rozwijają i praktycznie co roku wprowadzane są nowe wersje. Jego twórcy starają się, aby narzędzia te były dostępne dla jak najszerszego grona profesjonalistów, a jednocześnie najlepszą inwestycją dla biznesu, który chce dostarczać aplikacje i rozwiązania dla swoich klientów. Na przestrzeni wyżej wspomnianych lat mieliśmy kilka kamieni milowych, wśród których na szczególną uwagę zasługuje wydanie .net core, który stał się frameworkiem wieloplatformowym nieograniczonym już tylko do platformy Windows. Kolejnym przełomem jest .NET 5, który stara się ujednolicić wszystkie funkcje każdego istniejącego frameworka. Dla mnie osobiście na uwagę zasługują zmiany, które skupiają się na optymalizacji wydajności, jak również uzupełnianie języka o rozwiązania, które pozwalają wyrazić tą samą intencję mniejszą ilością kodu.
Inwestować w C#?
W swoim życiu programowałem w różnych językach. Używałem Basic, Pascal, C++, PHP, Visual Basic, LotusScript, PowerShell, JavaScript, TypeScript czy nawet assemblera, ale chyba żaden z nich nie zrobił na mnie takiego wrażenia jak C#. Po studiach planowałem swoją karierę w PHP, ale za namową przyjaciela spróbowałem swoich sił z C# i to z perspektywy lat było strzałem w dziesiątkę. Najbardziej podoba mi się to, że gdy zainwestujemy w niego czas to zyskujemy dostęp do całego spójnego ekosystemu wszystkich rozwiązań Microsoftu, które rozwijają się wraz z trendami w całej branży.
No dobrze, ale możemy sobie zadać pytanie jak ta inwestycja mi się zwróci? Obecnie 7,2 proc. wszystkich ofert pracy dla programistów dotyczy C# i .NET. Możemy liczyć na zarobki w granicach tych widełek: UoP (brutto): 10,2K (junior) – 18,7K (senior), B2B (netto FV): 9,0K (junior) – 18,5K (senior) – dane na podstawie raportu wynagrodzeń IT https://justjoin.it/report.
Biorąc pod uwagę wszystkie powyższe argumenty, z czystym sumieniem mógłbym polecić język C# oraz platformę .NET jako dobrą inwestycję dla osób, które chciałby rozpocząć pracę w branży wytwarzania oprogramowania. Nieważne, czy chcesz stawiać swoje pierwsze kroki w tworzeniu aplikację na telefony, przeglądarki, desktopy czy nawet IoT, .NET jest w stanie zaoferować Ci szeroką gamę rozwiązań, które będą Cię wspierały w tym zadaniu. Parafrazując Tolkiena chciałoby się powiedzieć “One Framework to rule them all”.
Polska programistą stoi
Na koniec chciałbym się podzielić z Wami również ciekawym rezultatem ankiety stackoverflow.com. Wynika z niej że w 2021 roku spośród wszystkich programistów na świecie, którzy oddali w niej głos jesteśmy na 8. miejscu z udziałem 2,16 proc., co w moim odczuciu jest powodem do narodowej dumy.
Źródło: stackoverflow.com Developer Survey 2021
Zdjęcie główne pochodzi z unsplash.com.