I recently started a new role in AWS networking, and it’s the first time I’ve gone from writing everything in Java to writing almost everything in Python. Honestly, the shift is bigger than I expected. Java gives you interfaces, structure, a strong compiler, and a debugger you can rely on. Python gives you freedom, but also fewer guardrails. It kind of sucks. 

In this post, I want to talk about what that transition feels like. I’ll talk about how the two languages push you into different styles of thinking, the difference between object-oriented and procedural or functional approaches, what it’s like to lose Java’s tooling safety net, and how Python’s concurrency model forces you into processes instead of threads.

Java vs PythonJava vs Python

Java vs Python Mindset

Coming from Java, I’m used to starting everything with a class, an interface, or some kind of structure. That’s just how Java works. You don’t even question it. I like it. Many don’t. In Python, none of that is required. You can just write a few lines of code and it runs.

It feels strange. In Java, the language kind of forces you into object-oriented thinking. In Python, you can write procedural code without the language complaining about it. You can also write objects if you want, but it doesn’t feel like the default.

I’m still getting used to that. It’s a different way of approaching problems, and I’m trying to figure out what actually makes sense instead of just following what the language expects.

A few New Paradigms

In Java, I never really thought about programming paradigms. Everything was object-oriented because that’s how Java wants you to write code. You don’t question it. You make classes, you make methods, you implement interfaces, and that’s the flow. Yeah, I know it has a lot of bloat but hey works. Look at the amount of open source software written in Java.

With Python, I’m suddenly aware that I can do things in completely different ways. I can write straight procedural code, just top to bottom. I can use functions and pass them around like values. I can still make classes too, but here it feels optional instead of required. This is something new to me. I need to think about the relative merits of different paradigms. It forces you to be more aware. 

I’m not sure yet which approach is right. I’m just noticing that I have to choose now, instead of the language choosing for me. And that’s new. 

Tooling Feels Very Different

One thing I didn’t expect is how different the tooling feels. In Java, the debugger is part of your everyday workflow. You just set a breakpoint, run the code, step through it, and you get a clear picture of what’s happening. It’s smooth, and you get used to relying on it.

In Python, I don’t have that same feeling. There are ways to debug, but it’s not as integrated or obvious. Most of the time, the mistake only shows up when you actually run the script. It makes me feel a bit more exposed, like I’m missing something that Java always gave me for free.

Even basic things like autocomplete and static checks don’t feel as strong. It’s lighter and faster, but also easier to get things wrong without noticing. I’m still adjusting to that. People use command line tooling more often even for development. That’s something I used as much as I needed to. So, I'm still adjusting to this new reality. 

Concurrency Works Differently

Another thing I’m still trying to understand is concurrency. In Java, everything runs inside the JVM, and you work with threads. That’s the normal way to do it. You create a thread, start it, and it runs alongside the others.

In Python, it doesn’t work the same way because of the GIL. You can make threads, but they don’t actually run in parallel the way I expect from Java. If you really want things to run at the same time, you’re supposed to use processes instead.

This is new for me. I’m used to thinking in terms of threads, not processes. My knowledge about processes and inter-process communication, sharing go back to college. I have never used it in professional settings.. It feels like I’m relearning something I thought I already understood.

Closing Thoughts

Switching from Java to Python is harder than I expected. It’s not the syntax; it’s everything around it. It’s the way you structure code, the tools you rely on, how you debug, and even how concurrency works. I’m still adjusting. Some things feel easier, some things feel confusing, and some things make me miss Java.

But it’s also interesting. It’s forcing me to actually think about how I solve problems instead of just doing what I’m used to. I don’t have it all figured out yet, but I’m learning, and that’s the point.