Next week Bruce Eckel and I will be co-interviewing Anders Hejlsberg, the chief architect of C#. Although we already have several topics lined up to ask to Anders about, I'd like to give Artima.com readers a chance to post their own ideas for the interview. What would you like to hear Anders Hejlsberg talk about?
Microsoft was kind enough to grant Bruce Eckel an interview with Anders Hejlsberg, and Bruce was kind enough to invite me along. So next week Bruce Eckel and I are heading up to Redmond to interview Anders Hejlsberg, the chief architect of C#. We are planning an in-depth technical interview, focused primarily on design choices Anders and his team made when designing C#. The interview will appear as a series of articles here on Artima.com, and as audio on a CD-ROM of interviews being prepared by Bruce.
A few months back I asked what Artima.com readers would want to hear James Gosling talk about before his interview, and I thought I'd give you all the same opportunity with Anders Hejlsberg.
For context, here are some past interviews with Anders:
Do you think that Delphi has run its course with the release of version 8 this year by Borland ? Could C# become the 'New Delphi' ? And would it be possible from a technical point of view use C# as a multiplatform language ? In this respect I am thinking of the fusion of C# and a .Net compatible VCL subset and the CLX libraries with a similar arrangement.
What are the minimum requirements for an alternative run time library that supports the ECMA TC39 October 2002 C# standard ?
I was wondering about the interaction the C# group has with the other language groups within Microsoft. Of particular interest is the Functional Programming (FP) groups - MS has some heavy duty researchers from the Haskell and ML communities.
Has FP had any influence on the design and evolution of C#. And when are we gonna see Haskell# that runs side-by-side in the Visual Studio IDE. :-)
Every language has its warts (some are percieved, some are real). What things in the current lc# anguage make you cringe and wish to yourself I wish I could take that back?"
what trends do you see in the "new" languages that people will continue to demand to have in any environment they program in the future. i'm thinking things like reflection or other useful language idioms?
Some languages pioneer features, and others popularize them (bring the features into the mainstream). And occasionally they are both done by the same language. Just sticking with the C-derived family of languages, I think C++ popularized objects (which helps organize code), Java popularized garbage collection and the general category of interpreted / managed / safe code (which removed large classes of memory problems). Perhaps C#'s legacy will be popularizing component programming (making it easier to create code) and probably others that you could point out better than I. All of these features tend to help make programmers more productive -- more expressive in fewer keystrokes -- and better able to deal with the complexity of the problem and less with the overhead of solving that problem on a computer.
What do you think the legacy of C#'s will be? What features of C# that were either innovated or borrowed-but-not-yet-mainstreamed will C# be valued for most?
I heard that the director of "Until The End Of The World", a film that was to be set 10 years in the future after the time it was made, asked the artists making music for it to try to put themselves ten years into the future and make music that might reflect more what they would write in ten years. Certainly a difficult task.
I can see that you were already trying to think into the future with C#. However, what do you think are directions languages will take that will result in large increases in programmer productivity?
This question deals with some issues that may be considered religious, so my apologies.
I have been reading stuff written by quite well respected authors that they are interested in or even being won over by Pyton (and sometimes Ruby). They seem to be saying the languages are more logical, and give examples of language and standard library usage that combine to make very concise and understandable code.
Have you tried out these languages? Do you have a feel for what their attraction? Are they really saying that the benefits are from dynamic over static typing, or did they just demand to be able to iterate lines in a file with only one statement? Is some aspect of those languages that C# and Java could adopt to improve programmer productivity?
James Gosling seems to have stepped back from the design of the Java language, handed it off to others such as Gilad Bracha, Joshua Bloch, and I think maybe Guy Steele. He's gone onto research into software development tools.
What's in the future for you? At what point will you be done shepherding C# and hand it over to others? What do you think you might go into next? Or is it too early to say?
I only have two questions, at least that haven't been hit upon already.
1. In C#, why do I have to do this:
TextWriter t = new StreamWriter (new FileStream (fileName, FileMode.Create));
TextWriter t = new StreamWriter ("C:\somedir\somefile.txt");
This is a bit clumsy and counterintuitive to most of the other constructs in the language, at least to me.
In a language where typing is important, I would have thought that things like the classes for reading and writing files would be at least clean enough where it would look like
TextWriter t = new TextWriter("C:\somedir\somefile.txt");
This is one of those things where Bruce Eckel and others talk about Python being more intuitive and allowing you to 'guess' what the right syntax or method call would be. If you type the C# file opening lines enough times, it becomes wrote. It still feels clumsy, but you don't have to compile and get the errors telling you "C:\projects\WinProject\Form1.cs(277): Cannot create an instance of the abstract class or interface 'System.IO.TextWriter'"
2. Why the decision to make the language completely object/component oriented. I've found times where it makes sense to create completely static classes, similar to the Java and C# Math classes. These classes are nothing but a bunch of function calls. Why not just allow function calls when they make sense? Sometimes all you need is data in, data out, without any object baggage.
I think that ggaughan's question about Delphi's place in the lineage of C# is a very important question. That's the one that seems to never get asked, but it seems to make the most sense in the world once somebody brings it up.
I'd like to ask Anders to discuss the C# team's plans for making C# a better choice for agile software development than any other Microsoft language.
One feature that it could really use is the change and go capability of Visual Basic. Agile development experts do a lot of very incremental changes, often directly in the debugger, in powerful languages like Smalltalk.
While VB is a good language for "paint the picture, add the features" programming, C# is, in my opinion, a much better tool for a professional. It needs, however, to start really supporting the agile style.
Features from those languages could make C# a much better choice than alternatives (certainly including Java). So, Anders, what's your plan?
What are the roadmaps for future releases? On C#'s homepage (http://www.gotdotnet.com/team/csharp/) many tantalizing concepts - especially anonymous functions - are mentioned. There doesn't seem to be any indication of the timetable, however. How quickly can we expect to see the language evolve? What are the future features that Anders are looking forward to the most?
I have a question about c# want to ask Anders Hejlsberg? Will c# support multi-thread multi-process multi-net-node program, and make it more easy. If do some change in the c# gramme and change clr to multi-clr , integrate the net debug in a IDE, we can make net program architecture more easy and forgot those complex protocol and so on.