I suspect at some point the development community is going to have to come up with better names to call people.

A person who is fantastic with web technologies may not be great with real-time audio processing tools or graphics processing tools or Natural Language systems. But a person who is a genius at with NLP may not be able to cobble together a website or write an algorithm for fast approximations of an inverse square function. A developer who understands how to squeeze every last cycle out of an embedded system will likely be lost in a massive enterprise environment and a person who specializes in machine learning may stink at writing efficient database and storage systems. A developer great at crypto systems might be laughed at if he wrote a video game. Someone who specializes in low level cache optimization may have absolutely no clue how to write an e-commerce system. And a lifelong mainframe developer would be lost writing device drivers.

I suspect that most people aren't great at everything, even top-notch developers. More likely people are really great at one thing, and pretty good at a couple others and lousy at the rest.

There's a few exceptions I'm sure, but if your definition of "great developer" only includes those people who are great at every bit of software development trivia then we're probably talking about only a handful of people on the planet.

Algorithm optimization is hard and often not-obvious (how many people really understood the algorithm for the fast inverse square root? I bet thousands of developers used it, even plenty of great ones, but groking it is so rare that a series of articles was actually written to explain it)

There are plenty of perfectly competent and solid developers (even great) who can hack together great stuff in their domain, but struggle with even the basics just outside of that. An autodidact will probably be pragmatic with what they learn, and most of that will probably be plumbing work since that's what's strictly required to get something up and working.

I see looking at your page that you specialize in high-performance computing and parallel systems. Are only developers who understand those topics great developers? Because most developers don't do well with those topics. Even the dev shop at Valve has struggled with parallelizing their software.

Saying "I expect mechanical engineers to have a strong grasp of Newtonian mechanics", do you also expect them to have a strong grasp of non-Newtonian mechanics? Since Newton's equations are simply a special case of relativity, why shouldn't they know how to calculate the load stresses on a mechanism using Einstein's much more precise work? Shouldn't they really have a fantastic understanding of particle physics and quantum mechanics too? I mean, the binding forces that hold together the materials they work with every day are subject to that basic knowledge!

Alas! Now I'm concerned that the plucky civil engineer, when designing the overpass I take to get home from work today, didn't quite get the section on QCD Color Charge because he mistook the professor's sloppy handwriting of lambda for an 'A'!

Perhaps my downtrodden electrical engineer is hiding a secret shame, he's never understood how to accurately calculate ballistic trajectories over the surface of the Earth! Oh sure it looked so simple in class, but they never went over how to actually do it, taking into account variable atmospheric resistance, and a suitable model of the Earth's actual shape, and GRAVITY! Oh gravity...why do you have to subtly change as the mistargetted missile drifts lazily across your forlorn belly! It's just dif-EQ after all! Why then, did his water ballon slingshot fail to hit his neighbors house precisely where he wanted it?

I suddenly feel a great pity for these noble engineers, overcoming such obstacles, such gaps in their basic knowledge! Yet still my overpass stands, and still my car works, and still my lights turn on. Only because of this spark of competence shall their secret, their hidden failings, remain safe with me.