I was stricken by the parallels between two passages I read recently:
The first is from Stephen Hawking’s A Briefer History of Time:
In Newton’s time, it was possible for an educated person to have a grasp of the whole of human knowledge, at least in broad strokes. But since then, the pace of the development of science has made this impossible. Because theories are always being changed to account for new observations, they are never properly digested or simplified so that ordinary people can understand them. You have to be a specialist, and even then you can only hope to have a proper grasp of a small proportion of scientific theories. (p.136)
Now read this excerpt from an excellent talk given by Charles Petzold entitled Does Visual Studio Rot the Mind?:
Twenty years ago, in November 1985, Windows 1.0 debuted with approximately 400 documented function calls.4 Ten years later, Windows 95 had well over a thousand.5
Today we are ready for the official release of the .NET Framework 2.0. Tabulating only MSCORLIB.DLL and those assemblies that begin with word System, we have over 5,000 public classes that include over 45,000 public methods and 15,000 public properties, not counting those methods and properties that are inherited and not overridden. A book that simply listed the names, return values, and arguments of these methods and properties, one per line, would be about a thousand pages long.
If you wrote each of those 60,000 properties and methods on a 3-by-5 index card with a little description of what it did, you’d have a stack that totaled 40 feet.6 These 60,000 cards, laid out end to end — the five inch end, not the three inch end — can encircle Central Park (almost), and I hear this will actually be a public art project next summer.
Can any one programmer master 60,000 methods and properties? I think not. One solution, of course, is specialization. I myself have specialized. This evening I hope no one will ask me questions about web forms or ASP .NET or SQL Server because those aren’t my specialty. I do Windows Forms, and my language is C#.
Clemens Vasters touched on this recently as well.
I used to fashion myself a Jack of All Trades (or at least looked fondly at the goal of becoming Jack), but with the pace of technology as such, I find it almost exhausting to keep up with everything there is to know, or worse, to know what I don’t know. I try to stay abreast by reading a couple hundred blog posts per day, magazines, and books, but it’s just impossible to be an expert in everything these days, especially trying to be an expert in the newest stuff while still retaining my expertise in the stuff I used to be an expert in. The best I think you can hope for is as Charles says, you almost have to pick an area and specialize, and then, I think, hope you can stay in touch with enough of what’s going on in all the other areas so that you know a) what solutions/technologies exists outside of your specialization and b) where to find said solutions/technologies if/when you need them to solve a particular problem.
Interestingly, it looks like Microsoft has implicitly (if not explicitly) acknowledged the inevitability of specialization with its new certification program, introducing a new layer of more focused comprehensive certifications around areas of expertise called the Microsoft Certified Professional Developer (MCPD) - with specializations such as Web Developer, Windows Developer and Enterprise Applications Developer.
I think it’s safe to say – Jack is dead. Long live Jack.