Krótki opis wad i zalet Pythona cz. 1

hejto.pl

Kró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.
hejto.pl

Komentarze (3)

grski

Hm, edycja artykułów działa nieco topornie, musze zgłosić buga. Z racji ograniczonej długości artykułów podzieliłem całość na części.

sebastian-turczuk

Czytanie z komórki jest bardzo uciążliwe, ze względu na brak zwijania tekstu linijki są bardzo długie

grski

@sebastian-turczuk Powinno być już ok, wcześniej nie mogłem edytować.

Zaloguj się aby komentować