W ostatnim artykule poświęconemu Python, rozmawialiśmy o nowych funkcjonalnościach wersji 3.9. Tym razem Konrad Gawda – Cloud Evangelist i trener programowania – skupia się m.in. na mocnych i słabych stronach w użytkowaniu Pythona.
DCG: Jakie są największe plusy w użytkowaniu Pythona?
KG: Powiedziałbym, że wygoda, elastyczność i społeczność.
Same założenia języka sprawiają, że jest on wygodny w użytkowaniu. Zarówno dynamiczne typowanie jak i wbudowany garbage collector, to przykłady cech, które sprawiają, że programista więcej czasu może poświęcić na logikę – sedno problemu. Powiedziałbym wręcz, że to język dla tych, którzy lubią programować.
Przyjemne jest też na pewno to, że Python nie wymusza konkretnego stylu – można pisać programy imperatywnie, obiektowo, czy funkcyjnie. Ale to nie jedyny przejaw elastyczności tego języka. Dobrze nadaje się on do wielu różnych dziedzin, dzięki czemu też łatwo pisać programy łączące np. stronę www, obróbkę dźwięku i analizę Big Data.
Elastyczność pracy z różnymi zagadnieniami zyskujemy też dzięki bogatym zbiorom bibliotek udostępnianych przez użytkowników z całego świata, w duchu Open Source. I ta społeczność to jest też zaleta sama w sobie. W dzisiejszym programowaniu dokumentacja to jedno, ale ocean całkiem dobrze zredagowanych pytań i odpowiedzi w sieci to drugie, bezcenne źródło wiedzy przy rozwiązywaniu problemów. A jeśli chodzi o społeczność w bardziej namacalnym znaczeniu, zachęcam do zapoznania się z warszawskim PyWaw (http://pywaw.org/), jak i pythonowymi meetupami z innych miast.
DCG: Jakie słabości ma Python?
KG: Python jest językiem interpretowalnym, albo jak się też czasem mówi: skryptowym. To ma swoje przełożenie na wydajność. Oczywiście, jak mówiliśmy wcześniej, przy okazji vectorcall, same "surowe" obliczenia można przenieść do osobnego modułu w języku C/C++. I to też jest dobre wyjście, Python dobrze sprawdza się jako "klej" łączący różne wydajne narzędzia. W pewnych szczególnych przypadkach nawet sama ilość interakcji pomiędzy komponentami łączonymi przez ten "klej" jest na tyle duża, że rozważa się zmianę technologii.
Z interpreterem wiąże się również waga niezbędnych plików. W klasycznych wdrożeniach miejsce zajęte przez binaria i biblioteki jest pomijalne. Kiedy jednak przechodzimy do kontenerów, języki kompilowalne dają większe możliwości optymalizacji.
DCG: Co możemy tworzyć za pomocą Pythona?
KG: Chyba najbardziej oczywista odpowiedź, to: strony internetowe, a konkretnie ich backend, czyli to co przesyła informacje do naszej przeglądarki. Ale web to tylko jedna z twarzy platform, rozumianych jako najróżniejsze systemy, które są stale uruchomione i przetwarzają nadchodzące informacje – od użytkowników albo innych systemów. Przykładem może być platforma wirtualizacyjna OpenStack, z którą wcześniej pracowałem, zarządzająca wielkimi serwerowniami na całym świecie.
Drugi popularny kierunek związany z Pythonem to nauka, a w szczególności analiza danych i uczenie maszynowe. Wygoda języka sprawia, że dobrze sprawdza się do eksperymentowania, pisania kodu na żywo i jego modyfikowania w zależności od efektów. Powstały bogate narzędzia, zarówno do interaktywnego programowania, wizualizacji, jak i samego przetwarzania danych.
Ale to oczywiście tylko przykłady, bo jako elastyczny język, Python ma nieskończenie wiele zastosowań. Może warto wspomnieć jeszcze o dwóch. Część mniejszych lub większych narzędzi programistycznych i administracyjnych, na przykład na systemach Linux, jest stworzona w Pythonie. To bardzo przydatna robota, o której mało się mówi na co dzień. Inne zastosowanie, to oskryptowanie programów – bywa, że specjalistyczna aplikacja, z której korzystamy (np. do tworzenia map, albo animacji 3D), poza swoją okienkową, "klikalną" odsłoną, posiada też możliwość sterowania z poziomu kodu pythonowego. I znam ludzi, którzy zdecydowali się na naukę języka, właśnie po to, żeby zautomatyzować swoją codzienną pracę.
DCG: Jak z perspektywy czasu oceniasz zmiany w Pythonie i użyteczność tego języka programowania?
KG: Zmiany zawsze są potrzebne. Sam Python 3 to był potrzebny krok, bo zakończył kilka krępujących problemów wrośniętych na stałe w poprzednią wersję. Zmiany funkcjonalności, poza tymi najbardziej oczywistymi, niosą ze sobą pewne koszty, czasem wymagają zmiany sposobu myślenia, mogą dotknąć podstaw czyjejś filozofii myślenia o Pythonie. Jako człowiek związany z językiem już od dłuższego czasu, czuję czasem taki niepokój. Ale widzę, że są to zmiany dobrze przemyślane i przedyskutowane (publicznie), a język idzie z duchem czasu.
Użyteczność Pythona oceniam bardzo dobrze. Sam używam go w najróżniejszych projektach: od programowania maleńkich urządzeń typu embedded do budowy stron www w podejściu serverless. Widać też, że Python nie tylko sam ewoluuje, ale jest też źródłem inspiracji dla nowych języków, jak Cython (kompilowalny) czy GDScript do gier.
DCG: Jakie certyfikaty przydadzą się na początku i w trakcie kariery Programisty Python?
KG: Certyfikaty? Osobiście uważam, że żadne. Python - i to dla mnie jest w nim piękne – ma w sobie silnego ducha Open Source. Nie do końca pozwala się ubrać w korporacyjny garnitur rodem z lat 90, w którym na pierwszym miejscu jest "papier". Jeśli poszukujemy kogoś, kto porozumie się z resztą zespołu, ma praktyczne podejście i przede wszystkim myśli – trudno to sprawdzić egzaminem.
Pewnie warto zachować dyplom ze szkolenia, jeśli jesteśmy na samym początku drogi. A dalej, jeśli chcemy czymś się pochwalić, może niech będą nim nasz wkład w inne projekty, konto na GitHubie i coś co daliśmy społeczności. Czy nie byłoby pięknie, gdyby cała energia ludzkości przeznaczana na zdawanie egzaminów posłużyła do rozwiązywania problemów innych ludzi?
____________________________________
Konrad Gawda zajmuje się popularyzacją rozwiązań chmurowych dla Orange Polska, jest też trenerem programowania w języku Python. Ukończył Politechnikę Warszawską w 2010 r., karierę rozpoczął jako specjalista R&D w Orange Labs. Zaangażowany w warszawskie spotkania użytkowników Pythona od pierwszego spotkania w 2011 r. Pracował na przecięciu tematów oprogramowania i sieci, przy wdrożeniach Software Defined Networking i chmury sieciowej NFVI.