|
Mostly, yes - but it's not languages that improve your skill set - it's the paradigms they cover. If you are a C# user and go on to learn Java, you really aren't going to learn that much (it could even be harmful), because it's only a slight twist on your existing knowledge, but if you learn a language which covers a different paradigm than OOP, you're going to benefit much more.
If you can do OOP in one language, you can do it in them all - only with a change in syntax. It's better to not think in terms of syntax of any particular language, but think in terms of the semantics. When we parse programming languages, we produce ASTs (Abstract Syntax Trees), which strip out the syntactic information and leave only the semantics. The difference in the AST you'd produce parsing C# and Java is smaller than the syntactic differences of the two. Mastering the syntax of each language will make you more proficient in them individually, but you probably won't master more than half a dozen languages to that extent - you will probably use dozens of languages though.
Switching paradigms can require a bit of brain rewiring. It can be like learning from scratch again. Most people begin learning procedural style of coding then move onto OOP. That transition can be awkward, as in procedural code, you typically explicitly modify state, but OOP discourages such practices and promotes encapsulating the modification of state into objects. If you go on to learn functional programming, the general idea is that modification of state shouldn't happen anywhere anyway, so you need to unlearn what you previously took for granted. Functional and Procedural paradigms are at odds with each other - but they can both be combined with OOP. The trend in the current industry is movement away from Procedural-OOP towards Functional-OOP though, for numerous reasons.
It doesn't even require a new language to make that switch, as C# is now capable of functional programming to a large extent. The new C++ specification has been finalized too, which brings some functional ability to it. These changes have happened because of the improved experience using functional languages that the developers bring those concepts into previously procedurally based langs.
If you learn functional programming, it will almost certainly make it's way into your C# programming, and you'll find yourself reducing the number of variables you use and replacing them with lambdas. Similarly, if you learn about using the Actor Model, you end up rethinking what you considered good OOP, and it'll show in all languages you use.
There's dozens of paradigms to learn anyway. It's sad that most companies will stick with procedural-OOP, and many programmers will go through their careers not learning anything else. Programming is really a continuous learning experience. You will never truly "master" it, because whenever you learn something, there's something newer created elsewhere. It really is a case of "the more you learn, the more you realize just how little you really know"
|