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.


Comments (14)

  1. Chris Hance says:

    Drat. I hated 536, even though I somehow managed to pass on the first attempt. Until now, I was relieved that I wouldn’t have to deal with some of the topics again unless they came up in a project.

    I can kind of see the point, though. The "Skills Measured" section includes COM interop, System.Drawing, and the whole collection tree. A Silverlight dev, for example, should never touch COM, I’m not sure about Drawing, and if (s)he uses anything but ObservableCollection or something derived from it, it’ll cause a world of pain with databinding. So perhaps the "everything in the framework except UI" exam isn’t applicable for everyone.

    As far as C++, my best suggestion is to sketch everything. I’ve tutored college students in Data Structures and Operating Systems courses, and held programming classes for my coworkers. Either a whiteboard or lots of paper come in handy. Also, build your own double-linked list. If and when you get that working, you’ll really get the hang of pointers to a single piece of data. Arrays are a slight twist on that, but probably less complicated than keeping track of linked lists. Good luck.

  2. Hi Chris,

    Your comments are pretty much the reason I decided to drop the foundation exam.  Not enough coverage of all topics, topics that don’t necessarily make sense any longer, and other reasons.

    When I taught at a post-secondary school, I revamped their Visual Basic curriculum to use VB.NET.  They had courses in C++ and Java that students had to take as well but the VB course was still on VB 5.0.

    Anyway, the text that I chose for the course had the students build some of the core data structures in VB such as queues, stacks and linked lists.  The double linked list was the most problematic for the students so one day, we used the white board to diagram it.  

    I projected the code on the screen and stepped through it one line at a time while a student drew the objects and pointers on the board and updated as we went through the code.

    Talk about a light bulb moment for the students.  Your suggestion is right on the money and it’s something I haven’t done in a long time in my programming.



  3. Mark Price says:

    Does "future requirements" mean that this change will take affect for .NET 4.0, but the current .NET 2.0 and 3.5 MCTSs still require passing 70-536?

  4. Hi Mark,

    That is correct.


  5. Mark Price says:

    I have a recommendation for the future MCPD .NET 4.0 certification.

    1) Have one PRO exam; no more split between Windows, Web or Enterprise exams. And have it more focused on analysis, design, test and maintainance like it used to be. Leave the develop/deploy questions for the TS exams.

    2) Require passing three exams: 70-536 (an MCPD should know the Foundation stuff), the one PRO exam, and one MCTS .NET 4.0 exam (a MCPD should know how to implement at least one technology, e.g. ASP.NET or WCF).

    There would then be a one-to-one mapping between any MCTS .NET 4.0 and any MCPD .NET 4.0. Someone with any MCTS .NET 4.0 cert would just have to pass the 70-536 and the PRO exam to upgrade it to an MCPD 4.0 cert for the same technology.

    What does everyone think?

  6. Minor says:

    I think 70-536 is a must and removing the requirements would be a mistake. Sure, we don’t often use everything covered in the exam. Passing the exam doesn’t necessarily mean that you need to be an expert on every single topic covered in the exam. But a good developer needs to know what is there and where to find it if needed. I feel that preparing for the exam is a great way to study the .NET framework class library. I think the preparation guide for 80-536 is a way Microsoft tells what basic stuff in the .NET framework class library a developer must know. Learning core knowledge is important. I used to thoroughly read the MSDN documentation on all the basic Win32 API functions. I am still benefiting from that experience up to today.

  7. Arun Kumar says:

    I too completely agree on minor’s comments. It is very much essential that one should be tested in the fundamentals of the .Net framework to obtain a TS level. I believe that would boost his efficiency.

  8. I think you are reading the posting incorrectly.  I’m not stating that the foundational concepts will NOT be tested, just that the won’t be tested in a seperate exam anymore.

    They will be a part of each TS exam.


  9. Minor says:


    I am not sure if combining the foundational concepts into each TS exam would be realistic. The .NET framework class library itself is huge. Looking at the preparation guide for 70-536, there are so many topics. I guess there are two options – either increasing the test time (2 – 3 hours to 3 – 5 hours?) so that more questions can be squeezed in or reducing the number of technology-specific questions.

  10. Minor,

    You have to be realistic about this.  536 doesn’t even cover half of the .NET Framework.  The Framework continues to grow.  One exam cannot possibly cover it all and we won’t try to.

    .NET has been out for some time and people should already have familiarity with it.  

    In the same way that we don’t require a prerequisite OOP exam to ensure that candidates understand the principles of object-oriented programming, or an exam on core programming fundamentals such as decision structures and repetition etc., we will no longer require a prerequisite exam on .NET fundamentals.

    The candidate will be expected to know these concepts prior to taking the MCTS exams and that will be clearly explained in the preparation guides.  If they do not know the basics, they will not be successful in programming in this environment.


  11. Nitin Reddy says:

    Hi Gerry!

    I’m sorry I stumbled across your post about 2 months after everyone else.

    I agree that having a foundation exam takes developers away from their core focus. For example, an ASP.NET developer would rather spend more time on globalization and MVC than with COM Interop.

    I’m really looking forward to the .NET 4 certification exams. Do you know of any schedule for the availability of the exams? I hope they’re available soon after the release of the RTM/Final of .NET 4 version.


  12. Hi Nitin,

    Welcome to my blog.  🙂

    That is great feedback on the content and focus, thank you.

    Our typical timeframe that we strive for is no later than 60 days past RTM of the product (VS and Framework).  We’re not always in that window for various reasons.

    I’m hoping that have the .NET 4.0 exams within that window though.


  13. David Marsh says:

    These books should suit nicely for C++ development :-

    Of course really you should understand some assembler and C before you start C++. This way small things like memory and pointers are not a big deal.

    I’d like to see the old exams stay valid on new tracks if possible, or just keep one version agnostic track, why the constant churn ? Do developers really need to relearn everything on each new version ?

    I totally disagree with the cert exam in line with product/version approach.

    The 50-536 was one good exam in at least it stayed the same across versions and tracks.

    The idea of merging newer technologies into other exams seems a good idea, although perhaps to try to certify at all on too new technology is a mistake ?

    What happens to us MCPD 2.0 folk when you keep changing the exams ? I don’t have time, money or inclination to resit every ten minutes and I already know windows internals, C/C++, Assembler, C#, Visual Studio, yada yada.

    Ok so we have upgrade exams, but they are almost impossible to pass, the only reason you have anyone passing them is the braindumpers.

    Please god don’t do a C++ exam if you’re going to change it every ten minutes, C++ is an ISO/ANSI standard now theres really no need.

Skip to main content