Umiejętności praktyczne, których potrzebujesz do rozpoczęcia pracy jako programista cz.1

Kodowanie i wytwarzanie oprogramowania to główne zadania programisty. Bez umiejętności praktycznych pozwalających wykonywać te czynności próżno szukać pracy w tej branży. Od razu więc nasuwa się pytanie, jakich umiejętności potrzeba, aby rozpocząć pracę jako programista? Dla osoby rozpoczynającej swoją przygodę z programowaniem odpowiedź na to pytanie może być trochę przytłaczająca. Wynika to z faktu, że lista jest dość spora i tak na prawdę nie wiadomo od czego zacząć. Postaram się jednak w tym artykule opisać niezbędne umiejętności praktyczne, które będą dla Ciebie najprzydatniejsze na drodze do bycia programistą.

Określenie „Programista”, „Developer” czy „Software Engineer” jest bardzo rozległe i kryje w sobie przeróżne ścieżki zawodowe, zróżnicowane stanowiska i w końcu rozmaite technologie i odmienny zakres obowiązków. Aby być bardziej precyzyjnym skupimy się na konkretnym profilu zawodowym – “Programista .NET”. Postaram się także wyróżnić obszary nad którymi najczęściej pracuje osoba na tym stanowisku.

Platforma

Zacznijmy od platformy programistycznej, którą w naszym przypadku jest .NET Framework (w skrócie .Net). Została ona opracowana przez firmę Microsoft i obejmuje środowisko uruchomieniowe (Common Language Runtime – CLR) oraz biblioteki klas dostarczające standardowej funkcjonalności dla aplikacji. Platforma .Net Framework z racji swojego pochodzenia najpełniej obsługiwana jest przez systemy z rodziny Microsoft Windows. Platforma jest stale rozwijana, dlatego istnieją jej kolejne wersje, które dołączane są do kolejnych wersji systemu Windows.

Co to wszystko oznacza w praktyce? Postaram się wyjaśnić na konkretnym przykładzie. Stworzyłem aplikację, której zadaniem było wyświetlenie na konsoli napisu „Hello World!”. Aplikacja docelowo miała działać na platformie .NET Framework 4.7.1. Po uruchomieniu aplikacji na systemie Windows 10 działanie prezentowało się następująco:

Jednak podczas próby uruchomienia dokładnie tej samej aplikacji na innym komputerze z systemem Windows 10 pojawił się błąd.

Komunikat o błędzie wyraźnie informuje o braku odpowiedniej wersji .NET Framework. Nie jesteśmy w stanie uruchomić aplikacji na systemie Windows, jeżeli nie mamy zainstalowanego .Net’a. To właśnie platforma .Net Framework dostarcza środowisko uruchomieniowe (CLR) dla naszej aplikacji. Samo wyświetlenie okna konsoli z tekstem jest możliwe dzięki jednej z bibliotek klas (System.Console) dostarczanych przez .Net, która reprezentuje standardowe operacje wejścia i wyjścia dla aplikacji konsolowych. Dopiero po instalacji odpowiedniej wersji .NET Framework możliwe było poprawne uruchomienie aplikacji.

Język programowania

Od tego tak na prawdę należałoby zacząć. Od nauki składni języka. Platforma .NET Framework nie jest związana z żadnym konkretnym językiem programowania, a programy mogą być pisane w jednym z wielu języków – na przykład C++/CLI, C#, F#, J#, Delphi 8 dla .Net, Visual Basic .NET. Oczywiście nie trzeba znać ich wszystkich, wystarczy skupić się na języku C#. Jest używany przez zdecydowaną większość programistów tworzących aplikacje na platformę .NET. C# to język wysokiego poziomu, stosunkowo łatwy do odczytania, który ma wiele cech sprawiających, że jego nauka jest relatywnie prosta. Należy porządnie zgłębić wszystko, co jest do zgłębienia w zakresie tego języka programowania.

Biblioteka klas bazowych

Znajomość biblioteki standardowej umożliwia efektywną pracę z kodem źródłowym. Pozwala przyspieszyć i zoptymalizować proces tworzenia aplikacji oraz zapewnia dostęp do różnych funkcji systemu. Oferuje między innymi obsługę zdefiniowanych typów ułatwiających tworzenie interfejsu użytkownika, obsługę baz danych (ADO.NET), komunikacje sieciową (WCF), operacje na plikach XML, programowanie wielowątkowe, równoległe i asynchroniczne, umożliwia zadawanie pytań na obiektach (LINQ), plikowe operacje we/wy oraz serializację obiektów. Nie wszystko będzię potrzebne od samego początku, ale warto przynajmniej wiedzieć, że biblioteka standardowa udostępnia ww. funkcjonalności.

Struktura kodu

Chodzi o pisanie dobrego, czytelnego i zrozumiałego kodu. Od samego początku należy rozwijać w sobie tę umiejętność. Przykładać do tego szczególną uwagę. Pozwala to na zaoszczędzenie sporej ilości czasu, zarówno Twojego, jaki i Twoich współpracowników. Spoglądając na kod, nikt nie lubi zastanawiać się, co autor miał na myśli. Obowiązkową pozycją na ten temat jest książka „Czysty kod. Podręcznik dobrego programisty”, której autorem jest Robert Martin.

Programowanie obiektowe

Programowanie obiektowe jest paradygmatem programowania, który opiera się o tworzenie aplikacji w taki sposób, aby jak najlepiej odzwierciedlać otaczającą nas rzeczywistość oraz aby model danych oddawał sposób postrzegania świata przez człowieka. Aby trochę lepiej zobrazować to podejście, przyjrzyjmy się przykładowi – użytkownik składający zamówienie w sklepie internetowym. Cały proces jest dość uproszczony. Użytkownik loguje się do systemu za pomocą adresu email (jan.kowalski@poczta.pl) oraz hasła (Pwd12345!). Po zalogowaniu się widzi swoje podstawowe dane osobowe, czyli imię (Jan) i nazwisko (Kowalski). Za pomocą formularza dostępnego na stronie składa zamówienie, po czym wylogowuje się z systemu. Zamówienia mogą składać także inni użytkownicy, którzy muszą wykonać dokładnie takie same kroki.

Przełóżmy powyższy przykład na podejście zgodne z programowaniem obiektowym. Zdefiniujmy pewien szablon opisujący użytkownika. Szablon ten nazywamy klasą. Szablon musi opisywać stan: imię, nazwisko, email, hasło oraz zachowania: zaloguj się, złóż zamówienie, wyloguj się. Egzemplarz takiej klasy nazywamy obiektem. W naszym przypadku obiektem jest konkretny użytkownik – Jan Kowalski (login: jankowalski@poczta.pl, hasło: Pwd12345!), który zawiera metody Zaloguj się, Złóż zamówienie, Wyloguj się.

Największym atutem programowania, projektowania oraz analizy obiektowej jest zgodność takiego podejścia z rzeczywistością. Podczas nauki należy zapoznać się między innymi z takimi pojęciami jak klasa, pole, metoda, obiekt, konstruktor, słowa kluczowe new, this, static oraz podstawowymi założeniami paradygmatu obiektowego tj. abstrakcja, hermetyzacja, polimorfizm i dziedziczenie. Trzeba przestudiować obsługę wyjątków oraz wiedzieć czym są interfejsy, delegaty, zdarzenia i wyrażenia lambda. Zagadnień z obszaru programowania obiektowego jest zdecydowanie więcej i prędzej czy później trzeba je zgłębić.

Framework (stack technologiczny)

Poza wybraniem języka (C#) i platformy (.NET Framework) należy opanować jakiś framework, czyli zestaw bibliotek, które wykorzystuje się do tworzenia kodu na konkretną platformę oraz kilka platform. Przykładowo, częścią framework’a .NET jest biblioteka umożliwiająca tworzenie, kopiowanie, usuwanie, przenoszenie i otwieranie pliku. Napisanie odpowiedniego kodu od zera, który realizuje taką funkcjonalność mogłoby być trudne i zająć dużo czasu. Zamiast tego możemy wykorzystać już gotowy kod, dostarczany przez framework. Oprócz framework’ów mamy także stacki technologiczne, czyli kompletne zestawy narzędzi, zazwyczaj zawierające framework, stosowane do tworzenia kompletnych aplikacji.

  • Aplikacje desktopowe

Aplikacje desktopowe (okienkowe) to aplikacje instalowane i użytkowanie na kontrentych komputerach użytkowników. Ich poprawne działanie bardzo często nie wymaga dostępu do internetu. Programy okienkowe mają dostęp do urządzeń komputera, co daje szereg dodatkowych możliwości związanych z realizacją różnych operacji tj. wydruków, kodów kreskowych, kart dostępu itp. Aplikacje desktopowe charakteryzują się przede wszystkim wysokim stopniem niezawodności i bezpieczeństwa, a także wysokim stopniem kompatybilności, dzięki czemu programy współpracują z niestandardowymi urządzeniami takimi jak: kasy fiskalne, urządzenia sterujące, drukarki, urządzenia wskazujące.

Do tworzenia aplikacji desktopowych działających na platformie .NET wykorzystuje się bibliotekę WinForms (Windows Forms), albo framework WPF (Windows Presentation Foundation). Windows Forms to sposób na łatwe tworzenie aplikacji zawierających graficzny interfejs użytkownika w ramach .NET Framework. Aplikacje Windows Forms bazują na zdarzeniach wspieranych przez .NET Framework. W praktyce oznacza to, że w trakcie działania aplikacji czeka ona na wykonanie przez użytkownika czynności, np. pisanie tekstu do pola tekstowego lub kliknięcie przycisku. Obecnie miejsce aplikacji Windows Forms jest zajmowane przez aplikacje WPF. Nie oznacza to jednak, że firmy przestały korzystać z WinForms. WPF integruje interfejs użytkownika, grafikę 2D i 3D, multimedia, dokumenty oraz generowanie/rozpoznawanie mowy. WPF umożliwia definiowanie GUI przy użyciu deklaratywnego języka XAML. Pozwala to na oddzielenie warstwy interfejsu użytkownika od logiki aplikacji. W przypadku projektów opartych na WPF bardzo często stosuje się wzorzec MVVM (Model-View-ViewModel). Zastosowanie wzorca MVVM umożliwia wprowadzenie niezależność logiki od sposobu wyświetlania danych, niezależność kodu od technologii w której wykonana jest warstwa prezentacji, łatwą wykonywalność testów jednostkowych oraz łatwą zamianę widoków.

  • Aplikacje webowe

Programowanie webowe to przede wszystkim tworzenie aplikacji działających w przeglądarce internetowej. Podstawowe technologie do tworzenia interfejsu użytkownika to HTML, CSS oraz JavaScript. Istnieją różne (nowsze) standardy tych technologii np. HTML5, czy CSS3 oraz biblioteki programistyczne ułatwiająca korzystanie z JavaScriptu np. jQuery. Najczęściej wykorzystywaną platformą do budowy aplikacji internetowych jest ASP.NET MVC, która oparta jest na wzorcu Model-View-Controller. Programista webowy musi także rozumieć czym jest API, czyli interfejs programowania aplikacji – specyfikacja określonych poleceń, które jeden program może wysłać do drugiego, w celu wykonania operacji, albo pobrania danych. To absolutne podstawy na temat programowana webowego. Obszarów, które trzeba poznać jest zdecydowanie więcej. Działanie sieci, protokoły komunikacyjne i internetowe, renderowanie po stronie serwera i klienta, dlaczego protokół HTTP jest bezstanowy, wzorzec REST (Representational State Transfer), jak działa cache, bazy danych, ORM (Object-Relational Mapping), RWD (Responsive web design) oraz wiele frameworków JavaScript. Aktualnie jednym z najwydajniejszych sposobów rozwijania aplikacji internetowych jest tworzenie aplikacji w języku TypeScript z wykorzystaniem frameworka Angular. Technologie frontendowe są niezwykle dynamicznie rozwijającym się obszarem, dlatego ciężko nadążyć za nowościami.

  • Aplikacje mobilne

Programowanie mobilne obejmuje tworzenie aplikacji na różnego rodzaju urządzenia mobilne, np. smartfony, smartwatche, tablety. Cały czas najpowszechniejsze jest jednak programowanie aplikacji na telefon. Najpopularniejsze platformy mobilne to Android i iOS. Android jest wspieranym przez Google otwartym systemem, bazującym na jądrze Linuxa. Natomiast iOS tworzony jest przez Apple i działa tylko na konkretnych urządzeniach Apple. Microsoft również wydał system operacyjny dla platform mobilnych – Windows Phone. Jednak udział Microsoft’u w działce mobilnej to pasmo niepowodzeń i błędnych decyzji, które doprowadziły do spektakularnej porażki tej platformy. Decydując się na programowanie mobilne w języku C# należy poznać platformę Xamarin. Środowisko Xamarin pozwala tworzyć natywne aplikacje dla systemu Android, iOS oraz Windows Phone przy użyciu kodu .NET i interfejsów użytkownika specyficznych dla danej platformy. Do programowania aplikacji mobilnych bardzo często wykorzystuje się bibliotekę Xamarin.Forms. Pozwala ona większość kodu odpowiedzialnego za wygląd i logikę współdzielić pomiędzy wszystkimi projektami w ramach jednego rozwiązania. Xamarin Forms pozwala na tworzenie interfejsu użytkownika w XAML’u, który jest „konwertowany” podczas kompilacji na natywne kontrolki każdej z platform.

  • Gry wideo

O programowaniu gier wideo marzył prawie każdy. Kto z nas jako dziecko – czy też już jako dorosły – nie spędzał sporej ilości czasu grając w gry komputerowe. Dla wielu chęć zostania programistą gier wideo była bodźcem do rozpoczęcia nauki programowania. Osobiście nie miałem bezpośredniej styczności z tą branżą, ale wiem, że tworzenie gier komputerowych to niezwykle ciężka i wymagająca praca. Programista gier z pewnością musi posiadać umiejętność tworzenia grafiki, fabuły, modelowania 3D, korzystania z silnika graficznego i wielu innych rzeczy, którą są niezbędna do zbudowania gry. W tym przypadku musisz posiadać mocne teoretyczne podstawy informatyki, więc ciężko będzie znaleźć pracę bez dyplomu. Matematyka to też cenna umiejętność przy programowaniu gier.

Jeśli chcesz wkroczyć w świat tworzenia gier komputerowych za pomocą języka C# to musisz poznać Unity. Unity to zintegrowane środowisko umożliwiające tworzenie trójwymiarowych i dwuwymiarowych gier oraz różnego rodzaju interaktywnych treści, takich jak wizualizacje i animacje komputerowe. Wieloplatformowość rozwiązania, prostota używania, bogate funkcje, możliwość generowania materiałów prezentowanych na różnych urządzeniach oraz obsługa różnych języków skryptowych zadecydowały o niezwykłej popularności Unity i spowodowały, że to jeden z najczęściej wykorzystywanych silników gier komputerowych.

Kontynuacja omawianego tematu w artykule Umiejętności praktyczne, których potrzebujesz do rozpoczęcia pracy jako programista cz.2.

Bądź na bieżąco!

Dziękuję za przeczytanie tego artykułu i mam nadzieję, że spotkamy się jeszcze na moim blogu. Jednocześnie mam do Ciebie wielką prośbę: jeśli cokolwiek co przeczytasz na tym blogu uznasz za wartościowe, to KONIECZNIE mi o tym napisz (w komentarzu, bądź mailowo). Każdy potrzebuje nieco motywacji i znacznie łatwiej będzie mi usiąść do tworzenia kolejnego materiału wiedząc, że Tobie też się to przydaje. Zachęcam Cię do polubienia strony na Facebooku oraz subskrybowania kanału na YouTube.

Polub stronę na Facebooku

Chcesz otrzymywać powiadomienia o nowych artykułach? W takim razie zapraszam Cię do polubienia strony na Facebooku. Miej pewność, że nie przegapisz kolejnych postów!

Subskrybuj kanał na YouTube

Subskrybuj kanał YouTube, na którym znajdziesz praktyczne filmy i tutoriale o programowaniu.