When you use one programming language daily in your job as a Software Engineer, it's easy to fall into the trap of that language bubble. I want to show you how stepping outside your comfort zone and learning new languages and paradigms helped me grow as a Software Engineer.
Over the years I've transitioned from frontend developer to full-stack developer and even tried professional game development! In that time, I managed and mentored developers at different stages of experience.
Let's get right into it!
Your primary programming language
There are dozens of programming languages out there. In a lot of the cases we, as programmers, get fluent in one. Every so often, it's the first language we were taught in college or bootcamp. Maybe a more experienced friend recommended his favorite language to us. Or perhaps we had dreamt about making a specific type of software like video games and picked the most popular technology in the specialization. Once we land our first job, experience skyrockets.
For me, JavaScript became my primary language and stays to this day. It wasn't my first language, but it was the most accessible for me during high school when I could write and run it on basically every computer without any special compiler or IDE.
Stepping outside comfort zone
When still in high school, I got more and more experience creating many toy projects. From simple games to more complicated ones like "2d game engine" as an Electron application.
Because of some of my programming teachers, I had a feeling that JavaScript is not a “real” programming language. In addition, it was JavaScript in the frontend environment, so you know, moving divs and buttons around, not algorithms.
Around that time, I got introduced to Elixir by one of my close friends. I remember I was binge-watching conference talks about it for a week straight. It got me so inspired. It's a backend language and frontend was my natural environment, so it wasn't an easy thing to grasp for me at that time.
Fortunately, functional programming, stuck with me.
It started a spiral of new languages' fascination. Over the years I had programmed as a hobby or professionally with Elm, ReScript (formerly known as ReasonML or BuckleScript), OCaml, Haskell, Scala.
I was still working with JavaScript almost daily, but learning so many new concepts like immutability, statelessness, monads, algebraic data types or actor model, made solving problems easier. It even helped me give a lightning talk at international conference!
And because certain concepts are more popular in different communities, it exposed me to so many programming architectures and patterns found in different kinds of systems like DDD (Domain-Driven design) or Category Theory.
Going back to junior level
Fast-forward to March 2022, when I left my job at jam.dev as an Engineering Lead.
I decided I need a break to figure out what's the next thing I want to pursue in life.
Since my early days with programming, I was always fascinated with video games and computer graphics. Back in high school I was experimenting with OpenGL, later with ray tracing and during last year's Christmas I started implementing Physically Based Renderer in Vulkan and Rust as a side project.
During my first month off, I got back to that Vulkan and Rust project. Working on it, I came to conclusion what I want my next job to be: Graphics Programmer. But it's not an entry-level job if you don't have experience in this field. And because game development is the closest thing I could think of, I decided I'm doing to recruit to the local game dev company in Kraków where I live.
I asked my friends about learning materials, and immediately dove into the world of C++ and Unreal Engine! It took my two weeks to complete Tom Looman's Unreal Engine C++ course (which is incredible, I highly recommend it if you want to level up with Unreal Engine). I did a lot of reading about C++ and game development environment, made some simple game with SDL and after 2,5 months after quitting my Engineering Lead job I started my journey as Unreal Engine C++ programmer.
I was expecting landing in junior position, and I wasn't concerned about salary. Surprisingly, I met requirements for a regular level 🤯. It turns out, general programming knowledge and years of experience with different technologies build up quite nice job profile 😅
I'm no longer working at that company. I haven't renewed my contract after probation period. Therefore, I'm also not pursuing graphics programming as a career. But that's a story for a different time.
Try something new!
It's completely fine to deepen one technology or one programming language knowledge. It's totally fine to just have a 9-5 job that pays the bills.
But if you aim to level up, I'm highly recommending trying something new to broaden your perspective.
If you're writing JavaScript, try some functional language like Elixir or ReScript. If you're already familiar with high level, garbage collected languages, try something low level like Rust or even C/C++. Play with different concurrency model like coroutines or actor model.
You don't need to change your job, you don't need to ship products with it. Try to create something fun. You'll thank yourself later.
If learning new programming language gave you a new perspective or opened some doors, don't hesitate to share your story on Twitter!
Top comments (0)