-
There’s some changes coming to the MSDN library and documentation. Kathleen posted about the new views available on the MSDN library which include a Lightweight view, ScriptFree view and a Classic view. She’s also got a short Channel 9 interview with the senior development lead on the library team who demonstrates them so check it out!
We’ve also got a webcast scheduled at 10AM PST today -- Lap around the Visual Studio 2010 documentation – hope you can join us and ask questions.
Enjoy!
-
Couple weeks ago when I was in Holland speaking at SDC an attendee asked me how he could call methods in an Office solution (VSTO) from VBA functions defined in a document and vice versa. I thought I’d follow up with a post on how to do this, but first a little background on why this architecture would make sense.
There are many reasons why you would build an Office solution using Visual Studio (VSTO) as opposed to a pure VBA solution. Andri Yadi, VSTO MVP, wrote a great piece on his blog a while back explaining the benefits of VSTO compared to VBA. He broke it down into 10 areas, of which the main benefits are the tools and designers you have available in Visual Studio as well as the entire .NET framework and modern languages at your disposal.
However, there are probably many VBA assets that people in your company have already written, like complex algorithms or other business logic that you really don’t want to rewrite. Or maybe you still want to allow users to customize these functions in the VBA editor but it’s necessary for you to call them from your .NET code.
Likewise, you may want to develop a customization that takes advantage of WCF services or a WPF UI, modern language features, or any other feature of the .NET framework that would be difficult or impossible to do in VBA, and you want the user to be able to access these methods from their VBA functions. The attendee at SDC didn’t go into much detail on what his Office customization was doing exactly but he wanted to make some of his public methods available to his VBA users and this makes sense in a lot of situations. Luckily Visual Studio makes this very easy to do.
Creating an Excel Document Customization
For this example I’ll create an Excel document customization that accesses data through a WCF service and does some calculations on that data. The calculations, however, will be in VBA. To access the remote data over the internet I’ll create an ADO.NET Data Service. I want to pull up data in a Northwind view called Sales Totals By Amount. I’ve shown how to create an ADO.NET Data Service many times before so I won’t go into too much detail here. Please refer to the steps shown in the Using ADO.NET Data Services article. The only difference in this case is I selected the View Sales Totals By Amount into my Entity Framework model when I performed that step.
I have an Excel macro-enabled workbook that already has a simple VBA function that Sums all the columns below the first row. The function is sitting in a module called MyFunctions.
To create the new Excel workbook customization I’m going to add a new project to my solution and select Office 2007 Excel Workbook. Next it will ask if you want to create a new document or use an existing one, here’s where I’ll specify the macro-enabled workbook I already have above.
Next Add a Service Reference to the ADO.NET Data Service (which I called NorthwindReportService) just like I showed here and copy the URI into your clipboard. Then create a setting to store the URI, just double-click on My Project (Properties in C#) and select the Settings tab and enter an application scope property called ServiceURI.
When you add the service reference this generates client-side proxy types that you can use. I’m going to bind the data returned from Sales_Totals_by_Amount to an Excel ListObject. Open the Data Source window (Data –> Show Data Sources) and then add a new data source (Data –> Add New Data Source…). In the Data Source Connection Wizard select Object, then Next, then expand the types in your project’s NorthwindReportService namespace. Select Sales_Totals_by_Amount and then click Finish and you will see the type’s properties appear in the Data Sources Window:
Double-click on Sheet1 in the project and drag the Sales_Totals_by_Amount from the Data Sources window onto the second row of the sheet (our macro is going to sum into the first row so we want to place the data starting on the second row). This will automatically set up a BindingSource in the system tray that we will use to set our list of data coming from the service. If you are familiar with Winforms development this should seem very familiar. The ListObject is the main data object you work with in Excel solutions. For this example I’m going to select the OrderId column, right-click and then Delete. I’ll do the same to the ShippedDate column because I only want to display the CompanyName and SaleAmount for this example. Finally I’ll set the formatting (Home Tab on the Excel Designer) to Currency for the first cell.
Now we’re ready to write some code to load our data. Right-click on ThisWorkbook and select View Code. Here I’m going to create a Friend ReadOnly Property so we can easily access the service reference from anywhere in the project. I’m making this Friend so that it won’t be visible outside of the .NET assembly. I’m also creating a Public method that gets the data from our service and optionally accepts a Company Name. The results are then set to the DataSource of the ListObject’s BindingSource on Sheet1:
Imports VBATest.NorthwindReportService
Public Class ThisWorkbook
Private _ReportService As New NorthwindEntities(New Uri(My.Settings.ServiceURI))
Friend ReadOnly Property ReportService() As NorthwindEntities
Get
Return _ReportService
End Get
End Property
Public Sub GetData(Optional ByVal companyName = "")
Try
If Globals.Sheet1 IsNot Nothing Then
Dim results As IEnumerable(Of Sales_Totals_by_Amount)
If companyName = "" Then
results = Me.ReportService.Sales_Totals_by_Amount
Else
results = From s In Me.ReportService.Sales_Totals_by_Amount _
Where s.CompanyName.StartsWith(companyName)
End If
Globals.Sheet1.Sales_Totals_by_AmountBindingSource.DataSource = results.ToList()
End If
Catch ex As Exception
'TODO: Error Handling
MsgBox(ex.ToString())
End Try
End Sub
Private Sub ThisWorkbook_Startup() Handles Me.Startup
End Sub
Private Sub ThisWorkbook_Shutdown() Handles Me.Shutdown
End Sub
End Class
Calling VBA from VSTO
Next I want to create a button on the ribbon that will first call the GetData method, then select the first cell in Sheet1, and finally call the VBA function SumBelow. In order to call a VBA method from VSTO you call Globals.ThisWorkbook.Application.Run passing it the full name to the VBA method. For this example that would be VBATest.xlsm!MyFunctions.SumBelow.
Add a New Item to the project and select Office, Ribbon (Visual Designer) and then drag a Button from the Office Ribbon Controls to the Group and Label it “Get Data”. I also specified an OfficeImageId to make it look pretty. (BTW, a nice way to browse the Office Images is to install the VSTO Power Tools and install the RibbonID Add-in like Ty shows in this video.)
Double-click on the Get Data button to add a click event handler and we’ll write the following code to load all the data and then call the VBA function. You need to make sure you set up proper error handling here because if the VBA function is removed or renamed the code here will fail. This code will also fail if the appropriate access is not granted to VBA macros in Excel. By default, VBA macros are not enabled but you can enable them on a per workbook basis (there’s a button at the top of the first sheet when you run it). This scenario assumes you have existing VBA code that has permission to run and you’re now calling those existing functions from VSTO.
Imports VBATest.NorthwindReportService
Imports Microsoft.Office.Tools.Ribbon
Public Class Ribbon1
Private Sub Button1_Click() Handles Button1.Click
'load the data from the service
Globals.ThisWorkbook.GetData()
Try
'Make sure the first cell is selected
Globals.Sheet1.Range("A1").Select()
'Run the VBA function. This will result in a runtime error if the function
' is removed or renamed or not allowed to run so make sure to provide
' adequate error handling.
Globals.ThisWorkbook.Application.Run("VBATest.xlsm!MyFunctions.SumBelow")
Catch ex As Exception
'Todo: Error handling
MsgBox(ex.ToString())
End Try
End Sub
End Class
Hit F5 to run. If you see a Security Warning (the default) that Macros are disabled, then just click Options and select “Enable this content”. Select the Add-Ins tab on the Ribbon and click the GetData button to see the data get loaded from the service and then the SumBelow VBA function will be called which will auto-sum the SaleAmount field and show the total in the first row.
Calling VSTO methods from VBA
As you can see it’s really easy to call VBA code from your Office solution in Visual Studio (VSTO) but it’s also fragile because of the late-bound architecture and the requirement that macros be enabled for the Workbook. Like all late-bound code, you need to have adequate error handling to prevent crashes. Much less fragile is calling VSTO methods from VBA functions because these methods are compiled into your .NET assembly and exposed via COM-interop which makes them available to VBA.
If we go back to our project and double-click on ThisWorkbook and look in the Properties window, you should see a property called EnableVbaCallers. Setting that Property to True will expose all Public methods in the ThisWorkbook class via COM to VBA.
If you now go back into the code-behind for ThisWorkbook you will see some COM attributes added to the class:
<Microsoft.VisualBasic.ComClassAttribute()> _
<System.Runtime.InteropServices.ComVisibleAttribute(True)> _
Public Class ThisWorkbook
...
Now we can call the GetData method from VBA code. Hit F5 to run and enable the macros (if asked) on the Workbook again. Select the Developer tab and launch the Visual Basic editor. (If you don’t see a developer tab click the Office icon – the globe in the left-hand corner – select Excel Options, and then on the Popular tab check the “Show Developer tab in the Ribbon”.)
Double-click on the ThisWorkbook and you will see that Visual Studio added a property to our VBA code for us called CallVSTOAssembly. This allows us to call any public method we defined in the ThisWorkbook class back in Visual Studio. Let’s add another function to the MyFunctions module that collects input from the user on the company name to look up and then fetches the data by calling the GetData method in .NET.
Save your code here and close the VBA Editor. Now back on the Developer tab on the Ribbon select Macros and then you should see the one we just wrote called GetDataAndSumBelow, select it and click Run. It will prompt for a company name (just type ‘S’ for instance) and it will run the ADO.NET Data Service query via the call to the .NET GetData method and then will return and call the SumBelow VBA function. Cool!
BUT WAIT… DON’T CLOSE EXCEL YET!
Tips Editing VBA Code when Debugging
Because we wrote the second VBA function above while we were in debug mode in Visual Studio once we close Excel we will lose all the VBA code we wrote when we debug again.
Because of the way Visual Studio works with Office solutions, we aren’t actually editing the xlsm file in the project, we’re editing the running xlsm file in the \bin directory that has the VSTO solution attached. You cannot just copy this one in the \bin folder back into the project otherwise Visual Studio will report an error that a customization is already attached to the document when you compile again. So what do we do?
There’s probably other ways to do this but what I found the easiest was to open the Visual Basic editor again, select the MyFunctions module where all my code is stored and then right-click and select “Export File”. This will allow you to save the code outside the Workbook. Then when you debug again you can just import it by right-clicking again (delete the current one first).
When you’re finally satisfied with your VBA – VSTO code interop, close Visual Studio and open the .xlsm file in the project directory (not the \bin) and re-import your code again into that version. Then restart Visual Studio and it will be in there when you start debugging again. I find this easier than copying my code into the clipboard, closing VS, modifying the document, reopening VS every time. Just be aware of what version of the document you’re modifying when you tweak your VBA code and you should be OK.
I’ve uploaded the code for this example onto Code Gallery so have a look: http://code.msdn.microsoft.com/VBAVSTOInterop
More Resources
For more information on VBA – VSTO interop with Visual Studio please check out the following resources:
Enjoy!
-
This month Dev Pro Connections has an article by Milind Lele on using Sync Services in a WPF application:
Building Occasionally Connected Smart Clients with WPF
With Sync Services and Visual Studio 2008 you can visually design your local data cache and have it automatically synchronize your data with the backend remote database. So instead of figuring out your own caching mechanisms on the client, you can use SQL CE to store the local data and then use the sync framework to merge data with the backend.
If you’re looking to improve scalability of your client applications then you should consider caching data that is read-only, user-specific, changes rarely, or can tolerate some staleness. ADO.NET Sync Services can really help here.
You can catch more of Milind and team over on the VS Data Team Blog: http://blogs.msdn.com/vsdata/
Enjoy!
-
On Friday I posted some pictures of my past Halloween costumes. This year I have to say was one of the better years in terms of how easy the costumes were to put together and the great “scary factor”. This year we were werewolves and the only hard part of the costume was taking off all the hair ;-). I won for scariest costume, yea! I think the contacts I bought freaked people out…
Here’s the family portrait (sister, me, mom, pop, Alan). My mom and pop came as the Wicked Witch and Glenda the good witch. My father won for funniest costume (people always laugh at cross-dressing) ;-)

Here are some of the other costume winners. Robin came as the Windows 7 OS and won for most creative! She even had a jump list, a Bing button and glass. She also kept walking around the party telling people helpful Windows tips (and no, she doesn’t work for Windows marketing ;-))
Best group costume was Austin Powers and Fook Mi and Fook Yu:
Honorable mention, Lady Gaga and Adam Lambert:
Thanks to all who came! See you next year!!!






-
“It’s the most, wonderful tiiiiime of the yyyyeaaaar”. Yes, I’ve been in love with Halloween ever since I was young. The neighborhood I grew up in L.A. was a great place to go trick-or-treating. Dead bodies in front yards, live action death scenes, and neighbors that actually made you perform a trick to get your treat. As a shy kid (yes, I was a shy kid!) I always loved to dress up and be something I wasn’t, especially something creepy or frightening. The last time I attempted dressing up and trick-or-treating I was about 17 (hey, I had a young face and I’m short!) and I didn’t do it for the candy, I just wanted to show off my costume.
Nowadays I have a costume party on Halloween at my haunted mansion. We have a garage full of decorations that we’ve collected over the years. Most recently added was an animatronic witch that drags itself across the floor. The house is done up in lots of black-lights, spider webs, gouls and goblins and there’s a theme to every room. We even have the head of a dead fortune-teller at the front door. And watch your step as you head into the bathroom (don’t look in the tub if your squeamish).
But the best part of these shenanigans is the costumes that everyone is required to wear. If you show up without one I have about 10 very embarrassing ones you can choose from (believe me you want to show up in your own costume, these are horrible and a bit smelly). We have voting and a prizes give-away for the Scariest, Funniest, Most Creative and Best Couple or Group costumes.
Alan and I always go for the scariest and it’s always a surprise what we’re going to be. This year I have to say is going to be the hardest costume I’ve ever attempted but if I get it right, it will be amazing. Maybe I’ll quit Microsoft and work for Universal Studios (which BTW, I highly recommend going there on Halloween if you’re near Universal City!)
Here’s some costumes from previous years, try and guess what we’re going the be this year. I’ll post back pictures of this year’s party on Monday.
2003 | Ahh yes, the Angels of Death |
2004 | I couldn’t find a picture of me, just Alan. Dr. Cute! |
2005 | Zombies love brrraaaaaiiiiinnnnssss….. |
2006 | I’m bride of Frankenstein and Frankie is above me with his mask off – this was the year we vowed NO MORE MASKS FOR ALAN. |
2007 | The devil made us do it! This is my first year at Microsoft and the year that Sara Ford came too. |
2008 | Remember, kids – Always wear your seat belt!!! |
2009 | GUESS! |
Happy Halloween!!!!

-
I just started catching up on a cool series on Channel 9: The Visual Studio Documentary
The documentary kicks off by taking you back to the days of MS-DOS and Alan Cooper who originally sold Visual Basic to Bill Gates back in 1988. It has a lot of BASIC and Windows history and it’s pretty fun to watch. (How the heck did Huckaby get in that video?) ;-) It’s also cool to see the beginnings of how Microsoft fostered the developer community, realizing that it was super-important to create a developer ecosystem and support system. I’m sure glad they did :-). Dee Dee has some funny stories about some of the earliest “geek fests”.
Last time I was up in Redmond I bumped into Rico Mariani, Visual Studio Architect, and he mentioned to me that he had started a series of blog posts on his history building Visual Studio as a follow-up to the documentary that takes a different perspective based on his history working on C/C++. I finally read through all of his posts recounting his memories building developer products at Microsoft. If you’ve ever chatted with Rico, you know what an amazingly personable, excited and approachable person he is and it really shows in his writing. He keeps you laughing and interested the whole time, I highly recommend reading them. Thanks, Rico!
Rico Mariani: My History of Visual Studio
I came from a different background (dbase), and not a Microsoft product until 1990 (they bought FoxPro). Always a data-based programmer I didn’t have much experience with C++ back then, and only a tiny bit of Visual Basic. (Why would I, VFP had LINQ and OOP in 1995 ;-))
I learned a lot about the colorful history of how Visual Studio came to be so if you have some time to spare check it out. And don’t forget to download the latest piece of history -- Visual Studio 2010 Beta 2. ;-)
Enjoy!
-
I’ve noticed that folks have been busy creating video content on the newly released Visual Studio 2010 Beta 2 while I’ve been gone! (I’ve got a couple up my sleeve that I’ll post soon as well ;-))
For instance, Kathleen’s continuing her series of Visual Studio 2010 interviews, this time she’s got Norm Estabrook talking us through how to create a SharePoint external list using the BDC designer in Visual Studio 2010 and Mick Alberts on the “no PIAs” feature, Embedding Type Information from Microsoft Office Assemblies. I’m told she’ll be releasing another one with Norm this week on building a SharePoint Web part with VS2010 so keep an eye out on her blog.
A lot of other folks are creating content on Channel 9 around Visual Studio 2010 so check out the feed. Some recent notables:
Stay tuned on this channel for more….
Enjoy!
-
I finally made my way back home from Europe and I’m still digging through all my email, newsletters, feeds, etc. But one of the items that grabbed my attention is this week Karl Shifflett released updated XAML Power Tools for Visual Studio 2008 as well as a new set for Visual Studio 2010:
If you’re not familiar with these tools, XAML Power Toys are Visual Studio Add-Ins that makes WPF & Silverlight developers much more productive especially for Line of Business applications. They contain form generation tools, Grid tools, DataForm, DataGrid and ListView generation tools that really shorten the time it takes to lay out UI controls on a WPF form. Thanks Karl!
Enjoy!
-
SDC09 has been a blast. I just finished my last session on Building Office Business Applications with Visual Studio 2010 and I think it went well. We created an OBA for good old Northwind Traders. I migrated the 2008 code which is here on code gallery into VS 2010 and showed the new features of VS2010 that makes Office development easier focusing on RAD data binding (including WPF) and designers, new multi-project deployment, and SharePoint 2010 tools.
My main goal was to provide a real-world scenario and architecture but keep the demo code manageable and simple while also introducing folks to all the RAD designers available. This way you can take apart the sample easily and reuse just the pieces you need. Check out the code and 5-part article series on how to build the Northwind OBA in Visual Studio 2008:
I migrated the solutions to use Office 2010 and SharePoint 2010 for my presentation so once those Betas are available I’ll update the links with that code. Beta 2 for Visual Studio released yesterday so I got to show everyone the latest and greatest tools including SharePoint 2010 tooling. Some of the features that make Office development and deployment easier are covered in these walkthroughs:
- Office Programming (C# and Visual Basic)
- Embedding Type Information from Microsoft Office Assemblies (C# and Visual Basic)
- Deploying Multiple Office Solutions in a Single ClickOnce Installer
- Copying a Document to the End User Computer after a ClickOnce Installation
- SharePoint Development in Visual Studio 2010
Yesterday my talks went really well too but I’ve done them many times before, last time being code camp. I did one on VB10 / C#4 language features which are covered in these walkthroughs on MSDN:
- Creating and Using Dynamic Objects (C# and Visual Basic)
- Embedding Types from Managed Assemblies (C# and Visual Basic)
- Use Named and Optional Arguments in Office Programming (C# Programming Guide)
- Create a Collection Used by a Collection Initializer
- Create an Add Extension Method Used by a Collection Initializer
I also did a talk on using Open XML and LINQ to XML to manipulate Office 2007 document formats.
Happy Birthday!
Yes it’s my birthday today. Not really an important one in my opinion, I’m just getting old I guess ;-). But when I showed up in my session this morning the room had been decorated with rainbow streamers. It was very cute and I thought that was the end of it. But afterwards during lunch I was lead onto the stage in the main hall and properly embarrassed by the event organizers. They brought out a cake with a gigantic fire-cracker on it! Then all the attendees sang happy birthday to me in Dutch. It was totally embarrassing but also incredible to feel loved by the Dutch developer community :-).


THANKS TO ALL OF YOU!
-
Visual Studio 2010 Beta 2 has been released! Check out the Visual Studio 2010 and .NET Framework 4 Beta 2 site to download the Beta, submit product feedback on the Beta Forums, report bugs on Connect, and watch videos about Visual Studio 2010 on Channel 9. Also visit the Beta 2 walkthroughs page for information on how to use the new features and download the Visual Studio 2010 Samples.
There’s also some good language-focused resources on the Visual Basic 2010 and C# 2010 as well as resources for Office Development with Visual Studio 2010 that are hanging off the Developer Centers. Take a look through the Visual Studio 2010 Product Highlights and What's New in Visual Studio 2010 .
Visual Studio 2010 Beta 2 resources:
Looks like content is still propagating across the net so some headlines still still need to update but the download is ready for MSDN Subscribers today and the content is here! Everyone else can download it on the 21st. I can’t wait to mention it to all the attendees at the SDC conference :)
Enjoy, and let us know what you think of Beta 2!
-
Yesterday I flew into Amsterdam and today I walked all over the city taking pictures for a mini-tourist day before the conference tomorrow. It’s a bit chilly (for me) but so far hardly any rain at all. It’s a little after 6pm in Holland as I write this and it’s almost time for the speaker dinner but I thought I’d post a few pictures I took earlier.
Robert Green and I met for breakfast (bumped into Shawn Wildermuth) and then took off or a walking tour around town. Robert loves to take pictures and has a fancy-smancy camera. I just have a point-and-shoot but I thought it took pretty decent photos nonetheless. (Click to enlarge)
It’s my 4th time in Holland and I love it. Maybe someday Alan and I will come here for vacation :-). I’ve got an early session tomorrow so I probably won’t stay out too late. Now that we’re at the Papendal conference center and not in Amsterdam I’ll be less tempted to stay up tonight. ;-)
I’ll report back tomorrow and let you know how day 1 turns out. I’m sure it will be a great conference. I’m definitely anxious for it to begin.
-
If you’re up in Redmond, the .NET Developers Association has a very special guest for their meeting tonight.
Billy Hollis will be speaking on WPF showing off a real business application he developed. Billy has a very “practical programmer” style that I always enjoy. He’s also an expert on WPF so this meeting is bound to be informative and fun. Hope you can make it out to campus tonight. The meeting starts at 7pm in the Building 40 cafe. Check out the .NETDA site for directions.
Meeting details….
Topic: WPF In-Depth: Walkthrough a Real World WPF App
The StaffLynx application, developed by a team led by Billy Hollis, has been acclaimed for using WPF technologies in a business-oriented software system. In this session, Billy will cover the basic architecture of this application, highlighting architectural differences from previous generations: layered client design, service-based data access, and advanced UI capabilities. He will show how critical pieces are constructed, including novel coding concepts in WPF and XAML. Then he’ll discuss the design and prototyping process, show various prototypes with analysis of their strengths and weaknesses, and cover lessons learned from that process.
Speaker: Billy Hollis
Billy Hollis is an author and software developer from Nashville, Tennessee. Billy is co-author of the first book ever published on Visual Basic .NET, VB .NET Programming on the Public Beta. He has written many articles, and is a frequent speaker at conferences. He is the Regional Director of Developer Relations in Nashville for Microsoft, and runs a consulting company focusing on Microsoft .NET.
Enjoy!
-
I’ve written before about the new array and collection initializer support in Visual Basic 2010. In this month’s MSDN Magazine, Spotty shows us how this new syntax in Visual Basic will make you more productive when writing code.
Collection and Array Initializers in Visual Basic 2010
Visual Basic provides the same support as C# using the new “From” syntax which automatically calls Add for you on any collection that has an Add method. VB also allows you to take it a step further by supporting Extension Methods. If you provide an Add extension method of your own, VB will use that instead making your code even cleaner.
Check out my post and the article.
There’s also a lot of other great articles this month, in particular:
Enjoy!
-
Today MSDN released a preview of what’s to come later this month on the Visual Basic Developer Center. You should notice an URL at the top that directs you to check out the preview:
Besides the cool colors you’ll see a better layout on the home page for easier navigation. Essential resources are centered right in the middle with a rotator of sorts that allows you to pick a tab on the left to hone in on the content you want on the right. You’ll see featured articles and library content, VB team and MVP blog posts, our Channel 9 videos, and VB samples & projects on Code Gallery and Codeplex all right there in the middle of the page.
Of course, content is king, and you’ll still be seeing great Visual Basic content rolling out here on the Dev Center. We’ve got a lot of cool stuff in our pipeline! Stay tuned for more awesome “How Do I” Videos!
I mentioned that we added ratings and comments on the videos a while back (and I’ve been keeping up with them ;-)), but now we also have a video scroller that lets you browse the most popular videos with ease. You’ll see this control on the home page (at the bottom) as well as the learn page and soon we’ll also be able to see the ratings and views right here as well.
There’s a lot more coming on MSDN but take a look at the site and give us your feedback in the MSDN feedback forum where folks from MSDN will be participating. Of course, you can always tell me your thoughts here as well and I’ll get them back to the right folks.
Enjoy!
-
I just read a great article on DevProConnections by Michael K. Campbell,
The SQL Server Community: A Welcoming Place for Newbies
It reminded me of when I started developing on the Microsoft platform back in the early 90s and how welcoming I found developers to be on the forums (CompuServ & Usenet back then). Looking back, the “no question is a stupid question” culture was probably the #1 reason why I stuck with Microsoft for so many years. Of course having great products is also key, but if you can’t quickly learn how to use them then there’s not much point to sticking with it.
I think because I grew up professionally in this community culture is why I have a strong passion and loyalty for the Microsoft tools I use today. That’s not to say I don’t criticize our own tools or use other platforms or tools, but I think people always have a favorite based on their past experiences with the people that repeatedly helped them the most.
That’s why I want to reiterate what I said yesterday to our MVPs as well as all the folks in the Microsoft developer community that selflessly help others and aren’t arrogant but instead are welcoming to newbies. It’s leaders like you that shape the culture and behaviors of the community and make it a fantastic place to be. And here is a plea to all the forum moderators, community leaders and participants alike, “Please be excellent to each other”. Don’t make newbies feel like idiots. If we do, we won’t have a fostering community left for our future developers.
And speaking of a fostering community of developers (on all platforms not just .NET) head to the Silicon Valley Code Camp this weekend to see over 1600 of us geeking out and learning a ton. I can’t wait!
Enjoy, and have fun learning!