The era of the polyglot programmer is upon us. Did you know you are a polyglot programmer? You access your data using SQL, you write your business logic using Visual Basic or C#, you create your Web pages using HTML, you configure your WPF and WCF applications using XML, and you augment your Web pages using JavaScript. The concept of using multiple specialized languages to build applications is now considered mainstream. The timing couldn't be better. The software development world has reached a crossroads-maybe a perfect storm. The slowdown of Moore's law, multi-core processors as standard equipment, cloud computing services for the masses, rich Internet applications and a wider adoption of agile development practices: important developments for everyday developers. But are our general purpose languages up to the task?

For many years now developers building applications using Microsoft's Common Language Runtime (CLR) have had the choice of multiple programming languages. In its initial releases Microsoft provided a number of different languages. The “de-facto” languages included Visual Basic, C#, and C++. The number of languages available for .NET has exploded.

One major issue facing the software and hardware industry is the slowdown of Moore's Law. In 2005 Herb Sutter wrote the seminal piece “The Free Lunch Is Over” (http://www.gotw.ca/publications/concurrency-ddj.htm). This article pointed out many impediments to Moore's Law continuing. From this article we learned the days of exponential power growth in CPUs is waning, resulting in the development of multiple core processors. Rather than increase the power of a CPU with larger numbers of transistors and faster clock speeds, Intel and AMD are now providing CPUs with 2, 4, 8 and more processor cores. While this may sound cool, it's not really that simple a solution for software developers. Developers will no longer be able to rely on speed increases in CPUs to make their applications more responsive. Developers will be forced to take advantage of all these “extra” CPUs just waiting to be used. Problem is: Developing true multi-threaded application is a daunting exercise for even the most experienced software developers.

Along with the widespread adoption of multi-core CPUs, companies like Amazon, Google, and Microsoft are pushing cloud computing services into the marketplace. How are you as a developer going to take advantage of a system where the number of CPUs is virtually limitless?

A major difficulty facing developers is simply the choice of languages used to develop software. General purpose languages like Visual Basic, C#, and C++ are just that: general. The old saying goes “Jack of all trades, master of none.” This is very true when it comes to the general purpose languages we use today. This is where having an understanding of multiple languages comes in handy. When you deal with SQL data you use SQL, when you deal with Web pages you use CSS and HTML, and when you deal with cloud computing or multi processor CPUs, what languages do you use? Two that come to mind are F# and Erlang. F# (covered in this issue) and Erlang are functional languages that may be solutions to your multi-threaded problems.

Another idea to explore is the concept of Dynamic Languages. Developers are finding that static languages are not always the best tool for building all applications. One of the implications of LINQ was the inclusion of dynamic languages features in the latest versions of C# and Visual Basic. This effort was only the beginning. The next versions of C# and Visual Basic .NET will possess even more dynamic feature sets. But why wait until then. How about spending some time researching fully dynamic languages like Ruby and Python? Learning how to develop using these languages will help provide you with the essence of building applications using dynamic features. If you had read the Eiffel .NET article from the Sep/Oct 2002 issue you would have learned about generics a full three years before it shipped in Visual Studio 2005. Looking at other languages gives you a different perspective on what you are doing now.

It has never been a better time to be a polyglot programmer. Fluency in multiple programming languages will no longer be optional-it will become a full-fledged job requirement. The developers that come prepared to solve problems with the best tools for the job are the ones primed for success.