Kilka słów o wadach i zaletach Pythona

Czy warto uczyć się Pythona? Czy jest wydajny? Jak z zastosowaniem do profesjonalnych rozwiązań? Tego nie wiem, ale chętnie opowiem o pierwszych wrażeniach po kilkunastu dniach obcowania z tym językiem.

Minęło już trochę linijek kodu, odkąd zacząłem bawić się Pythonem na Raspberry Pi. Mogę zdecydowanie powiedzieć, że jest to język, który wzbudził we mnie najwięcej sprzecznych emocji ze wszystkich, jakich w życiu próbowałem (a na dzisiejszy dzień jest ich około 20). Na wstępie chciałbym zaznaczyć, że nie uważam się za eksperta. Ledwie liznąłem obiektowość i składnię tego języka, dlatego jedyne co mogę opisać to wrażenia, nie poważną analizę.

Historia i filozofia

Python to skryptowy język programowania wysokiego poziomu, który został opublikowany na przełomie lat 80 i 90. Został stworzony dla systemu operacyjnego Amoeba jako następca języka ABC. O ile ów system nie przetrwał, o tyle sam Python tak i ma się znakomicie. Posiada wiele portów na wszystkie najpopularniejsze systemy w różnych językach (np. CPython, napisany w C czy Jython napisany w Javie). Jego głównym założeniem jest czytelność kodu i uniwersalność.

Zalety

  • Python ma moim zdaniem bardzo niski próg wejścia, co oznacza że każdy może zacząć naukę programowania właśnie od niego. Wystarczy zainstalować dowolny parser. Jest on dołączony do każdej popularniejszej dystrybucji Linuxa, a instalacja na pozostałych systemach jest szybka i banalna.
  • Czytelna składnia, która jest wśród mainstreamowych języków czymś nietypowym. Mam tu na myśli przede wszystkim wymuszenie na programiście stosowania wcięć w blokach kodu. Oznacza to, że chcąc zrobić instrukcję warunkową, pętlę, metodę, czy cokolwiek innego w tym stylu, musimy cały kod wewnętrzny oddzielić wcięciami (tabulacjami bądź spacjami). Początkowo bardzo mnie to irytowało. Z perspektywy tego krótkiego czasu jednak zdecydowanie to doceniam. Zamiast „inline’ować” wszystko byle szybko, jesteśmy zmuszeni do zachowania przynajmniej pozorów staranności.
  • Szybkość działania w porównaniu do innych języków skryptowych w stylu PHP, czy Ruby. Między innymi chodzi tu o możliwość „częściowej kompilacji” do bytecodu.
  • Bardzo duży zbiór gotowych bibliotek.

Wady

  • Nieprzemyślana składnia. Obiekty inicjalizuje się w ten sam sposób co wykonywanie funkcji, przez co momentami może wystąpić problem w odróżnieniu, co jest czym. Tworząc metody obiektu trzeba umieszczać w argumencie self, żeby móc się potem odwołać do innych metod i pól obiektu. Brak komentarzy wieloliniowych (istnieje „””, lecz jest to tylko ich namiastka)… Można by tak wymieniać.
  • Wiele metod bibliotek zwraca tuple (po polsku krotki, czyli serie danych a’la tablice, tyle że rekordy mogą być różnego typu), zamiast obiektów, czy tablic asocjacyjnych. Często trzeba szukać w dokumentacji, co dokładnie zwraca dana metoda.
  • Używany głównie w aplikacjach serwerowych. W aplikacjach desktopowych widać go mniej. W zastosowaniach mobilnych praktycznie nie istnieje.
  • Brzydka składnia. „Prywatne” metody deklaruje się za pomocą podwójnej twardej spacji ( np. __prywatnaMetoda() ).
  • Brak prywatności metod. Wszystkie metody (prywatne również) są w rzeczywistości dostępne na zewnątrz. Klasy są tworzone na zasadzie „Wszyscy tutaj jesteśmy dorośli. Jeśli nie wiesz dokładnie co dana prywatna metoda robi, nie używaj jej.”

Opinia końcowa

Python to potężny język, w którym w bardzo krótkim czasie można napisać całkiem sensowne skrypty. Idealnie spisuje się w pisaniu narzędzi, oraz małych i średnich aplikacji. Jest uniwersalny, przez co można w nim wykodzić dosłownie wszystko. Ma nawet biblioteki do tworzenia stron internetowych czy GUI. Doskonałe porównanie pokazuje poniższy obrazek:

Szczerze mówiąc, Python wygląda mi na leciwego już ojca NodeJS. Obie te technologie służą w gruncie rzeczy do tworzenia w głównej mierze aplikacji serwerowych. Mają sporo wspólnych cech jak powszechne zastosowanie w aplikacjach internetowych, czy oprogramowaniu serwerów, jak i różnic. JavaScriptowi z Node’a zdecydowanie przydałyby się ujednolicenie i klaryfikacja składni czy kompilacja do bytecodu. Niestety jednak, Python mógłby od JavaScriptu zapożyczyć skalowalność, elastyczność i sporo rozwiązań programistycznych, których mu brakuje.

PS: Projekt dostępny jest na GitHubie. Aktualnie skupiam się na podstawowych funkcjonalnościach i eksperymentuje z możliwościami Pythona. Jeśli kogoś najdzie ochota na Pull Requesty, proszę się jeszcze wstrzymać do czasu ostatecznego zdefiniowania podstawowych struktur i funkcjonalności 🙂