Many programmers learn one platform, one language and stay in their monoculture. Learning many different programming languages can definitely change your programming style and the way you think about problems. It was certainly beneficial for me, here is why.

After learning Pascal, C in the first semester at the University I started be commercial programming career as a PHP developer (part time in the second semester).  It was easy to start with and in demand so finding a part time job was easy. I never liked the language, it was not “pure”, I especially hated the function naming and parameters orders inconsistencies.

At the university I learned OOP principles and C++ and thought OOP was the answer to everything so I immediately changed my PHP programming style to incorporate it. My code became more readable and organized.  Later at the university I had to learn nonprocedural Prolog and functional Haskell. I found it very difficult because I had to think in another way and came out of my comfort zone. When I finished the course I really liked Haskell and functional programming because of its clarity, readability and the fact that I could write a very compact code. But I had no practical use for it. It did not change my Programming style but made me look for a more pure and “nicer” language to learn.

I found .NET and C# and was amazed by the tools for ASP.NET. Comparing to PHP creating websites in ASP.NET was easier, the programming language was more comfortable. I let PHP go and found a part time job as a .NET developer. Instead of ASP.NET I was hired for I programmed a Windows Mobile app in .NET Compact Framework. It was a great experience, I discovered threads and asynchronous programming. I took a C# course at the university and then worked a few months as a part time ASP.NET developer and discovered LINQ. LINQ was great and is one of the best (if not the best) features of .NET, it makes you write compact and clear code and lets you to an extent think functional (ideal for me as a Haskell fan). I began using LINQ extensively, my code and my programming style improved a lot.

I quickly got fed up with web development in ASP.NET, because it was not very challenging coding. I wanted to learn something new and do something more challenging. I found a part time job at Siemens that was partly analytical and partly programming and came to contact with Java. The only experience I had with Java before that was programming J2ME apps for my Siemens phone (strange coincidence).  Java felt strange, too much object oriented, no functional elements and without LINQ I felt like I was back in the stone age. But thanks to Java I discovered NoSQL databases, especially MongoDB. NoSQL databases changed my thinking about storing data, it was a great shift. They are a great fit for many project, you just need to realize that not everything must be force into a solid structure.

Quite recently I discovered F# and I was really thrilled. It let me program completely functional and at the same time interoperate with all the existing .NET code and libraries. It changed my programming style once again to be more functional and expressing. I try to do as much coding as possible in F# but is a real shame that Microsoft does not push it and it is still not equal to C#.

At the moment I am exploring Scala and Python through online courses at Coursera and in the future I may take a look at Erlang. I strongly encourage you do the same, learn as many languages and as many programming paradigms as you can, it will widen your horizons and make you a better programmer. You do not even need to use these languages every day, your programming style will improve independently on the language you program.

Update: After some experiments with Scala I think it is a really ugly language, compared to say Haskell. I took a look at SML, Racker and Ruby and I quite liked all of them.