Nii Darku
Back to Blog
Software EngineeringFeatured

Dynamic vs Strictly Typed Languages: Lessons From My Journey as a Developer

February 5, 2026
3 min read

Dynamic vs strictly typed languages: two paths to better software

When I started my journey as a software developer, I was introduced to Python and Django. At the time, Python was rapidly gaining popularity, and it felt like the perfect place to begin. The language gave me a sense of freedom—things just worked, and I didn't have to think too much about types, structure, or strict rules. I enjoyed that flexibility, and naturally, I leaned toward backend development.

The Web Forced Me to Go Deeper

As I moved into web development, I had to learn the fundamentals: HTML, CSS, and JavaScript. That forced me to understand how the web actually works. JavaScript, in particular, pushed me to think more deeply about programming concepts—functions, objects, closures, and classes. The learning phase was exciting, but it also exposed a problem I had been avoiding.

One thing I consistently feared was running into errors I didn't understand.

With dynamic languages like Python and JavaScript, it's easy to write code that looks correct but fails at runtime. I could spend days debugging an issue only to realize I was calling a method that didn't exist on an object, or assuming a variable had a certain structure when it didn't. Many of these errors could have been caught much earlier—but the language allowed me to keep going without forcing me to confront them.

Freedom Had a Cost

At the early stage of my career, this freedom felt empowering. I could iterate quickly, experiment freely, and ship things. But it also meant I wasn't always pushed to deeply understand what I was building on. I often reached for arrays in JavaScript for everything, even when better tools like Set or Map existed. The language didn't stop me, so I didn't question my choices.

That changed when I started learning Java.

Java Introduced a Different Mindset

Java introduced me to a different way of thinking. Because it is strictly typed, I had to be explicit about what my program was doing. I could no longer casually pass data around and hope things worked out. I had to think about my design before writing code: which data structure made sense, how objects should relate to each other, and what responsibilities each class should have.

This shift forced me to understand programs at a lower level. Errors that would have shown up at runtime in JavaScript were now caught at compile time. Instead of discovering problems after running my code, I was guided to fix them while writing it. At first it felt restrictive. Over time, it made me more intentional and confident as a developer.

The Real Lesson: Context Over Comfort

Over time, I realized that neither dynamic nor strictly typed languages are "better" in absolute terms.

  • Dynamic languages are excellent for rapid development, experimentation, and early learning. They lower the barrier to entry and reward curiosity.
  • Strictly typed languages encourage better structure, clearer design, and fewer hidden surprises as systems grow. They reward forethought.

Looking back, I'm grateful I started with dynamic languages—they got me building quickly and kept me curious. But learning a strictly typed language like Java filled in the gaps I didn't know I had. It taught me to slow down, think ahead, and design systems rather than just making things work.

Today, the choice between dynamic and strictly typed languages is no longer about comfort for me. It's about context, scale, and long-term maintainability—and that perspective has made me a better engineer.

Share this article

LinkedInX

Enjoyed this article?

Let's connect and discuss more about software engineering.

Get in Touch