familiarity might be able to give you 1-2x edge but 10x+ comes from raw problem solving skill and research aptitude
They are intelligent but so are many of their less impressive peers. They do have problem solving skills but most developers develop the same problem solving vocabulary after few years. They however don't chit chat much when they work, don't wander away to unrelated activities (like hanging out over here in worktime) and if disrupted recover their focus quickly.
I think anyone can improve if they're willing to put in the time, though of course natural ability does help.
Think about learning to write a compiler for a programming language. You'd have to learn: - Computer architecture - Assembly language - Caching - Recursion and Parsing - Type theory - Translations - Performance testing
Or attempt to write your own database. That would cover at least: - File Systems - Transaction semantics - Algorithms
I think tackling problems like this would help a great deal. Or just look for areas where you don't know how to do something, and work on them.
Things like: - How deeply do you know your favorite programming language? - How easily can you setup a Linux server to host a web application? - Are you an expert at your editor? - Can you write a usable GUI, either for the web or a phone, etc.
I think they may get at the heart of what I was trying to say though: while these clearly would make one better at solving software engineering problems, I'm not certain they would improve one's raw, general problem solving ability in an orthogonal discipline.
Some (likely imperfect) examples are:
- solving salary negotiation of a job/contract offer
- solving socio-political organizational problems in a company