Naar hoofdinhoud
Python-carrières2026-08-06 · 12 min leestijd

Java naar Python in 2026: de migratiegids voor senior EU-ingenieurs

Als u al meer dan 5 jaar Java schrijft en Python oppakt (waarschijnlijk omdat uw bedrijf in Berlijn/Amsterdam/Parijs data- en ML-workloads naar Python verplaatst en het JVM-team wordt gevraagd om de brug te slaan), dan is dit de migratiegids.

Het is niet "zo werkt de Python-syntaxis". De moeilijkere vraag is: wat stop je met het doen van Java, waardoor je Python-code anders als amateur wordt gelezen door recensenten?

Welke overdrachten (het grootste deel van je Java-brein werkt)

Type-denken. Moderne Python (3.9+) heeft typehints: list[User], dict[str, int], X | Geen. Schakel mypy --strict of pyright in en u krijgt het compile-check-veiligheidsnet in Java-stijl dat u gewend bent. Sla dit over en de late losheid van Python zal je uiteindelijk bijten.

Testcultuur. pytest ≈ JUnit 5. Dezelfde vorm: unit-tests in een tests/map, één test per gedrag, armaturen via @pytest.fixture (zoals @BeforeEach). Dekkingstools zijn ongeveer gelijkwaardig (coverage.py + pytest-cov).

Afhankelijkheidsinjectiedenken. FastAPI's Depends() is DI in Python (op constructor gebaseerd, geen magische annotaties). Als je Spring hebt gedaan, leest dit bekend voor.

Pakket + modulestructuur. Python-pakketten ≈ Java-pakketten. Een pyproject.toml is uw pom.xml (Maven) of build.gradle. uv of poëzie is uw Maven/Gradle voor installatie + build.

Stroomdenken. Java-streams (.map, .filter, .collect) komen netjes overeen met de inzichten van Python + map / filter. Je schrijft MINDER standaardtekst.

Wat niet wordt overgedragen — en waar senioren over struikelen

1. Alles is standaard veranderbaar

Java's laatste, onveranderlijke collecties, defensieve kopieën - niets daarvan bestaat in Python. Een functie die een lijst gebruikt, kan deze wijzigen. Een doorgegeven dictaat kan groeien. Dit is prima als je idiomatische Python schrijft, maar als je Java-gewoonten hanteert ("iedereen respecteert mijn invarianten"), zul je verrast zijn.

Idiomatische oplossing: gebruik tupel waar u een onveranderlijke lijst zou gebruiken. Gebruik Frozenset. Gebruik @dataclass(frozen=True). Type-hint-argumenten als Sequence[X] (alleen-lezen) in plaats van list[X] (veranderlijk).

2. Er is geen nieuwe – en geen scheiding tussen instantiatie en oproep

Python roept ClassName(...) aan om een instantie te maken. Dezelfde syntaxis roept een functie aan. Beide zijn "callables". Zodra je dit internaliseert, wordt code van hogere orde triviaal. Het rigide onderscheid van Java verdwijnt; de afweging is dat een willekeurige foo(x) in Python een object zou kunnen creëren OF een functie zou kunnen aanroepen, en de lezer moet weten welke.

3. Duck-typen verslaat interfaces

Java: "implementeert dit ding Iterable<T>?" - gecontroleerd tijdens het compileren.

Python: "heeft dit ding __iter__?" - aangevinkt wanneer u probeert te herhalen.

Moderne Python heeft een protocol (typing.Protocol) dat dichter bij Go-interfaces ligt dan bij Java-interfaces: structureel typen. Iets implementeert een protocol als het de juiste vorm heeft; er is geen implementatieverklaring nodig. Gebruik deze in plaats van te proberen de op overerving gebaseerde hiërarchieën van Java opnieuw te creëren.

4. Geen overbelasting

U kunt def process(x: int) en def process(x: str) niet als afzonderlijke handtekeningen definiëren. Je hebt EEN def-proces(x) en verzending binnenin. functools.singledispatch geeft u typegebaseerde verzending terug - het is de idiomatische vervanging.

5. GIL — de grootste prestatieverrassing

Python's Global Interpreter Lock betekent dat slechts één thread Python-bytecode tegelijk uitvoert. Threading is nuttig voor I/O-gebonden werk (de thread geeft de GIL vrij tijdens systeemaanroepen), maar NIET voor CPU-gebonden werk. Voor CPU-parallellisme heb je multiprocessing nodig (afzonderlijke processen, IPC-overhead) of de experimentele free-threaded build van Python 3.13.

Afkomstig van JVM (dat een echt draadparallellisme heeft), is dit de grootste cultuurschok. Schrijf geen CPU-zware hot loops in pure Python - roep naar NumPy / Rust extensions / C.

De idiomen waardoor het lijkt alsof je Python kent

  • Lijstbegrip over kaart + filter. [x2 voor x in xs als x > 0] is beter dan list(map(lambda x: x2, filter(lambda x: x > 0, xs))).
  • f-snaren (3,6+). Niet "%d" % x, niet "{}".format(x), en zeker niet "x = " + str(x).
  • Contextmanagers (met open(...) als f:). Python's try-with-resources. Gebruik ze voor alles wat moet worden opgeruimd.
  • dataklasse / Pydantic. Uw Java POJO's / Records vertalen direct. @dataclass voor interne typen, Pydantic voor alles dat API-grenzen raakt (inclusief validatie + JSON-serialisatie).
  • Moderne wedstrijdverklaring (3.10+). De patroonafstemming van Python ligt dichter bij die van Scala dan die van Java. Gebruik het voor structurele verzending.

De stapel waarop de meeste EU-teams zich in 2026 bevinden

  • Web-API's: FastAPI (niet Django tenzij verouderd). Vergelijkbaar met Spring Boot in vorm, sneller om te schrijven.
  • Gegevens: migratie van panda's → polaren wordt uitgevoerd tussen teams. Panda's zijn nog steeds dominant, polaren winnen snel (door roest ondersteund, 5-10x sneller).
  • Async I/O: asyncio (native) + httpx. Als je Netty / Vert.x hebt gedaan, leest dit bekend.
  • Pakketbeheerder: uv (de 2024-2026 vervanging voor pip + poëzie, 10-100x sneller).
  • Typecontrole: mypy of pyright (standaard VS-code). De ty van Astral komt eraan en zal waarschijnlijk winnen.
  • ORM: SQLAlchemy 2.0 (vergelijkbaar met Hibernate). Voor lichtere vormen: SQLModel.

Het migratieplan van vier weken voor een senior Java-ontwikkelaar

  • Week 1: syntaxis + typehints + één klein script. Schakel mypy --strict in vanaf dag 1.
  • Week 2: FastAPI + Pydantic — bouw een kleine CRUD API. Dit weerspiegelt uw Spring-spiergeheugen.
  • Week 3: asyncio + httpx + pytest. Herschrijf de API zodat deze volledig asynchroon is.
  • Week 4: dataklassen, protocollen, match/case. Refactoreer uw week-2-code om idiomatische Python te gebruiken. Vergelijk het met de eerste versie: je zult zien hoe "Python met Java-smaak" wordt voorgelezen door een recensent.

Tegen het einde van week 4 ben je geen senior in Python (dat duurt meer dan 12 maanden), maar ben je productief en zul je jezelf niet in verlegenheid brengen bij het beoordelen van de code.

Veelgestelde vragen

Moet ik panda's overslaan en rechtstreeks naar de poolgebieden gaan?

Als je nieuw bent in het data-ecosysteem: ja, leer eerst de polariteiten (het is een schonere API en modern). Als je team op panda's zit, leer dan panda's - het mentale model gaat gemakkelijk over op de polen, maar niet de andere kant op.

Django of FastAPI?

FastAPI voor alles wat nieuw is. Django is prima voor oudere of beheerdersintensieve CRUD-apps (de beheerdersinterface heeft geen equivalent). Moderne EU-startups bijna universeel FastAPI.

Is Python 3.13 free-threaded klaar voor productie?

Nee. Experimenteel in 3.13, waarschijnlijk stabiel in 3.15 (oktober 2027). Voor CPU-parallellisme vandaag: multiprocessing of shell-out naar numpy / een Rust-extensie.

Wat is het equivalent van Maven Central?

PyPI (pypi.org). Installeren via uv add of pip install. Dezelfde ecosysteemvorm, minder strikt op versiecompatibiliteit.

Waarderen EU-werkgevers Python-certificaten?

Het patroon van de rekruteringsmanagers in Berlijn/Amsterdam/Parijs: niemand wijst een kandidaat af omdat hij geen certificaat heeft, sommigen wijzen hem af omdat hij een certificaat heeft zonder portfolio (lees als alleen-bootcamp). Portfolio + echte GitHub-commits > elk certificaat. LinkedIn-referenties zijn een neutraal signaal.

Begin met het Senior-traject als je meer dan 5 jaar ervaring hebt — het slaat de beginnersinhoud over en springt in architectuurpatronen. Of FastAPI Production als u onmiddellijk aan een API-first-project wilt beginnen.

Klaar om het te proberen?

15 lessen gratis na een gratis aanmelding — geen kaart. Proef het platform en beslis dan.

Begin gratis →

Or unlock every lesson

Pro — $12/mo, unlimited AI, cancel any time. Refund within 14 days worldwide.

See Pro plans →

Get one Python lesson + one career idea every Friday

No spam, no "buy our course now". Three bullets, every Friday. Unsubscribe with one click.