Saturday, April 11, 2009

Microsoft Certified Professional


I am a Microsoft Certified Profession, certified in Microsoft .Net framework application development. W00t!

I love the .Net framework. I've been using it professionally and personally for about 5 years. Before that, I dabbled in Java in grad school. The idea of a virtual machine, managed memory, a strong class library, and a clean programming language excites me because it allows developers to write less plumbing and more logic. I prefer with .Net over Java because of its extensive access to the Windows operating system, the Visual Studio development environment, a class library that just made sense to me, and, the five+ years of Microsoft Kool-aid I drank :).

But unlike most languages I have learned, I never took a class on it or never finished a book about it. Everything I learned I learned on the job, surfing the web, or tinkering to get something to work. I knew there were holes in my knowledge base; hence the pursuit of the certification. I still don't know everything there is to know (and never will. With .Net 4 on the way, I will always need to keep learning) but at least I feel confident that I have a solid foundation.

I am very proud of how I prepared for this exam. Looking around the web, I never got a solid answer to the questions, "How long does it take to prepare?" and "What did you do to prepare?". So, here are my answers. The short answer: This book and 12 weeks where I studied for two hours a night, three nights a week.

The long answer: I came in with five-ish years of experience in .Net development, but studying for the exams and making sure you understood the topics the test makers deemed most important was something different. I only found one exam on the topic,
MCTS Self-Paced Training Kit (Exam 70-536): Microsoft® .NET Framework Application Development Foundation, Second edition by Tony Northrup. Generally, I'm not a fan of Microsoft Press books. This book did nothing to change my mind. It had numerous errors, some sections did a poor job of going into adequate technical detail on the topic being covered, while some others elaborated on things that it would almost be impossible for a developer not to know. I almost lost my mind reading the chapter on App Domains. This is definitely one of the tougher topics to understand and explain. But the chapter read like the author didn't understand it so he emailed developer of the feature asking for an explanation. The developer, with minimal interest in explaining his genius work wrote a terse email and got back to coding. The author pasted in the reply and some reference material from MSDN and called it a day. To be fair, probably about 60% of the book was solid, there were some cool code examples, and most important, it got me to a passing score.

When I got the book, I looked at the table of contents and broke it down into what I thought I could realistically cover in a two hour timeframe. I generally did three sessions per week. I did all of the quizzes, labs, and scenarios, but none of the additional code projects. I included a list of my sessions below. Every couple of weeks I'd take a practice exam based on the chapters I had completed. Once I finished the book, I had about three weeks before the exam. I took a full practice exam and failed miserably. Based on the experience, I prioritized what sections I need to do more work on and which I need to just review. All told, I probably ended up reading the book twice and taking 4 practice exams. I supplemented these materials with Programming Visual C# 2005: The Base Class Library, by Franceso Balena and a Pass4Sure sample test. I didn't really use either of these that much and feel that they were not crucial to my success.

Sessions
01 - Chapter 1 - Framework Fundamentals
- Lesson 1: Using Value Types
- Lesson 2: Using Common Reference Types

02 - Chapter 1 - Framework Fundamentals
- Lesson 3: Constructing Classes
- Lesson 4: Converting Between Types

03 - Chapter 2 - Input/Output
- Lesson 1: Working with the File System
- Lesson 2: Reading and Writing Files and Streams

04 - Chapter 3 - Search, Modify, and Encoding Text
- Lesson 1: Regular Expressions

05 - Chapter 3 - Search, Modify, and Encoding Text
- Lesson 2: Encoding and Decoding

06 - Chapter 4 - Collections and Generics
- Lesson 1: Collections and Dictionaries
- Lesson 2: Generic Collections

07 - Chapter 5 - Serialization
- Lesson 1: Serializing Objects
- Lesson 2: XML Serialization

08 - Chapter 5 - Serialization
- Lesson 3: Custom Serialization

09 - Chapter 6 - Graphics
- Lesson 1: Drawing Graphics
- Lesson 2: Working with Images

10 - Chapter 6 - Graphics
- Lesson 3: Formatting Text

11 - Chapter 7 - Threading
- Lesson 1: Starting Multiple Threads
- Lesson 2: Managing Threads (Stop after 'Waiting for Threads to Complete')

12 - Chapter 7 - Threading
- Labs/Review/Scenarios

13 - Chapter 8 - Application Domains and Services
- Lesson 1: Creating Application Domains
- Lesson 2: Configuring Application Domains

14 - Chapter 8 - Application Domains and Services
- Lesson 3: Creating Windows Services

15 - Chapter 9 - Installing and Configuring Applications
- Lesson 1: Configuring Applications
- Lesson 2: Configuring the .Net Framework

16 - Chapter 9 - Installing and Configuring Applications
- Lesson 3: Installing Applications

17 - Chapter 10 - Logging Systems Management
- Lesson 1: Logging Application State
- Lesson 2: Working with Performance Counters

18 - Chapter 10 - Logging Systems Management
- Lesson 3: Managing Computers

19 - Chapter 11 - Application Security
- Lesson 1: Understanding Application Security

20 - Chapter 11 - Application Security
- Lesson 2: Using Declarative Security to Protect Assemblies
- Lesson 3: Using Declarative and Imperative Security to Protect Methods (Stop after, 'How to Use Permission Sets')

21 - Chapter 11 - Application Security
- Labs/Review/Scenarios

22 - Chapter 12 - User and Data Security
- Lesson 1: Authenticating and Authorizing Users

23 - Chapter 12 - User and Data Security
- Lesson 2: Using Access Control Lists
- Lesson 3: Encrypting and Decrypting Data (Stop after, 'Signing Files')

24 - Chapter 12 - User and Data Security
- Labs/Review/Scenarios

25 - Chapter 13 - Interoperating with COM
- Lesson 1: Using COM Components from the .NET Framework
- Lesson 2: Using .Net Types from COM Applications (Stop after, 'How to Control Marshaling')

26 - Chapter 13 - Interoperating with COM
- Labs/Review/Scenarios

27 - Chapter 14 - Reflection
- Lesson 1: Using Reflection

28 - Chapter 15 - Mail
- Lesson 1: Creating an E-mail Message
- Lesson 2: Sending E-mail

29 - Chapter 16 - Globalization
- Lesson 1: Formatting Data for Globalization

I really want to keep going and complete exam 70-562 - Microsoft .NET Framework 3.5, ASP.NET Application Development. But I probably won't get to it this year. I plan to spend a little less time studying and a lot more coding!

Links:
- MCTS Exam 70-536
- MCTS Self-Paced Training Kit