.NET/C# Generics History: Some Photos From Feb 1999
Over the years I've been fortunate enough to work on several different projects. F# is ongoing, has several different aspects (FP, OO, async, units-of-measure etc.) and quite high-visiblity, but perhaps the one that was most timely, most foundational, and most wide-reaching was .NET and C# Generics.
Here are some fun photos from the early history of .NET Generics at the Microsoft Cambridge Research Laboratory in Feb. 1999, in St Georges House, Cambridge UK. The photos were our record of a whiteboard discussion between myself, Cedric Fournet, Nick Benton and Simon Peyton Jones (and maybe some others?). We'd already discussed some of the ideas in Redmond, but it's fun to have visuals like this and memories of the early days of the Cambridge lab and the adhoc meetings where we pursued our ideas. Some parts of the .NET generics design that were only implemented much later ("variance flags on type parameters") are listed.
It was an amazing time, to land at Microsoft with such a great group of people, and at the start of such a great platform.
To write a full history of the project would take more time than I have here, though I hope to do it one day. But I do want to say one thing straight: Generics for .NET and C# in their current form almost didn't happen: it was a very close call, and the feature almost didn't make the cut for Whidbey (Visual Studio 2005). Features such as running CLR code on the database were given higher priority.
It was only through the total dedication of Microsoft Research, Cambridge during 1998-2004, to doing a complete, high quality implementation in both the CLR (including NGEN, debugging, JIT, AppDomains, concurrent loading and many other aspects), and the C# compiler, that the project proceeded. Product group resourcing for the feature was low until 2004, and remained sparse, leading to major overload on MSR Cambridge employees, though ultimately the code, designs and specifications were fully transferred into both the CLR and C#. Today, the future of the CLR is firmly in the hands of those in Redmond.
There were some particularly memorable personal moments:
- missing my wife's birthday in order to make a deadline for NGEN support for generics (she is very forgiving, please thank her if you ever meet her);
- the memory of opening AppDomain.h and realizing the critical nature of the interaction that app domains pose to generics
- making the first public presentation of the work at PLDI 2001
- being told by product team members that "generics is for academics only"
- Eric Rudder's email of April 2002, saying "Just to close out on this thread from my mailbox, we will be doing c# generics for Whidbey, and the previous work will be very leveraged, so thank you".... No. thank YOU, Eric :-)
What would the cost of inaction have been? What would the cost of failure have been? No generics in C# 2.0? No LINQ in C# 3.0? No TPL in C# 4.0? No Async in C# 5.0? No F#? Ultimately, an erasure model of generics would have been adopted, as for Java, since the CLR team would never have pursued a in-the-VM generics design without external help.
The world is as it is today because we act when we have the chance to act, and because we invest in foundations that last the test of time. If you see a chance, take it.
A huge thank you to everyone who was involved in this work (especially, of course, Andrew Kennedy), and it still gives me a warm glow to look at a .NET, Silverlight or Mono exception stack trace and see some generics hidden in there :-)
Comments
Anonymous
March 15, 2011
I had always assumed that generics was an obvious essential feature that was only skipped from .NET 1 due to insane time pressure (that was when trying the pre beta's of .NET 1). It's amazing to hear the reality, and I thank you for making C# immeasurably better than it would otherwise have been!Anonymous
March 15, 2011
I cannot believe this statement "generics is for academics only" What a narrow view! Thanks very much for sharing this story with us.Anonymous
March 15, 2011
The comment has been removedAnonymous
March 15, 2011
Having learned F#, never looking back ... more people should know the history of generics, it allows a much better understanding and that's really what does the job. Another is the continuation monad, ya' gotta' get that one ... the c++'ers even have a continuation method now with much under the covers. cheers, tomAnonymous
March 15, 2011
The comment has been removedAnonymous
March 15, 2011
Amazing. Thank you! And your wife :-)Anonymous
March 15, 2011
Wow! The sign of a brilliant invention is that it opens up new possibilities that the inventors didn't even imagine at the time.Anonymous
March 15, 2011
Generics are one of the most often cited features that place the .NET framework technically above java. And I would speculate that the feature was instrumental in proving that .NET was a serious focus for Microsoft, and not just a syntactically similar knockoff of Java as it had been portrayed when it was first released. It's probably under-appreciated as to how mind share is swayed by this sort of technical leadership. A major aspect of platform evangelism is simply demonstrating your technical prowess in such a way that those who adopt your tech feel confident in the minds behind it. I'm sure .NET on SQL sounded like a better use of resources at the time, but in retrospect, even without including the effect of follow on technologies such as LINQ, generics cemented the reputation of .NET and played a very large part in it's success alone.Anonymous
March 15, 2011
The history showed your hard work and dedication. .Net developers around the world are enjoying their work with generic now. They are praising your work while they do coding.Anonymous
March 15, 2011
The "tweet this" button it doesn't workAnonymous
March 15, 2011
Thank you!!!!! and all the best to your family and friends!Anonymous
March 15, 2011
When's your wife's birthday? I'd like to send her flowers.Anonymous
March 16, 2011
I can't imaging a life without generics..Thank you for bestowing the goodness of generics on us.. :)Anonymous
March 16, 2011
The comment has been removedAnonymous
March 16, 2011
.NET - you are blessed with Generics - Thanks Don!Anonymous
March 16, 2011
The comment has been removedAnonymous
March 16, 2011
As a Java developer, I thank you... If dotNET had omitted generics, then I am pretty certain that Java would have NEVER implemented them. Proof that competition works!Anonymous
March 16, 2011
Excellent article, even tho generics don't mean much to me (yet). One question, didn't MS have a digital, save-able whiteboard in NetMeeting in 1999? Just saying... ;)Anonymous
March 16, 2011
Guy that told that generics is for academics only should be slapped. And fired. Thanx for pursuing and all the good work.Anonymous
March 16, 2011
Thanks for posting this - a great read! Also thanks to you and all who contributed to making the CLR such a great development platform. In a company full of Java developers, I feel blessed to wave my Visual Studio stick around, to the envy of others. :-)Anonymous
March 16, 2011
The comment has been removedAnonymous
March 16, 2011
I am probably the only dev who knows about this, but TSelf is amazing. It's probably something you never designed, but thanks to correct design it works.Anonymous
March 16, 2011
gracias por crear .NET . es lo mejor en el mundo de la programacionAnonymous
March 16, 2011
Thanks Mrs. Syme. You've got a great guy there.Anonymous
March 17, 2011
I second that call for the guy who said "generics is for academics only" being firmly and repeatedly slapped, before then being dropped from a great height, with a java book in his clasp! - Actually that person should be named and tattoed with a capital D too! Thank you Don and the team that delivered this essential feature - it would be good if a number of the loose ends could be tidied up though!Anonymous
March 17, 2011
How many years did it take for Softies to implement generics? Why wasn't it in VB6? Generics were around for decades, since the '70s. > being told by product team members that "generics is for academics only" Haha.Anonymous
March 17, 2011
Thanks a lot.Anonymous
March 17, 2011
Thanks Don! My gratitude to you and your team for your dedication and hard work. IMHO .NET would not be such a compelling development platform w/out generics, LINQ, Async, and of course F#. My thanks to your wife too for her understanding when you were in the thick of things.Anonymous
March 18, 2011
Thanks for all your gifts to the .NET community, and the personal commitment it took to deliver them. Looking forward to seeing you and your family back in CH, soon (let me know!).Anonymous
March 18, 2011
Thank you! And your wife : )Anonymous
March 21, 2011
Generics is fun. Thank you so much. Looking at white board was awesome.Anonymous
March 26, 2011
thanks for generic and thanks for a great advice for life! "....If you see a chance, take it."Anonymous
March 28, 2011
.Net would have not be that fun without generics and also F#. Thanks to you and your wife :) The world is as it is today because we act when we have the chance to act, and because we invest in foundations that last the test of time. If you see a chance, take it. - Don Syme, Microsoft researchAnonymous
April 02, 2011
Wow. Thank you. I take it there's currently some comparable "big decision" to be made, and you're hoping for the right choice? PeteAnonymous
April 14, 2011
Thanks for the fascinating read! I never would have guessed that generics, easily one of the most important features in .NET 2.0 and onward, almost didn't make the cut. I can't thank you and your colleagues enough for all the time and energy you channeled into making it happen. Having worked with Java on the back-end for a recent project, I have a reaffirmed appreciation for reified generic types (and, consequently, the ability to bind type parameters to value types). I think you have successfully demonstrated that generics aren't "just for academics(?!)".Anonymous
May 20, 2011
Wow. Thank you for pushing so hard for generics. Thank you for this contribution. And thanks to your wife! :-) Here's another innovation we'd be without had generics not made it: Reactive Extensions, which is proving to be a unique innovation built atop generics and LINQ. msdn.microsoft.com/.../gg577609Anonymous
January 05, 2012
Wow, the world would not be the same without generics (at least my programming world). Thanks for your dedication!