1. Python Foundations

Warning

Przed szkoleniem proszę o instalację i konfigurację środowiska zgodnie z Installing Python

1.1. Description

Wg. rankingów Python jest trzecim językiem programowania na świecie. Stał się lingua franca w Data Science i Machine Learning, ale również zyskuje coraz większą popularność w Security gdzie pisze się w nim exploity, Quality Engineering (testy) oraz w zastosowaniach naukowych i inżynieryjnych. Zanim zaczniemy analizę numeryczną czy dostosowywanie modeli ML, konieczne jest poznanie języka, jego składni i bibliotek. Uczestnik podczas warsztatu zapozna się ze składnią, idiomami oraz modułami. Nauczy się korzystać z venv i pozna dobre praktyki programowania i konwencje przyjęte w języku.

Wymagana umiejętność podstaw programowania w dowolnym języku i znajomość zagadnień związanych ze zmiennymi, stałymi, podstawowymi strukturami danych (listy, zbiory), pętle, funkcje i instrukcje warunkowe.

Tip

If you're interested in this training course, please email me at matt@astrotech.io

1.2. Agenda

  1. Wprowadzenie do języka Python:

    • konfiguracja środowiska

    • Uruchamianie kodu w środowisku IDE

    • Debugging i introspekcja

    • Uruchamianie testów (doctest, unittest)

    • Refactoring

    • konfiguracja i korzystanie z Jupyter

  2. Struktury danych oraz instrukcje podstawowe języka:

    • Typy wbudowane: liczby, łańcuchy znaków, listy, słowniki, krotki

    • Typy złożone

    • Przypisania

    • Instrukcje decyzyjne

    • Pętle

    • Czytanie plików

  3. Funkcje w języku Python:

    • Zastosowanie funkcji

    • Zwracanie i przekazywanie parametrów do/z funkcji

    • Funkcje parametryzowane, parametry pozycyjne, nazwane oraz * i **

  4. Programowanie obiektowe:

    • Podstawowe wiadomości o programowaniu obiektowym

    • Definiowanie klasy w języku Python

    • Przeciążanie operatorów

    • Dziedziczenie

    • Dataclass

    • Wyjątki: rodzaje, przechwytywanie, tworzenie własnych

  5. Jakość, testowanie i dobre praktyki:

    • PEP8 i PEP20

    • Doctest

    • Unittest

    • Wprowadzenie do TDD

    • Type Annotation

  6. Modularyzacja programu oraz korzystanie z bibliotek:

    • Najczęściej wykorzystywane moduły biblioteki standardowej

    • Virtualenv i separacja bibliotek

    • pip i pipenv

    • Instalacja bibliotek zewnętrznych

    • Tworzenie własnych modułów

    • Praca z systemem operacyjnym

    • Parsowanie argumentów i korzystanie z terminala

  7. Manipulacja i prezentacja danych:

    • Serializacja danych do formatu JSON, Pickle, XML oraz CSV

    • Operacje na bazach danych w języku Python

    • Generowanie interaktywnych wykresów oraz raportów za pomocą Matplotlib, Plotly i Jupyter

  8. Bazy danych RDBMS i NoSQL

    • Łączenie

    • Zapytania do RDBMS (sqlite3, Oracle, MySQL, MSSQL, PostgreSQL)

    • Zapytania do NoSQL (MongoDB)

    • Uruchamianie zapytań

    • Praca z wynikami zapytania

  9. Wyrażenia regularne:

    • Korzystanie z wyrażeń regularnych

    • Tworzenie własnych

  10. Opcjonalnie

    • Jupyter (Enhanced Interactive Console)

    • NumPy (Base N-dimensional array package)

    • Pandas (Data structures & analysis)

    • SciPy (scientific computing)

    • Matplotlib (Comprehensive 2D Plotting)

    • Scikit-learn (Machine Learning Library)

1.3. Survey before workshop

  1. Jakie masz doświadczenie z programowaniem:

    • żadnego

    • tworzyłem pomniejsze programy / skrypty

    • mam na koncie kilka aplikacji, ale raczej nic dużego

    • w ciągu ostatnich dwóch lat byłem współautorem większego systemu (ponad 500k LOC)

    • programuję na codzień

    • jestem zaawansowanym programistą i programuję systemy rozproszone

  2. Doświadczenie z paradygmatem obiektowym:

    • żadnego

    • kiedyś coś było, ale nie wykorzystuję tego na codzień

    • programuję obiektowo codziennie, wiem co to klasa, metody, właściwości (pola), dziedziczenie, kompozycja, polimorfizm,

    • wykorzystuję polimorfizm i dziedziczenie / kompozycję na co dzień

  3. Doświadczenie z paradygmatem funkcyjnym:

    • żadnego

    • rozumiem na czym polega domknięcie

    • wiem co to domknięcie i rekursja - stosuję to w praktyce

    • wiem co to rachunek domknięcie, lambda, złożenie funkcji i rekursja i jestem w stanie zastosować je w praktyce

    • programuję funkcyjnie rozproszone systemy

    • Alonzo Church razem ze mną formułował rachunek lambda

  4. Doświadczenie z Pythonem:

    • żadnego

    • pisałem skrypty

    • mam na koncie kilka aplikacji, ale raczej nic super dużego

    • tworzyłem większe aplikacje

    • programuję w tym języku od kilku lat

    • Guido van Rossum to mój kolega ze szkolnej ławki

  5. Czy miałeś styczność z programowaniem okienkowym:

    • Nie i nie chcę mieć nic z tym wspólnego

    • Nie, ale chcę się nauczyć

    • Tak, miałem kiedyś okazję stworzyć taki program

    • Tak, tworzę je często

    • Tak, tworzę je na codzień

    • Pracowałem w Xerox jak Steve Jobs wpadł z wizytą

  6. Jakie masz doświadczenie z systemem Linux:

    • nigdy nie korzystałem

    • słabe, umiem się poruszać w trybie graficznym

    • znam Linuxa i korzystam z wiersza poleceń

    • wykorzystuję Linuxa na codzień

    • koduję kernela razem w piwnicy z Linusem Torvaldsem

  7. Czy tworzyłeś systemy webowe:

    • Tak, tworzę je często

    • Tak, miałem kiedyś okazję stworzyć taki system

    • Nie, ale chcę się nauczyć

    • Nie i nie chcę mieć nic z tym wspólnego

    • Moje strony testowałem w Mozaic

  8. Do jakich zastosowań chciałbyś wykorzystać Pythona [można zaznaczyć wiele]:

    • do zabawy / nauki programowania

    • do skryptowania środowiska

    • tworzenia narzędzi developerskich

    • tworzenia stron internetowych

    • tworzenia aplikacji i narzędzi naukowych

    • inne...

  9. Na co chciałbyś abym zwrócił szczególną uwagę podczas szkolenia:

    • [pytanie otwarte]

  10. Jakie elementy z poza programu szkolenia chciałbyś aby zostały poruszone:

    • [pytanie otwarte]

  11. Czy piszesz testy jednostkowe oraz integracyjne?:

    • nigdy

    • bardzo rzadko

    • czasami

    • zawsze

    • Uncle Bob to mój bohater

  12. Doświadczenie z refactoringiem:

    • nie robię

    • robię raczej jak jest potrzeba

    • codziennie refaktoruję kod

    • skróty klawiszowe do refaktoringu w moim IDE znam na pamięć

    • pisałem książkę z Michael Featers

  13. Czy chciałbyś aby w ramach szkolenia zostały poruszone kwestie dotyczące narzędzi automatyzujących budowanie aplikacji (Jenkins), GITa i GIT Flow oraz innych elementów ekosystemu developerskiego i dobrych praktyk programowania?:

    • Tak!

    • Nie mam zdania - zdam się na decyzję większości

    • Nie, wolę by szkolenie dotyczyło tylko Pythona

1.4. Certificate

Szkolenie obejmowało 32 godziny wykładów oraz warsztatów. Zagadnienia poruszone na szkoleniu:

  • tworzenie aplikacji w języku Python,

  • tworzenie i korzystanie ze struktur danych,

  • tworzenie klas i obiektów,

  • modularyzacja oprogramowania,

  • użycie wywołań biblioteki standardowej,

  • tworzenie testów do pisanych funkcji,

  • korzystanie z funkcji refaktoringu w środowisku IDE,

  • dobre praktyki i standardy kodowania.