Welcome!

PHP Authors: Salvatore Genovese, Michael Sheehan, RealWire News Distribution

Related Topics: .NET

.NET: Article

.NET Archives: Getting Reacquainted with the Father of C#

Derek Ferguson, Editor-in-Chief of .NET Developer's Journal, Talks to Hejlsberg In a Major Interview

.NETDJ: Who are your technology idols?

AH: I look at it like, "If I've seen so far, it's because I've been on the shoulders of giants." There have been so many people who have done so many things. Coming from the world of C, I thank Bjarne Stroustrup for C++, James Gosling for Java, and Kernighan and Ritchie for C. I'm just happy to be able to carve out a little corner of that universe.

.NETDJ: How do you perceive the role of C# in the .NET universe? Is it the preeminent language of .NET, the C-family language for .NET, or something else?

AH: I think it is the C-family language for .NET. I think that if you are a C/C++/Java programmer today you will definitely come into .NET feeling very comfortable with C#. If you are programming in VB6, VB.NET will feel more familiar. Either way you go, both are completely integrated. You can now have projects that use both languages. With Visual Studio 2005, you can even link together VB and C# code into a single assembly, so externals consumers can't even tell!

.NETDJ: So, what is the function of language in .NET, then?

AH: I think the thing that is really important to understand is that, in the world of .NET, language is really just a question of syntax. The unique value proposition for .NET is that all languages ride on a common runtime and therefore the learning curve...well, 10 or 20 years ago learning the syntax of a language was 50% of the learning curve, and 50% was its APIs; indeed it might have even been that the language was more. Now, the API is the overwhelming learning curve, 95% or better. So, having a common API regardless of your choice of language is an enormous benefit!

Under Windows, the current API is the .NET Framework. Going forward, it will be WinnFX, which is even better! Syntax is a lifestyle choice. VB or C#, we all sort of tend to visualize things in the language in which we are most comfortable. Is English better than French? I don't think so. I don't think there will ever be one end-of-the-line programming language. New languages are how we make progress. New languages and arrive and fix problems from old languages, and so on and so forth.

.NETDJ: I was recently asked by someone why .NET needs both Events and Delegates. Honestly, I couldn't answer them. Could you explain this?

AH: This is like asking why we need classes and fields. They are different things. Delegates are types, and Events are members, so we have to have both Delegates and Events. The tie here is that an Event is of Delegate type, but encapsulates a particular instance of that Delegate.

The way to think of it is that you can think of Events as being properties of a Delegate type, so you kind of see that distinction. Now we do add some syntactical elements in C# so that, rather than getting and setting Events directly, we ask you to use the -= and += operations. Other than this, Events are like Properties of Delegate type.

.NETDJ: What is the one feature unique to C# that you think developers coming from other platforms most tend to overlook?

AH:

I think it is perhaps the type system unification, which is subtle but important. It is the notion that everything in C# is an object and you can start with this premise. I was talking to a professor who is teaching C# and he was claiming that he thinks C# is easier to teach than Java because it has a unified type system. He can get into the idea of value types versus reference types - which is pretty difficult material - later in a C# course than in a Java course.

In Java, you have to introduce primitives, references and wrappers, and so-on-and-so-forth immediately, because Java doesn't have a unified type system. I personally think that this makes a lot of sense.

.NETDJ: Since last we spoke, Global Outsourcing has become a much hotter topic in development circles. What are your thoughts on this?

AH: I can't say that I have any well-formulated thoughts. It seems more of a political issue than a technical issue.

.NETDJ: Last time we spoke, Mono was in its infancy. Since then, they have actually issued their first full release. Do you have any thoughts on this platform?

AH: I've talked to Miguel and looked at Mono a little bit. I think it is nice to see that our standardization efforts are bearing fruit and that the CLI is being implemented on other platforms. I think it is important to a lot of customers to know that alternate implementations are available, even if they don't use them. It will keep us on our toes, too! Competition is healthy.

.NETDJ: Before we go, could you tell me a little bit about your book?

AH: It is The C# Programming Language - the complete technical specification of the C# programming language. It is based on all of the ISO and ECMA specifications. The book, unlike the standards, has a gentler introduction and also has a whole section on C# 2.0 that describes the new features.

.NETDJ: I can certainly see the usefulness in a clear explanation of a new feature like Generics. Don't you think the whole concept is too complex to ever become generally used by .NET application developers?

AH: Oh no, quite the opposite. I expect that Generics and the new List<LT> and Dictionary<K,V> generic types will become the bread-and-butter of any .NET application! Honestly, they do precisely what ArrayList and HashTable do, except that they give you strongly typed collections with all the convenience methods a developer is likely to need.

Previously, there has sort of been this tension between strong typing and convenience when writing code with lists and arrays. You could have an array of Customer type, for example, but an array can't grow itself or sort, etc. So then people use ArrayLists, which have all the convenience methods, but don't retain any type information. With generics, you can have your cake and eat it too! You can have a strongly typed ArrayList - a list of type Customer, for example.

I believe that this will become an incredibly used type. It will get used much more often than ArrayLists, for example. The best part is that you won't need to understand Generics at all in order to use Generics-based collections. In order to author them, probably yes - but using them is just like using an array!

More Stories By Derek Ferguson

Derek Ferguson, founding editor and editor-in-chief of .Net Developer's Journal, is a noted technology expert and former Microsoft MVP.

Comments (10) View Comments

Share your thoughts on this story.

Add your comment
You must be signed in to add a comment. Sign-in | Register

In accordance with our Comment Policy, we encourage comments that are on topic, relevant and to-the-point. We will remove comments that include profanity, personal attacks, racial slurs, threats of violence, or other inappropriate material that violates our Terms and Conditions, and will block users who make repeated violations. We ask all readers to expect diversity of opinion and to treat one another with dignity and respect.


Most Recent Comments
isodoor 10/26/09 03:54:00 AM EDT

Professor Linda Shapiro is a great women with the following honors:
1. Pattern Recognition Society Best Paper, 1984
2. Pattern Recognition Society Honorable Mention, 1985
3. Pattern Recognition Society Honorable Mention, 1987
4. Pattern Recognition Society Best Paper, 1989
5. Pattern Recognition Society Best Paper, 1995
6. Fellow of the IEEE, 1996
7. Fellow of the IAPR, 2000
I like this site ;)
Good post thanks for sharing.

Peter Frost 01/28/08 06:21:14 AM EST

So it was the flaws in most major programming languages (e.g. C++, Java, Smalltalk, even Delphi) that drove the fundamentals of the CLR, which, in turn, drove the design of the C# programming language itself? Interesting...

David Totzke 03/14/05 12:27:22 PM EST

The mothers of C# invention wrote:

"Or you might actually look beyond the blinders and see that VB is Basic mutated beyond recognition. And Basic was the worlds only programming language for those who couldn't program. "

Thank god for that. Now all of the people who couldn't program won't be able to inflict their garbage on the world.

"The father of C#! Like calling the guys in Malasia and China running the illegal CD and DVD duplication operations the fathers of multi-media. "

Well, at least they're not bitter. Somebody get the mothers some Thorazine please.

Sheesh,
dave

The Mothers of C# Invention 03/12/05 09:59:57 PM EST

>I think there is a healthy cross-pollination that occurs
>between all the programming languages. While you might see C#
>pioneer in one direction and VB pioneer another, ultimately
>there is a lot of crossing over of ideas over time.
>Certainly, anything we do on the C# team we let the VB folks
>participate in and vice versa.

Or you might actually look beyond the blinders and see that VB is Basic mutated beyond recognition. And Basic was the worlds only programming language for those who couldn't program.

Or if you took the blinders off, you might see that C# is Java with Microsoft curb feelers.

J++ + MFC ??? What a joke! Microsoft never saw a standard they couldn't improve upon!

The father of C#! Like calling the guys in Malasia and China running the illegal CD and DVD duplication operations the fathers of multi-media.

Doug Ferguson 03/11/05 03:45:29 PM EST

What should the language/framework add in the future?

Managed Threading would be a great addition. Currently managed memory stops the wild pointer problems that we see in unmanaged C/C++. The GC manages the memory.

However, when programming with threads, it is so easy to make a mistake. What is worse is that you will not know that you have made a mistake until some random collision blows up your program.

Managed Threading would check for thread safety in addition to type safety.

With all the announcements about dual core processors, multi-threading issues will be more important than ever.

dotnetRajesh 02/18/05 09:31:57 AM EST

Fantastic interview.Thanks.

Mukul Gandhi 02/11/05 11:41:32 PM EST

Its indeed inspiring to read interview of Mr. Anders Hejlsberg.

I have heard that Microsoft has decided not to implement latest version of XSLT language(XSLT 2.0) and XPath (XPath 2.0) in the .NET Framework. But Microsoft wishes to implement XQuery 1.0 in .NET, but only after it becomes a W3C recommendation.

In this interview, Mr. Anders Hejlsberg has said.. "Another language that is difficult to learn, but very powerful, is XSLT". It therefore seems, XSLT is an important language for Microsoft!

I wish Microsoft implements XSLT 2.0, XPath 2.0 and XQuery 1.0 in .NET Framework(and other relevant products).

Also it seems, Microsoft has decided not to release next version of their freeware MSXML software(i.e. after MSXML4, which I think is MSXML5). MSXML5 is shipping only with MS Office 2003. I wish Microsoft release its latest MSXML5 software(or later versions like MSXML6..) as freeware just like MSXML4. And, latest MSXML (6 and beyond), should support XSLT 2.0 and XPath 2.0!

I have heard, that Microsoft is of the view, that they implement W3C specs only after they become recommendations(and not in draft form).. I do agree with this view.. But, if Microsoft starts work now(it might have already started!), to implement XSLT 2.0/XPath 2.0 in .NET and MSXML, the product would be delivered on time!

Regards,
Mukul