Zachmann.NET
Know Your Neighborhood
How much do developers really know about the operating systems their code runs on?
I recently had a most interesting encounter with a young friend of mine. He's just turning 30 but is a very accomplished coder with lots of real-world experience with Microsoft Visual Studio development, as well as with various open source alternatives.
He just got a copy of Microsoft Windows Server 2008 at one of Microsoft's "Heroes Happen Here" events and decided to try it out. His own working environment includes several Windows and Linux client systems, a Linux/Apache Web server and some miscellaneous peer-to-peer workgroup file sharing. Although he's coded some serious Windows projects, he hasn't worked much directly with Windows Server.
Although undeniably a very good programmer, it turned out he actually knew surprisingly little about the nuts and bolts of Window Server-based networks or network administration. He never had occasion to deal with any of that. He had but the vaguest idea of how Active Directory is set up and works. He wasn't even very clear about TCP/IP, DNS and DHCP, so he found even the considerably simplified and improved installation process of Windows Server 2008 a bit daunting. That's why he got in touch with me -- he was looking for advice on how to set it up.
Infrastructure Questions
At first I was a bit surprised by his request. I assumed that any programmer working in the Microsoft platforms and tools environment would be familiar with the basics of Windows Server network setup and administration and all that goes with it. The more I thought about it, though, the more I realized how little basis I had for my assumptions. I decided to look into it and to talk with other programmers to see how much they knew about all this.
As it turns out, they didn't know much. It quickly became apparent that Windows-based developers and network and server administrators occupy completely different worlds. Programmers like to think they understand the infrastructure as well as network admins do, even though they're not as familiar with the details. They rarely understand it, however.
In fact, surprisingly few show even a basic understanding of the workings of server-based network infrastructure and administration. This is worth noting because, while coders can often do a lot within the comparatively protected "sandbox" environment of a specific project or development environment, it can be career-limiting in the long run. In fact, the lack of familiarity can lead to real trouble when a developer is promoted to project leader and beyond and starts to take on broader design responsibilities.
There are, of course, exceptions to the rule, but more typically the lack of understanding of the broader context leads to inefficient practices and less-than-optimal code. Knowing the context the code will run in can only help to make that code better.
A Simple Lesson
The lesson is simple. If you want to be a good software developer on Microsoft platforms, you need to know about the platform infrastructure, as well as about dev languages, tools and environments. You need to put Windows Server on your list of things to study and learn, right alongside Visual Studio, C#, Silverlight and so forth.
There are plenty of ways to do this, but one of the best is to set up your own Windows Server 2008 AD domain network and use it for your own dev environment. There really is no better way to learn to swim than to do what my friend did -- plunge into the water and try to swim.
Take the time to create your own Windows Server 2008 AD domain. Configure it to be your domain controller, DNS server for your LAN, DHCP server for your workstations and local Web server as well. If possible, set up a trial version of Microsoft Exchange Server, too, and figure out how to make it work. Register your own external domain if you haven't already done so and set up at least dynamic DNS external addressing for it. And if you don't know what any of these abbreviations stand for, go get yourself a good book on the subject and read it. Even better, make use of the extensive documentation and tutorials available from Microsoft Web sites like TechNet and MSDN.
Don't be a developer who keeps his feet planted firmly in the clouds, high up in the rarefied but ultimately isolated and isolating world of abstract development.
Get yourself messy by fooling around with some server installation and administration tasks. In the end, you'll be a much better developer for it.
About the Author
William F. Zachmann, born before the modern digital computer was invented, has lived with them (and made his living off of them) all his life. He was director of research for The Forum Corp. in the mid-'70s and senior vice president of corporate research at International Data Corp. (IDC) in the '80s. He has a copy of Windows 1.0 that Bill Gates signed for him the night it was rolled out at Comdex Fall '85. Zachmann is now director of Canopus Research Inc. He programs in C# using Visual Studio 2005 with a focus on ASP.NET and SQL Server 2005.