Ahoj, prekvapila me ta hromada hejtu Pythonu od lidi, kteri v nem zkousi programovat stylem ktery znaji ze staticky typovanych jazyku a divi se, ze to neni ono, popr. si vyberou neco co v Pythonu jde technicky udelat, ale Pythonisti to sami povazuji za praseni - a na tom ukazuji, jak je Python problematicky.
Z meho pohledu jedna z vyhod Pythonu je, ze cloveku neda moc prace se naucit zaklady a diky spouste hotovych a dobre odladenych knihoven dovede s malym usilim vyprodukovat neco uzitecneho. To je uzitecne jak pro data science, tak pro devops, tak pro lidi co se uci programovat. Kod v Pythonu vypada hodne podobne jako pseudokod ve kterem se popisuji algoritmy nezavisle na jazyku, pomoci zabudovanych zakladnich typu pro heterogenni dynamicke seznamy, slovniky a mnoziny se da s malym usilim vyresit spousta uloh. Clovek muze zacit u skriptu (ktery by psal v Bashi) a prejit k funkcim a tridam, jak se projekt preklapi z prototypu do produkcni kvality. Webovy stack pro API server je hodne intuitivni (Flask, Gunicorn, nginx - nebo Tornado/Sanic), stack pro webove GUI ma spoustu typickych uloh uz vyresenou (Django, vcetne ORM). Existuje jak intutitivni orezane active-record ORM (peewee), tak plnotucne Hibernate-like/unit of work ORM (SQLAlchemy), tak klienti pro NoSQL databaze (napr. Mongo), fronty (napr. Redis-based jako rq a Celery, nebo Kafka).
S tim pomuze paradni podpora pro automatizaci testu, paradni podpora pro linting (vcetne coding style), kdo ma rad kontrolu typu tak sahne i po lintingu typu. Vetsina design patternu se da resit mnohem jednoduseji (napr. strategie pomoci slovniku "pointeru" na funkce), ale nektere postupy z C++ like jazyku jsou hodne podobne (dependency injection). Vicenasobna dedicnost se pouziva jen vyjimecne (zminovane mixiny nejsou neco, co by clovek pouzival casto), naopak dekoratory (retry, elapsed time, URL routing, registrace callbacku), context managery (transakce, setup+teardown, zamykani), iteratory a pointery na funkce/metody/tridy se v idiomatickem (pythonic) kodu pouzivaji hodne casto. Hodne se pouziva kompozice misto dedicnosti, interface je spis o kompatibilnich signaturach, kod se pise genericky (dokud argument podporuje operace ktere s nim chci provadet, nezajimam se o jeho typ - trosku podobne s templates v C++). Hodne se iteruje stylem foreach/bez indexu, testy na konkretni typ objektu nebyvaji potreba. Casto se pouziva "funkcionalni" zapis for cyklu ktere generuji data (dict/set/list comprehension, generator expression) a casto se pouzivaji korutiny (yield misto return - reentrantni funkce ktere si podrzi svuj stav a pri dalsim zavolani pokracuje tam kde minule skoncila).
Pomalost a pametova nenazranost je hodne zvelicovana - spousta knihoven ktere jsou narocne na CPU jsou kompilovane z C a obalene rozhranim ktere je umoznuje volat z Pythonu (sklearn, scipy, lxml, ujson apod.), popr. ukladaji data v Cckovych staticky typovanych strukturach (numpy). V dnesni dobe microservices se casto vetsi datove struktury stejne cpou do SQL/NoSQL/Redis-like cache, takze se opet ukladaji usporne (ale samozrejme se k nim pristupuje s overheadem sitoveho spojeni). Podobna situace je u GILu a orezaneho multithreadingu: Kde potrebuju CPU vykon, volim procesy a ozelim sdileny stav, kde potrebuju spoustu paralelnich IO ktere jsou vetsinou idle (websockety), volim kooperativni multitasking (asyncio). Slabiny Pythonu se daji dobre kompenzovat, jen se clovek musi naucit jak - a to chce investovat vetsi usili, nez ktere hateri byli ochotni dat.
Python se navic pouziva pro ovladani Docker ekosystemu a Ansible (cimz se kompenzuje dalsi nedostatek Pythonu - roztristeny deployment), daji se v nem psat ulohy pro distribuovane task schedulery (Dask, Airflow), dobre se v nem ladi (pdb, kvalitni logging knihovna, konektory na externi monitoring typu Sentry) a hlavne, vyborne se v nem prototypuji vedecke vypocty a algoritmy (Jupyter notebook, ipython).
V neposledni rade ma Python super komunitu - jak u nas, tak ve svete. Na konferencich je hodne fajn atmosfera, lidi misto soupereni pomahaji a sdileji, akce nejsou komercni projekty zamerene na vydelek, ale na sireni knowhow. Jazyk se hodne vyviji, konecne uz prestava bolet schizma Python 2 a 3 (a migrace rozumne psaneho projektu z 2.7 na 3.6 neni tak strasna jak to vypada).
Pratele Javiste a Cckari (C#, C++ apod.) vseho druhu, zkuste si prosim o Pythonu vic zjistit, nez ho zacnete pomlouvat. Mozna u sveho jazyka zustanete i nadale, ale aspon budete vedet proc vam vas stavajici jazyk vyhovuje a nebudete se rozhodovat na zaklade fam a dojmu, ktere v diskusi vyses casto zaznivaly. Predem diky!