This past summer I was interviewed by C# MVP Octavio Hernandez and VB MVP Pep Lluis Bano for an article that was published in the Spanish magazine DotNetMania. The Spanish text is available as an attachment at the end of this post, as well as in summary form on the DotNetMania site. I've included the full English version of the text in the blog post below.
Normally, interviews are often of interest to the restless and eager curiosity, but in the background of every one of the biggest concerns is to reveal the what, who, how and when, whether with regard to more personal or scenario in which the character develops professionally. It is clear that the interest of an interview is increased depending on the respondent's reputation and credibility of the interviewer. In the present case, we have Lisa Feigenbaum, Community Program Manager on the Visual Studio team at Microsoft, interviewed by a C # MVP, Octavio Hernandez and another VB, Pep Lluis Bano. We recommend you to take a good seat, relax and enjoy this conversation.
Pep Lluis/Octavio. Hi, Lisa! It's a real honor for us to be able to interview you. Would you be so kind to introduce yourself to our readers?
Lisa. Hi, Pep and Octavio! Thanks for inviting me. My name is Lisa Feigenbaum, and I’m a program manager on the Microsoft Visual Studio Languages team.
Octavio. I'd like to know a little more about your role within the VB.NET team, and also about your implication with the VB.NET development community.
Lisa. I started on the VB.NET team in 2004 as a feature program manager for the VB IDE. I had a great time designing the Visual Studio editor and debugger features in that role. My work on the IDE spanned VS 2005, VS 2008, and early VS 2010. A few features that I worked on include IntelliSense, code snippets, XML comments, error correction, edit-and-continue, and LINQ. In 2008, I switched roles and became a community program manager. As a community program manager, I create and organize content for the Visual Studio managed languages team. This includes the Developer Center websites, blogs, forums, articles, videos, podcasts, and the MVP program that you’re both a part of! I’m also involved in the planning for several Microsoft conferences. Finally, another part of my job involves listening to customers in the various interactions I have, and using that feedback to help drive the product strategy and future direction. I’ve always enjoyed participating in community activities, so I’m happy that I get to be even more involved in my current role!
Pep Lluis. Well, if Octavio which is a C# MVP has asked you questions related to VB, I'll have to "counterattack" and ask you the same questions, but in relation to the C# team and development community. :)
Lisa. To be honest, a big part of this answer is “the same”! Since we merged the VB and C# teams in 2008, and decided to co-evolve the two languages, I’ve been finding more similarities than differences in what the best community activities are for each. We have two developer centers, http://csharp.net and http://msdn.com/vbasic, and two MVP programs. The conferences that the VB and C# teams attend, and the recorded and written content that our team produces apply equally to both C# and VB.
Octavio. There has been a certain controversy in the development family related to the so called "language parity" between C# and VB. Many of us are asking ourselves whether this could "dilute" the identity of each of those languages. What do you think about that?
Lisa. I don’t think that’s true. Today, VB and C# are built on the same CLR and can be used to access the same framework technologies. However, they’ve managed to maintain their own identities through their individual syntax, style, and IDE experience. I see things working the same way with language parity. Though we’ll add the same general features to both, they’ll each be added in a way that makes sense and fits naturally with the rest of the language.
Pep Lluis. Am I wrong if I say that the amount of application developers using C and VB is more or less the same, i.e. about 50%?
Lisa. No, you are not wrong. Our data shows that the number of professional developers using C# and the number of professional developers using VB.Net are approximately equal.
Octavio. Many of those who use C#, the "purists" in the first place, have the opinion that the new dynamic feature could negatively influence the quality of C# code, being misused by novices and not-so-novices… What can you say about that? What is the accumulated experience in that respect by VB.NET, where Option Strict Off has been always present?
Lisa. I should first mention that there are many merits to the new dynamic feature. It provides a much more elegant way to work across language and object model boundaries, which helps scenarios such as python interop and COM. As you mention, although dynamic is extremely advantageous in those scenarios, it is not intended to be used everywhere. IntelliSense support for dynamic variables is limited, so that should help influence people to only use it when appropriate. Finally for the true purists, you can also remove your reference to Microsoft.CSharp.dll, and that will prevent any dynamic dispatch from occurring.
In VS 2010, VB will also have the same DLR support and language interop scenarios that are enabled through the new C# dynamic. In VB, this functionality is implemented using the VB late binder. Late binding has been a feature of Visual Basic since before .NET, and has been very popular when working with COM. It also has similar intelliSense limitations as mentioned above for C# dynamic.
VB late binding requires Option Strict Off (which is what I’m assuming the second part of this question refers to). However I’d like to clear up a misconception, which is that it would be inaccurate to say that when Option Strict is Off all variables are declared late bound. Even with Strict Off you still have to explicitly opt-in to late binding by typing your variable As Object (assuming you’re using type inference, which is on by default starting in VS 2008). Therefore, Option Strict On does not necessarily make your code “more type-safe”. Option Strict On just means that you’re forced to insert the same casts that the compiler would insert for you when Strict is Off. Therefore the resulting runtime code isn’t any safer, since a cast can always throw.
Pep Lluis. Whenever I review C# or VB code, used to old-time programs, I always have the sensation that programming relies every time less in language keywords and more in the use of the facilities provided by .NET Framework classes. Could you give us an estimate of how many new classes will be added in the new .NET 4.0 with respect to .NET 3.5 SP1? Which will be the main new libraries available?
Lisa. Since I’m on the languages team, of course I believe that languages are still an important part of the stack. :) However I would agree that there’s a lot of important innovation happening in the Framework, particularly in.NET 4.0!
One area I’m really excited about is the parallel computing support. .NET Framework 4 includes new libraries that support task and data parallelism (the Task Parallel Library), a parallel implementation of LINQ to Objects called Parallel Language Integrated Query (PLINQ), and new data structures for synchronization and concurrency. Visual Studio 2010 also includes new support for these .NET 4 features, including profiling and debugging features. Together, .NET 4 and VS 2010 provide a revolutionary way to utilize power of multi-processor and multi-core machines.
.NET 4 includes a new common language runtime (“CLR 4”). CLR 4 features include ETW events, code contracts, lazy initialization, improved profiling and garbage collection, and covariance and contravariance. It includes the dynamic language runtime (DLR), which makes it easier to develop dynamic languages to run on the .NET Framework. It includes in-process side-by-side, which enables an application to load and activate multiple versions of the CLR in the same process. It includes No-PIA, which means that you no longer have to use primary interop assemblies (PIAs). (Instead, the VB.NET and C# compilers embed the parts of the interop assemblies that the add-ins actually use, and type safety is ensured by the CLR.)
.NET 4 includes additions to the base class libraries, such as BigInteger, SortedSet Generic Class, Tuples. It also includes improvements to I/O, reflection, threading, and Windows registry.
The Managed Extensibility Framework (MEF) is a new library in the .NET Framework 4 that enables you to build extensible and composable applications. Components of Visual Studio 2010 were written using MEF.
Finally, .NET 4 also includes some additions to Windows Communication Foundation (WCF) and a new model for Workflow (WF).
Octavio. Besides dynamic typing, C# 4 will add optional and named parameters, co- and counter-variance and some facilities oriented to simplify interaction with COM. Can you talk a little bit about those features, especially under the light of your experience of how people have used similar facilities available in VB since long ago?
Lisa. These features have been a huge success for VB and I anticipate they will be the same for C#. There’s been a lot of pent-up demand for this functionality. If you’re programming against Office and using C#, VS 2010 will make a big difference.
Pep Lluis. Talking about VS 2010, we should then review what's going to be new for VB developers. I don't think we will have any problems with automatic line continuations, but do you think that automatic properties, collection initializers and lambda expressions will be easily assimilated by VB programmers?
Lisa. I do. The automatic property syntax is fairly straightforward. It’s essentially the same syntax as the current expanded property syntax, but just the first line. Whenever I see VB and C# code samples from VS 2008 which involve properties and I see how much longer the VB code is, I can’t wait for VS 2010!
To be honest, I didn’t anticipate the demand for VB statement lambdas to be as high as it is, but since the C# feature has been available, there has been a lot of demand for it in VB. Statement lambdas have proven to be very useful for programming against various technologies. The parallel extensions library in .NET Framework 4.0 are one good example.
Collection initializers build on the object initializer syntax that was introduced in VS 2008, so I expect the concept to be fairly familiar.
I don’t expect most people to go back and update their existing code to use these new features. However, I do anticipate that they will use them to simplify new development!
Octavio. Well, that leaves only iterators and unsafe code in C#, and XML literals in VB, and we'll have full parity! Should be a tremendous satisfaction to see the culmination of all those efforts when the product is ready to ship, right?
Lisa. Our plan for co-evolving VB.NET and C# involves adding major features to both languages at the same time, and filling in the holes where they currently differ in capability. We don’t expect to finish this work in VS 2010. It will take 2-3 releases to fill in the holes. We also don’t expect to reach 100% parity. At some point, we believe that people will prioritize new features over filling in the smaller holes.
We made significant progress towards co-evolution in VS 2010. We added collection initializers, auto-implemented properties, array literals, and statement lambdas to VB. We added named & optional parameters, late binding via dynamic, and the ability to omit ref on COM calls for C#. Finally, we added interop with dynamic languages, generic variance, and no-PIA deployment to both.
Iterators are the next feature most likely to make their way into VB in future releases after VS 2010. C# XML literals and VB unsafe code are not currently in the plans.
Pep Lluis. An idea from VB 8 that seemed to be great but has not had much success is the My namespace. Which, do you think, could have been the reasons?
Lisa. Actually, we haven’t had the experience you describe regarding the uptake of My. Like all features, it takes time for people to start using it. However, the response from the VB community on “My” has been overwhelmingly positive! VB folks who advocate for VB as the rapid application development (RAD) language felt “My” was a great innovation. It has also been requested by some C# developers. :)
The surface area of the .NET Framework is quite huge, and finding the right class to do a specific task can often take longer than doing the task itself! “My” provides a “speed-dial into the framework” that gives you easy access to lots of common operations such as reading from files, getting an application’s current directory, or even checking if Caps Lock is On.
If I had to conjecture why some VB developers might still not be using “My”, the number one reason I would guess is that they haven’t discovered it yet. Another reason I’ve heard is that people are concerned about the additional size it may add when deploying their application; however, we’ve found the size difference to be quite negligible. Finally, another reason might be that people wanted to know in more detail about how the code was running. (However all the “My” code is highly optimized, so there is not a lot of reason to need to know the underlying details. Instead you can focus on getting the job done!)
Octavio. We know about your commitment to the developer communities. I'd like to know the plans for the future, the new resources for developers on which you are working now.
Lisa. I’m currently working on building good content for VS 2010, so that we will have resources available when we ship. I recently created two new pages on the C# and VB MSDN Developer Centers, to highlight the top VS 2010 resources:
Those sites include early versions of the C# 4.0 and VB 10 language specifications, VS 2010 overview documents, samples, walkthroughs, blog posts, presentations, Channel9 interviews, and more.
Looking forward at the rest of the year, I am planning to continue the kind of content creation that we have on the VS 2010 sites. I plan to conduct more videos, podcasts, and interviews with the team (like this one!). I plan to continue partnering with MVPs and highlighting MVP content on the VB and C# Developer Centers (like the article you’ve contributed on LINQ: http://msdn.microsoft.com/en-us/vcsharp/aa336732.aspx). I will also be involved in organizing Visual Studio conferences and events.
Finally, I’m also working quite a bit on making sure that we have good VB.NET content for Microsoft technologies. Today there are many places where samples are created only in C#. I am working to improve that situation and create parity for VB.NET.
Pep Lluis. Many people has curiosity to know how many groups and people in general contribute to such a complex product as Visual Studio, how many lines of code all its parts sum, and which languages they mainly use. Also, it should be really complex to coordinate all those groups…
Lisa. It certainly is a huge undertaking to manage all the teams and the code that make up Visual Studio! There are 30 product units that make up Visual Studio. Our product unit (Visual Studio Languages) has about 100 people. In total, there are about 1000 people who work on Visual Studio. There are another 800 or so who work on the .NET Framework. Between all those teams, there is a lot of code that is constantly changing. In order to maintain stable builds, there is a complex branch system as well as various quality measures. Features are developed in individual “feature branches” and aren’t integrated into main builds until they are complete. Whenever an integration occurs, a series of functional and performance tests are performed to ensure that it doesn’t “break the build”. There is also a rigorous process that occurs for a couple of months leading up to any public release, whereby all changes across the division are reviewed by a central committee called “shiproom”.
Visual Studio is written in multiple languages, including C++, VB.NET, and C#. There are about 42 million lines of code in VS 2008, and more coming in VS 2010. It’s a pretty massive solution! In order to build the product from scratch, it takes up to an hour to sync the code, 5-6 hours to build, and then another 6-7 hours to build setup packages for the normal daily layouts.
For more information on the processes that occur while building the Visual Studio product, we recently posted a great interview with Matt Gertz, developer manager of the engineering execution team: http://channel9.msdn.com/posts/funkyonex/How-We-Do-It-Building-the-Visual-Studio-Product-Line
Octavio. Could you take the risk and confess which feature is your favorite regarding VS?
Lisa. I think Pep knows the answer to my favorite feature. I can’t seem to hide it when I present! My favorite feature is IntelliSense. IntelliSense has been part of the product since before .NET, and continues to be a core part of the Visual Studio experience. It is one of the first productivity features that originally excited me about VS.
Pep Lluis. Knowing you I know you have done a great work in promoting the usage of the excellent IntelliSense capabilities in Visual Studio, and particularly the usage of code snippets in the editor. I'm sure that VS 2010 will offer a great implementation of all that. Can you tell us what's going to be new in the VS 2010 user interface?
Lisa. There is a lot happening in the user interface in VS 2010! For one, we have rewritten the Visual Studio editor and shell in WPF. When you open VS 2010, you will immediately notice the new look and feel. There are many end-user features that have been added as part of this change. There is improved multi-monitor support, which allows you to dock code editor windows on separate monitors. There is the ability to easily zoom the code editor in and out by pressing the Ctrl key and scrolling the mouse. There is improved outlining support and block selection. There is also a new Start Page and New Project dialog, equipped with search capabilities. Visual Studio extensibility has improved, and there is also a new extension manager and Visual Studio Gallery, to make it easy to find extensions. The list goes on…
As far as the VB and C# IDE features in VS 2010, there are quite a few of those too. We call them “Code Focused” features, since they provide deeper understanding and searching into your code. My favorite is “Navigate To”. Typing “Ctrl+,” in VS 2010 causes a dialog to appear, which helps you quickly navigate to a file or member in the solution. Another great new feature is “Generate From Usage”. “Generate From Usage” allows you to refer to members in your code before defining them, and then rely on the code editor to stub out the definitions for you. This will be a great productivity tool, and is especially interesting for those doing Test-Driven-Development (TDD). There have also been improvements made to intelliSense for TDD, to avoid over-aggressive completions. Finally, two new features to help with code understanding are Highlight References and Call Hierarchy. Highlight References allows you to easily see how a symbol is used in the current code file, by highlighting all the references for you. Call Hierarchy provides a visualization of all the calls to and from a method in the current solution; however, it is currently C#-only.
Pep Lluis. In 2008, we had the privilege of having you in Spain visiting the user groups in Barcelona/Tarragona/Valencia/Murcia/Madrid. I must recognize we weren't able to get enough developers to attend such a unique occasion for interacting with you and Jonathan Aneja. I think the industry is accusing some "apathy", and with each new version of VS the distance between those who know and use the latest features and those who remain knowing only the older ones is growing… My question is: which do you think should be the messages we from the user groups must transmit in order to correct this tendency?
Lisa. I don’t know whether it is “apathy”. However, I would agree that there are more technologies being released each year in the software industry, and it’s getting harder for people to keep up. I would encourage user group members to continue attending and learning the latest features. Each release of Visual Studio contains new capabilities which continue to help improve productivity, so taking some time to learn them will save time in long run. :)
Pep Lluis. I like to think that we will soon have another opportunity to meet here in Spain with members of the C# and VB teams. So don't forget that you have a permanent invitation to come. Just as a last comment, I'd like to say that is moving to see the implication of people like you in the development of Visual Studio and of .NET and in transmitting all that knowledge to developers.
Lisa. Thank you, Pep! It was an honor for me to meet with the developer community in Spain and I hope that I will have more opportunities in the future.
Octavio. Please, any final words to our readers?
Lisa. Please visit the VB and C# Developer Centers, for the latest and greatest information on VB.NET and C#: http://msdn.com/vbasic and http://csharp.net.
Please try out the Beta 1 release of Visual Studio 2010, available for download here: http://msdn.microsoft.com/en-us/vstudio/dd582936.aspx.
Finally, please write and let me know what kind of content you’d like to see more of, for Visual Basic and C#: Lisa.Feigenbaum@microsoft.com.
Thanks for reading!
Pep Lluis/Octavio. Thank you very much, Lisa! We really hope to see you soon in Spain.
This article is an excerpt from the DotNetMania July-August 2009 edition: