Czego brakuje Pythonowi? Devdebata
Społeczność grupy Python Poland dała o sobie znać po publikacji naszego wywiadu pt. Pythonowi brakuje statycznego typowania. Ale nadal to potrzebny język, który przeprowadziliśmy z Jakubem Szafrańskim, Fullstack Python Developerem w STX Next. Opublikowany przez nas post spotkał się z ogromną reakcją społeczności, która w ponad 100 komentarzach wyraziła swoje uwagi dotyczące Pythona. Postanowiliśmy zebrać je w jednym miejscu.
W marcu opublikowaliśmy wywiad z Jakubem Szafrańskim, którego poprosiliśmy o odpowiedź m.in. na pytanie: Czego brakuje Pythonowi? To samo pytanie zadaliśmy naszym ekspertom, ale zanim dowiecie się, co nam powiedzieli, przeczytajcie wypowiedź, od której się wszystko zaczęło. — [Pythonowi brakuje] prawdziwego statycznego typowania, natywnych interfejsów i wydajniejszej wielowątkowości. Pewnie to, co właśnie napisałem zdenerwuje niejednego programistę Pythona. Jednak mi osobiście wszystkich tych cech brakuje. W przypadku typowania i wielowątkowości – zdaję sobie sprawę, że to zależy od implementacji, jednak większość ludzi – w tym ja – korzysta z tej najpopularniejszej, czyli cPython, która tych cech zwyczajnie nie posiada — powiedział nam Jakub Szafrański.
Zdaniem naszych rozmówców, których zaprosiliśmy do tej krótkiej devdebaty, część programistów stara się wykorzystać Pythona do wszystkich projektów, a przecież do niektórych z nich lepiej wykorzystać inne języki programowania. — Python w pewnym momencie po prostu “nie wyrabia” i jedynym sposobem na przeskoczenie tego problemu jest zmiana technologii — powiedział nam Rafał Łużyński, Technical Lead w Red Sky. Eksperci docenili jednak Pythona i uważają, że nadal jest potrzebnym językiem, choć śmiało można go zastąpić. Devdebata przyniosła wiele ciekawych spostrzeżeń, które znajdziecie poniżej.
Wypowiedzi udzielili:
Michal Majchrzak. Senior Backend developer w Centra. Entuzjasta Elixira i Go, wcześniej pracował na stanowisku developera Pythona oraz Fullstack Developera – Python, Js, Go, Elixir. Przez lata pełnił funkcje kierownika zespołów IT, był też liderem projektu.
Dominik Kozaczko. Python Wizard. Od 2005 roku równolegle pracował jako nauczyciel informatyki oraz programista; uczył Pythona w liceum zanim to stało się modne, zapoczątkował akcję „Python na maturze”, przez 8 lat organizował konferencję „Dni Wolnego Oprogramowania; od 2016 niemal całkowicie poświęcił się programowaniu.
Rafał Łużyński. Technical Lead w Red Sky. Programista z ponad 10-cio letnim doświadczeniem komercyjnym. Koncentruje się na tworzeniu czystej, łatwej w utrzymaniu i łatwej do rozbudowy bazy kodu.
Spis treści
Pytanie #1. Czego faktycznie brakuje Pythonowi? Statycznego typowania, czy może jest to coś innego?
Odpowiada: Michal Majchrzak, Senior Backend developer w Centra:
Pythonowi brakuje wsparcia dla pattern matching’u, rekursji ogonowej. Jeżeli mówimy o szerszym aspekcie, to brakuje mu pogodzenia się z byciem prostym językiem skryptowym do zadań specjalnych.
Odpowiada: Dominik Kozaczko, Python Wizard:
Pythonowi nie brakuje statycznego typowania, dlatego że został zaprojektowany jako język typowany dynamicznie. Dzięki temu można stosować kacze typowanie, trzeba jednak umieć robić to z głową. Dodatkowo, Python 3 dodał typehinting, który jest kompromisem między dynamicznym typowaniem, a koniecznością wymuszania konkretnego typu w niektórych scenariuszach. Jedyne czego Pythonowi brakuje, to porządna obsługa obliczeń czasowych. Moduł datetime jest tak paskudnie skopany, że dopiero nakładka w postaci pendulum nadaje się do normalnego użycia. A przecież to co jest w pendulum powinno być wbudowane standardowo.
Odpowiada: Rafał Łużyński, Technical Lead w Red Sky:
Python ma narzędzie do statycznej analizy typów (mypy), które jest aktywnie rozwijane przez samego Guido, także nawet on widzi, że typowanie statyczne jest potrzebne. Nie jest to może MUST HAVE, ale na pewno NICE TO HAVE. Podobnym przykładem jest JS, który ma bardzo podobne założenia do Pythona i też zaczęły powstawać do niego type checkery jak TypeScript, czy Flow. Ale odpowiadając na pytanie, to rzeczywiście nie brakuje mu statycznego typowania, bo w łatwy sposób możne je samemu dodać, ale nie dlatego, że jest zaprojektowany jako dynamicznie typowalny.
Pytanie #2. Zgodzisz się ze stwierdzeniem, że Python nie jest szczególnie dobrze zaprojektowanym językiem?
Odpowiada: Michal Majchrzak, Senior Backend developer w Centra:
PHP jest świetnie zaprojektowanym językiem… do templatek. Ktoś kiedyś zrobił z tego język backendowy i zaczął się początek końca. Moim zdaniem Python cierpi na tą samą przypadłość. Świetny język skryptowy mogący w całości zastąpić systemowego basha. Genialny w swojej prostocie, idealny do małych rzeczy. Jednak w swojej karierze nie widziałem jeszcze dobrze zrobionej dużej aplikacji w Pythonie. Podejście, z którym się spotykałem i z którym starałem się „walczyć” było: „skoro Python na to pozwala, to dlaczego mielibyśmy go nie używać?”. Wielodziedziczenie sypało się gęsto, jak i dziwnie uwielbiane metaprogramowanie, a efektem tego był całkowity chaos w projekcie (co nie oznacza, że wielodziedziczenie lub metaprogramowanie jest złe. Wraz z wielką mocą przychodzi wielka odpowiedzialność).
Nie jestem zwolennikiem Pythonowego podejścia do mutowalności i jej braku (albo mutujemy wszystko, albo nic… Serio, sprawdza się to o wiele lepiej). Powoduje to różnorakie implikacje, na które trzeba z natury uważać. Python jest świetnym językiem i po ponad 6 latach zawodowego używania go, wciąż gdzieś mi się tam przewija, mimo że poszedłem w inną stronę. Mam jednak wrażenie, że społeczność Pythonowa wymyśla coraz to nowe protezy mające zmienić cudowność tego języka i zrobić z niego coś, czym nigdy nie był.
Odpowiada: Dominik Kozaczko, Python Wizard:
Python jest świetnie zaprojektowanym językiem. Świadczy o tym choćby fakt, że aż do wersji 2.7 wszelkie zmiany odbywały się z zachowaniem wstecznej kompatybilności. Język rozwijał się przez długie lata. Z niektórych koncepcji dało się wycofać w sposób nie łamiący wstecznej kompatybilności — świadczy to o bardzo rozsądnych wstępnych założeniach i elastyczności składni. Nie udało się jednak uniknąć pewnych błędów, które naprawiono dopiero wydając Py3. Nie oznacza to, że wcześniej język był źle zaprojektowany.
Odpowiada: Rafał Łużyński, Technical Lead w Red Sky:
Jakbym miał patrzeć na języki pod kątem zaprojektowania, to pewnie żaden nie byłby idealny (ja akurat preferuję języki funkcyjne). Python jest zaprojektowany na tyle dobrze, że używa go masa programistów zarówno w małych, jak i bardzo dużych projektach. Natomiast powiem szczerze, że jakbym miał wybierać pomiędzy PHPem i Pythonem, to zawsze wybrałbym Pythona, szczególnie teraz jak mypy jest już realnym rozwiązaniem problemu braku typów.
Pytanie #3. Jakie napotykasz największe problemy związane z wykorzystaniem Pythona?
Odpowiada: Michal Majchrzak, Senior Backend developer w Centra:
Moim zdaniem problemem Pythona jest jego społeczność i jej usilne starania wprowadzenia go w każde możliwe miejsce. Zamiast szukać najlepszego rozwiązania pod dany problem projektowy, sięga się po coś, co jest proste i nie wymaga wyjścia ze strefy komfortu. Wraz z rozwojem projektu, coraz bardziej nagina się zasady dobrego programowania w Pythonie, przez co to, co miało być proste i elastyczne staje się wielkim monolitem z długiem. Ten sam problem można znaleźć także w projektach opartych na języku PHP.
Odpowiada: Dominik Kozaczko, Python Wizard:
Największą bolączką w Pythonie jest aktualnie moduł datetime, który nie nadaje się do wykonywania obliczeń wymagających przeliczania czasu między różnymi strefami, w szczególności w okolicach zmiany między czasem zimowym a letnim. Powoduje to konieczność używania zewnętrznych bibliotek, z których dopiero pendulum realizuje wszystkie zadania w sposób poprawny będąc jednocześnie “drop-in replacement” dla datetime.
Odpowiada: Rafał Łużyński, Technical Lead w Red Sky:
Python wciąż za słabo wspiera programowanie funkcyjne, ale nie był pod tym kątem projektowany, więc to zrozumiałe. Poza tym jak rezygnuję w pracy z Pythona, to w 95% przypadków ze względu na performance. Python po prostu w pewnym momencie “nie wyrabia” i jedynym sposobem na przeskoczenie tego problemu jest zmiana technologii.
Pytanie #4. Jakie są Twoim zdaniem największe przewagi Pythona nad innymi językami?
Odpowiada: Dominik Kozaczko, Python Wizard:
Niski próg wejścia oraz niesamowicie wysoki sufit. Wszechstronność zastosowań tego
języka potrafi przyprawić o zawrót głowy. Jak się ktoś uprze, to nawet oprogramowanie na urządzenia mobilne może pisać w Pythonie(Kivy).
Odpowiada: Rafał Łużyński, Technical Lead w Red Sky:
Jak kolega wyżej napisał – niski próg wejścia, wszechstronność, czytelność i przede wszystkim duże i całkiem dojrzałe community — to największe przewagi Pythona.
Mamy nadzieję, że powyższa devdebata przypadła Wam do gustu i dowiedzieliście się z niej jeszcze więcej na temat Pythona. My zachęcamy jeszcze raz do przeczytania wywiadu o Pythonie, od którego zaczęła się dyskusja, oraz do przejrzenia samej dyskusji, bo zawiera wiele ciekawych wątków.
Jeśli spodobała Wam się koncepcja devdebaty i chcielibyście w niej uczestniczyć, dajcie znać w komentarzu albo odezwij się na adam@justjoin.it.