Why C# and .NET?


Intro to C# Talk Slides

Like I mentioned on my main page, I've become a sort of unexpected evangelist for .NET around Media Lab Europe. 

I've worked with C# since late 2001, and used the .NET framework to develop Symphony.  I'd worked with Java extensively for the two previous years, and have lots of C++ experience. 

I haven't had the time to flesh this page out, but just quickly, here are some of the things that have most impressed me about working with .NET and developing in C#.  C# is not only an unusually intuitive language for beginners, but as one continues to work with it, C# progressively reveals the efficacy of its more advanced features.

Beginner reasons:

Rapid application development

Garbage collection - no memory leak hassles, and a comparatively excellent collection algorithm.

Intuitive language features like Properties

Linguistic familiarity for Java and C++ programmers

Performance specs comparable (usually superior) to similar languages

The C# language itself, with its mantra to "make the intent explicit in situations which can easily lead to subtle bugs."

The quality of the .NET framework, with its design that "make it hard for the developer to make mistakes"

Common (possibly familiar) development environment that handholds a new C# programmer through the learning phase

Intermediate reasons:

Easy interoperability with native code to preserve or port existing systems

Language features like boxing and the common type system that make developing code easier

Language features like versioning (virtual, override) that make maintaining code easier

Ease of deployment - an .exe and some .dll libraries

Powerful libraries being built with the .NET technologies, e.g. Managed DirectX

Advanced reasons:

Event model makes certain design patterns more intuitive (and in some cases simply makes them feasable)

Metadata rules.  It just does. 

Intro to C# Talk Slides
I gave a talk a while back introducing C# to the lab.  Here are the Powerpoint slides.  Back then, I was really only into the "intermediate" phase :)