Krótki opis wad i zalet Pythona cz. 2
hejto.plKrótko o kilku wadach jak i zaletach Pythona okiem kogoś, kto z niego korzysta. Bardziej dla początkujących. Wpis można tez przeczytać na moim blogu - grski.pl
Zalety
Ekspresywność
Python jest bardzo ekspresywny. Co to znaczy? Otóż w Pythonie za pomocą relatywnie niewielkiej ilości kodu, można osiągnąć to, co w innych językach zajęłoby czasami kilka razy tyle. Żeby nie być gołosłownym, popatrzmy na przykład klasycznego programu, którym zaczyna się naukę programowania – Hello World, czy po polsku, Witaj Świecie. W Pythonie wygląda on tak:
:::python<br />
print(‘Hello World’)<br />
<br />
```<br />
<br />
Dość proste i zrozumiałe, prawda? Jedna linijka i gotowe. Przyjrzymy się natomiast innym językom. Zacznijmy od Javy:<br />
<br />
```<br />
:::java<br />
public class HelloWorld{<br />
public static void main(void) {<br />
System.out.println(”Hello World”);<br />
}<br />
}<br />
<br />
```<br />
<br />
Tu dalej w miarę jasno, mimo kilku pozornie tajemniczych komend, wciąż można łatwo odczytać, co dany program robi, ale weźmy, załóżmy, na celownik C++:<br />
<br />
```<br />
:::c++<br />
#include <br />
using namespace std;<br />
int main() {<br />
cout 0; i--) s.push\_back(i);<br />
copy\_if (s.begin(), s.end(), back\_inserter(a), \[\](int x { <br />
return x % 2 == 1 ;} );<br />
transform(a.begin(), a.end(), a.begin(), \[\](int x){<br />
return x\*x;});<br />
sort(a.begin(), a.end()); <br />
for (auto&& i : a) cout x % 2 == 1)<br />
.map(x -> x \* x)<br />
.sorted()<br />
.toArray();<br />
System.out.println(Arrays.toString(a));<br />
}<br />
}<br />
<br />
```<br />
<br />
I na koniec Python.<br />
<br />
```<br />
#!python<br />
a = filter(lambda x: x % 2 == 1, reversed(range(20)))<br />
a = list(map(lambda x: x\*x, a))<br />
print(list(sorted(a)))<br />
<br />
```<br />
<br />
Alterantywnie jeszcze moja wersja:<br />
<br />
```<br />
#!python<br />
print(sorted(\[i\*i for i in reversed(range(20)) if i % 2\]))<br />
<br />
```<br />
<br />
Pozostawię bez komentarza.<br />
<br />
Czy to znaczy, że te języki są gorsze, a Python jest królem? Absolutnie nie, nigdy tak nie myśl.<br />
<br />
Każdy język jest jak narzędzie – ma swoje zastosowania, w których jest dobry, wyśmienity, ale ma też takie, do których kompletnie się nie nadaje. Tak jest i tutaj. Tak jest wszędzie. Owszem, czasem zdarzają się fanatycy danych technologii czy rozwiązań, którym językowo-technologiczne zapalenie opon mózgowych przyćmiewa obiektywny osąd, ale to nic. My nie chcemy tacy być. Bądźmy mądrzy i rozsądni, ułatwiajmy sobie życie, używając odpowiednich narzędzi do odpowiednich zadań.<br />
<br />
Niemniej jednak Python pozwala nam pisać więcej w mniejszej ilości kodu. To oczywiście przychodzi w zamian za pewną cenę, którą trzeba zapłacić, i która sprawia, że Python dobry jest w pewnych sytuacjach a w innych już nie.<br />
<br />
## Prostota<br />
<br />
Wróćmy do poprzedniego punktu – jak popatrzymy na kod Pythona, to można by rzec, że to w zasadzie po prostu zapisane polecenie po angielsku. Cóż bowiem znaczy słowo print? Nic innego jak drukuj/wydrukuj.<br />
<br />
Od razu można się domyślić, że programiście chodzi o to, by komputer coś wypisał na ekran. Podobnie sprawa się ma z innymi elementami języka, naprawdę, wystarczy znać angielski i już prawie możemy zrozumieć sporą część Pythona. W dużej ilości języków jest podobnie, ale nie aż tak bardzo podobne są one do angielskiego, jak Python. Naprawdę, drugiego tak prostego języka jeszcze nie spotkałem, a trochę ich, przynajmniej pobieżnie, zdarzyło mi się używać – czy to JavaScript, Java, C, C++, Dart, Scala.<br />
<br />
Jedynym językiem, który może konkurować z Pythonem prostotą, jest chyba C – ale to z racji tego, że core tego języka jest po prostu malutkie. Gdy przyjdzie nam do zarządzania pamięcią, wskaźników i innych, równie fajnych rzeczy z C, to zaczyna się tęsknić za Pythonem.<br />
<br />
## Python językiem dynamicznie typowanym<br />
<br />
Co to znaczy? Cóż, jeśli jesteś nowicjuszem w programowaniu, to możesz kompletnie nie mieć pojęcia, o co chodzi, ale to nic.<br />
<br />
W skrócie sprawa tyczy się faktu takiego, że w statycznie typowanych językach, podczas deklaracji zmiennych, należy podać, jakiego typu dane będzie ta zmienna przechowywała. Za przykład niech posłuży nam tutaj Java:<br />
<br />
```<br />
:::java<br />
int someNumber = 123;<br />
<br />
```<br />
<br />
Zapis powyżej mówi ‘javie’, że chcemy utworzyć zmienną o nazwie `someNumber`, która będzie zawierała dane typu `int` – `integer`, czyli nic innego jak liczby całkowite.<br />
<br />
A co to w ogóle znaczy, że ma utworzyć zmienną? A no coś takiego:<br />
<br />
```<br />
Słuchaj komputer, tu masz jakieś dane, (w tym wypadku ‘123’), zapamiętaj sobie tę wartość, zapisz ją gdzieś, i od teraz, za każdym razem, gdy napiszę w programie \`someNumber\`, to wiedz, że chodzi mi właśnie o wartość zapisaną w tamtym miejscu.<br />
<br />
```<br />
<br />
Próba zapisania innych danych do tej zmiennej, załóżmy, tablicy czy liczby rzeczywistej, nie skończy się zbyt dobrze lub po naszej myśli.<br />
<br />
W Pythonie takich obostrzeń i wymogów nie ma. Po pierwsze, podczas inicjalizacji zmiennej, nie musimy podawać jej typu, a po drugie później, możemy bez problemu zmieniać rodzaj danych, jaki przechowujemy w danej zmiennej, zatem ekwiwalentem zapisu wyżej w Pythonie, byłby kod:<br />
<br />
```<br />
:::python<br />
some\_number = 123<br />
<br />
```<br />
<br />
Później bez problemu zaś, możemy wpisać sobie:<br />
<br />
```<br />
:::python<br />
some\_number = ‘Hi there’<br />
<br />
```<br />
<br />
Z czego to wynika, dowiesz się już w nieco innym artykule.<br />
<br />
## Społeczność<br />
<br />
Python ma jedną, naprawdę dużą zaletę. Jest to jego społeczność, która raz, że jest naprawdę pomocna, dwa, że jej rozmiar jest imponujący. Dzięki temu ilość dostępnych materiałów, poradników, bibliotek, frameworków i skryptów potrafi po prostu pozytywnie zaskoczyć.<br />
<br />
Dzięki otwarto-źródłowej kulturze Pythona wiele niesamowitych narzędzi codziennie jest oddawanych w nasze ręce do użytku, zupełnie za darmo, tak po prostu.<br />
<br />
Powoduje to, że często nie musimy wymyślać koła na nowo – wystarczy import jakiejś biblioteki, którą ktoś już kiedyś napisał. Oszczędza to często czasu i zmartwień, pozwalając się skupić na tym, co w naszej implementacji ważne.<br />
<br />
Poza tym, co zrobić, kiedy utkniemy w którymś miejscu pisania programu i nie wiemy co dalej, gdy napotkamy jakiś błąd, którego nie potrafimy rozwiązać? Cóż, z racji wieku samego Pythona oraz rozmiaru jego społeczności, można w większości przypadków założyć, że ktoś przed nami napotkał już podobny problem i zapytał o to w Internecie, lub opisał rozwiązanie danego problemu.<br />
<br />
Ludzie chętnie dzielą się wiedzą wbrew pozorom. Dzięki temu nie musimy sami szukać rozwiązania godzinami, grzebiąc w dokumentacji, źródłach czy po prostu eksperymentując. Możemy najzwyczajniej w świecie kogoś zapytać, bo jest względnie dużo osób znających Pythona, albo znaleźć odpowiedź innych, którzy rozwiązali ten problem przed nami. Nie zawsze tak jest.<br />
<br />
Jako kontr przykład, podam język Dart. Dość nowy język, niezbyt popularny, ogółem mała społeczność. Niemniej jednak czasem tworzę w tym języku i zdarza się nierzadko, iż napotykam jakiś problem, o którym informacji nie znajdę nigdzie, bo po prostu akurat nikomu innemu się nie przydarzył jeszcze, lub też nikt inny go nie opisał, więc muszę sam szukać rozwiązania, przeczesując dokumentacje, źródła i po prostu eksperymentując.<br />
<br />
Do tego czasami dochodzi niedogodność w postaci tego, że niektóre rzeczy, które np. w Pythonie czy Javie zostały już napisane przez kogoś innego, ładnie zapakowane w jakąś paczkę i rozpowszechnione do użycia, w Darcie niekoniecznie są i trzeba je napisać samodzielnie.<br />
<br />
Podobnie, jeśli chodzi o samą naukę języka – materiałów jest znacznie mniej, często są one przestarzałe z racji tego, że Dart jest językiem ciągle się rozwijającym i to mocno, co tydzień wychodzą nowe wersje samego języka, a z racji niskiej popularności mało osób o nim pisze, jeszcze mniej tworzy o nim książki czy poradniki. To nie ułatwia nauki, zwłaszcza początkującym programistom. Dobrze, że chociaż dokumentacja jest całkiem dobra, co prawda nie tak dobra, jak dokumentacja np. Django, ale i tak – nie jest źle.<br />
<br />
Dlatego też twierdzę, że społeczność Pythona jest jego największą zaletą i to ona, dosłownie, tworzy ten wspaniały język, czyniąc go tym, czym jest.
