Keeping Up to Date and Going Backwards at the Same Time

Part of my role as a Product Planner is to keep up with technology changes in the industry as they impact the audiences that I focus on.  For me, that means developer technologies and SQL Server trends etc.  For the most part, this is an enjoyable aspect of the role but one that can keep you on your toes and not leave much room for down time.

Currently, we are in the midst of our planning cycle for our next fiscal year.  That means I’m busy deciding what exams to create and what certifications will look like for this fiscal year.  At the moment, that encompasses Visual Studio 2010, .NET 4.0, Expressions, Embedded, and Office technologies.

What’s exciting about this is the opportunity it presents to use some new found knowledge on the products that fit into these categories.  In other words, I have had to research these products to a certain extent to understand their place in the community.  This means working with these tools and technologies and meeting with the Program Managers internal to Microsoft who are responsible for these products or features in the products. 

It’s great because I get to see what’s coming.  It’s frustrating because for the most part, I can’t go as deep as I want to.  The reason is mainly due to the breadth of products and technologies that I need to be aware of.  For example, how many of you are experts in Visual Basic, C#, C/C++, IronPython, Ruby, Visual Studio, LINQ, ADO.NET, ASP.NET, Windows Forms, WPF, WCF, WF, Oslo, Dublin, SQL Server Administration, database development, SSAS, SSIS, SSRS, VBA, VSTO, Microsoft Office SharePoint Server, WSS, BizTalk, Embedded CE, Windows Internals, device driver development……

I know that I certainly am not, but these are some, not all but pretty close, of the technologies that I need to be able to intelligently discuss with Microsoft folks and of course most importantly, you.  Did I say how much I love this job?  Seriously.  Who else gets to work with such a plethora of tools and technologies on a regular basis?

At any rate, on top of staying up to date at work, I have gone backwards at home.  I freely admit that I have never sat down and seriously devoted time to learning how to program using C or C++.  Why would I want to do that when I can already create applications in VB or C#?  Perhaps because not all computer programming can be done in managed code yet.

Sure, my university courses were in Java and that’s not managed code.  So I learned how to program in another OOP language and that made me tri-lingual in terms of coding languages.  The problem is, that’s not enough for me. I want to be able to code natively for a number of reasons, not the least of which is to better understand the native code developer to help me see how we can bring C++ back into the certification picture, where it makes sense to do so.

To that end, I started down a path that I shouldn’t have, because I know better.  I tried to use a book that promised I would learn C++ in, well, a short amount of time.  Hmmmm, there really are no shortcuts to learning C++ if you want to understand the language.  As an example, using strcpy() was the mentioned method in this particular text with a little exercise on creating some char arrays and then copying some arrays contents into another.  Not the way I would expect to do this but it’s purpose was not real world but rather to teach the use of strcpy().

Not having used C++ in a really long time, past attempts at learning it stopped at pointers for some reason, I happily coded using the aforementioned  method.  Visual Studio complained a bit about strcpy() and said it would be better if I used strcpy_s() to prevent overwriting memory locations.  Ah yes, C++ is powerful and with that power comes great responsibility so of course I elected to do so.  The problem is, strcpy() worked with no complaints.  Upon switching the code to use strcpy_s(), I started getting exceptions around corrupting variables.  Huh?

Investigation is ongoing with some suggestions from C++ devs internally but, setting that aside, this situation brings up a really good point.  Learning something as complex as all the nuances of using memory references and functions that write to memory with programming languages, is not a trivial task and not something covered in your average book or course.  Managed code takes that complexity and reduces it considerably.  We don’t have to worry about it so much. 

So, what does that have to do with certifications?  Well, we have made the decision to remove any future requirements for a foundational exam as a prerequisite for our .NET exams.  In light of my experience with C++, I wonder now if that is the correct decision.  Realistically, we will be covering the core foundational aspects in each exam as it pertains to that technology and that will test the candidate on those aspects but if it’s not in a standalone exam, will candidates seek out that core knowledge?

SO, if you’ve read this far, I apologize for the book size posting today but I wanted to blog about something and this is what came to mind.  Plus, it kept from having to continue unpacking my boxes and arranging my new office.  Now I can leave for the day.  :-)

ps If you have recommended books on learning C++, I prefer self taught, let me know.  I don’t have time for a classroom session.

Gerry