Learning a New Language at 5 Years In
After 5 years of TypeScript only, I picked up Go — harder than expected, and more fun than expected
Five Years of Nothing But TypeScript
Starting from frontend and extending to Node.js backend, I lived in the JavaScript/TypeScript world for 5 solid years. It was comfortable. I knew the ecosystem well, and when problems came up, I could find solutions quickly. Even when new frameworks appeared, the language was the same so the learning cost was low.
But at some point, I felt my growth plateau. I wasn't learning new things anymore — just doing variations on what I already knew. So I decided to learn something completely different.
Why Go?
I considered Rust, but people around me kept warning about the steep learning curve. Go's syntax is simple, and my company was already using it for some microservices, so there was a real chance to apply it at work. "It's simple, so I should have the basics in 2 weeks," I thought.
It took 2 months, not 2 weeks. Basic syntax? Sure, 3 days. But writing idiomatic Go was a completely different challenge.
First Shock: Error Handling
Coming from TypeScript's try-catch world, Go's error handling was a shock. if err != nil in every single function. At first I thought "really? This is how primitive it is?" But after a month, I realized the explicit error flow actually makes debugging easier.
In TypeScript, it's often hard to trace what might throw inside a try-catch block. In Go, every error comes back as a return value, making the flow transparent.
(For the first 3 weeks, the number of times I forgot if err != nil and triggered a panic: 23.)
Second Shock: Goroutines
Coming from JavaScript's async/await, encountering goroutines and channels gave me a headache. I understood the concepts, but actually writing concurrent code without creating bugs was tough. I caused 3 deadlocks.
But through this process, my understanding of concurrent programming deepened. Why JavaScript's event loop is single-threaded, what the pros and cons of that are — I only truly grasped this by comparing it with Go.
Learning a New Language Improved My Existing One
This was unexpected. Learning Go changed how I see TypeScript. Go has limited generics, which made me newly appreciate how powerful TypeScript's generic system is. After understanding Go's interface concept, my criteria for choosing between TypeScript interfaces and abstract classes became much clearer.
When you only know one language, you accept a lot of things as "that's just how it's done." Seeing another language makes you realize "oh, that was a design choice."
Mistake: I Waited Too Long to Apply It Practically
For the first 2 months I only followed tutorials. Syntax study, example code, online courses. But in hindsight, if I'd applied it to a real project around week 2, I would have learned much faster. Real learning happens when you solve actual problems.
In month 3, I wrote an internal tool in Go — a CLI-based log analysis tool. It was simple, but I learned more from it than 2 months of tutorials. Hands-on is the answer.
Learning a New Language at 5 Years
Upside: your perspective widens. You see programming from a different angle. With experience, you can recognize patterns — "so this language solves this problem this way." Learning efficiency is higher than when you were a junior.
Downside: time is scarce. You have to learn outside of work hours, so progress is slow. I've fallen asleep at my keyboard studying Go after work more than a few times.
I'm not using Go heavily in production yet — just internal tools. But the process of learning itself was valuable. Maybe I'll try Rust next, though that'll require a bit more courage.