Languages are a big deal for Microsoft Corp. Indeed, the company was founded on one, MS Basic, which preceded Windows and even the MS-DOS operating system. Later, Microsoft developed Visual Basic, which soon became the most popular Windows programming language around. That popularity was no surprise: Microsoft's willingness to supply developers with high-quality tools to make writing software for its platforms as easy as possible has always been part of its strategy for market dominance.
So, when the Redmond, Wash., software giant rolls out a new language, it's a big deal for everyone else, too: programmers, corporate information technology departments, and, ultimately, even ordinary consumers. Now developers are checking out the new C# (pronounced "C sharp") language, which appears to have been designed to give Windows a strong place in the world of e-commerce as part of Microsoft's .NET Web services initiative. But whether or not the company can leverage its foothold to let it control this new market, as it currently controls desktop computing, remains to be seen.
Microsoft is, in fact, a late arrival to the Internet party, an oversight dating back to the early 1990s that allowed several competitors to establish their own footholds. The most significant of these is the Java programming language of Sun Microsystems Corp. (Santa Clara, Calif.).
Sun invented Java in the mid-1990s because existing low-level languages, such as C and C++, weren't ideal for developing network-enabled applications; they gave developers too much rope—rope that often ended up hanging someone when programming mistakes that would have been harmless on a stand-alone system provided a back door to crackers. Visual Basic, on the other hand, wasn't fast enough and lacked modern features, such as object orientation, a programming technique that allows software functions to be encapsulated in reusable structures known as objects.
Java was intended as a language that would allow programmers to write fast, network-friendly code. Significantly, because networks often consist of multiple platforms, a lot of work went into making Java as platform-independent as possible.
Along with IBM Corp. and every other leading information technology vendor, Microsoft initially lent its support to Java. But fearing that Java would provide an easy way for developers to migrate away from Windows, Microsoft first released a somewhat incompatible version of Java, and then essentially withdrew its support.
Microsoft does it its way
In Java's place, Microsoft launched the .NET initiative in 2000 as an alternative framework for corporate development. Beyond the hyperbole of Microsoft's marketing, .NET is simply a huge collection of libraries filled with every routine the company imagines developers will ever need to develop Web services, or anything else, for that matter. Libraries are hugely important to developers because they reduce complicated functions, such as controlling rounding errors in a financial application or burning a file to a CD-ROM drive, to little plug-and-play code snippets.
But for .NET to succeed, C# needs to succeed as a programming language. C# is the glue that will allow programmers to combine the .NET libraries with their own code into network-friendly applications.
Generally, programmers regard C# as an incremental improvement over its nearest relatives: C, C++, and Java. With C#, you can use most of the habits or skills acquired with these languages. It's object oriented, like C++ and Java, but allows high-performance, low-level access to hardware, as C and C++ do. But unlike C++, and like Java, C# offers many features that prevent programmers from hanging themselves with their own rope.
In particular, C# protects developers from making an insidious mistake that has opened the door to many of the worms, such as Code Red, that have wreaked havoc on the Internet: buffer overflows. Buffer overflows occur when a computer tries to copy a chunk of data into an allocated space in memory that is too small for it to fit. With C and C++, the CPU will merrily continue writing data over whatever memory happens to be adjacent, possibly overwriting the instructions for the depositing of your paycheck with one for paying for someone else's plane tickets to Fiji. The programmer must remember to write code that checks that data isn't too big before copying it—but all too often forgets to do so.
C#, in contrast, is safe—at least from this class of errors. C# builds in mechanisms to make it easier to keep separate things that should be separate; there's no "writing outside the box."
Even so, C# has a hidden cost. Much of the currently installed base of desktop machines needs major software and hardware upgrades before it can run .NET applications. Among .NET's requirements and recommendations are a minimum of 96MB of RAM and a version of the operating system newer than Windows 95. This appears to be the main reason why the pace of deployment of .NET in North America and Europe has been far slower than originally anticipated.
What's more, developers of embedded systems—the microprocessors that control appliances or digital cameras—have shown zero interest in C#. They point out that their products can be in use for decades, while Microsoft's track record is to create software that's obsolete in several months or a year.
Still, C# is making some headway in enterprise-class environments. Many of the early deployments are within technology companies, like Summit Research Corp., in Fairfax, Va. There, senior software engineer Ron Allen rewrote a crucial billing application in C#, achieving a threefold performance improvement in functions originally coded in Visual Basic.
Further aiding the adoption of .NET, the European Computer Manufacturers Association, headquartered in Geneva, Switzerland, has approved C# as an official standard. Another nudge is coming from programmers working on the Mono project, which aims to create an open-source version of C# and other elements of the .NET initiative. The project will potentially allow C#'s deployment on Linux machines without users' having to pay license fees.
What is still unknown is how C# will play out as a business story. Will it solidify Microsoft's hold on platforms? Will .NET allow Microsoft to get everyone used to paying for productivity software such as Microsoft Word, via Web services, on a subscription basis rather than using the current purchase model? To what extent will C# slow or reverse the adoption of Java favored by Microsoft's hardware-oriented competitors like IBM and Sun Microsystems? The picture should become far clearer over the next 18 months or so, but what is certain is that unless Microsoft itself should fail—and how likely is that?—C# is here to stay.