POIT #067: Czy warto uczyć się języka Python?

Witam w sześćdziesiątym siódmym odcinku podcastu „Porozmawiajmy o IT”. Tematem dzisiejszej rozmowy jest to czy warto uczyć się języka Python.

Dziś moim gościem jest Mateusz Mazurek – pasjonat informatyki. Python Technical Lead Engineer. Bloger. Prowadzi szkolenia z języka Python i tematów około programistycznych. Swoje wieloletnie doświadczenia zawodowe wykorzystuje w mentoringu w obszarze języka Python. Uwielbia rower i dobre książki fabularne.

W tym odcinku o języku Python rozmawiamy w następujących kontekstach:

  • jak ten język powstał i do czego pierwotnie służył?
  • jak wygląda zastosowanie Pythona w programowaniu webowym?
  • czy duże firmy również z niego korzystają?
  • jak wygląda zastosowanie Pythona w machine learningu?
  • czy powszechnie wykorzystuje się go do pisania skryptów i automatyzacji?
  • jakie są inne zastosowania?
  • rozmawiamy o nauce programowania dzieci
  • czy łatwo się go nauczyć? jak wygląda dostępność materiałów?
  • co można zarekomendować osobom początkującym jeśli chodzi o naukę?
  • w jakie pułapki wpadają początkujący adepci Pythona?
  • jak wygląda wydajność tego języka?
  • jak wygląda i co umożliwia biblioteka standardowa?
  • rozmawiamy o jakości rozwiązań napisanych w Pythonie
  • jak wygląda community tego języka?
  • jak wygląd rynek pracy?
  • jak będzie wyglądał rozwój języka Python?

Subskrypcja podcastu:

Linki:

Pozostańmy w kontakcie:

 

Muzyka użyta w podcaście: „Endless Inspiration” Alex Stoner  (posłuchaj)

Transkrypcja podcastu

To jest 67. odcinek podcastu Porozmawiajmy o IT, w którym z moim gościem rozmawiam o tym, czy warto uczyć się Pythona. Zostań ze mną do końca! Mam do rozdania kupony do aplikacji EmpikGo
Przypominam, że w poprzednim odcinku rozmawiałem o roli mid developera. 

Wszystkie linki oraz transkrypcję dzisiejszej rozmowy znajdziesz pod adresem porozmawiajmyoit.pl/67

Jeśli jeszcze tego nie zrobiłeś, to wystaw ocenę lub recenzję podcastowi w aplikacji, w której tego słuchasz abym wiedział, że jesteś.

Chcę poszerzać horyzonty ludzi z branży IT i wierzę, że poprzez wywiady takie jak ten, publikowane jako podcasty będę to robił z sukcesem. 

Nazywam się Krzysztof Kempiński i życzę Ci miłego słuchania!

Odpalamy!

 

Cześć, mój dzisiejszy gość to pasjonat informatyki, Python technical lead engineer, bloger. Prowadzi szkolenia z języka Python i tematów około-programistycznych. Swoje wieloletnie doświadczenia zawodowe wykorzystuje w mentoringu w obszarze języka Python. Uwielbia rower i dobre książki fabularne. 

Moim i Waszym gościem jest dzisiaj Mateusz Mazurek! Cześć, Mateusz! Bardzo mi miło gościć Cię w podcaście. 

 

Cześć, Krzysiek! 

 

Fajnie, że będziemy mieli okazję porozmawiać o temacie, w którym się specjalizujesz, mianowicie o języku Python. Poruszymy konkretnie wątek: czy tego języka warto się uczyć? 

Jednak żeby tradycji stało się zadość, to na początku oczywiście muszę Cię zapytać, czy słuchasz podcastów, a jeśli tak, to jakich najczęściej? 

 

Wiesz co, chyba jesteś jedynym gościem tworzącym podcasty, którego słucham. 

 

Miło mi! [śmiech] 

 

Zdarza mi się czasem posłuchać jakichś dłuższych story na Instagramie, czy to się liczy? 

 

Technicznie nie są to podcasty, ale jakieś audio jest! Można więc zaliczyć.

 

No to poza tym to raczej nie. Jesteś tutaj w mojej TOP-ce! TOP1.

 

To bardzo mi miło, dziękuję! 

Dobrze. To przechodzimy do meritum naszej rozmowy. 

Niedawno sprawdziłem, zgodnie z indeksem TIOBE, który jest wyznacznikiem popularności poszczególnych języków programowania. Python jest obecnie, można powiedzieć, w czołówce – 3, 4 miejsce. W tych kierunkach mniej więcej mieści się właśnie język Python, jeśli chodzi o popularność języków programowania. 

Przy czym jest mocna tendencja wzrostowa, którą można obserwować od około 2 lat, może trochę dłużej. Język ten pnie się po drabinie popularności języków. 

Chciałbym cię zapytać, tak wychodząc od początku… Jak się ten język narodził? Po co został stworzony? Kiedy się pojawił? Gdybyś mógł powiedzieć o historii — byłoby to na pewno fajne wprowadzenie!

 

Powstał gdzieś a początku lat 90., został stworzony przez Holendra, Guido van Rossum. Pisał ten projekt w gruncie rzeczy jako rozwinięcie innego. Był już język ABC i miał podobne założenia jak Python. Był prostym językiem — ale nie prostackim.

 

Wracając do tego indeksu, o którym powiedziałeś. Może na początku — nie wiem jak tak bardzo ten indeks sobie analizowałeś, ale tam można zobaczyć, że na przestrzeni lat Python wystrzelił mniej więcej w okresie 2017 roku. Czyli już jakiś czas temu! 

Ten wystrzał był początkiem mody na ten język, bo gdzieś tamta moda faktycznie jest widoczna. Sam język jest relatywnie stary. 

Powstał gdzieś na początku lat 90., został stworzony przez Holendra, Guido van Rossum. Pisał ten projekt w gruncie rzeczy jako rozwinięcie innego. Był już język ABC i miał podobne założenia jak Python. Był prostym językiem — ale nie prostackim. Do tego pewnie jeszcze wrócimy. 

Łatwo się go czytało, łatwo się w nim pisało i ten projekt w wyniku bliżej nieokreślonych turbulencji zamienił się w Pythona.

Idee, jakie zakładał Holender były takie, że Python ma być prosty — o czym już wspomniałem, miał nie odstawać funkcjonalnością od innych języków i przede wszystkim miał być następcą tego języka ABC, ale też w gruncie rzeczy Basha. Język wywodził się właśnie jako idea tego, żeby zastąpić Basha. Jak pewnie ty, jak pewnie większość programistów spotkaliśmy się z Bashem i każdy, kto się spotkał raczej niezbyt go lubił bo składnia to nie jest co, na co można fajnie popatrzeć. 

Z jednej strony był językiem, który wyszedł z ABC. A z drugiej strony miał zastąpić Basha. I mniej więcej tak narodziła się idea Pythona w głowie Holendra na początku lat 90., czyli mniej więcej wtedy, kiedy się urodziłem.

 

Ciekawe. To jest kolejny język, który gdzieś tam się przewija i miałem okazję go trochę poznać. Powstał jak gdyby całkiem wcześniej, zanim został popularny — to jest często kilkanaście lat.

Podobnie jest z językiem Ruby, w którym mam najwięcej doświadczeń. Tam też, zanim framework Ruby on rails powstał, no to ten język rozwijał się już przez kilkanaście lat. Z tego, co mówisz, podobnie jest właśnie z językiem Python. 

 

Nie wiem jak jest z Rubym, ale w Pythonie było tak, że on był do pewnych wersji ledwo używalny. Tak naprawdę do 2.3. Dopiero od 2.3 do 2.7 był już faktycznie pełnoprawnym językiem. 

Później wskoczyło to na wersję 3.0, gdzie jest to już język w pełni praktyczny. Nie zrozum mnie źle – 2.3 i 2.7 były jak najbardziej w pełni operatywne, tylko jakby różnica między 2.7 a wersjami 3.0 była ogromna, z tym takim moim rozróżnieniem.

 

Jasne. Porozmawiajmy chwilę o takich podstawowych zastosowaniach tego języka. Powiedziałeś, że u źródeł to są takie związki trochę à la z językiem, który używany jest w konsoli. 

Przyznam szczerze, że sam zbyt wielu doświadczeń nie miałem, aczkolwiek kiedyś rozszerzałem pewien projekt, który napisany był już w Django, jakieś nowe funkcjonalności, więc trochę liznąłem, jakieś pojęcie mam. Natomiast jestem trochę, można powiedzieć, skrzywiony pod kątem tego, jakie zastosowania języka Python znam w kierunku wykorzystań webowych. 

Powiedz proszę kilka słów o tym, jak wygląda wykorzystanie Pythona właśnie w tym obszarze webowym, który jest, myślę, najbardziej w tej chwili kojarzony, jeśli chodzi o Pythona. Z jakimi możliwościami, narzędziami możemy się spotkać w tym obszarze? 

 

Powiedz mi, jakie masz wspomnienia z Django? 

 

Różne. [śmiech] W międzyczasie, równolegle posługiwałem się Ruby on rails i był spory przeskok w trochę negatywną stronę. Jednak brakowało wówczas narzędzi. Wówczas topornie się z tego korzystało, więc z wyjątkiem jakiegoś tam performance’u, który wówczas przeważał, no to nie do końca to było takie super przyjemne uczucie.

 

W gruncie rzeczy można powiedzieć, że Twoja opinia mapuje się na opinię ogólną. Django ma tyle osób, które są za tym frameworkiem ile są przeciwko. 

Django jest fajny — to jest ogromny, kompletny framework. Fajny wtedy, kiedy chcesz stworzyć aplikację, która nie robi żadnych, dziwnych, niestandardowych rzeczy. Jeżeli idziesz wyznaczoną przez twórców ścieżką, to Django jest super. Robi za ciebie naprawdę ogrom pracy. Jest całkiem nieźle napisany, tam pod spodem. Nie ma zależności jako takich. Jest ogólnie świetnym frameworkiem, naprawdę. Jeśli jednak chciałbyś w Django wyjść poza utartą ścieżkę, no to jest to troszkę taka droga przez mękę. 

Nie chcę powiedzieć, że to się nie udaje, bo się udaje, jak najbardziej, tylko faktycznie tam już są górki. To, że Django nie ma jako takich zależności i jest bardzo stabilnym projektem, sprawia również, że jest całkiem wydajny — to, co wspomniałeś — ale trzeba tutaj oddać to, że ma naprawdę wielu przeciwników właśnie dlatego, że wyjście poza tą utartą ścieżkę, która przewidzieli twórcy, już jest lekko mówiąc, niewygodna.

Django dostarcza swojego ORM-a. Sam ogólnie tego ORM-a lubię. Myślę, że to jest troszeczkę kwestia podejścia jakby kwestia preferencji. Ogólnie go lubię — jest stabilny, fajny i takim popularnym dodatkiem do Django jest jeszcze Django rest framework, który pozwala tworzyć nam jakieś API i tak dalej. Te trzy rzeczy w gruncie rzeczy tworzą bardzo spójne rozwiązanie. Ponieważ możesz za pomocą tego frameowrka stworzyć szybko aplikację, która może być naprawdę zaawansowana i naprawdę fajnie działać, z tym, że jeżeli będziesz chciał wyjść ponad jakieś tam rzeczy, no to może to być kłopotliwe albo nawet trudne. Oczywiście da się, ale tak jak mówię, że po prostu nie zawsze jest to wygodne. 

Idąc dalej w Twoje pytanie — jeśli chodzi o webówki — to mówiąc o webówce w Pythonie nie możemy zapomnieć o Flasku. Flask to jest też framework, tak jak Django i też do webówki, z tym że jego idea jest troszkę inna. Idea stojąca za Django jest taka, żeby dostarczyć naprawdę pełne rozwiązanie. Flask jest bardziej takim micro frameworkiem, czyli rozwiązaniem, które daje ci już jakąś podstawę, ale nie narzuca zbyt dużo. To w gruncie rzeczy jest główna różnica. 

Jeżeli Django narzuca ci architekturę, narzuca podział na projekty i aplikacje, i tak dalej to Flask narzuca ci bardzo mało. Przez to jednak nie robi ci tak bardzo pod górkę, jeśli chcesz wyjść gdzieś w bok, jeśli chodzi o ścieżkę, którą zaproponowali ci twórcy. 

Rozwiązanie ma swoje plusy i minusy. Oczywiście minusem Flaska jest to, że nie dostarcza ORM-a jako takiego, ale można łatwo zintegrować go i to fajnie działa z SQLAlchemy, to jest kolejna rzecz, o której trzeba wspomnieć w takim webowym ekosystemie Pythona. SQLAlchemy to jest ORM, taki samodzielny, nie tak jak Django ORM. To też jest biblioteka, która jest naprawdę potężna, jest naprawdę super. Jeżeli ktoś z niej korzystał to wie, jeśli ktoś nie korzystał to zachęcamy do skorzystania z tej biblioteki, bo jest ogromna i naprawdę bardzo fajna. Integruje się ją fajnie z Flaskiem. To jest taki duet, który często występuje razem. Bo Flask nie ma tego, co ma Django — czyli wbudowanego ORM-a, więc często integruje się go właśnie z SQLAlchemy. 

Jeżeli chcemy sobie aplikację we Flasku albo takim Django, uruchomić na produkcji, to mamy tam jakiegoś Gunicorna albo coś takiego. Oba te frameworki mają jakiś tam system templatek, żeby zapewnić odseparowanie logiki od widoku. W Django jest coś, co podobne jest do Jinjy, ale to chyba nie jest Jinja. A Flask to po prostu Jinja, ewentualnie można sobie zintegrować to z tym rozwiązaniem. To ogólnie bardzo dobrze ze sobą współgra, więc Python jest tutaj naprawdę mocnym, fajnym i stabilnym rozwiązaniem, jeżeli chodzi o webówkę. Fajnie, że ten Flask się pojawił, bo daje nam możliwość pójścia troszkę w inną stronę porównując to właśnie do Django. Dzięki temu możemy sobie właśnie wybrać, którego rozwiązania użyć w którym projekcie, do jakich problemów. 

 

Z tego, co widzę po polskich startupach, po tym jakie ogłoszenia pracy też są przez nie wrzucane na przykład na LinkedIn, dochodzę do wniosku, że Pythona bardzo często te software house’y wykorzystują. Co też może dalej świadczyć o tym, że klienci tych software house’ów, którymi bardzo często są startupy chętnie korzystają z takich rozwiązań webowych, które opisałeś.

Czy według twojej wiedzy większe firmy, czy jakieś większe projekty — głównie na myśli mam webowe — też są skore, żeby z tego ekosystemu Pythonowego korzystać? 

 

Zdecydowanie tak. Znam co najmniej kilka firm, które oparły cały swój biznes na Django i świetnie sobie radzą. To, że gdzieś tam w pewnych momentach może być niewygodny, nie znaczy, że nie niesie za sobą możliwości zarabiania dobrych pieniędzy, naprawdę dobrych pieniędzy, wystarczających, by utrzymać całą firmę. To jest ważne. 

Zdecydowanie nie można patrzeć na Django dlatego, że w pewnych elementach jest niewygodny, właśnie tylko z tej perspektywy, ponieważ tak jak powiedziałem: jest wiele firm, które oparły na Django cały swój biznes i zdecydowanie świetnie sobie radzą i nie narzekają. 

Oczywiście, jak każda firma, jak każde projekty pewnie gdzieś tam się potkną, ale ogólnie to działa i faktycznie jest okej.

 

Druga taka popularna gałąź, która wiąże się właśnie z Pythonem, to jest machine learning. To jest pewnie też jedna z przyczyn takiego nagłego wystrzelenia popularności tego języka, te dwa czy trzy lata temu. 

Szkolenia związane z machine learning bardzo często uczą podstaw Pythona, z tego, co mam okazję obserwować. Wiele też przykładów związanych właśnie z machine learningiem podaje się z wykorzystaniem Pythona, z wykorzystaniem różnych bibliotek, które właśnie w Pythonie są napisane. 

Jak to się stało i dlaczego właśnie Python zdobył tak silną pozycję w tym obszarze? 

 

To pytanie jest trudne, bo tu trzeba się przede wszystkim pochylić nad tym, co Python oferuje jako język do machine learningu. 

Jak zaczniemy się temu przyglądać, to zobaczymy, że tam jest naprawdę kilka, jeżeli nie kilkanaście bibliotek, frameworków, rozwiązań, które w łatwy sposób pozwalają wejść w ten temat. I to jest ogromna wartość. 

Myślę, że swoją cegiełkę dołożył tutaj Google wprowadzając bodajże Tensor Flow czyli właśnie taki pakiet do machine learningu, ogólnie pojętego. Myślę, że to troszeczkę napędziło Pythona jako język, którego jednym z głównych zastosowań jest machine learning. Właśnie dlatego, żeby był w czołówce tych języków. Poza tym mamy Kerasa, Pandasa, NumPy’a, to jest naprawdę genialnym Blue  Tech’iem, on robi takie magiczne rzeczy w środku, że… Wow! Ciężko przejść obojętnie, naprawdę. To wszystko jest złączone przez bibliotekę Matplotlib, ona rysuje wykresy, to też fajnie działa. Wydaje mi się, że całość tego sprawia, że na przestrzeni lat Python stał się bardzo popularnym językiem dla machine learningu i właśnie przez to, że pojawiały się coraz lepsze i coraz bardziej zaawansowane biblioteki na ten temat. 

W tym momencie tak naprawdę chyba już nie ma języka lepszego do machine learningu. 

 

Trzeci taki obszar, który kojarzy mi się z językiem Python, jeśli chodzi o zastosowania, to są różnego typu script i automatyzacje. Czyli tutaj znowu cofamy się do tych początków. 

Jakiś czas temu rozmawiałem z Arturem Molendowskim, który prowadzi podcast Chwila dla admina i on też wspomniał, że właśnie w świecie sysadminów jest to również język, który chętnie jest wykorzystywany, chętnie używany do głównie automatyzacji czy jakieś własne skrypty powłokowe itd.

Czy według ciebie Python dobrze się sprawdza w tym obszarze? Czy to jest takie zastosowanie, które powiedzmy występuje w miarę często, a nie jest tylko jakimś wyjątkiem od bardziej istotnych zastosowań? 

 

Wiesz co, obok webówki i machine learningu to automatyzacja w Pythonie to jest czyste piękno, naprawdę. Jeżeli chcesz zautomatyzować sobie jakiś proces, no to Python jest najlepszym, moim zdaniem oczywiście, do tego wyborem. 

Mówiąc jakiś proces, mam na myśli cokolwiek. Pracujesz w korporacji, dostajesz codziennie mail z 30 arkuszami Excela. I tam jest po 100 arkuszy, w każdym pliku i musisz zrobić jakąś prostą agregację. Czyli wyciągnąć sobie z każdego pliku, z każdego arkusza jakieś dane i stworzyć arkusz wynikowy, gdzie są jakieś dane zagregowane. No to w Pythonie zrobisz to w 30 – 40 linijek. I to jest niesamowite. Możesz coś, co zajmuje — ręcznie stworzenie czegoś takiego zajęłoby dni, co najmniej. Tutaj możesz w kilkunastu linijkach rozwiązać ten problem. To jest niesamowite, bardzo wygodne.

 

 Sama składnia Pythona też pozwala pisać to relatywnie prosto. To, co jest ważne, to, że takie proste automatyzacje możesz robić nie znając Pythona bardzo dobrze. Gdzieś tam podstawowe tutoriale, podstawowe struktury danych i tak dalej, pozwalają ci już zrobić jakąś część automatyzacji i to jest świetne. Nie ma, moim zdaniem, lepszego języka do automatyzacji niż Python. 

 

Sama składnia Pythona też pozwala pisać to relatywnie prosto. To, co jest ważne, to, że takie proste automatyzacje możesz robić nie znając Pythona bardzo dobrze. Gdzieś tam podstawowe tutoriale, podstawowe struktury danych i tak dalej, pozwalają ci już zrobić jakąś część automatyzacji i to jest świetne. Nie ma, moim zdaniem, lepszego języka do automatyzacji niż Python. Poza tym nie wiem, czy kojarzysz takie narzędzie jak Ansible?

 

Pewnie.

 

Ansible — słuchaczom powiem — to jest narzędzie, które służy do zarządzania serwerami. Możesz sobie stworzyć playbooki w YAMLu. To, co jest super ciekawe to to, że to rozwiązanie jest napisane w Pythonie. To gdzieś tam dowodzi właśnie tego, że Python w tym obszarze jest bardzo, bardzo doceniany. Możesz do Ansible’a dopisać własne wtyczki właśnie w Pythonie i myślę, że to jest taką kropką nad i jeśli chodzi o ten temat — więc Python i automatyzacja to jest coś pięknego. 

 

Fajnie, dobrze to słyszeć. Czy myślisz, że pominęliśmy jakieś istotne zastosowania Pythona, o których warto byłoby wspomnieć?

 

Jest jeszcze jedno duże, które troszkę wynika z poprzedniego. Myślę, że warto je rozdzielić. Są to zastosowania czysto akademickie. Już tłumaczę. 

Jeżeli mamy doktora na jakiejś uczelni i on potrzebuje coś policzyć, to Python jest genialnym językiem do tego. 

Można w nim zrobić naprawdę szybko, fajne rzeczy. Jeżeli ma się trochę czasu można liczyć całki, pochodne, inne dziwne rzeczy bardzo, bardzo wygodnie. W zastosowaniach akademickich więc on też powoli wypiera takie rzeczy jak MATLAB czy inne. To jest coraz bardziej widoczne, że ludzie uczelni bardzo często zaczynają go wykorzystywać pomiędzy swoimi pracami do przedstawienia wyników obliczeń itd. Myślę, że nie można tego pominąć, że jest on bardzo często używany na uczelniach. Myślę, że to też troszkę wiąże się z popularnością machine learningu. Sama idea machine learningu gdzieś tam również dotykana jest przez uczelnie wyższe, więc myślę, że to, że język Python się tam również pojawia, nie jest przypadkiem. Że to wszystko jest ze sobą spójne i ta historia się przeplata, zastosowania się przeplatają, ale myślę, że, odpowiadając na twoje pytanie, warto ten jeden obszar wydzielić. 

 

Ciekawe. Przyznam szczerze, że akurat tego zastosowania nie znałem, ale za to w międzyczasie przyszło mi na myśl, że jeszcze takim obszarem, gdzie powiedzmy wykorzystuje się Pythona po części, a przynajmniej niektóre jego możliwości jest nauka programowania dla dzieci. Wiele z takich szkółek programowania czy kursów, które szkolą dzieciaki, robią to właśnie na bazie Pythona. Czy masz jakieś doświadczenia albo wiedzę w tym obszarze? Czy tam też się Python dobrze odnajduje i dlaczego? 

 

Jakichś ekstremalnych doświadczeń nie mam, ale nie dziwię się, że ludzie wybrali Pythona dla dzieciaków, no bo składnia jest naprawdę przystępna. 

Tak jak powiedziałem na początku, powtórzę: Python jest językiem prostym, ale nie prostackim. To znaczy, że ma prostą składnię, łatwo się go czyta, ale jego możliwości nie są w żaden sposób ograniczone, porównując go do innych języków. Wydaje się świetnym wyborem dla dzieciaków, ale nie tylko dla dzieciaków — dla wszystkich, jako pierwszy język czy dodatkowy. 

Wracając do twojego pytania, nie mam jakiegoś wielkiego doświadczenia, ale napisałem kiedyś artykuł do Programisty Junior. Napisałem go opierając się o Pythona, stworzyłem od podstaw grę w życie. I przeszliśmy sobie właśnie z dzieciakami przez cały proces tworzenia tego kodu, więc to jest chyba moje jedyne doświadczenie w tym temacie, ale tak jak powiedziałem wcześniej — nie dziwię się, że wybrali właśnie ten język. 

 

Z tego, co kojarzę — wydaje mi się, że do Minecrafta też się wykorzystuje właśnie Pythona, żeby tworzyć tam dodatki… Nie chcę wyjść na kogoś, kto gada jakieś głupoty, ale kojarzę to powiązanie Pythona z Minecraftem. 

 

Wierzę — nie wiem. Nie zdziwiłbym się. Jednak żeby powiedzieć, że potwierdzam albo neguję, to niestety nie wiem. Gry nie są do końca moim konikiem!

 

Pewnie! Wspomniałeś tutaj o tej łatwości nauki języka. Czy mógłbyś powiedzieć parę słów o tym, jak wygląda dostępność materiałów, szkoleń, kursów — czyli takich rzeczy, które mogą nam posłużyć właśnie do nauki? 

 

Tutaj trzeba zauważyć jedną rzecz. Wydaje mi się, że polski rynek IT jest troszeczkę przesunięty, jeśli chodzi o branie z tego Pythona garściami. Gdzieś tam ta społeczność istnieje, materiały są. To nie jest tak, że nie ma ich dużo, ale jest ich mniej niż na przykład do Javy. Ciężko to oczywiście porównywać. Społeczeństwo jest, istnieje. Mamy na przykład kilku, kilkunastu blogerów, którzy tworzą kontent w Internecie i tego jest naprawdę… Jak na taką ilość blogerów, to tworzą go naprawdę sporo. To jest dobre jakościowo. Jest kilka, kilkanaście kursów na Udemy, które w gruncie rzeczy są w porządku. Oczywiście nie wszystkie.

Są też jakieś tam kursy na YouTube, które w gruncie rzeczy są bardzo dobre, darmowe. Myślę, że zaczynając od nich można sobie zacząć!

 

To dobrze słyszeć, że jest z czego wybrać. 

Co byś doradzał osobom, które chcą nauczyć się Pythona, przy czym jest ich to pierwszy język? Wiadomo, że wtedy uczymy się trochę inaczej, niż kolejnego. W jaki sposób podejść do nauki Pythona? Może miałbyś jakieś wskazówki, może jakieś materiały, które byłbyś w stanie wskazać, od czego zacząć. 

 

Wiesz co, to jest trudne pytanie. Proces nauki dla każdej osoby jest indywidualny. To jak my się uczymy zależy w sumie od nas samych. To, co mógłbym poradzić, takie podstawy, podstawy, najfajniej zacząć takimi kursami na Udemy, czy YouTube. 

Później robi się problem. Bo jest bardzo dużo kursów, które wprowadzają podstawy. Podstawowe typy danych, lista, krotka, if-y, pętle i tak dalej. Co dalej? Robi się problem, bo brakuje mi w Internecie takiego przejścia pomiędzy podstawami a rzeczami zaawansowanymi. Tutaj w teorii można pokusić się o książki. To w sumie zależy również od tego, jaka osoba się za to bierze.

Jeżeli osoba weźmie sobie książkę i przejdzie sobie przez nią, no to super. Tam jednak jest przedstawiony tylko jeden punkt widzenia, jeden styl pisania jednej osoby. W całym procesie książki, która ma załóżmy, 400 stron — jednego rozdziału nie zrozumiemy to raz, nie mamy się kogo dopytać — no bo nie bardzo jak, dwa, że w gruncie rzeczy wycięty jeden rozdział psuje cały proces nauki. Wtedy więc nie jest już tak, że jest 90% przyswojenia wiedzy, tylko 50%. Każdy kolejny rozdział tej książki jest już mniej zrozumiały. To się nawarstwia. To jest troszeczkę jak zaległości z matematyki. One się nawarstwiają, więc tutaj książki są spoko, ale raczej polecałbym je osobom, które znają Pythona troszkę bardziej — nie neguję ich jednak całkowicie, ponieważ to są osoby, którym będzie to odpowiadało. 

Kolejnym podejściem może być również czytanie, szukanie, na Stack OverFlow i tak dalej. Takie uczenie się prawie hobbystyczne. Tutaj jest podobny problem, bo informatyka, całe to programowanie, ma taki problem, że mamy na przykład 10 nazw na to samo. Jak osoba początkująca, pójdzie na jedną stronę, przeczyta o jednej rzeczy nazwanej A. Później pójdzie na drugą stronę, przeczyta sobie o tej samej rzeczy nazwanej B, to nie będzie mogła skojarzyć, że chodzi o to samo. 

Co z tym zrobić? Są pewnie osoby, którym to nie przeszkadza. Kolejną rzeczą, którą może zrobić osoba początkująca, to są kursy programowania. Tutaj mogę polecić na pewno jeden kurs SDA — Software Development Academy. Oni mają kurs Pythona i on jest naprawdę w porządku, wydaje się stabilny i fajny. 

 

To, co jest fajne w kursach programowania to jest to, że cały program takiego kursu jest jednak… Wszystko jest przemyślane, dostosowane do potrzeb rynku. To nie są więc przypadkowe zajęcia, przypadkowi ludzie, którzy to prowadzą i przypadkowy cały program. To jest przemyślane. Dwa. Jak czegoś nie rozumiesz, jak w przypadku książki — tutaj możesz dopytać. 

 

To, co jest fajne w kursach programowania to jest to, że cały program takiego kursu jest jednak… Wszystko jest przemyślane, dostosowane do potrzeb rynku. To nie są więc przypadkowe zajęcia, przypadkowi ludzie, którzy to prowadzą i przypadkowy cały program. To jest przemyślane. Dwa. Jak czegoś nie rozumiesz, jak w przypadku książki — tutaj możesz dopytać. Zawsze masz tę osobę, której możesz spytać, podejść do niej. Myślę, że to sporo daje. Poza tym kursy wymuszają systematyczność, która moim zdaniem na początku jest ekstremalnie ważna. Ciągle patrzą na to, by ten program kursu był zgodny z wymaganiami rynku, więc wydaje mi się, że kursy programowania mają jako-taką opinię, są całkiem niezłym pomysłem. 

 

Myślę, że ta bolączka, czyli brak materiałów dla osób nieco bardziej zaawansowanych to jest coś, co jest charakterystyczne dla wielu technologii języków programowania, nie tylko Pythona. Z drugiej strony jednak, jak gdyby najwięcej osób, które wchodzą do branży to osoby początkujące, które potrzebują tego wsparcia, więc z drugiej strony mnogość treści dla nich jest w jakiś sposób uzasadniona.

 

Myślę, że to też w gruncie rzeczy jest trudny temat. Trudno jest wypełnić tę lukę w Internecie, między Juniorem a Regularem, ponieważ każda osoba jest jednak na innym poziomie i ciężko byłoby w tę lukę włożyć wiedzę, która byłaby uniwersalna dla tego poziomu. 

Wydaje mi się więc, że mamy faktycznie dziurę, ale też ciężko ją załatać. 

 

Zwłaszcza że później są jakieś specjalizacje i tak dalej i ciężko byłoby wszystko do tego worka wsadzić. Pewnie. 

Cofając się trochę do tych studiów, czy uniwersytetu, uczelni, o których wspomniałeś. Chciałem zapytać, czy tam też uczy się Pythona? Bo jedna strona medalu to wykorzystanie przez kadrę akademicką tego języka, z drugiej strony czy studentów uczy się Pythona? Czy znasz może jakieś uczelnie, kierunki gdzie tak się dzieje w Polsce? 

 

Muszę tutaj oczywiście wspomnieć o studiach, które sam skończyłem. Wiem, że na Politechnice Łódzkiej, na Wydziale Elektrycznym był Python — i to nawet fajny. Nie było to na zasadzie, że stwórz listę, przeliteruj po niej i wpisz sumę wartości. To były naprawdę fajne rzeczy. Może nie zaawansowane, to były algorytmy… Było to jednak fajne na tyle, że można było ten język poznać na tyle, żeby sprawdzić, czy on nam odpowiada. W gruncie rzeczy więc pod tym względem uczelnia spełnia swoją funkcję. Wiem, że jakiś czas temu Uniwersytet Łódzki, zamienił język o nazwie Ada właśnie na Pythona. Myślę, że było to już kilka lat temu, ale jednak jest, więc gdzieś tam się pojawia.

Jakiś czas temu prowadziłem szkolenie na AGH i rozmawiałem z tamtejszymi doktorami. Tam też ten Python jest. Myślę, że mogę powiedzieć, że na tych trzech uczelniach Python się pojawia. Zdziwiłbym się, gdyby na innych go nie było. Myślę, że nie tylko my zauważyliśmy tendencję wzrostową tego języka i że jednak mimo zarzutów, jakie uczelnie wyższe dostają od studentów, że uczą rzeczy nieprzydatnych, tak wydaje mi się, że nadal starają się w miarę śledzić rynek i że ten Python jednak pojawia się na większości uczelni. 

 

Jestem ciekawy, jaki będzie odzew ze strony słuchaczy — czy może ktoś jeszcze tutaj gdzieś wrzuci, albo w social mediach albo pod opisem do tego odcinka. Z chęcią byśmy też dowiedzieli się, jeśli na jakiś innych, polskich uczelniach właśnie w taki sposób fajny i aktywny się Pythona też uczy. 

To jeszcze chwilę, Mateusz, o tych początkujących. W jakie pułapki wpadają najczęściej początkujący, którzy zaczynają dopiero uczyć się języka Python w szczególności, natomiast myślę, że to, co powiesz będzie raczej szersze i będzie dotyczyło w ogólności nauki języków programowania. 

 

W jakie pułapki? We wszystkie! [śmiech] We wszystkie możliwe.

 

Następne pytanie. [śmiech]

 

Wiesz co, to co widzę w Pythonie patrząc na rozwój osób, które zaczynają, to jest kilka takich elementów, które się powtarzają. Zacząłbym pewnie od tego, że mają tendencje do nadużywania słowników. 

Słowniki to jest ekstremalnie fajna struktura danych, tylko że używanie ich wszędzie jest takim trochę strzeleniem sobie w stopę albo może nawet w kolano.

Tłumaczę czemu. Popatrzmy na programowanie troszkę jak na puzzle. Mamy sobie jakieś pojedyncze, układamy je i dostarczamy jakąś całość — z bliżej nieokreślonych komponentów składamy sobie całość. I super.

W momencie, kiedy używamy słowników, to nasze puzzle mają niejednorodny kształt. Każdy słownik może wyglądać inaczej. Ciężko nam jest więc ułożyć spójne, stabilne rozwiązanie z elementów, które mają niespójny kształt. Których kształt może się zmieniać. Doprowadzić do jakiejś dziury pomiędzy puzzlami. To powoduje, że jest dziura w całym rozwiązaniu, które dostarczamy. To, czego powinniśmy używać częściej, to są klasy. Po prostu. Czyli sprawić, żeby nasze puzzle były elementami, które mają jasno określony kształt. Jeżeli mamy jasno określony kształt puzzli, to możemy ułożyć z nich pełen obraz. Czyli dostarczyć działającą aplikację, którą później będzie się również łatwiej rozwijało. 

Mówiąc o tym osobom, które zaczynają, pewnie powiedzą mi, że no tak, ale w gruncie rzeczy taki słownik to łatwiej stworzyć. Tak nie do końca. W nowszych Pythonach mamy już data classes. To jest taki dekorator, który generuje większość upierdliwych rzeczy, jeśli chodzi o tworzenie klas w Pythonie. Tworzenie tych klas takich typowo do transferu danych, nie takich, które dostarczają funkcje, tylko są elementem do transferu danych, można łatwo generować. Jeżeli to rozwiązanie nadal jest nieakceptowalne to mamy jeszcze named tuple, to są takie nazwane tuple i one pozwalają w jednej linijce stworzyć nam obiekt, który jest stabilny i ma określony kształt, bo do tego dążymy. Żeby nasze elementy miały określony kształt, więc to jest jedna rzecz, w którą na pewno wpadają początkujący. Myślę, że to we wszystkich językach. W Javie to są chyba hashmapy, w PHP-ie to są chyba listy assocjacyjne [śmiech]. 

 

Mapy różnego rodzaju, bo to de facto jest podobna struktura danych, to pewnie najprościej z tego skorzystać. To prawda. 

 

To też właśnie sprawia, że jest pokusa, żeby łatwiej je sobie rozszerzać. Właśnie wtedy wprowadzamy ten brak kształtu i niespójność w całym systemie. No ale okej, idąc dalej, to na pewno takie podejście, które nazywa się peep driven development. 

Już tłumaczę. Kiedyś miałem taką sytuację, że mieliśmy bardzo mały projekt. Dosłownie 4, 5 plików. On dostarczał jakąś tam funkcjonalność, ale naprawdę… 4, 5 plików. 

Teraz tak. Potrzebowaliśmy to potestować. Prześledziliśmy sobie jakieś przypadki no i wyszło, że tych testów będzie 7, 8. Niedużo. Takie zadanie więc spadło na jedną osobę no i przychodzi PR, patrzy sobie, że do projektu dołączonych zostało 9 zależności. Patrzę: po co? 

 

Klasyk.

 

Okazało się, że osoba wybrała sobie inny framework do testów. Po to, żeby napisać inny… 8 testów, zdecydowała się wybrać całkowicie inny framework. To sprawiło, że zależności się pojawiły, ale w końcowym PR-ze tych zależności już nie było. Wytłumaczyliśmy, że nie tędy droga. 

To faktycznie się pojawia. Przykład ma pokazać to, że bardzo często rozwiązujemy problemy w taki sposób, że instalujemy dodatkowe paczki. Instalujemy ich mnóstwo. Tych paczek narasta, narasta, narasta i w ogóle bezrefleksyjnie patrzymy na to, że przecież te paczki idą z całym naszym projektem. Trzeba to utrzymywać, to jest ogromny bagaż, który za programistami będzie szedł. Fajnie sprawiać, żeby jednak ta lista zależności była możliwie najkrótsza. 

Dalej. Kolejna rzecz może troszeczkę wynikać przy osobach początkujących z tego, że… Są początkujące. Już tłumaczę o co chodzi. Piszą kod w Pythonie, w taki sposób, że on w sumie nie jest… Pisany w Pythonie.

Jak Python ma mnóstwo, mnóstwo rozwiązań, z których trzeba korzystać. Troszeczkę na zasadzie: skoro piszemy w Pythonie, no to piszmy w Pythonie. Osoby początkujące jak piszą kod w Pythonie to nie wygląda jak kod pythonowi, tylko troszeczkę jak Java na przykład. To pewnie wynika troszeczkę z braku wiedzy. Pewne rzeczy da się w Pythonie zrobić naprawdę ładnie i szybciej. Tutaj polecam po prostu pooglądać źródła bibliotek, jakichś przykładowych kodów, żeby zobaczyć, jak rozwiązywać problemy w Pythonie w sposób, w jaki sugeruje nam sam język. 

Mamy na przykład sytuację, że mamy dwie listy. Jedna ma wartość ABC, druga 123. Chcemy zrobić pętlę, która przejdzie po tych listach jednocześnie. Czyli mamy w jednym biegu pętli 1 i A, 2 i B, 3 i C. No to w Pythonie można zrobić to funkcją zip, ona sobie to połączy i będziemy mieli piękne rozwiązanie. Przepiękne — raj perfekcjonistów. Jednak zawsze widzę, że to jest gdzieś tam pętla 4 po jednej liście i zmienna I pobierana jest z drugiej listy. Takie rozwiązania, które pewnie też nie raz widziałeś. 

Czwartą taką rzeczą, która najczęściej rzuca mi się w oczy, to jest chyba brak przejrzystości kodu, ale nie chodzi mi o to, że jest jakiś bardzo brzydki, tylko totalne olewanie instrukcji albo tak naprawdę podpowiedzi IDE. Czyli jeżeli w Pythonie mamy coś takiego jak PEP8. To jest zbiór dobrych zasad tworzenia języka. On definiuje, że pomiędzy operatorami powinna być spacja. No i tych spacji namolnie nie ma. Wiem, że to jest niby pierdoła, ale w gruncie rzeczy jak każda standaryzacja jest ważna, ponieważ sprawia, że jednak ten kod później się łatwiej czyta, wiemy czego możemy się spodziewać i myślę, że warto się nad tą standaryzacją pochylić już na samym początku, bo później to będzie zdecydowanie plusować na naszą całą pracę. 

Myślę więc, że te 4 rzeczy najczęściej pojawiają się jako takie pułapki. 

 

Teraz chciałbym cię zapytać o wydajność, bo to jest coś, na co zwraca się dużą uwagę, jeśli chodzi o rozwiązania informatyczne. Google indeksuje niżej strony, które ładują się wolno, więc wydajność jest istotna nie tylko dla ludzi, okazuje się. 

Czy Pythona warto uczyć się z uwagi na jego szybkość działania? Jak byś mógł ocenić ten aspekt po latach doświadczeń z tym językiem? 

 

Szybkość Pythona jest w teorii wskazywana jako jego największa wada i to niby jest prawda, aczkolwiek ja bym powiedział, że Python jest wystarczająco szybki. To jest bardzo ważne zdanie. To znaczy, że jest wystarczająco szybki do praktycznie wszystkich zastosowań. Oznacza to, że nie jest demonem szybkości — no bo nie jest — a to nie znaczy, że jest wolny. Po prostu wystarczająco szybki.

Szybkość Pythona jest w teorii wskazywana jako jego największa wada i to niby jest prawda, aczkolwiek ja bym powiedział, że Python jest wystarczająco szybki. To jest bardzo ważne zdanie. To znaczy, że jest wystarczająco szybki do praktycznie wszystkich zastosowań. Oznacza to, że nie jest demonem szybkości — no bo nie jest — a to nie znaczy, że jest wolny. Po prostu wystarczająco szybki. 

Jest kilka elementów w Pythonie, które faktycznie pod względem wydajności mogą nam doskwierać. Może, zanim o tym powiem, to warto wspomnieć, że język jako Python to jest zbiór API — to jest opis gramatyki, składni i tak dalej. Całkowicie oddzielne od tego zagadnienie to jest jego implementacja. 

Mamy kilka implementacji Pythona. Najpopularniejszą implementacją, której wszyscy używamy to jest tzw. CPython. W momencie, kiedy używamy Pythona to zazwyczaj robimy skrót myślowy. Także uruchamiamy coś w Pythonie, to w domyśle jest tak, że uruchamiamy to w CPythonie. 

Dlaczego o tym mówię? Dlatego, że najpopularniejsza implementacja Pythona — właśnie ten CPython — ma coś takiego, co się nazywa GIL, czyli Global Interpreter Lock. 

To jest taki mechanizm… Mechanizmy to jest bardzo zawiłe słowo. Po prostu lock, który chroni wewnętrzne struktury Pythona przed tym, żeby wiele wątków nie miało dostępu do interpretera. 

To jest taki element, który musi być, ale sprawia on, że w gruncie rzeczy Python słabo sobie radzi z wątkami. Jego wielowątkowość jest taka troszkę udawana, bo jak przed chwilą powiedziałem, ten lock zapewnia, że tylko jeden wątek może mieć interpreter na własność. 

Teraz tak: to w miarę mało widać, w momencie, kiedy nasze wątki, w których pracujemy, robią jakieś IO. Odczyty bazy danych, zapisy i tak dalej, bo wtedy ten GIL, ten lock, o którym wspomniałem jest po prostu zwalniany. Tak wynika wprost z implementacji. 

Gorzej jest, jeżeli robimy w wątkach jakieś obliczenia czysto matematyczne. Czyli MIO. Wtedy to faktycznie jest trochę mało wydajne. Aczkolwiek to, co powiedziałem, troszkę kłóci się z tym, co powiedziałem wcześniej. Zastanówmy się. Powiedziałem, że Python jest świetny do obliczeń, typu NumPy i tak dalej. Teraz mówię, że wielowątkowe…

 

Słabo sobie z nimi radzi.

 

Tak! Dokładnie, więc się wyklucza! Już tłumaczę. Python sobie faktycznie słabo radzi, właśnie przez tego GIL-a, ale biblioteki tak jak NumPy są napisane nie w Pythonie, a w C. To sprawia, że one mogą sobie ręcznie podnosić tego GIL-a i opuszczać. One więc omijają ten problem tam gdzie mogą go ominąć, dzięki czemu dostarczają najlepszą możliwą wydajność Pythona w tym kontekście. Stąd więc wynika, że został troszkę workaround zrobiony. Obejście. Że to faktycznie zadziała i jest fajne, że te obliczenia w Pythonie można zrobić, tylko z tego wynika, że lepiej robić je właśnie korzystając z bibliotek typu NumPy, niż z takich elementów napisanych własnoręcznie. 

Okej. Mamy jest oczywiście wiele procesów, czyli multiprocessing. To jest podejście, które w Pythonie się faktycznie sprawdza. To nie jest o tyle ciekawe. Ciekawe jest podejście z pętlą zdarzeń. Pętla zdarzeń to jest taki element, który w Pythonie do biblioteki standardowej doszedł relatywnie dawno. Biblioteka nazywa się Asnyc IO i pozwala właśnie na implementację pętli zdarzeń, naprawdę używania pętli zdarzeń. 

 

jeśli chodzi o temat wydajności, no to, jeżeli mamy problem z wydajnością w Pythonie, to raz, że prawdopodobnie jest to wina kodu, a nie języka

 

Pętla zdarzeń jest jednowątkowa. Tutaj więc GIL w ogóle nie robi nam problemów a jednocześnie dostajemy takie przetwarzanie faktycznie na zasadzie, że możemy kilka elementów w teorii wykonywać na przemian, że one faktycznie gdzieś tam współpracują. Że działają naprzemiennie. I same testy wydajnościowe tego podejścia są naprawdę świetne, bo jakby Asnyc IO jest w tym momencie najbardziej modnym rozwiązaniem do implementacji jakichś serwerów, tym podobnych rzeczy. Tutaj więc ta pętla zdarzeń naprawdę jest świetna. No i jakby zmierzając do końca, jeśli chodzi o temat wydajności, no to, jeżeli mamy problem z wydajnością w Pythonie, to raz, że prawdopodobnie jest to wina kodu, a nie języka, a dwa, że jeżeli faktycznie mamy już ekstremalny problem, no to warto pamiętać, o tym, co powiedziałem wcześniej. Python jest jedynie zbiorem API. Czyli tego, jak mają wyglądać składnie i tak dalej, i tak dalej. Jego implementacje to już druga rzecz. 

To, że cały czas wszyscy korzystają z CPythona, to nie znaczy, że nie istnieją inne implementacje. Teraz o tym warto wspomnieć. 

Jest na przykład PyPy i to jest implementacja Pythona w Pythonie. Brzmi trochę zawile, ale PyPy utrzymuje, że część programów napisanych w Pythonie, uruchamiana pod PyPy-iem, pozwala osiągnąć szybkość 2-3 razy większą. To jest bardzo ciekawe. Ten projekt jest rozwijany. Poza tym mamy jeszcze Jythona, czyli implementacja Pythona w Javie, a wtedy dostajemy dostęp do całego JVM-a, co jest naprawdę świetnym rozwiązaniem, czy IronPython, gdzie mamy właśnie implementację w .NET. Jeżeli więc wszystkie optymalizacje zawodzą, to zawsze można spróbować iść w inną implementację. 

 

Okej. Język to jak gdyby jedno, a z drugiej strony jest właśnie ta biblioteka standardowa, jak ją nazywamy, o której wspomniałeś, czyli zbiór takich podstawowych narzędzi, z których na co dzień korzystamy. Wiadomo, że codziennie nie piszemy sobie sortowania bąbelkowego, zipowania list i tak dalej, i tak dalej. Korzystamy z implementacji, które są zoptymalizowane i które są dla nas już przygotowane. 

Chciałbym zapytać jak wygląda własnie ta biblioteka standardowa w Pythonie? Jakie narzędzia nam dostarcza? 

 

Dostarcza tyle, że ciężko je wymienić! [śmiech] Python ma bardzo dużo rzeczy już sam w sobie. Czyli nie musimy doinstalowywać, mamy pełną obsługę pracy na kopcach, na przykład. Mamy podstawowe przetwarzanie dźwięku na tej bibliotece standardowej. Mamy profilowanie kodu, mamy bibliotekę do testów, mamy implementację kolejek LIFO, FIFO, kolejek priorytetowych, mamy możliwość pracowania z mailami czy z SMTP czy tam POP-em. Mamy tego naprawdę bardzo dużo i te implementacje też nie zawsze są implementacjami w czystym Pythonie, a są na przykład implementacjami w C, czyli są dodatkowo zoptymalizowane. Warto więc korzystać tutaj z biblioteki standardowej, co troszkę łączy się z tym, co powiedziałem wcześniej — że warto korzystać z rozwiązań Pythonowych, bo one są po prostu pod Pythona zoptymalizowane. 

Co  w sumie jest jasne — można byłoby się tego domyślić. Jeśli chodzi o bibliotekę standardową, to rozwiązań jest bardzo, bardzo dużo. Są naprawdę fajnej jakości. Myślę, że spokojnie można tworzyć projekty, które nie mają żadnych zależności albo mają jakieś tam podstawowe zależności. 

Biblioteka standardowa w Pythonie jest naprawdę bardzo, bardzo bogata. 

 

Okej, to może słowo na temat jakości. Python to jest język dynamicznie typowany. Czyli nie ma takiego, chociażby strażnika w postaci kompilatora, bo jest językiem interpretowanym, nie ma tutaj kompilatora, który byłby nam w stanie jakieś takie podstawowe błędy, wynikające, chociażby z wykorzystania nie tego typu w kodzie, wyłapać, już na etapie kompilacji. Bardzo często dostajemy taki błąd na przysłowiową twarz podczas wykonywania. 

Czy to znaczy, że Python może być podatny na błędy właśnie z tego powodu? 

 

Każdy język może być podatny na błędy, a co do tego jednego argumentu, to nowsze wersje Pythona mają już w jakiś sposób typowania. Z tym że to typowanie nie jest takim typowaniem jak na przykład w Javie, no bo możemy sobie skorzystać z typowania w Pythonie nowszym i określić, że na przykład zmienna ma typ int, ale Python spokojnie się uruchomi, jeżeli do tej zmiennej przypiszemy Stringa. [śmiech] To typowanie więc jest bardziej adnotacją, informacją dla IDE. 

Jeżeli będziemy sobie definiować takie typy właśnie w taki sposób, to IDE będzie nam odpowiadać jaki typ powinno się przekazać i informować, jeżeli przekazaliśmy typ nieodpowiedni. 

Możemy sugestie PyCharma, bo o nim mówię, olać i mimo wszystko robić sobie tak trochę brzydko, ale mamy inne rozwiązania. Mamy na przykład MyPy-a. MyPy to jest takie rozwiązanie, które jest właśnie takim statycznym analizatorem i sprawdzi ci, czy twój kod jest poprawny pod względem typów. On już faktycznie sprawdzi, czy ten kod, który napisałeś, trzyma się typów. 

Łatwo MyPy-a dodać do jakiegoś swojego CI, żeby sprawdzał sobie ten kod na bieżąco i w ten sposób otrzymać w gruncie rzeczy język, który jest dynamicznie typowany, ale ma takiego bodyguarda, który stoi i sprawdza, czy na pewno te typy są respektowane. Podsumowując: dynamiczna natura Pythona może być troszeczkę, na życzenie programistów oczywiście, związana. Właśnie — narzędzia typu MyPy. 

Co do ogólnej jakości kodu, to mamy jakby podziały na pakiety, na moduły, formatery kodu, mamy Blacka, który jest naprawdę fajnym formaterem kodu. To jest taka biblioteka, która faktycznie ten kod sformatuje. Mamy mnóstwo narzędzi, żeby ten kod w Pythonie wyglądał w porządku, więc można tworzyć oczywiście brzydki kod, aczkolwiek język nie ułatwia tego. 

 

Może odejdźmy na chwilę od kwestii bardzo ściśle technicznych. Chciałem zapytać, jak wygląda community związane z Pythonem — tutaj mam na myśli może trochę porównanie naszego, polskiego podwórka i sceny globalnej, zarówno pod kątem oprogramowania OpenSource, które jest tworzone przez community, jak i jakichś meetingów czy konferencji wokół Pythona właśnie. 

 

To w Polsce jest na pewno PyCon. To jest chyba największa w Polsce konferencja, ściśle związana z Pythonem. 

Poza tym Python pojawia się na takich bardziej interdyscyplinarnych konferencjach typu 4Developers, na przykład. Tam zazwyczaj są osobne ścieżki, więc też tam się pojawia. To na co warto zwrócić uwagę to jest to, że takie meetingi pojawiające się przy większych miastach w Polsce bardzo prężnie działają. 

Na przykład w Łodzi jest Python Łódź, w Warszawie jest PyWaw. Tam są takie dwugodzinne spotkania, które mają trzy prezentacje albo jakiś live coding i to też bardzo fajnie działa. Te tematy, które chłopaki pokazują, są naprawdę fajne. 

Myślę, że tutaj ta społeczność rośnie. Jeśli chodzi o taką internetową społeczność, to tak jak powiedziałem — mamy tę blogosferę, która się cały czas rozwija i to fajnie działa. Można powiedzieć, że tych blogerów jest więcej i faktycznie treści, które tworzą, są coraz lepsze. 

 

Jak wygląda rynek pracy programistów Pythona? Chodzi mi o porównanie ilości ofert, oferowanych stawek do średniej. Jakbyś mógł się odnieść, coś nakreślić jak to wygląda? 

 

Myślę, że programiści Pythona jednak dostają te stawki bardzo fajne. Na pewno jest to związane z rosnącą popularnością tego języka. Nie odbiegamy od innych krajów, ale troszkę, tak jak wspomniałem, ta świadomość, możliwości tego języka w Polsce dopiero rośnie. Oczekuję jednak, że tych ofert pracy, przede wszystkim dla juniorów, będzie jednak więcej. 

 

Okej, to jak weszliśmy już w przewidywania co do przyszłości, to już na koniec chciałbym cię zapytać, jak właśnie widzisz przyszłość Pythona. Jak może ten język wyglądać za parę lat no i przede wszystkim, czy uważasz, że utrzyma swoją popularność wśród innych języków programowania? 

 

Wydaje mi się, że tak. Patrząc na ten indeks, tendencja jest jednak wzrostowa, więc wydaje mi się, że to, że sam machine learning jest faktycznie bardzo popularnym elementem teraz, dziedziną w gruncie rzeczy, wskazuje też na to, że Python się utrzyma. Myślę więc, że będzie pojawiać się więcej ofert pracy, a także projektów tworzonych w tym języku. I że będziemy jako kraj szli w tę stronę, w którą idą inne kraje, czyli w braniu garściami z tego języka. 

 

Świetnie. Fajnie, Mateusz! Bardzo ci dziękuję za ciekawą rozmowę, za nakreślenie, pokazanie jak ten krajobraz Pythona wygląda. Myślę, że zainspirowałeś najbardziej słuchaczy tym, że jeśli ktoś myśli, żeby się tego języka nauczyć, to zdecydowanie warto!

Jeszcze raz bardzo dziękuję za rozmowę i na koniec proszę powiedz, gdzie cię można znaleźć w Internecie, jak się można z Tobą skontaktować? 

 

Prowadzę bloga — mmazurek.dev Prowadzę go już 11 lat, więc w gruncie rzeczy myślę, że jest tam dużo fajnego contentu i przez tę stronę można się ze mną najłatwiej skontaktować. Jestem na Fejsie, mam fanpage. Jestem na Instagramie, na Twitterze i LinkedInie. Zapraszam każdego, kto chciałby pogadać o Pythonie czy o czymkolwiek!

 

Super. Oczywiście wszystkie linki dodam do notatki tego odcinka. Z mojej strony bardzo dziękuję i do usłyszenia! Cześć!

 

Dzięki! Cześć! 

 

To na tyle z tego, co przygotowałem dla Ciebie na dzisiaj. Mam nadzieję, że po przesłuchaniu naszej rozmowy z Mateuszem wiesz już, że warto i dlaczego warto nauczyć się Pythona. 

 

Teraz mała niespodzianka!

Nie tak dawno podcast Porozmawiajmy o IT został dodany do aplikacji EmpikGo, gdzie możesz poczytać i posłuchać różnych materiałów, w tym podcastów. Z tej okazji, dla dziesięciu osób, które jako pierwsze odezwą się do mnie na maila krzysztof@porozmawiajmyoit.pl mam kody umożliwiające darmowy, miesięczny dostęp do tej aplikacji i wszystkich tam zawartych materiałów! 

 

Często dostaję od Was, słuchaczy, pytania związane z IT. Zakres jest dość szeroki. Od polecenia kursu programowania po przewidywania co do przyszłości jakiejś technologii i rozpoczęcia tworzenia swojej aplikacji. Aby jeszcze wzmocnić i poszerzyć to, co robię, chciałbym zaprosić Cię do umówienia się ze mną na rozmowę — Skype, Hangouts, telefon — dowolnie. Postaram się w miarę swojej wiedzy — zupełnie za darmo i bez żadnych zobowiązań, odpowiedzieć na Twoje pytanie związane z IT. Z wyborem technologii, prowadzeniem projektu i rozwojem kariery. 

Możesz ustalić ze mną spotkanie wysyłając teraz maila na krzysztof@porozmawiajmyoit.pl

Jeśli spodobał Ci się ten odcinek i nie chcesz przegapić kolejnych epizodów podcastu, zasubskrybuj go w swojej aplikacji podcastowej. Jeśli nie wiesz, jak to zrobić wejdź na stronę porozmawiajmyoit.pl/subskrybuj

Nazywam się Krzysztof Kempiński a to był odcinek podcastu Porozmawiajmy o IT o tym, czy warto uczyć się Pythona. 

Zapraszam do kolejnego odcinka już za tydzień! 

Cześć! 

+ Pokaż całą transkrypcję
– Schowaj transkrypcję
mm
Krzysztof Kempiński
krzysztof@porozmawiajmyoit.pl

Jestem ekspertem w branży IT, w której działam od 2005 roku. Zawodowo zajmuję się web-developmentem i zarządzaniem działami IT. Dodatkowo prowadzę podcast, kanał na YouTube i blog programistyczny. Moją misją jest inspirowanie ludzi do poszerzania swoich horyzontów poprzez publikowanie wywiadów o trendach, technologiach i zjawiskach występujących w IT.