Java to Python v roce 2026: Průvodce migrací pro starší inženýry EU
Pokud píšete Javu déle než 5 let a využíváte Python – pravděpodobně proto, že vaše společnost v Berlíně/Amsterdamu/Paříži přesouvá data + pracovní zátěž ML do Pythonu a tým JVM je požádán o přemostění – toto je průvodce migrací.
Není to „tady, jak funguje syntaxe Pythonu“. To je ta těžší otázka: co PŘESTANETE dělat z Javy, kvůli čemuž jinak bude váš kód v Pythonu číst recenzentům amatérsky?
Co se přenáší (většina vašeho mozku Java funguje)
Typové myšlení. Moderní Python (3.9+) má tipy pro typy — seznam[Uživatel], dict[str, int], X | Žádný. Zapněte mypy --strict nebo pyright a získáte bezpečnostní síť pro kontrolu kompilace ve stylu Java, na kterou jste zvyklí. Přeskočte to a uvolněnost Pythonu vás nakonec skousne.
Testovací kultura. pytest ≈ JUnit 5. Stejný tvar: testy jednotek ve složce testy/, jeden test na chování, příslušenství přes @pytest.fixture (jako @BeforeEach). Coverage tooling je zhruba ekvivalentní (coverage.py + pytest-cov).
Injekční myšlení závislosti. FastAPI Depends() je DI v Pythonu (založené na konstruktoru, žádná magie anotací). Pokud jste udělali Spring, je to povědomé.
Struktura balíčku + modul. Python balíčky ≈ Java balíčky. pyproject.toml je váš pom.xml (Maven) nebo build.gradle. uv or poetry je váš Maven/Gradle pro instalaci a sestavení.
Toky myšlení. Java Streams (.map, .filter, .collect) mapují čistě podle Pythonu + mapa / filtr. Napíšete MÉNĚ standardních.
Co se nepřenáší — a kam senioři cestují
1. Vše je ve výchozím nastavení měnitelné
Konečné, neměnné kolekce Java, obranné kopie – nic z toho v Pythonu neexistuje. Funkce, která přebírá seznam, jej může upravit. Dikt předávaný kolem může růst. To je v pořádku, pokud píšete idiomatický Python, ale pokud máte zvyky v Javě („všichni respektují mé invarianty“), budete překvapeni.
Idiomatická oprava: použijte n-tici tam, kde byste použili neměnný seznam. Použijte zmrazenou sadu. Použijte @dataclass(frozen=True). Argumenty tipu jako Sequence[X] (pouze pro čtení) namísto list[X] (proměnlivé).
2. Žádné nové – a žádné oddělení instancí a volání
Python volá ClassName(...) k vytvoření instance. Stejná syntaxe vyvolá funkci. Oba jsou „volatelní“. Jakmile toto internalizujete, kód vyššího řádu se stane triviálním. Strnulé rozlišení Javy mizí; kompromisem je, že náhodný foo(x) v Pythonu může vytvářet objekt NEBO vyvolávat funkci a čtenář musí vědět, kterou.
3. Duck psaní porazí rozhraní
Java: "implementuje tato věc Iterable<T>?" — zkontrolováno v době kompilace.
Python: "má tato věc __iter__?" — zaškrtnuto při pokusu o iteraci.
Moderní Python má protokol (typing.Protocol), který je blíže rozhraním Go než rozhraní Java — strukturální typování. Něco implementuje protokol, pokud má správný tvar, není potřeba žádná deklarace implementace. Použijte je namísto pokusu o znovuvytvoření hierarchií založených na dědičnosti Java.
4. Žádné přetěžování
Nemůžete definovat def process(x: int) a def process(x: str) jako samostatné podpisy. Uvnitř máte JEDEN def proces(x) a odeslání. functools.singledispatch vám poskytuje typové odeslání zpět – je to idiomatická náhrada.
5. GIL — největší výkonnostní překvapení
Python's Global Interpreter Lock znamená, že pouze jedno vlákno provádí bajtový kód Pythonu najednou. Threading je užitečný pro práci vázanou na I/O (vlákno uvolňuje GIL během systémových volání), ale NE pro práci vázanou na CPU. Pro paralelismus CPU potřebujete multiprocesing (samostatné procesy, režie IPC) nebo experimentální sestavení s volným vláknem Pythonu 3.13.
Pochází z JVM (které má skutečný paralelismus vláken), což je největší kulturní šok. Nepište horké smyčky náročné na CPU v čistém Pythonu – zavolejte NumPy / Rust extensions / C.
Idiomy, díky kterým vypadáte, jako byste znali Python
- Pochopení seznamu přes mapu + filtr. [x2 pro x v xs, pokud x > 0] seznam tepů (mapa(lambda x: x2, filtr(lambda x: x > 0, xs))).
- f-struny (3,6+). Ne "%d" % x, ne "{}".format(x) a rozhodně ne "x = " + str(x).
- Správci kontextu (s otevřeným(...) jako f:). Pythonův try-with-resources. Použijte je na cokoli, co potřebuje vyčistit.
- datová třída / Pydantic. Vaše Java POJO / záznamy se překládají přímo. @dataclass pro interní typy, Pydantic pro cokoli, co se dotýká hranic API (včetně ověření + serializace JSON).
- Prohlášení o moderní shodě (3.10+). Pythonovo porovnávání vzorů je bližší Scale než Java switchi. Použijte jej pro strukturální expedici.
Žebříček, na kterém se v roce 2026 nachází většina týmů EU
- Webová API: FastAPI (ne Django, pokud starší). Tvarem podobný Spring Boot, rychlejší psaní.
- Data: mezi týmy probíhá migrace pandy → polární. Pandy stále dominantní, polárky rychle přibývají (Rust-backed, 5-10x rychlejší).
- Asynchronní I/O: asyncio (nativní) + httpx. Pokud jste udělali Netty / Vert.x, je to známé.
- Správce balíčků: uv (náhrada 2024-2026 za pip + poezie, 10-100x rychlejší).
- Kontrola typu: mypy nebo pyright (výchozí kód VS). Astral's ty přichází a pravděpodobně vyhraje.
- ORM: SQLAlchemy 2.0 (srovnatelné s Hibernate). Pro světlejší tvary: SQLModel.
Čtyřtýdenní plán migrace pro staršího vývojáře Java
- Týden 1: syntaxe + tipy na typ + jeden malý skript. Povolit mypy --strict od 1.
- Týden 2: FastAPI + Pydantic – vytvořte malé CRUD API. To odráží vaši jarní svalovou paměť.
- Týden 3: asyncio + httpx + pytest. Přepište API, aby bylo plně asynchronní.
- Týden 4: datové třídy, protokoly, shoda/případ. Refaktorujte svůj týden-2 kód, abyste mohli používat idiomatický Python. Porovnejte s původní verzí — uvidíte, jak se „Python s příchutí Java“ čte recenzentovi.
Na konci 4. týdne nejste v Pythonu starší (to trvá 12+ měsíců), ale jste produktivní a neuděláte si ostudu při kontrole kódu.
Nejčastější dotazy
Mám vynechat pandy a jít rovnou k polárkám?
Pokud jste v datovém ekosystému noví: ano, naučte se nejprve polárky (je to čistší API a moderní). Pokud je váš tým na pandách, naučte se pandy – mentální model se snadno přenese na poláry, ale ne opačným směrem.
Django nebo FastAPI?
FastAPI pro cokoliv nového. Django je v pořádku pro starší aplikace nebo aplikace CRUD náročné na správce (jeho uživatelské rozhraní pro správu nemá ekvivalent). Moderní EU startupy téměř univerzálně FastAPI.
Je Python 3.13 s volným vláknem připraven pro prod?
Ne. Experimentální v 3.13, pravděpodobně stabilní v 3.15 (říjen 2027). Pro paralelismus CPU dnes: multiprocessing nebo shell out to numpy / rozšíření Rust.
Co je ekvivalentem Maven Central?
PyPI (pypi.org). Instalace přes uv add nebo pip install. Stejný tvar ekosystému, méně přísný na kompatibilitu verzí.
Cení si zaměstnavatelé v EU certifikáty Python?
Vzorec náborových manažerů z Berlína/Amsterdamu/Paříže: nikdo neodmítne kandidáta pro to, že nemá certifikát, někteří odmítnou pro to, že mají certifikát bez portfolia (čti jen jako bootcamp). Portfolio + skutečný GitHub zavazuje > jakýkoli certifikát. Přihlašovací údaje LinkedIn jsou neutrální signál.
Začněte s Senior track, pokud máte více než 5 let zkušeností – přeskočí obsah pro začátečníky a přeskočí do vzorců architektury. Nebo FastAPI Production, pokud chcete okamžitě zasáhnout projekt s prvním API.