This past week I’ve had discussions with quite a few Microsoft developers on the following question: "If you had to divide up software developers into a handful of category-buckets, how would you do it?" Interestingly, I’ve heard virtually the same answer from almost every person at Microsoft. Most developers categorize software development at Microsoft into 5 buckets:
1. Systems Development – Designing and writing relatively low-level code, typically using C/C++ (called Win32 or "native" code). Other common skill requirements include assembly language, algorithms, MFC, device drivers, "raw" COM, and ATL COM. Systems Development positions often are in the Windows product groups and server product groups.
2. Application Development with .NET – Creating software programs intended for use by human beings using C# or VB.NET. Common skill requirements include Win Form design, ADO.NET (to connect to SQL databases), lightweight SQL (writing queries), socket programming, and multi-threading.
4. SQL Design and Development – Specialized SQL skills. Except for the SQL Server product itself, SQL is never a standalone product. But at Microsoft some products have positions where the emphasis is on SQL databases and code. Skill requirements include expert-level knowledge of: joins, triggers, stored procedures, and indexes.
5. Other – Everything else. Of course this is a huge category in terms of job descriptions, but the first four buckets I’ve listed capture the majority of job positions. Examples of "Other" include non-ASP.NET Web development (using classic ASP and VBScript), and hybrid native (Win32 = C++) and managed (.NET = C#) code development.