Juval Lowy is Microsoft’s Regional Director for Silicon Valley, the founder and principal of IDesign and he was a participant in the internal design reviews for .NET 3.0.

Lowy was recently in Australia teaching a WCF Masterclass — a handy topic if you recently released a book entitled Programming WCF Services.

Builder AU caught up with Lowy during his masterclass in Sydney and discussed what is in .NET 3.0, the design review process and how developers can better learn.

Builder AU: What is new in .NET 3.0?

Lowy: The first thing about .NET 3.0 is that it’s not up to 3.0. The CLI hasn’t changed, is it [up to] 3.0? No. System.Accessibility has not changed, it’s purely marketing.

I agree with Microsoft though, it’s not .NET 2.1, if anything it is .NET 4.0 — it’s a quantum leap. 3.0 was actually a brand name.

It’s a brilliant set of modern technologies, most of them have enormous potential. One of them is better than others, it’s also the most mature of them all and is ready to be used today. That’s WCF.

The other technologies also have a lot of potential, but are not quite there yet. For example, WPF doesn’t have any design tools for developers. So in practical terms it’s like saying “I have assembly, but I would love to have a compiler”.

Developers today cannot really use WPF, only the die-hard early adopters will use it until they have good design tools.

Even the next design tools that will be in .NET 3.5 I believe, is going to be more cumbersome to use.

So we have a long way to go.

With WPF we can do some truly amazing things as far as GUI, but you don’t have a design tool for it, and the simple things are made more complex. We are not there yet.

WCF is going to be very good and as for a design tool we don’t need one. And the world desperately needs WCF, the world doesn’t desperately need WPF. What real world applications need a rotating carousel with mirrors and spinning balls? Most of them need secure transactions, reliability and so on.

What does it mean for developers?

I think that there is a smaller place like CardSpace and WF which are very nice to code with, especially WF.

They are good tools.

I don’t see that professionals use WF, I see that WF should ultimately be an end-user tool instead of a development tool.

And let your domain expert — I’m a developer and I don’t want to think about the domain — let me describe the required behaviour of system.

You have to be a developer to use the tool. At some point we are going to see [end users use] that, but not today.

CardSpace has got enormous potential for solving many of the security problems we have, especially for end users.

But again you have to be a security expert, not an amateur, to use CardSpace today. You have do to a lot of plumbing to make it work. There is hardly anything available off the shelf that can provide secure tokens and such — you have to write everything from scratch.

You have to need it to actually use it.

Then, to make it more challenging they had to have separate evolutionary tree for the languages, which used to be called .NET 3.0, then what used to be WinFX became .NET 3.0.

I have no idea what they are going to call the version number but it now looks like this: they are going to have a release of .NET called 3.5, whose framework is actually 2.0 but called 3.0, whose language features targets 3.0 but actually runs 2.0. Can you imagine the difficulties here?

So again, we have a 3.5 release with 3.0 language features, targeting a 3.0 labelled framework on a 2.0 runtime. Try to figure that one out!

Builder AU: Will there be a couple of years of wasted potential then?

Perhaps what we have now is a glimpse of the future.

Builder AU: Do you think LINQ will be brought into .NET soon?

The next release of the languages is 3.0, whatever that is, and there are other features in it. Especially things like extensions and such — which are nice from a language standpoint.

I personally think LINQ is not that appealing. They should have spent the bucks on something totally different. I think trying to conceptually trying to move XML to the level of the language is wrong — nobody should see XML.

Most people just drag and drop the connection anyway, so they are never going to see it.

Ultimately no one should write a LINQ query by hand.

Builder AU: Can you explain the .NET 3.0 design review process?

That was a different design review process. Mostly it was a Microsoft thing, but a handful of people got to work for Microsoft and were privileged enough to be part of it — I was one of them, only about six of us who didn’t work for Microsoft were part of the Strategic Design Effort.

In those days nothing was set, just a whiteboard and a marker. You argue how to do it like this, how to do it like that and so on.

Basically the top minds we were put in one room. Some would be more into the messaging part, some would be into the overall systems architecture, some of them were security experts.

The most interesting thing I have done in my career was being in those meetings.

Some of my ideas are in the product, some of them that didn’t make the product, I put in my book.

Builder AU: Did you work off a blank slate?

It has been evolving in many different ways.

It actually went through three generations of programming model. If you were to see the previous two, you would not recognise them today, they are that different.

The programming model on top is completely fluid.

There’s also the features you can put on top, and in many cases we had to prioritise — [choosing] not do something here, maybe somewhere in the future.

Some of the things made sense to do then, some not.

Builder AU: How did you prioritise something so large?

You prioritise like so; suppose you have 20 people in a room, you give each of them five points. There are 30, 40, 50 features. Some may care about this feature and not care about that feature.

You only have five points, you can put all five on one feature, or you could put one here, two there etc.

You do this point voting and whatever has the most points is in — and that’s how you prioritise.

Point voting is a classic way of doing it.

Builder AU: Who controls the future direction of .NET now?

My impression is that the original team has been disbanded — much as they did for the Indigo team. It’s very unique, they tapped into all the stars of the company and they worked on that product.

Now the nature of all all-star teams is that they don’t last very long. Because first of all they are all prima donnas. There has to be a reason to make all the prima donnas work together.

Second thing is that you don’t need an all-star team forever and ever. The initial conception is done, the main stuff is done — maybe make a version x.1, a few more features, more tools.

I bet that the guys that designed and conceived Word are no longer on the Word team. So it’s a natural evolution.

The other thing is that if you keep the all-star team together for an extended period of time, the rest of the company is not healthy because you are missing the top talent. Microsoft is the same as any other company , not everyone is a star. It’s probably the 80/20 rule.

The team moved on, now we have to do a lot of work with the community and educate people.

[If] you look at the rate of change, in the last four years we have been through three generations, in the next 10 we will go through zero generations — the object model will not change.

Once you are over the hump, you don’t need the people that can push over the hump, you just have incremental changes.

Builder AU: Anyone left on the team that still has input?

I think people are very much involved, there’s no doubt about that. Even though they have moved to other jobs they still have input. People who design something like WCF also get promoted.

It’s an achievement of the human spirit, I kid you not. From an engineering standpoint it’s one of the most colossal engineering efforts of our time.

So the people managed to do that, they used to be the manager, they are now the general manager of another division. There’s all these natural processes happening — you can’t expect the same people to stay there forever and ever.

Builder AU: Why do you think it was such a huge effort?

You have to actually understand what they were doing to understand what was involved.

I’ll give you a simple example: I send you a string of text? Do you know what that is?

If you are Microsoft developer that doesn’t mean anything. It could be a char*, a wchar*, string from C#. What exactly do I mean when I say string?

What about a boolean? Send me a boolean. 0 or 1? true or false? -1 or 1? What exactly does it mean?

And that’s just at the primitive level.

Now let’s talk about how do we do a secure transaction over the Web across technologies in different timezones with differing type versions? See where it is heading?

So if you have these problems, even at the atomic level, how can you do something as complex as securing a message without even knowing the target technology or target version?

Builder AU: What is the best way for developers to learn new things?

I think with modern technologies, [you have to] put more emphasis on the semantics as opposed to the syntax of what you do.

There’s no substitute for understanding the rationale behind things.

Most developers can pick up a new development language in a matter of hours. Give me any weird language, developers can pick it up in three hours, it’s nothing.

But if you look at the changes, last time the industry had this type of change was from C to C++ — most developers were writing in C/C++ syntax. It wasn’t a syntax change, it was a semantical change of doing OO design, encapsulated solutions, refactoring the classes, class hierarchies, bridge patterns and all that.

A lot of people are still writing C — that’s because semantical learning is a lot more difficult than syntactical language.

Unless you understand the rationale behind why to do this and why to do that, you are lost.

That’s the most important thing, it’s also the most difficult thing.

Builder AU: How can developers avoid the cycle of learning a concept, using it, forgetting it and having to relearn it again?

I think you have to be a professional developer. I think you have to understand that you have spent part of your time honing your skills, it’s an ongoing life goal. It doesn’t stop because you learn one thing, there is going to be changes. You should also search for a more nourishing business environment — if they don’t let you learn on the job [then] it’s probably not the best place to work for.

Seriously I mean, the rate of change today is such that learning is part of the job. No ifs, no buts, that’s the way it is.

[If they don’t] you are basically a bunch of monkeys and you look like a bunch of monkeys. It’s part of the culture you are in.

And in the end I think syntax is so easy, the semantics is what you are doing, you have to understand that.

Otherwise it’s just memorising things, and it’s impossible to memorise all of these things.

It’s also easier to understand things than to memorise don’t you think?