For your snarky "for once" comment, you owe me a response to this: withholding distaste for the term "rock star", rock star devs:
1. Can estimate accurately.
2. Can solve problems involving graphs.
3. Can frame and solve problems compiler-theoretically, including parsing, domain-specific languages, and virtual machines.
4. Can code bare metal and understand the memory hierarchy well enough to know when that makes sense.
5. Can assess whether a problem is going to be compute bound or IO bound and plan accordingly.
6. May or may not write code that is easy to read ("maintainable"), but tend to write code that is extensible.
7. Understand caching, load balancing, and compression.
8. Can work with large data sets.
9. May or may not formally unit test, but can debug fast and can design code to be debugged.
10. Steal ideas from other strong projects (implying also that they read and evaluate other people's code).
Obvious caveats: I'm not one, but lists like this are always biased. "A rock star developer looks exactly like the ideal me!". Like with the original list, I could easily put a book to each of these.
A comment thread with nothing but people's lists would be fun to read.
Great programmers I've known seem to have a narrow rather than a wide sort of ability. They tend to be unbelievably great at some things but maybe know nothing about others. What they all have in common is the ability to have good new ideas, and to write code that works.
All the things on your list seem reasonable, except for numbers 1 and 5. In my experience, great programmers know that the world is so surprising that they tend to avoid even trying to estimate things. They may try to predict at a coarse granularity, but beyond that they just try to set things up so they can easily change their minds later when their predictions turn out to be wrong.
1. Can estimate accurately.
2. Can solve problems involving graphs.
3. Can frame and solve problems compiler-theoretically, including parsing, domain-specific languages, and virtual machines.
4. Can code bare metal and understand the memory hierarchy well enough to know when that makes sense.
5. Can assess whether a problem is going to be compute bound or IO bound and plan accordingly.
6. May or may not write code that is easy to read ("maintainable"), but tend to write code that is extensible.
7. Understand caching, load balancing, and compression.
8. Can work with large data sets.
9. May or may not formally unit test, but can debug fast and can design code to be debugged.
10. Steal ideas from other strong projects (implying also that they read and evaluate other people's code).
Obvious caveats: I'm not one, but lists like this are always biased. "A rock star developer looks exactly like the ideal me!". Like with the original list, I could easily put a book to each of these.
A comment thread with nothing but people's lists would be fun to read.