Python se teprve poslední rok učím (na konkrétním domácím projektu), java mě roky živí. Zcela rozumím tomu, že pythonisti nad javou ohrnují nos. Mixiny, generátory, stručnost vyjadřování, rychlost zápisu jednoduchých věcí, to vše je velice příjemné. Když doma večer jednoduše rozšířím funkčnost několika tříd svého projektu jednoduchým mixinem a ráno v práci narazím na úplně stejnou potřebu v javě, projíždím jcp.org a hledám, kdy se do interfaců konečně dostanou fieldy, aby to aspoň trochu nahradilo. Večer slepím generátor na pár řádek a ráno v javě drtím zuby, proč ty streamy neakceptují checked výjimky.
Pak celý den přidávám proměnné do metod, měním jejich parametry, přejmenovávám (v pythonu mi Pycharm někdy přejmenoval i volání metody, které jsem nepřejmenovával), restrukturuji dle aktuální potřeby datové typy, odstraňuji nepoužívané metody i třídy a ono to ve výsledku pořád funguje, žádné rozbití, mohu se na to spolehnout.
Večer v pythonu přetížím metodu v potomku třídy z externí knihovny, nevšimnu si, že původní metoda něco vracela (má název "command", samozřejmě type hinty (i ty triviální v komentáři) jsou u kovaných pythonistů sprosté slovo), tudíž moje přetížená metoda zahazuje výsledek jejího předka a celý večer pak lovím chybu "object has no attribute XYZ" - konkrétně včerejší zábava. Nejnovější IDE (Pycharm) ukazuje krásnou šipku přetížení, ale o potřebě něco vracet jako předek díky chybějícím type hintům ani nepípne.
Nebo vezmu kus kódu z jiného projektu (i můj je GPL) a hodinu zjišťuju, jestli ten vstupní parametr má být string nebo bytes. Na první pohled se zdá obojí, ale až spuštění a několik kol pokusů/omylů ukáží, že to má být bytes, ale až po opravě jednoho volání built-in funkce, která pro změnu chce string (zřejmě změněné v nejnovější verzi pythonu, který kvůli type-hintům potřebuji). Nic z toho se při psaní nedozvím, pěkně nejdříve spustit test a sledovat, jak to dopadne.
A ráno se pokorně vrátím k luxusu javy a ve streamu si holt kód obalím rethrow runtime výjimkou, mixin pracněji pořeším kompozicí a pro návratový tuple si nechám vygenerovat maličké DTO, když jiná cesta není. Jenže to funguje a mohu se spolehnout, že mi nikde nevyjede null, protože přetížená metoda označená @Override najednou nic nevrací a jazyk to bere jako null (None).
Svůj domácí projekt do javy nepřepíšu, protože už mám do něj nainvestováno spoustu času, python mě baví (je fakt příjemný) a přece zbývá už jenom dodělat tak málo... Navíc se na podobném projektu učí můj synovec programovat - na to je Python skvělý. Ale nedovedu si představit, jak bych náš firemní systém o 10tis. třídách, ve kterém každý den děláme změny, udržoval a rozvíjel v pythonu. To by mi hodně rychle hráblo...
IMO má každé svoje a je určené na odlišné věci. A pokud má nějaká firma rozsáhlý projekt v pythonu, pak jsem přesvědčený, že to vzniklo právě tím klasickým "už toho máme postupně napsáno tolik, že se nám to nechce přepisovat". Ale nevěřím, že by znovu zvolili python, kdyby to nakonec celé přepsat museli.