Cena szkolenia
Opis kursu
Kurs przygotuje Cię do pracy na stanowisku C# Developer, .NET Developer lub każdym innym, gdzie wymagana jest znajomość języka C#. Po zakończeniu szkolenia będziesz w stanie tworzyć lub rozwijać nowoczesne aplikacje w języku C# oraz frameworkach, które z nim współpracują.
Naukę zaczniesz od zrozumienia podstaw języka C# i struktur programistycznych, które w nim występują. Nauczysz się zagadnień związanych z algorytmiką oraz zasad optymalizacji kodu i szybkości działania aplikacji. Wykorzystasz komunikację z bazami danych SQL, NoSQL oraz mechanizmy ORM. Zbudujesz nowoczesne aplikacje, które następnie skonteneryzujesz z wykorzystaniem platformy Docker. Programy przetestujesz z wykorzystaniem bibliotek dedykowanych do testów. To oczywiście nie wszystko. Poznasz wiele innych narzędzi wspomagających pracę z opisanymi wyżej technologiami (np. Git). Twoja wiedza będzie systematycznie poszerzana o dodatkowe materiały dydaktyczne, które znajdziesz na moich kanałach YouTube, TikTok lub otrzymasz w formie cotygodniowych newsletterów.
Opanowanie zagadnień, które pojawią się w szkoleniu, pozwoli Ci dalej rozwijać się w kierunku tworzenia aplikacji webowych, mobilnych oraz gier komputerowych.
W ramach szkolenia rozwiążesz ogromną ilość zadań teoretycznych i praktycznych, które skutecznie przygotują Cię do rozmowy kwalifikacyjnej. Twoja wiedza będzie systematycznie sprawdzana w trakcie naszych spotkań i organizowanych co pewien czas indywidualnych próbnych rozmów kwalifikacyjnych w języku polskim lub angielskim.
Po zakończeniu szkolenia Twoje portfolio powiększy się o kilka lub kilkanaście rozbudowanych projektów, które potwierdzą Twoje praktyczne umiejętności posługiwania się zagadnieniami, pojawiającymi się w kursie. Na każdym etapie szkolenia możesz liczyć na nieograniczoną pomoc mentora. Zagwarantuje to zgodność projektów z przyjętymi założeniami oraz dobrymi praktykami programistycznymi, jak również zmusi Cię do systematycznej pracy nad projektami. Dodatkowo zmierzysz się z zadaniami rozwijania lub modyfikowania istniejących już projektów oraz ich analizy pod kątem wyszukiwania błędów.
Potrzebne aplikacje i narzędzia
Do odbycia szkolenia potrzebujesz komputer lub laptop z zestawem narzędzi do budowania aplikacji pojawiających się w trakcie kursu. Spotkania możemy odbywać również na moim komputerze. Po spotkaniu zawsze otrzymasz wszystkie materiały, które pojawiły się w trakcie spotkania. Potrzebne oprogramowanie szczegółowo opiszę oraz pomogę Ci zainstalować na pierwszym darmowym spotkaniu testowym.
Informacje na temat aplikacji potrzebnych do nawiązania połączenia przekażę w odpowiednim momencie przed rozpoczęciem szkolenia. Dostaniesz wtedy szczegółowy wykaz kolejnych kroków, które należy wykonać w celu przygotowania się do rozpoczęcia kursu.
Umiejętności potrzebne przed
rozpoczęciem kursu
Kurs przeznaczony jest dla osób o różnym stopniu zaawansowania. Możesz do niego przystąpić nawet jeżeli do tej pory nie miałeś nic wspólnego z programowaniem. Jeżeli już pracujesz na podobnym stanowisku, szkolenie również jest dla Ciebie. Celem kursu jest przygotowanie do pierwszej pracy programisty, ale również podnoszenie kwalifikacji osób już pracujących w branży IT. Szkolenie możesz rozpocząć od dowolnego punktu w planie szkolenia. Na początek odbędziemy szczegółową rozmowę kwalifikacyjną w języku polskim lub angielskim. Dzięki niej ocenimy Twój poziom z zakresu wiedzy przed wybranym punktem w planie szkolenia.
Plan szkolenia
- Konfiguracja i uruchomienie środowiska programistycznego
- Omówienie architektury .NET oraz .NET Core
- Wykonywanie kodu w środowisku zarządzanym oraz platforma CLI
- Zmienne
- Stałe
- Typy danych i kategorie typów
- Literały
- Zarządzanie znakami – typ char
- Napisy – przegląd metod typu string
- Interpolacja napisów
- Formatowanie napisów
- Typ System.Text.StringBuilder
- Wyrażenia regularne
- Pobieranie i prezentacja danych
- Formatowanie dwustronne
- Dyrektywa using oraz using static
- Wartości null oraz void
- Słowo kluczowe var
- Typy bezpośrednie i typy referencyjne
- Konwersje pomiędzy typami danych
- Operatory
- Instrukcje sterujące oraz pętle
- Mechanizm pattern matching
- Tablice
- Metody do zarządzania tablicami
- Typ tuple i dekonstrukcja
- Zagadnienia uzupełniające
- Definiowanie metod
- Stos i sterta
- Sposoby przekazywania parametrów do metod
- Pomijanie parametrów wejściowych – wildcards
- Parametry out variables
- Wartości zwracane przez metody
- Zwracanie przez referencję
- Metody z ciałem w postaci wyrażenia
- Metody o zmiennej ilości parametrów
- Parametry opcjonalne
- Przeciążanie metod
- Metody lokalne
- Rekurencja
- Zagadnienia uzupełniające
- Definicja klasy i obiektu
- Referencja do obiektu klasy
- Omówienie założeń enkapsulacji
- Modyfikatory dostępu do składników klasy
- Pola instancji
- Pola tylko do odczytu – modyfikator readonly
- Metody instancji
- Referencja this
- Deklarowanie właściwości
- Właściwości przeznaczone tylko do odczytu lub tylko do zapisu
- Konstruktory
- Inicjatory obiektów
- Finalizatory
- Typy anonimowe
- Składniki statyczne
- Konstruktory statyczne
- Klasy statyczne
- Metody rozszerzające
- Klasy zagnieżdżone
- Klasy i metody częściowe
- Kompozycja
- Klasa System.Object i jej metody
- Zagadnienia uzupełniające
- Omówienie założeń dziedziczenia
- Klasa bazowa i klasa pochodna
- Modyfikatory dostępu w dziedziczeniu
- Konstruktory w dziedziczeniu
- Przesłanianie składowych z klas bazowych
- Polimorfizm
- Metody rozszerzające w dziedziczeniu
- Składniki statyczne w dziedziczeniu
- Rzutowanie między typem bazowym a pochodnym
- Klasy zamknięte – modyfikator sealed
- Modyfikatory virtual oraz new w dziedziczeniu
- Odwołanie do składników klasy bazowej – słowo kluczowe base
- Klasy abstrakcyjne
- Zagadnienia uzupełniające
- Deklaracja interfejsu
- Implementacja interfejsu
- Interfejsy a polimorfizm
- Implementacja z jawnie podawanym interfejsem
- Implementacja bez jawnie podawanego interfejsu
- Dziedziczenie interfejsów
- Metody rozszerzające i interfejsy
- Interfejsy znacznikowe
- Zagadnienia uzupełniające
- Omówienie zasady działania delegatów
- Deklarowanie typu delegata
- Tworzenie instancji delegata
- Metody anonimowe
- Wyrażenia lambda
- Delegaty ogólnego przeznaczenia System.Func oraz System.Action
- Zarządzanie zmiennymi zewnętrznymi wyrażenia lambda
- Delegaty typu multicast i wzorzec obserwator
- Deklarowanie zdarzeń
- Typy generyczne a delegaty
- Zagadnienia uzupełniające
- Algorytmy badające właściwości geometryczne
- Algorytm badające właściwości matematyczne
- Konwersje pomiędzy systemami liczbowymi
- Badanie ciągów danych pod kątem wybranych właściwości
- Sortowanie ciągów danych
- Zastosowanie metody dziel i zwyciężaj
- Wybrane metody numeryczne
- Programowanie zachłanne
- Algorytmy na tekstach
- Wybrane algorytmy kryptograficzne
- Rekurencja
- Przegląd wybranych struktur danych
- Zagadnienia uzupełniające
- Omówienie hierarchii wyjątków
- Sposoby zgłaszania wyjątków
- Sposoby przechwytywania wyjątków
- Ponowne zgłaszanie przechwyconego wyjątku
- Wyjątki w wyrażeniach
- Implementacja własnych klas do obsługi wyjątków
- Dziedziczenie klas wyjątków
- Zwalnianie zasobów z wykorzystaniem instrukcji using
- Dobre praktyki zgłaszania i obsługi wyjątków
- Zagadnienia uzupełniające
- Klasyfikacja wzorców projektowych
- Implementacja wzorców kreacyjnych
- Implementacja wzorców strukturalnych
- Implementacja wzorców czynnościowych
- Zagadnienia uzupełniające
- Omówienie hierarchii kolekcji
- Inicjatory kolekcji
- Interfejs IEnumerable oraz IQueryable
- Standardowe operatory kwerend
- Wyrażenia z kwerendami
- Przegląd wszystkich metod technologii LINQ
- Wzorzec Lazy Evaluation w pracy z kwerendami
- Klauzule let, into, from
- Wzorzec projektowy iterator
- Podstawowe interfejsy w kolekcjach: ICollection, IList, IDictionary
- Podstawowe klasy w kolekcjach: List, Dictionary<K, V>, SortedDictionary<K, V>, SortedList, Stack, Queue, LinkedList
- Indeksery
- Zagadnienia uzupełniające
- Definicja klasy generycznej
- Generyczne interfejsy i struktury
- Reprezentacja typów generycznych w CIL
- Typy Pair oraz Tuple
- Zagnieżdżone typy generyczne
- Ograniczenia typów generycznych
- Metody generyczne
- Kowariancja i kontrawariancja w typach generycznych
- Przechwytywanie informacje o typie w runtime
- Zagadnienia uzupełniające
- Tworzenie, uruchamianie i zarządzanie wątkami
- Blokowanie i usypianie wątków
- Pule wątków
- Wątki aktywne i działające w tle
- Priorytety wątków
- Wyjątki w wielowątkowości
- Współdzielenie zasobów
- Synchronizacja
- Klasa Monitor
- Słowo kluczowe lock
- Pola jako zmienne volatile
- Klasa System.Threading.Interlocked
- Inne typy związane z synchronizacją
- Zadania asynchroniczne
- Wzorzec obsługi asynchroniczności za pomocą zadań
- Instrukcje async oraz await
- Asynchroniczne wyrażenia lambda
- Pętle równoległe
- Klasy kolekcji przetwarzanych równolegle
- Równoległe wykonywanie kwerend LINQ
- Zegary
- Zagadnienia uzupełniające
- Omówienie architektury frameworka Entity Framework
- Zarządzanie bazą danych – podejście code-first
- Zarządzanie bazą danych – podejście database-first
- Budowanie modelu bazy danych – mapowanie tabel
- Praca z migracjami
- Dodawanie nowej tabeli
- Modyfikowanie istniejącej tabeli
- Usuwanie istniejącej tabeli
- Tworzenie relacji pomiędzy tabelami
- Wypełnianie tabel przykładowymi danymi
- Konfiguracja tabel i wprowadzanie ograniczeń z wykorzystaniem DataAnnotations
- Konfiguracja tabel i wprowadzanie ograniczeń z wykorzystaniem FluentAPI
- Pobieranie i przetwarzanie danych z wykorzystaniem technologii LINQ
- Lazy Loading
- Problem Select N + 1
- Eager Loading
- Explicit Loading
- Wykorzystanie wzorców projektowych i typów generycznych w zarządzaniu danymi
- Narzędzia wspomagające pracę z Entity Framework
- Architektura wielowarstwowa
- Implementacja kompletnej aplikacji zarządzającej komunikacją bazodanową z wykorzystaniem Entity Framework
- Zagadnienia uzupełniające
- Dyrektywy preprocesora
- Przestrzenie nazw
- Obsługa zasobów zewnętrznych
- Operator nameof
- Porównanie działania operatorów is oraz as
- Struktury
- Wyliczenia
- Przeciążanie operatorów
- Operatory konwersji
- Implementacja bibliotek
- Refleksje
- Atrybuty
- Omówienie architektury GIT
- Przegląd instrukcji GIT
- Rozgałęzianie i scalanie w GIT
- Aplikacje i wtyczki do pracy z GIT
- Praca ze zdalnym repozytorium
- GitHub Pages
- Zagadnienia uzupełniające
Materiały video
-
C# - WZORZEC PROJEKTOWY STRATEGIA
Przykład programu, w którym implementujemy wzorzec projektowy Strategia.
GitHub: https://github.com/kmprograms/csharp/tree/master/01-strategy
KM Programs: https://km-programs.pl/ -
C# - WZORZEC PROJEKTOWY MOST
Przykład programu, w którym implementujemy wzorzec projektowy Most
GitHub: https://github.com/kmprograms/csharp/tree/master/02-bridge
KM Programs: https://km-programs.pl/ -
C# - WZORZEC PROJEKTOWY STAN
Przykład programu, w którym implementujemy wzorzec projektowy Stan
GitHub: https://github.com/kmprograms/csharp/tree/master/03-state
KM Programs: https://km-programs.pl/ -
C# - WZORZEC PROJEKTOWY OBSERWATOR
Przykład programu, w którym implementujemy wzorzec projektowy Obserwator
GitHub: https://github.com/kmprograms/csharp/tree/master/04-observer
KM Programs: https://km-programs.pl/ -
C# - METODY ROZSZERZAJĄCE
Przykład programu, w którym omawiamy metody rozszerzające.
GitHub: https://github.com/kmprograms/csharp/tree/master/05-extension-methods
KM Programs: https://km-programs.pl/ -
C# - ZARZĄDZANIE CZASEM W FORMACIE UTC
Przykład programu, w którym omawiamy, jak zarządzać czasem w formacie UTC.
GitHub: https://github.com/kmprograms/csharp/tree/master/06-utc
KM Programs: https://km-programs.pl/