Wszystko, co musicie wiedzieć o Pythonie. Jakie ma wady, jakie zalety?
Python z założenia miał być zwięzły i prosty. Większość kodu łatwo jest zrozumieć nawet kompletnym amatorom, którzy choć trochę znają język angielski. Można go odpalić prawie wszędzie, jeśli tylko dysponuje się odpowiednimi zasobami sprzętowymi. Przeczytajcie, jakie ma zalety, jakie wady i jak wygląda nauka Pythona w porównaniu do innych języków.
Python pierwszy raz światło dzienne ujrzał na początku lat 90. Guido van Rossum zaczął pracę nad nim z myślą, że jego dzieło stanowić będzie następcę rozwijanego w latach 80-tych języka ABC.
Sama nazwa, jak mogłoby się zdawać, nie pochodzi od węża, ale od popularnego serialu komediowego emitowanego na łamach BBC w latach siedemdziesiątych – “Latający Cyrk Monty Pythona”. Van Rossum był ogromnym fanem tej produkcji i uznał, że jego język musi mieć krótką, unikalną i lekko tajemniczą nazwę, stąd taka decyzja. Jak jednak żartobliwie podkreślono, nie trzeba lubić brytyjskiego humoru, aby polubić Pythona.
Spis treści
Pierwsze wersje Pythona i BeOpen
Swój żywot Python rozpoczął w wersji 0.9.0 w lutym 1991 roku. Już wówczas obsługiwał wyjątki, funkcje i typy danych podstawowych, ale posiadał także mechanizm współdzielenia funkcjonalności między klasami itd. Od tego momentu język ruszył w rozwoju z kopyta.
Wersja 1.0 ostatecznie wyszła w styczniu 1994 roku. Również w tym roku powstał comp.lang.python, główne forum dyskusyjne społeczności, co uznawane jest za kamień milowy w rozwoju bazy użytkowników Pythona. Wersja Python 1.2 była ostatnią wydaną przez CWI (Centum Matematyki i Informatyki w Amsterdamie). Od 1995 roku twórca języka kontynuował pracę nad Pythonem w Corporation for National Research Initiatives (CNRI).
Powstało tam kilka wersji Pythona, do 1.6 włącznie. I to od niej zaczęły się naciski użytkowników na taką wersję języka, którą można by było używać z oprogramowaniem na licencji BPL. Tak powstała wersja 1.6.1, która opierała się na kilku drobnych poprawkach, oraz licencji, dzięki której późniejsze wersje języka mogły być zgodne z pożądaną licencją.
W 2000 roku zespół van Rossuma przeniósł się do BeOpen.com, gdzie powstał BeOpen PythonLabs. Z jego ramienia wydany został Python 2.0, jednak krótko po tym Guido wraz ze swoimi ludźmi przeszli do Digital Creations. Dopiero wtedy, po wydaniu wersji 2.1 wszystko się ustatkowało. Cała własność intelektualna projektu dodana od tego momentu jest własnością Python Software Foundation (PSF).
Python. Zalety i wady
Jakie są główne zalety i wady Pythona? Wymienia je Tomasz Kaczmarek, Principal Software Engineer w Egnyte:
Zalety
- Dosyć nowoczesna składnia języka i możliwość korzystania z różnych paradygmatów programowania (obiektowego, funkcyjnego, reaktywnego),
- Przyjazna społeczność, duża ilość odpowiedzi na pytania na StackOverflow,
- Python przychodzi w pakiecie “z bateriami”, jak mówią pythoniści, czyli z bardzo szeroką biblioteką standardowych paczek (nie trzeba nic instalować dodatkowo żeby tworzyć nawet dosyć złożone projekty) oraz jeszcze większą listą paczek Open Source dostępnych w publicznych repozytoriach (do łatwej instalacji). W tym są bardzo dojrzałe pakiety do obróbki obrazu, tworzenia wykresów, statystycznej analizy danych, komunikacji sieciowej, sztucznej inteligencji (zwłaszcza Deep Learning) oraz Machine Learning, przetwarzania języka naturalnego, interakcji z bazami danych, tworzenia aplikacji internetowych, wyciągania danych ze stron internetowych, algorytmów grafowych,
- Niezależność od platformy – programy w Pythonie działają w większości na każdej platformie, dla której dostępny jest interpreter Pythona. Wystarczy raz napisać i można uruchomić na niemal każdym systemie operacyjnym,
- Python jest świetnym językiem do prototypowania, czyli szybkiego pisania próbnych wersji aplikacji, które mają zweryfikować podejście lub udowodnić, że jakaś koncepcja zadziała. A to dzięki zwięzłej i bogatej składni, wspomnianemu bogactwu paczek i minimalnym wymaganiom aby zacząć tworzyć aplikację,
- Olbrzymia ilość materiałów w sieci, świetna dokumentacja dla dużej części standardowych paczek,
- Zarządzana pamięć – interpreter Pythona sam zwalnia pamięć przydzieloną programowi a już nieużywaną. To ułatwia myślenie o programie, skraca kod i uniemożliwia popełnienie błędów związanych z przedwczesnym zwolnieniem jeszcze potrzebnej pamięci, które są częste w programach pisanych np. w językach C czy C++.
Wady
- Złożony system publikowania własnych paczek Open Source, zwłaszcza jeżeli wykorzystują biblioteki w C – Python niestety pada tu ofiarą swojego sukcesu i dziedziczy trudności związane z budowaniem natywnego kodu (np. w języku C) na konkretną platformę systemowo-sprzętową,
- System typów – to jednocześnie zaleta i wada. Dla początkujących programistów pewnym szokiem może być to, że w programie nie trzeba podawać typów zmiennych. Python rozpoznaje je sam i odpowiednio sprawdza w trakcie działania programu, czy nie próbujemy wykonać na danych niedozwolonych operacji (tzw. silny system typów). Dzieje się to jednak dopiero na etapie wykonania konkretnego kawałka kodu, a więc o potencjalnym błędzie dowiemy się dopiero przy uruchomieniu. To powoduje, że tworząc programy w Pythonie trzeba większą wagę przyłożyć do ich testowania. W przeciwieństwie do języków kompilowanych (C, C++, Java, C# i wiele innych) kompilator nie pomoże nam wykryć pewnych błędów, więc musimy sami zadbać o odpowiednie pokrycie kodu testami. Brak widocznych typów jest też pewnego rodzaju utrudnieniem, gdy rozwijamy duży system. Wtedy widoczne typy są istotną pomocą dla programisty czytającego napisany przez kogoś innego kod. Dlatego też nowsze wersje Pythona posiadają opcjonalną możliwość opisania funkcji i klas typami, co jest zalecaną praktyką w przypadku większych aplikacji,
- Ze względu na rozległy ekosystem i bogactwo zależności, pewnych wyzwań dostarcza konteneryzacja aplikacji w Pythonie, a dokładnie – zarządzanie zależnościami i budowanie obrazów aplikacji, które miałyby być wykorzystane w środowisku skonteneryzowanym (np. docker). Jest to jak najbardziej możliwe, ale trzeba uważnie kontrolować zwłaszcza paczki, które wykorzystują biblioteki natywne.
Jak zostać Python Developerem?
Co trzeba zrobić, żeby zostać Python Developerem? Z jakich materiałów warto korzystać?
– Ilość materiałów w sieci, w postaci zarówno dokumentacji, tutoriali, materiałów wideo jest dla Pythona olbrzymia (nawet tych bezpłatnych), zatem większym problemem będzie znalezienie tych najbardziej wartościowych, niż ich brak – uważa Tomasz Kaczmarek, Principal Software Engineer w Egnyte.
Jakie zatem materiały poleca? – Jakość dokumentacji jest często bardzo dobra i warto korzystać z tej dostępnej po prostu na stronie python.org. Na pewno przydatna jest znajomość angielskiego, ale to uniwersalna obecnie prawda. Oprócz tego warto korzystać z książek prezentujących podstawy Pythona, których jest wiele na rynku. Jednak najbardziej sensowne wydaje się podejście praktyczne: próba zrealizowania konkretnego niewielkiego projektu, który stopniowo, wraz z poznawaniem ekosystemu Pythona i samego języka, będzie można rozwijać i przekształcać. Wiele pakietów pythonowych posiada tutoriale zorganizowane właśnie w ten sposób – od niewielkiego programu realizującego proste zadanie do sporej aplikacji wykorzystującej wiele możliwości danego pakietu i samego języka – radzi Kaczmarek.
Nauka Pythona w porównaniu do innych języków
Nauka Pythona jest trudna, czy prosta? Ile czasu trzeba poświęcić, żeby zgłębić podstawy?
– W porównaniu do innych języków, nauka Pythona jest prostsza, często jest on zaraz obok Scratch’a językiem wyboru do nauki programowania. Opanowanie podstaw wymaga od kilku godzin do kilkunastu dni, zależnie od tempa uczenia – uważa Tomasz Kaczmarek.
I podaje kilka przykładów:
- W porównaniu do innych języków skryptowych (Perl/bash) składnia Pythona jest łatwiejsza do ogarnięcia i jest mniej wyjątków lub niespodzianek, które wymagają zapamiętania.
- W porównaniu do innych języków web-owych (PHP, JS) – opanowanie tworzenia aplikacji sieciowych jest podobnie złożone, choć dla bardziej zaawansowanych zastosowań Python wydaje się dawać większą elastyczność w tym znaczeniu, że z wykorzystaniem Pythona można tworzyć aplikacje sieciowe, które jednocześnie są na przykład aplikacjami wykorzystującymi Machine Learning lub bogate biblioteki analizy danych statystycznych w Pythonie. W innych językach tego typu bibliotek jest mniej, co może wynikać z tego że głównym motorem rozwoju tych paczek jest środowisko naukowe, które z łatwością przyjęło Pythona.
- W porównaniu do języków kompilowanych wyższego poziomu (Java, C#), Python daje łatwiejszy start dla bardzo krótkich i prostych programów. To że przychodzi “z bateriami” jest też przydatne dla mniejszych lub nawet średnio złożonych aplikacji. Dla dużych systemów zaczyna mieć większe znaczenie ekosystem (dostępność pakietów Open Source i komercyjnych) i tutaj Python nie odstaje, ale za to ujawnia się specyfika tych pakietów i pewne ukierunkowanie społeczności danego języka na różne rodzaje aplikacji. Na przykład: z pewnością łatwiej tworzyć aplikacje dedykowane na platformę Windows w C# niż w Pythonie.
- W porównaniu do języków kompilowanych niższego poziomu (C, C++), z punktu widzenia programisty w wielu przypadkach ułatwieniem w Pythonie może być zarządzanie pamięcią. W C trzeba alokować i zwalniać pamięć wykorzystywaną przez program, podczas gdy interpreter Pythona robi to sam. Z drugiej strony, jeżeli zachodzi potrzeba mocnego optymalizowania kodu, Python daje mniej szans niż te języki – między innymi z tego samego powodu. Ważną cechą Pythona jest jednak to, że umożliwia łatwe wykorzystanie istniejących bibliotek C. Istnieje też wiele gotowych paczek dla Pythona – swoistych “owijek” wokół bibliotek w C – co daje maksymalną efektywność, ale też pythonową łatwość programowania.
Zdjęcie główne pochodzi z unsplash.com.