Dmytro Brazhnyk

One Language or Many? — Programming Languages Every Senior Software Engineer Should Know

One Language or Many? Programming languages every senior software engineer should know

I still recommend specializing deeply in one language. You should have one language in which you understand not only the syntax, but also the runtime, memory model, tooling, performance characteristics, ecosystem, and common design patterns.

But a Senior Software Engineer should also have at least some understanding of several different kinds of languages.

Java, Python, C, C++, Lua, JavaScript, SQL, HTML, Bash, C# (for those tied to the Microsoft stack), and Assembly.

There are other languages, such as Go and Rust, but these languages remain highly experimental as general-purpose replacements for the more established languages, even though production software has already been built with them.

Once you seriously try to use them, you discover gaps and deliberate restrictions in their feature sets, as well as features that have remained future plans for years and perhaps will never be implemented, despite already existing in widely adopted languages. These limitations can make good application design unnecessarily difficult. C++ is unsafe, sometimes complicated, and full of historical baggage, but there is still more pleasure in writing C++ than in trying to force a good design into Go or Rust.

If you don't know the languages above, focus on some of them first before considering Go or Rust.

There are also good languages such as Ruby, but the majority of problems that call for a dynamically typed language are now solved with Python. Python has become a standard choice when a dynamically typed programming language is needed, especially in today's data science and machine-learning ecosystems.

Lua deserves special mention. Its syntax may look awkward at first, but its extremely small runtime has given it an important role as an embedded scripting language for C and C++ applications, allowing applications to provide scripting and plugin capabilities.

LazyVim is a good example of how far this can go: Lua isn't merely used for a few configuration options—it supports an entire extensible ecosystem.


I genuinely wanted Rust to become my universal programming language: one language I could use to write virtually any kind of software, from front ends and desktop applications to web servers, games, operating-system kernels, and embedded systems.

But when God destroyed the Tower of Babel, He made it clear that mankind would not remain united by a single language. Perhaps I should not have expected programming languages to be any different.

Different languages fit different purposes.

If you need Bash, you need Bash. You can try to replace a shell script with C++ or Java, but they will never be as good as Bash for the job.

The same is true about SQL.
The same is true about C++.
The same is true about Java.
The same is true about Python.

There is no single programming language that is best for every purpose.

Different problems require different tools. Some languages fit particular purposes better than others, and trying to force one language into every domain only produces unnecessary complexity.

You will never be able to become deeply proficient in every programming language, but knowing multiple languages will make you more flexible, especially when the job market gets difficult. Knowledge of different languages also broadens your perspective and sharpens your technical decisions, even if you remain deeply specialized in only one language.