Wywiady

Pythonowi brakuje statycznego typowania. Ale nadal to potrzebny język

Jakuba Szafrańskiego zapytaliśmy m.in. o to, czego brakuje Pythonowi. Odpowiedział, że 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 – dodał. Mimo tych braków, Python to jeden z ważniejszych języków programowania, którego raczej nie wyprą młode języki.

Dowodzi temu też fakt, że duże firmy jak Google, Uber czy Facebook nadal korzystają z Pythona. Google używa go do pracy nad sztuczną inteligencją i uczeniem maszynowym. – Dodatkowo, jeden z najpopularniejszych portali należących do Google – YouTube – intensywnie wykorzystuje Pythona. Uber natomiast na swoim blogu chwali się bogatym stosem technologicznym, wykorzystując między innymi Javę, Go, Pythona i Node – dodaje Jakub Szafrański, Fullstack Python Developer w STX Next.

Jaka będzie przyszłość Pythona? Dowiecie się tego z poniższej rozmowy.

Pierwszy raz zainteresowałeś się Pythonem w 2011 roku. Co od tego czasu zmieniło się w samym języku? Jak przez te siedem lat zmienił się Python?

Przede wszystkim na popularności zyskał Python 3.x. Gdy zaczynałem, wiele narzędzi było cały czas napisanych dla Pythona 2.7, wiele bibliotek z “trójką” zwyczajnie nie działało i ludzie nie byli zbyt chętni, by się przesiąść na nowszą wersję. Przypomnę tylko, że Python w wersji 2.7 (czyli najnowsze wydanie “dwójki”) nie jest już aktywnie rozwijany. Do 2020 roku gałąź 2.x będzie otrzymywać jedynie poprawki bezpieczeństwa.

Na szczęście w miarę upływu czasu zaczęło się to zmieniać. Python 3 coraz częściej pojawia się w liście wspieranych – lub nawet wymaganych – wersji Pythona. Nawet najpopularniejszy framework do tworzenia aplikacji webowych – Django – w swojej najnowszej wersji (2.0) nie wspiera już Pythona 2.7.

Na całe szczęście – sam język nie zmienił się aż tak bardzo. Oczywiście, “trójka” posiada wiele usprawnień i nowości, które przyjąłem z otwartymi ramionami, jednak muszę przyznać, że była to ewolucja, a nie rewolucja i każdy, kto pisał w 2.7, szybko odnalazł się w nowej wersji.

Jaka jest główna przewaga Pythona nad innymi językami programowania?

Dla programistów – prostota. Kod jest prosty, mechanizm paczek jest prosty, struktura plików jest prosta. Standardowa biblioteka jest bardzo bogata, dokumentacja jest czytelna i obszerna, StackOverflow pęka w szwach od pytań i odpowiedzi na temat Pythona. Nie bez powodu mówi się, że jeśli coś da się zrobić, na pewno istnieje na to jakaś pythonowa paczka. Język jest prosty i logiczny, nie ma ukrytych niespodzianek, przez co bardzo łatwo można się go nauczyć (szczególnie, jeśli ktoś pisał w innych językach).

W Pythonie po prostu pisze się bardzo przyjemnie. Dla firm, które swoją przyszłość wiążą z Pythonem – zdecydowanie Time To Market. Trzeba przyznać, że dzięki cechom, które wymieniłem jako zalety dla programistów, produkty stworzone w Pythonie powstają bardzo szybko – dlatego też widać, że wiele startupów wybiera Pythona i podobne technologie.

Poza tym, bogata społeczność, dokumentacja i wsparcie zapewniają, że Python nie zniknie zbyt prędko, co też jest bardzo ważną cechą dla firmy, która zamierza z daną technologią związać swój produkt.

Czego brakuje Pythonowi? Co chętnie przeniósłbyś z innych języków?

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. Oczywiście, dynamiczne typowanie to swego rodzaju plus, ale moim zdaniem fajnie byłoby mieć wybór.

W dużych projektach, najzwyczajniej w świecie, modyfikacja jakiejś wewnętrznej biblioteki staje się trudna, gdy nie ma narzędzia, które w skuteczny sposób zweryfikuje.

Na chwilę obecną, przynajmniej ja, korzystam z różnych linterów i polegam na IDE w celu weryfikacji, czy przekazuje do swoich metod odpowiednie typy. Muszę przyznać, że nawet się to sprawdza, ale też nie wydaje się być “solidnym” rozwiązaniem.

Wielowątkowość z kolei to temat, który w Pythonie przewija się bardzo często. Ja większość swojej pracy spędzam na tworzeniu aplikacji webowych – w mojej pracy bardzo rzadko zdarza się, by to właśnie wykonywanie kodu Pythona było najsłabszym ogniwem, w tego rodzaju aplikacjach większość czasu interpreter spędza na czekaniu na bazę, lub zewnętrzne API. W Pythonie przyjęło się, że gdy trzeba wykorzystać więcej rdzeni używa się wielu procesów (których obsługa jest oczywiście w standardowej bibliotece), zamiast wielu wątków.

Poleciłbyś naukę Pythona laikowi, początkującemu programiście?

Osobiście uważam, że językami, które warto poznać jako pierwsze są C i C++. Python to bardzo dobry i bardzo przyjemny język programowania, świetnie nadaje się do tłumaczenia i nauczania wielu zagadnień związanych z programowaniem – jednak Python dużo rzeczy abstrahuje.

W Pythonie nie alokujemy jawnie pamięci, nie ma wskaźników i nie borykamy się z wieloma problemami, które w C/C++ są na porządku dziennym. To oczywiście jest jego zaleta, jednak uważam, że każdy programista powinien wiedzieć jakie konsekwencje uboczne powoduje wykonanie kodu, który napisał.

Python natomiast świetnie się sprawdza przy tłumaczeniu i nauczaniu algorytmów. Nie bez powodu żartobliwie się go nazywa “wykonywalnym pseudokodem”.

Od czego byś zaczął taką naukę?

W STXNext prowadzimy warsztaty, Python Has Power, gdzie uczymy początkujących programistów Pythona. Dla osób, które są początkującymi programistami, zaczynamy taką naukę od pokazania podstawowej składni i przedstawienia podstawowych typów, z których się korzysta w Pythonie. Sama składnia jest natomiast na tyle prosta, że bardzo szybko przechodzimy do praktycznych zadań.

Do samodzielnej nauki dla osób, które miały już styczność z programowaniem obiektowym polecam Zanurkuj w Pythonie. Była to jedna z pierwszych książek, które przeczytałem o tym języku i bardzo podobała mi się jej formuła. Przede wszystkim, niezależnie od tego jak zaczniemy się uczyć, polecam od razu wskoczyć do praktyki.

Moim zdaniem, najlepszą metodą nauki każdego języka jest po prostu próbować i uczyć się na własnych błędach.

Co myślisz o nowych językach programowania jak Go, Elixir? Mają szansę wyprzeć takie tuzy jak Python, Ruby czy PHP?

Myślę, że wyparcie języka nie jest taką prostą rzeczą, którą można osiągnąć w tak krótkim czasie – szczególnie jeśli mówimy o technologiach, które mają tak bogate społeczności i tyle produktów, które z tych technologii korzystają.

Ostatnio widzimy wzrost popularności Go, z resztą nie bez powodu – to również bardzo fajny i przyjemny język. Na tę chwilę wolę wstrzymać się od jednoznacznego stwierdzenia, czy któraś z wymienionych technologii wyprze Pythona, czy nawet Ruby i PHP.

Wydaje mi się, że nawet jeśli tak się stanie, to nie będzie to całkowite wyparcie, które sprawi, że Python zostanie zapomniany i na pewno nie nastąpi to w ciągu najbliższych lat.

Mówi się, że w Pythonie można napisać wszystko. Do czego warto jednak wykorzystać inne języki?

Zawsze twierdziłem, że powinno się używać narzędzia odpowiedniego do problemu, który staramy się rozwiązać. Sam język to oczywiście nie wszystko, ważne są też dostępne biblioteki i wsparcie.

Tak przykładowo, wydaje mi się, że wsparcie dla Pythona w środowisku Microsoft Windows nie jest na najwyższym poziomie. Gdybym, przykładowo, musiał napisać aplikację okienkową na Windowsa, pewnie zwróciłbym się ku C#/.NET.

Pewnie nie użyłbym też Pythona tam, gdzie liczy się szybkość na poziomie pojedynczych mikrosekund. Tak jak już wspomniałem wcześniej – Python abstrahuje wiele rzeczy i nie pozwala zarządzać pamięcią i CPU na takim poziomie, jak C, czy Assembler.

W czym Python okazuje się najlepszym językiem programowania? Jaki problem najszybciej da się rozwiązać wykorzystując właśnie Pythona?

Python jest bardzo wszechstronnym językiem, znajdującym zastosowanie w wielu dziedzinach. Jedną z rzeczy, która go wyróżnia, jest bardzo rozbudowany REPL oraz dużo prostych i wydajnych bibliotek, czy frameworków.

Z tego względu zauważyłem, że Python świetnie się sprawdza do wszelkiego rodzaju prototypowania – zarówno małych, prostych skryptów, jak i nieco większych aplikacji. Dodatkowo, zauważyłem że Python doskonale się sprawdza w tworzeniu mikroserwisów.

Oczywiście, to nie znaczy, że Python nie nadaje się do dużych projektów – wręcz przeciwnie. Python z powodzeniem jest używany do wielkich aplikacji, przez największych graczy na rynku IT. Natomiast to, co Pythona – i podobne mu języki – wyróżnia, to właśnie próg wejścia i bardzo krótki czas, którego potrzeba by kod który tworzymy przerodził się w coś co da się używać.

Jak na etapie rozpoczęcia prac realizacyjnych swojego pomysłu na produkt, który docelowo ma działać globalnie (jak np. Dropbox) podjąć decyzję o użytym języku programowania? Na co warto zwrócić uwagę?

Czynników jest bardzo wiele. Time To Market, czyli czas, jaki minie od pomysłu do faktycznej sprzedaży. Proces tworzenia aplikacji jest bardzo złożony i może zająć dużo czasu, co potrafi pochłonąć dużo pieniędzy. Wsparcie i społeczność – nawet najfajniejsza technologia straci, jeśli nie będzie używana, rozwijana i wspierana.

Na końcu – rynek pracowniczy. Firmy, które opierają swój sukces na rozwoju oprogramowania muszą przede wszystkim pozyskać ludzi, gotowych je rozwijać. W takiej sytuacji trzeba się zastanowić, kto się tym zajmie. Wśród dostępnych opcji są między innymi zatrudnianie programistów samodzielnie, lub outsourcing.

W obu przypadkach należy przynajmniej zbadać, czy dana technologia zapewni takiej firmie personel, który będzie w stanie rozwinąć i utrzymać aplikację w przyszłości, a w przypadku samodzielnego zatrudnienia trzeba jeszcze wziąć pod uwagę, czy na danym obszarze znajdują się programiści, którzy potrafią z danej technologii korzystać i będą zainteresowani ofertą pracy.

Jaka jest przyszłość Pythona?

Obecnie obserwuję duży trend wzrostu popularności Pythona w środowisku naukowym, szczególnie w obszarach wykorzystujących sztuczną inteligencję i uczenie maszynowe. Osobiście chciałbym zobaczyć wzrost popularności w aplikacjach desktopowych.

Cały czas Python jest wykorzystywany w środowisku open-source – wiele narzędzi systemowych w popularnych dystrybucjach GNU/Linux napisanych jest przy wykorzystaniu Pythona i nie zapowiada się, by to się miało szybko zmienić.

Jakkolwiek Python się nie rozwinie, jedno jest pewne – zostanie z nami jeszcze na bardzo długi czas.


Jakub Szafrański. Ma prawie 9-letnie doświadczenie związane z programowaniem, w tym prawie 7 komercyjnie. Od przeszło 7 lat związany z Pythonem, którego polubił ze względu na jego czytelność i prostotę. Od 2016 roku spełnia się w największym w Europie Python Software House, STX Next, gdzie nie tylko pracuje nad złożonymi projektami webowymi, ale i wspomaga innych w ich rozwoju, uczestnicząc w warsztatach i prelekcjach. Prywatnie – fan nurkowania, pływania oraz dobrego kina.

Redaktor naczelny w Just Geek IT

Od pięciu lat rozwija jeden z największych polskich portali contentowych dot. branży IT. Jest autorem formatu devdebat, w którym zderza opinie kilku ekspertów na temat wybranego zagadnienia. Od 10 lat pracuje zdalnie.

Podobne artykuły

[wpdevart_facebook_comment curent_url="https://justjoin.it/blog/pythonie-brakuje-mi-statycznego-typowania-nadal-jeden-wazniejszych-jezykow" order_type="social" width="100%" count_of_comments="8" ]