Why does C# have ? Why doesn’t it have ?

Over the past few years, we’ve gotten lots of suggestions and questions about the
C# language, and we haven’t done a very good job responding to them, for a variety
of reasons.  

The first reason is that we haven’t devoted as much time as we probably should have
to interacting with customers on the subject of language design. That’s something
I’ll be trying to improve in the next few months. You can expect to see some more
information about new language features before we give out bits at PDC.

The second is a bit harder to explain. Basically, it revolves around whether a feature
fits into what I’ll call, for want of a better term, “The C# Philosophy”. Some of
the philosophy can be reduced to guidelines or rules, such as “Simplicity is also
a feature”, but there remains a fair portion that is really just based on the informed
judgement of those on the design team. On some issues, that can make it
really hard to communicate why we made a specific decision, as it’s hard to put into
words how we make our choices.. In the words of one of the design team members,
“it took me 6 months of design meetings before I stopped making a fool of myself”.
For me, I think it was close to a year.

So I don’t expect the communication to be perfect. But it should be a lot better.

I’m hoping to devote a number of entries to some of the guidelines we use. Note that
this is really on my view of the philosophy of the design team, so don’t view this
as the definitive view. Guidelines I hope to cover:

  • Simplicity is also a feature
  • Magic only when justified
  • Serve the target audience
  • Tread lightly on unproven features
  • Remember that you aren’t the customer
  • Solve real problems

I’ll try to do one of these each week.

Comments (1)

  1. Jim Argeropoulos says:

    I have been thinking about this for a bit. A few observations.

    * I am sure I would have tried to make things more complex. It would have taken me a long time to not look stupid at such a design meeting.

    * A testament to the simplicity achieved is that I only have 1 C# book on my desk, while I have 12 C++ books on my shelf. I have a few more that deal with the .NET Framework, but those don’t quite count. OK so maybe 3 STL books don’t quite count as C++ books either.

    *To date, I have not really seen any books that are at a higher level of C# consciousness. I would put the books by Andrei Alexandrescu Andrei Alexandrescu and James Coplien in that level for C++. (Maybe Scott Meyer’s and Herb Sutter’s too) But so far I have not really seen anything that sets the language community on its ear. Maybe this is just another testament to C#’s simplicity, or maybe we just need to wait a few more years.

    *I would like to see some books/articles that extol the C# design philosophy. Maybe I might just start to think "simple" more often. I sure could use it.