Rectangle43271305Programowanie z GÓrskim:

Junior Python Developer

Bycie programistą 40k jest możliwe, tu znajdziesz pierwsze kroki i historię jak ja tego dokonałem w 5 lat. Ta książka to nietypowy podręcznik dla osób chcących zgłębić tajniki Pythona i tego, jak zdobyć pierwszą pracę w IT jako junior, samouk. To 256 stron wypełnionych wiedzą i doświadczeniem.
Spełnij swoje plany, to tylko64 zł
Tak, chcę wkroczyć na drogę do #programista40k i kupuję e-booka
Po zakupie otrzymasz ebooka w formacie PDF na wskazanego mejla.
Wersja papierowa ukaże się w około końca Q2 2023, dla osób kupujących e-booka, przewidziana będzie zniżka na wersję papierową.
image

Postaw swoje pierwsze kroki na drodze do #programista40k

Seria programowanie z górskim
Dzięki tej książce:
Dogłębnie poznasz podstawy programowania w Pythonie
Postawisz swoje pierwsze kroki na drodze do WCALE-NIE-MITYCZNEGO #programista40k
Dowiesz się jak wygląda praca w prawdziwym świecie IT
Poznasz narzędzia tam wykorzystywane
Dowiesz się nieco o procesach rekrutacyjnych i umiejętnościach miękkich z perspektywy osoby prowadzącej rekrutacje
Sprawdzisz swoje umiejętności w praktycznych zadaniach prosto z procesów rekrutacyjnych

To idealna książka dla początkujących, którzy chcą zdobyć mocne podstawy programowania w języku Python i zbudować solidne fundamenty swojej kariery.

To niezbędna pozycja dla każdego, kto chce rozpocząć swoją przygodę z programowaniem na poważnie i zdobyć cenne umiejętności, które pozwolą mu na rozwijanie swoich projektów oraz zdobycie atrakcyjnej pracy jako Junior Python Developer. Jest to pozycja nietypowa, bo pokrywająca obszary często pomijane w innych pozycjach, napisana w praktycznym stylu.
Autor - Olaf grski Górski - to osoba z ponad 5. letnim doświadczeniem w pracy jako programista, osoba, która prowadziła swój własny Software House, której nieobce jest dzielenie się wiedzą. Od 6. lat prowadzi bloga - grski.pl, mentoruje ludzi, pomagając wielu znaleźć ich pierwszą pracę w IT i rozwinąć skrzydła.
Pytania? Wątpliwości?
olaf@juniorpythondeveloper.pl
A Tutaj znajdziesz próbkę jednego z rozdziałów książki.

Brak wątpliwości? Kup już teraz. 

Spis treści:
Wstęp 12
1.1 O co tutaj chodzi? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12
1.2 Czyli w skrócie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.3 Podziękowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 14
1.4 Dedykacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 17
2 Kilka słów do piratów i o prawach autorskich 18
3 O autorze 19
3.1 Górski, czyli inteligentny zwierz lądowy . . . . . . . . . . . . . . . . . . . 19
3.2 Obecnie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19
3.3 Łatwo to nie będzie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 20
3.4 Czyli tak reasumując . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 21
4 Wybór języka 22
4.1 Język niezbędny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.1.1 Materiały . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22
4.1.2 Komunikacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.1.3 Samo programowanie . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.1.4 Wyjątki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.2 Jak się za to zabrać? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 23
4.2.1 No, to jak? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 24
4.2.2 Jak zatem powinno to wyglądać, panie mądralo? . . . . . . . . . . 24
4.3 Implementacja tego w praktyce . . . . . . . . . . . . . . . . . . . . . . . . 25
4.3.1 Tłumaczenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.3.2 Nauka słówek/fraz . . . . . . . . . . . . . . . . . . . . . . . . . . . 25
4.3.3 Słuchanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.3.4 Mówienie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 26
4.3.5 Czytanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.3.6 DeepL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
4.4 Podsumowując . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 27
5 Python, o co chodzi? 28
5.1 Python – o co chodzi? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.2 Jak korzystać z tej książki . . . . . . . . . . . . . . . . . . . . . . . . . . . 28
5.3 Część interaktywna . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.4 Python 2 – Python 3? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29
5.5 Krótki opis długiej historii Pythona . . . . . . . . . . . . . . . . . . . . . 29
5.6 Abdykacja Guido . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 30
5.7 Wężowe cele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 32
5.8 Zalety Pythona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.8.1 Ekspresywność . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 33
5.8.2 Prostota . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
5.8.3 Python językiem dynamicznie typowanym . . . . . . . . . . . . . . 36
5.8.4 Społeczność . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 37
5.8.5 Mnogość zastosowań . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.8.6 Czytelność . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 38
5.8.7 Automatyczne zarządzanie pamięcią . . . . . . . . . . . . . . . . . 39
5.8.8 Wspieranie różnych paradygmatów programowania . . . . . . . . . 40
5.8.9 Wiele wspieranych platform . . . . . . . . . . . . . . . . . . . . . . 40
5.8.10 Dojrzałość . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
5.8.11 Prostota w integracji z innymi językami . . . . . . . . . . . . . . . 40
5.8.12 Szybkość tworzenia kodu . . . . . . . . . . . . . . . . . . . . . . . 41
5.9 Wady Pythona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 41
5.9.1 Python językiem dynamicznie typowanym . . . . . . . . . . . . . . 41
5.9.2 Wydajność . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
5.9.3 GIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
5.9.4 Wysoka ekspresywność . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.9.5 Python nie istnieje w świecie mobile . . . . . . . . . . . . . . . . . 44
5.9.6 Zbytnia wygoda . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.9.7 Tyle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44
5.10 Kto używa Pythona? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 45
5.11 Python w porównianiu z. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.11.1 Javą/C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 46
5.11.2 Perlem . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.11.3 C . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.12 Alternatywne implementacje . . . . . . . . . . . . . . . . . . . . . . . . . . 47
5.12.1 Stackless Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.12.2 Cython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.12.3 PyPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
5.12.4 IronPython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.12.5 Jython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.12.6 Brython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.12.7 MicroPython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.12.8 CLPython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49
5.12.9 TinyPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.13 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
5.14 Pytania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 50
6 Ustawiamy środowisko 51
6.1 W czym pisać kod na początku? . . . . . . . . . . . . . . . . . . . . . . . 51
6.1.1 IDE? Edytor tekstu? . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.1.2 Podstawy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51
6.1.3 Jak to u mnie wyglądało . . . . . . . . . . . . . . . . . . . . . . . . 52
6.2 Windows?! Linux?! MacOX?! Co wybrać? . . . . . . . . . . . . . . . . . . 53
6.2.1 Instalacja potrzebnych nam rzeczy za pomocą choco . . . . . . . . 54
6.3 Instalacja na Linux/macOS . . . . . . . . . . . . . . . . . . . . . . . . . . 55
6.4 Przechodzimy do programowania! Nareszcie! . . . . . . . . . . . . . . . . 55
6.5 Czterej jeźdźcy konsoli . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
7 Witaj, Świecie! 57
7.1 Wypisujemy tekst na ekran . . . . . . . . . . . . . . . . . . . . . . . . . . 57
7.2 Język binarny – jedyne, co rozumie komputer . . . . . . . . . . . . . . . . 60
7.3 Jak komputer widzi litery – system binarny . . . . . . . . . . . . . . . . . 61
7.4 Kodowanie znaków – ASCII . . . . . . . . . . . . . . . . . . . . . . . . . . 62
7.5 I wtedy UNICODE I UTF-8 wchodzą całe na biało . . . . . . . . . . . . . 64
7.6 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
7.7 Zadania i pytania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
7.8 Odpowiedzi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67
8 Zmienne, wprowadzenie 69
8.1 Zapamiętywanie wartości . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
8.2 Nazwy zmiennych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69
8.3 No po co mi to wszystko? . . . . . . . . . . . . . . . . . . . . . . . . . . . 71
8.4 Znowu trochę teorii . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72
8.5 Heksadecymalne liczby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 73
8.6 Kiedy przestać czytać? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74
8.7 Wszystko fajnie, ale w Pythonie inaczej . . . . . . . . . . . . . . . . . . . 77
8.8 Inna inoszość . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
8.9 Zarządzanie pamięcią . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 78
8.10 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 79
8.11 Zadania i pytania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
8.12 Odpowiedzi . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 80
9 Typy danych 82
9.1 Liczby . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 82
9.1.1 Krótka charakterystyka . . . . . . . . . . . . . . . . . . . . . . . . 82
9.1.2 Liczby całkowite . . . . . . . . . . . . . . . . . . . . . . . . . . . . 83
9.1.3 Przykładowy sposób reprezentacji liczb ujemnych . . . . . . . . . . 83
9.1.4 Liczby zmiennoprzecinkowe i niedokładność ich reprezentacji . . . 84
9.1.5 Liczby złożone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 86
9.1.6 Operacje na liczbach . . . . . . . . . . . . . . . . . . . . . . . . . . 86
9.1.7 Konwersje liczbowe . . . . . . . . . . . . . . . . . . . . . . . . . . . 87
9.1.8 Przykłady podstawowych operacji na liczbach . . . . . . . . . . . . 89
9.2 Łańcuch znaków . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 90
9.2.1 Krótka charakterystyka . . . . . . . . . . . . . . . . . . . . . . . . 90
9.2.2 Pojedyncze znaki . . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
9.2.3 Zmienne w tekście . . . . . . . . . . . . . . . . . . . . . . . . . . . 92
9.2.4 Używanie zmiennych w tekście - wydajność . . . . . . . . . . . . . 92
9.2.5 Przykłady podstawowych operacji na stringach . . . . . . . . . . . 95
9.3 Bajty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
9.3.1 Krótka charakterystyka . . . . . . . . . . . . . . . . . . . . . . . . 96
9.4 Typ logiczny/Boolowski . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96
9.4.1 Krótka charakterystyka . . . . . . . . . . . . . . . . . . . . . . . . 96
9.4.2 Wartości prawdziwe vs wartości fałszywe . . . . . . . . . . . . . . . 97
9.4.3 Przykłady podstawowych operacji na typie boolowskim . . . . . . 97
9.5 Listy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97
9.5.1 Krótka charakterystyka . . . . . . . . . . . . . . . . . . . . . . . . 97
9.5.2 Lista od strony niskopoziomowej . . . . . . . . . . . . . . . . . . . 98
9.5.3 Referencje i wartości . . . . . . . . . . . . . . . . . . . . . . . . . . 98
9.5.4 Dynamiczny rozmiar list . . . . . . . . . . . . . . . . . . . . . . . . 99
9.5.5 Alokowanie ponad potrzeby - chciwy i przebiegły wąż . . . . . . . 99
9.5.6 Dostęp do elementów listy . . . . . . . . . . . . . . . . . . . . . . . 99
9.5.7 Negatywne indeksy . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
9.5.8 Cięcie list . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 100
9.5.9 Dlaczego indeksujemy od zera . . . . . . . . . . . . . . . . . . . . . 102
9.5.10 Jakby to wyglądało, gdybyśmy indeksowali od 1? . . . . . . . . . . 104
9.5.11 Przykłady podstawowych operacji na listach . . . . . . . . . . . . 104
9.6 Krotki/Tuple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 104
9.6.1 Krótka charakterystyka . . . . . . . . . . . . . . . . . . . . . . . . 104
9.6.2 Wydajna bestia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
9.6.3 Przykłady podstawowych operacji na krotkach . . . . . . . . . . . 105
9.7 Słowniki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
9.7.1 Krótka charakterystyka . . . . . . . . . . . . . . . . . . . . . . . . 105
9.7.2 Jak przebiega proces dodawania elementów do dicta? . . . . . . . . 106
9.7.3 Kolizja hashy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
9.7.4 Co może być kluczem? . . . . . . . . . . . . . . . . . . . . . . . . . 107
9.7.5 Pass by value & Pass by reference . . . . . . . . . . . . . . . . . . 107
9.7.6 Kopia płytka i kopia głęboka a klucze w słowniku . . . . . . . . . 109
9.7.7 dict.values() keys() items() . . . . . . . . . . . . . . . . . . . . . . 109
9.7.8 Przykłady podstawowych operacji na słownikach . . . . . . . . . . 109
9.8 Zbiory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 110
9.8.1 Krótka charakterystyka . . . . . . . . . . . . . . . . . . . . . . . . 110
9.8.2 Przeszukanie szybsze niż na warszawskiej Woli . . . . . . . . . . . 110
9.8.3 Przykłady podstawowych operacji na zbiorach . . . . . . . . . . . 111
9.9 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 111
9.10 Pytania i zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 112
10 Pętle i iteracja 113
10.1 Pętla krokowa . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
10.1.1 Krótka charakterystyka . . . . . . . . . . . . . . . . . . . . . . . . 113
10.1.2 Obiekt iterowalny . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
10.2 Zwykła pętla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
10.2.1 Krótka charakterystyka . . . . . . . . . . . . . . . . . . . . . . . . 115
10.2.2 Przykłady użycia pętli . . . . . . . . . . . . . . . . . . . . . . . . . 115
10.3 Składanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
10.4 Generatory . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 116
10.5 Walrus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117
10.6 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
10.7 Pytania i zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
11 Funkcje 119
11.1 Zwykłe funkcje/metody . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
11.1.1 Śledzik na raz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
11.2 Funkcje anonimowe/lambda . . . . . . . . . . . . . . . . . . . . . . . . . . 124
11.2.1 Gdzie używamy lambd najczęściej? . . . . . . . . . . . . . . . . . . 125
11.2.2 Przykłady . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 125
12 Klasy i OOP 127
12.1 Klasy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 127
12.1.1 super() i MRO . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 129
12.2 Classmethods, staticmethods . . . . . . . . . . . . . . . . . . . . . . . . . 130
12.3 Menadżery kontekstu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 131
12.4 Typehints . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132
12.5 Docstrings . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
12.6 Operator is . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
12.7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 134
13 Ekosystem narzędzi Pythonowych 135
13.1 Plik README - co powinien zawierać i jak wyglądać . . . . . . . . . . . 135
13.1.1 Technologia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
13.1.2 Jakie sekcje powinien zawierać dobry plik README? . . . . . . . 135
13.1.3 Tytuł . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
13.1.4 Opis projektu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
13.1.5 Stos technologiczny . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
13.1.6 Instrukcja tworzenia środowiska lokalnego . . . . . . . . . . . . . . 136
13.1.7 Deployment . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
13.1.8 Autorzy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
13.1.9 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
13.2 pdoc3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
13.3 Pycharm/Visual Studio Code . . . . . . . . . . . . . . . . . . . . . . . . . 136
13.4 Robienie notatek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137
13.5 Pyenv, poetry i inne nicponie . . . . . . . . . . . . . . . . . . . . . . . . . 137
13.5.1 Piptools . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
13.6 Walimy pythona sprzętem . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
13.6.1 Pipeliny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
13.6.2 Co sprawia, że kod jest dobry? . . . . . . . . . . . . . . . . . . . . 140
13.6.3 Ciemna strona mocy - black . . . . . . . . . . . . . . . . . . . . . . 140
13.6.4 Isort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
13.6.5 Importy jak wódka - Absolutne . . . . . . . . . . . . . . . . . . . . 141
13.6.6 Bandit . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 141
13.6.7 autoflake . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
13.6.8 pyupgrade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
13.6.9 bumpversion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142
13.6.10Git hooks & pre-commit . . . . . . . . . . . . . . . . . . . . . . . . 142
13.6.11 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
13.7 Pytania i zadania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
14 Bazy danych 144
14.1 SQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
14.2 Relacyjne bazy danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 144
14.2.1 Tabele . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
14.2.2 Indeksy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 145
14.2.3 Relacje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
14.2.4 Normalizacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
14.2.5 Transakcje i współbieżność . . . . . . . . . . . . . . . . . . . . . . 147
14.2.6 Subskrypcje/Powiadomienia . . . . . . . . . . . . . . . . . . . . . . 147
14.2.7 Uprawnienia i bezpieczeństwo . . . . . . . . . . . . . . . . . . . . . 147
14.2.8 Profilowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
14.2.9 Kolejność kolumn . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
14.2.10 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
14.3 Tenanty i co to takiego . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148
14.3.1 Perspektywa młodego . . . . . . . . . . . . . . . . . . . . . . . . . 148
14.3.2 Perspektywa dziada . . . . . . . . . . . . . . . . . . . . . . . . . . 152
14.4 ORM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
14.4.1 Czym jest ORM? . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
14.4.2 ORM vs czysty SQL . . . . . . . . . . . . . . . . . . . . . . . . . . 155
14.4.3 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 155
15 Internet 157
15.1 Droga żądania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
15.2 CDN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
15.2.1 Wprowadzenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 158
15.2.2 I wtedy wchodzi CDN, cały na biało . . . . . . . . . . . . . . . . . 158
15.2.3 Szczegóły . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 159
15.2.4 Czym jest hit rate, lifetime? . . . . . . . . . . . . . . . . . . . . . . 159
15.2.5 Czy CDN to jeden ogromny serwer? . . . . . . . . . . . . . . . . . 160
15.2.6 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
15.3 Cache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 160
15.4 Chmura . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
15.5 Docker . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
15.6 Docker-compose . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 162
15.7 Docker Hub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 163
16 Rekrutacja 164
16.1 Jak wygląda proces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
16.1.1 Konkrety . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 164
16.1.2 Jakie pytania się pojawią? . . . . . . . . . . . . . . . . . . . . . . . 165
16.1.3 Nie tylko wiedza . . . . . . . . . . . . . . . . . . . . . . . . . . . . 166
16.1.4 Rezultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167
16.1.5 Poćwicz . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
16.1.6 Negocjacje . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
16.2 Studia a rekrutacja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 168
16.2.1 Czy tak zwany papier jest nic niewarty? . . . . . . . . . . . . . . . 169
16.2.2 Czy żałuję nie pójścia na studia? . . . . . . . . . . . . . . . . . . . 169
16.2.3 Czy brak studiów nas przekreśla? . . . . . . . . . . . . . . . . . . . 169
16.3 Jak szukałem pierwszej pracy . . . . . . . . . . . . . . . . . . . . . . . . . 169
16.3.1 Spamer pierwszej wody . . . . . . . . . . . . . . . . . . . . . . . . 170
16.3.2 Jakieś rezultaty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
16.3.3 Pierwsze rozmowy . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
16.3.4 Zdziwionko . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
16.3.5 Zdziwionko dwa . . . . . . . . . . . . . . . . . . . . . . . . . . . . 170
16.3.6 Okres próbny . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
16.3.7 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
16.4 CV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
16.4.1 Moje ostatnie CV . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
16.4.2 Analiza . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171
16.4.3 Zdjęcie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 174
16.4.4 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
16.5 Co umiałem idąc do pierwszej pracy - studium przypadku . . . . . . . . . 175
16.5.1 Googlowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
16.5.2 Angielski . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 175
16.5.3 Algorytmy i struktury danych . . . . . . . . . . . . . . . . . . . . . 176
16.5.4 Narzędzia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
16.5.5 Słowniczek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 177
16.5.6 Języki programowania . . . . . . . . . . . . . . . . . . . . . . . . . 179
16.5.7 Frameworki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
16.5.8 Wzorce projektowe . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
16.5.9 Testowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
16.5.10 Systemy operacyjne . . . . . . . . . . . . . . . . . . . . . . . . . . 180
16.5.11 Jak już o systemach mowa . . . . . . . . . . . . . . . . . . . . . . . 181
16.5.12 Debugowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
16.5.13 Dobre praktyki . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 181
16.5.14 VCS - o gicie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
16.5.15 Projekty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
16.5.16 Blog . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
16.5.17 GitHub . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
16.5.18 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
17 Przykładowe pytania i zadania 184
17.1 Django . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
17.2 Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184
17.3 Git . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
17.4 Http/Rest . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 187
17.5 Bazy danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
17.6 Ogólne koncepty programowania . . . . . . . . . . . . . . . . . . . . . . . 188
17.7 Struktury danych . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
17.8 Kamień papier nożyce . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 188
17.9 Operacja na liczbach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
17.10 Statystyki z logów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189
17.11 Statystyki zapytań . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191
17.12 Książka zleceń . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192
17.12.1 Format danych wejściowych . . . . . . . . . . . . . . . . . . . . . . 192
17.12.2 Format danych wyjściowych . . . . . . . . . . . . . . . . . . . . . . 192
17.13 Skracacz adresów . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194
17.14 Generator statycznych stron . . . . . . . . . . . . . . . . . . . . . . . . . . 195
17.15 Jednolinijkowiec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 199
18 Studium przypadku różnych aplikacji 201
18.1 Skracacz linków . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 201
18.2 Jak jedna cyferka może zepsuć aplikację - studium . . . . . . . . . . . . . 202
18.2.1 Uff . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 202
18.2.2 Ścieżka pliku . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
18.2.3 Co się okazuje? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
18.2.4 Zajrzyjmy do bazy . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
18.2.5 Format? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
18.2.6 Eureka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
18.2.7 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
19 Kultura 206
19.1 Trochę o menadżerach/liderach . . . . . . . . . . . . . . . . . . . . . . . . 206
19.1.1 Poziom pierszy: mistrz Excela . . . . . . . . . . . . . . . . . . . . 206
19.1.2 Poziom drugi: empatyczny akolita excela . . . . . . . . . . . . . . 207
19.1.3 Poziom trzeci: człowiek . . . . . . . . . . . . . . . . . . . . . . . . 208
19.2 Kultura projektowania . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210
19.3 O wartościach . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211
19.4 Kaizen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 214
19.5 Zarządzanie portfelem inwestycyjnym . . . . . . . . . . . . . . . . . . . . 214
19.6 Relacja z prowadzenia pierwszego retro . . . . . . . . . . . . . . . . . . . . 214
19.6.1 Ready, set, go . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
19.6.2 Ustawienie sceny . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
19.6.3 Rozgrzewka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215
19.6.4 Retrospektywa w przeszłości . . . . . . . . . . . . . . . . . . . . . 216
19.6.5 Dobrodziejstwa - zbieranie danych . . . . . . . . . . . . . . . . . . 216
19.6.6 Baddies - zbieranie danych . . . . . . . . . . . . . . . . . . . . . . 216
19.6.7 Happies - wciąż zbieramy dane . . . . . . . . . . . . . . . . . . . . 217
19.6.8 Przestań, to boli. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 217
19.6.9 Incepcja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
19.6.10 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
20 Papierologia i pieniądze 219
20.1 Netto, brutto, umowy, statusy, koszty . . . . . . . . . . . . . . . . . . . . 219
20.2 Umowa o dzieło . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
20.3 Umowa zlecenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220
20.4 Umowa o pracę . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
20.5 B2B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221
20.5.1 Czym jest B2B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
20.5.2 Zalety B2B . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
20.5.3 Wady . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
20.5.4 Podusmowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
20.6 Pieniądze . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
20.6.1 Jak rozmawiać o pensji . . . . . . . . . . . . . . . . . . . . . . . . 227
20.6.2 Podwyżka != więcej na wypłatę, o czasie . . . . . . . . . . . . . . 228
20.7 Mój przypadek . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 229
20.7.1 Moje pierwsze zarobki, pierwsza podwyżka . . . . . . . . . . . . . 229
20.7.2 Następna umowa i B2B . . . . . . . . . . . . . . . . . . . . . . . . 230
20.7.3 Dalsze losy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
20.7.4 Odejście . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
20.7.5 Nowa okazja . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 231
20.7.6 Nic co dobre nie trwa jednak wiecznie . . . . . . . . . . . . . . . . 232
20.7.7 Powrót do rzeczywistości . . . . . . . . . . . . . . . . . . . . . . . 232
20.7.8 Małe podsumowanie mojej historii zarobkowej . . . . . . . . . . . . 233
21 Wady i zalety pracy jako programista 235
21.1 Wady . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
21.1.1 Zdrowie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
21.1.2 Ciągła nauka . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
21.1.3 Słabe projekty . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
21.1.4 Stereotypy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
21.1.5 ‘Rynek pracownika’ . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
21.1.6 Wymarzona praca . . . . . . . . . . . . . . . . . . . . . . . . . . . 238
21.2 Zalety . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
21.2.1 Pitos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
21.2.2 Możliwości rozwoju . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
21.2.3 Ciekawa praca . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
21.2.4 Zdalna również często . . . . . . . . . . . . . . . . . . . . . . . . . 239
21.2.5 Rynek pracownika . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
21.3 Podsumowanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 240
22 Praca zdalna 241
22.1 Ergonomia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
22.1.1 Mój ergonomiczny setup . . . . . . . . . . . . . . . . . . . . . . . . 241
23 Luźne przemyślenia 243
23.1 Backend to nie produkt . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
23.1.1 Małe oświecenie . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
23.1.2 Jak powinno być . . . . . . . . . . . . . . . . . . . . . . . . . . . . 243
23.1.3 Apel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 244
23.2 Chciej, pisz dobry kod . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
23.3 Obrzydliwe kuriozum w świecie IT . . . . . . . . . . . . . . . . . . . . . . 245
23.4 Szanujmy czytelników, szanujmy Internet . . . . . . . . . . . . . . . . . . 248
23.5 Pierwsze dni pracy jako programista . . . . . . . . . . . . . . . . . . . . . 251
23.5.1 Spokojne pierwsze dni . . . . . . . . . . . . . . . . . . . . . . . . . 251
23.5.2 Wdrażanie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
23.5.3 Ważna sprawa . . . . . . . . . . . .