Pisz zrozumiały kod w C! Poznaj dobre praktyki i używaj odpowiednich narzędzi!

To szkolenie jest dla CIEBIE, jeżeli:

  • Znasz już podstawy C i masz na koncie pierwsze projekty
  • Kursy C w internecie nie spełniają Twoich oczekiwań
  • Szukasz materiałów po POLSKU
  • Wiesz, że będziesz się dalej rozwijać w tym kierunku
  • Myślisz o pracy jako programista niskopoziomowy
  • Albo już ją masz

Dzięki C dla Zaawansowanych:

  • Zdobędziesz solidną wiedzę przydatną w pracy nad komercyjnymi projektami
  • Poznasz nie tylko teorię, ale przede wszystkim dobre praktyki
  • Ustrzeżesz się typowych błędów i poznasz antywzorce
  • Zwiększysz swą efektywność dzięki odpowiednim narzędziom
  • Wyrobisz sobie intuicję w doborze technik, narzędzi i rozwiązań
  • Otrzymasz kompendium, które będzie Ci towarzyszyć w programistycznej karierze

Jeżeli jesteś doświadczonym programistą pewnie część materiału nie będzie dla Ciebie nowością. Ale na pewno znajdziesz tu elementy, o których nikt inny nie mówi.

Aktualnie zapisy do kursu są zamknięte. Zapisz się na listę oczekujących, aby nie przegapić kolejnego otwarcia.

Zapisuję się na listę oczekujących

Jeżeli po wciśnięciu przycisku nie wyskakuje popup, spróbuj ponownie po wyłączeniu adblocka. Jeżeli problem będzie się powtarzać, albo po zapisaniu nie otrzymasz maila, napisz na kontakt@ucgosu.pl.

Kim jestem?

Nazywam się Maciek Gajdzica. Jestem programistą systemów embedded od 2012 roku. Kod, który pisałem działa na urządzeniach elektronicznych w budynkach, na torach kolejowych, czy w samochodach.

Być może znasz mnie z:

W tym szkoleniu rozwijam dokładniej te same koncepcje, które omawiam na blogu i na streamach. Sprawdź, czy ten przekaz do Ciebie trafia.

Czego możesz się spodziewać?

Skupienie na szczegółach

C pozwala na wiele, ale często wewnątrz dzieje się magia. Wspólnie ją odczarujemy analizując, co się dzieje pod spodem. Ale skupimy się tylko na tym co przydatne, nie będziemy pochylać się nad wyimaginowanymi problemami.

Społeczność

Szkolenie to nie tylko lekcje wideo, ale również grupa na Slacku. Możesz tam umieszczać prace domowe, zadawać pytania i prowadzić dyskusje. Otrzymasz tam pomoc nie tylko ode mnie, ale również innych uczestników. Poznasz osoby o podobnym spojrzeniu na programowanie.

Praktyczne wskazówki

Dowiesz się nie tylko jak coś działa, ale też kiedy tego używać, jakie ma mocne i słabe strony. Poznasz dobre praktyki i typowe zastosowania poszczególnych elementów składni, koncepcji, czy narzędzi.

Skuteczne metody pracy

Wyjdziemy poza sam język C i zajmiemy się całym ekosystemem. Porozmawiamy o przydatnych narzędziach, procesach i technikach ułatwiających codzienną pracę. Zastanowimy się też nad projektowaniem. Zarówno w skali micro na poziomie funkcji, nazw i interfejsów, jak i w skali macro na poziomie architektury całego systemu.

Agenda

Tydzień 1:

Plan działania

1.1 Intro

1.2 Dla kogo jest ten program?

1.3 Plan działania

1.4 Efekt końcowy

1.5 Jak studiować ten kurs?

1.6 Twój instruktor

1.7 Czy warto uczyć się C?

1.8 Typowe błędy podczas nauki C

1.9 Praca domowa

Tydzień 2:

Typy proste

2.1 Intro

2.2 Liczby całkowite

2.3 Liczby zmiennoprzecinkowe

2.4 Typ logiczny - Bool

2.5 Typ znakowy - Char

2.6 Typ wyliczeniowy - Enum

2.7 Jaki typ zmiennej wybrać? - Część 1

2.8 Jaki typ zmiennej wybrać? - Część 2

2.9 Stałe liczbowe

2.10 Inicjalizacja zmiennych

2.11 Praca domowa

Tydzień 3:

Typy złożone

3.1 Intro

3.2 Struktury

3.3 Pola bitowe

3.4 Pola bitowe vs Maski bitowe

3.5 Unie

3.6 Inicjalizacja struktur, unii i pól bitowych

3.7 Wskaźniki - Podstawy

3.8 Wskaźniki - Rozszerzenie

3.9 Wskaźniki - Typowe błędy

3.10 Arytmetyka wskaźników

3.11 Tablice

3.12 Tablice jako argumenty funkcji

3.13 Stringi w C

3.14 Inicjalizacja tablic

3.15 Wskaźniki vs Tablice

3.16 Praca domowa

Tydzień 4:

Przepływ programu

4.1 Intro

4.2 If - Else

4.3 Operator warunkowy (? :)

4.4 Switch - Case

4.5 Pętle

4.6 Goto considered harmful?

4.7 Funkcje

4.8 Wskaźniki na funkcje

4.9 Callbacki i interfejsy

4.10 Mappery

4.11 Funkcje inline

4.12 Typedef

4.13 Praca domowa

Tydzień 5:

Preprocesor

5.1 Intro

5.2 Jak działa preprocesor?

5.3 Dyrektywa include

5.4 Dyrektywa define - Stałe

5.5 Dyrektywa define - Macra

5.6 Kompilacja warunkowa

5.7 Predefiniowane symbole

5.8 Dyrektywy pragma, error i warning

5.9 Operacje na tekście

5.10 Praca domowa

Tydzień 6:

Pozostała składnia

6.1 Intro

6.2 Operatory i ich kolejność

6.3 Rzutowanie jawne i niejawne

6.4 Modyfikator Const

6.5 Modyfikator Volatile

6.6 Modyfikator Restrict

6.7 Widoczność symboli

6.8 Czas życia symboli

6.9 Static i Extern

6.10 Łączenie modyfikatorów

6.11 Stos

6.12 Dynamiczna alokacja pamięci

6.13 Undefined behavior

6.14 Praca domowa

Tydzień 7:

Czysty kod

7.1 Intro

7.2 Jak kod może wprowadzać w błąd?

7.3 Jak pisać czysty kod?

7.4 Poziomy czytelności kodu

7.5 Jak wybierać nazwy?

7.6 Czytelność każdej linijki kodu

7.7 Jak pisać dobre funkcje?

7.8 Komentarze

7.9 Dokumentacja w kodzie

7.10 Formatowanie kodu

7.11 Obsługa błędów

7.12 Zasady w projekcie

7.13 Praca domowa

Tydzień 8:

Kompilator i linker

8.1 Intro

8.2 Co się dzieje podczas kompilacji?

8.3 Pliki tworzone podczas kompilacji

8.4 Flagi kompilacji

8.5 Skrypty linkera

8.6 Co się dzieje przed funkcją main?

8.7 Rozszerzenia kompilatora

8.8 Standardy C

8.9 Biblioteki prekompilowane

8.10 Kompilacja inkrementalna

8.11 Skrypty makefile

8.12 Jak skracać czas kompilacji?

8.13 Co znajdziemy w naszym toolchainie?

8.14 Praca domowa

Tydzień 9:

Biblioteka standardowa i asembler

9.1 Intro

9.2 Biblioteka standardowa C

9.3 Biblioteka stdlib.h

9.4 Biblioteka stdio.h

9.5 Biblioteka string.h

9.6 Inne przydatne headery

9.7 Syscalls – interfejs między biblioteką C a systemem

9.8 Jak działa procesor?

9.9 Podstawy asemblera

9.10 Łączenie asemblera z C

9.11 Łączenie C z C++

9.12 Praca domowa

Tydzień 10:

Optymalizacja

10.1 Intro

10.2 Mity o optymalizacji

10.3 Optymalizacja vs dobra praktyka

10.4 Jak mierzyć wydajność

10.5 Kiedy optymalizować?

10.6 Wrogowie wydajności – złożoność obliczeniowa

10.7 Wrogowie wydajności – oczekiwanie na zasoby

10.8 Kiedy wiemy więcej niż kompilator

10.9 Mikrooptymalizacje

10.10 Optymalizacja z wykorzystaniem tablic

10.11 Praca domowa

Tydzień 11:

Projekt wysokiego poziomu

11.1 Intro

11.2 Wizualizacja projektu całego systemu

11.3 Podział na warstwy

11.4 Elementy aplikacji – logika, scenariusze, infrastruktura

11.5 Interfejsy

11.6 Jak odcinać się od cudzego bałaganu?

11.7 Zależności

11.8 Wzorce projektowe

11.9 Na jakiej części systemu najbardziej się skupić?

11.10 Architektura a testy

11.11 Czytelność projektu

11.12 Ewolucja architektury

11.13 Praca domowa

Tydzień 12:

Narzędzia i procesy

12.1 Intro

12.2 System kontroli wersji

12.3 Continuous Integration

12.4 Test Driven Development

12.5 Code Review

12.6 Dokumentacja

12.7 Narzędzia do analizy kodu

12.8 W czym pisać kod?

12.9 Debugowanie

12.10 Jak wprowadzać usprawnienia?

12.11 Praca domowa

Tydzień 13:

Co dalej?

13.1 Intro

13.2 Co dalej? - Inne języki programowania

13.3 Co dalej? - Hardware

13.4 Co dalej? - Test Driven Development

13.5 Co dalej? - Projektowanie i Architektura Systemów

13.6 Co dalej? - Metody Prowadzenia Projektów

13.7 Co dalej? - Dzielenie się wiedzą

13.8 Praca domowa

Aktualnie zapisy do kursu są zamknięte. Zapisz się na listę oczekujących, aby nie przegapić kolejnego otwarcia.

Jeżeli po wciśnięciu przycisku nie wyskakuje popup, spróbuj ponownie po wyłączeniu adblocka. Jeżeli problem będzie się powtarzać, albo po zapisaniu nie otrzymasz maila, napisz na kontakt@ucgosu.pl.

Kontakt

Jeżeli masz jakiekolwiek pytania - pisz na kontakt@ucgosu.pl