3 ms·
The characteristics that I think contribute are extreme attention to detail, patience, ability to extrapolate from examples encountered to fine-grained concepts
by karmakaze 4y ago
The characteristics that I think contribute are extreme attention to detail, patience, ability to extrapolate from examples encountered to fine-grained concepts, and lots of practice either on the job or via other transferrable field or hobby. Having a strong sense of how machines work, as in being able to guess which tradeoffs will pay could be a power-up. Typically, a person who wants to learn for its own sake and enjoys hard challenges like a game.
Being able to adapt and relate, draw analogies from different situations and subject areas can be a big boost in ability to come up with outside-the-box solutions. I think most of this sums up to thinking abstractly most of the time, rather than when necessary, or 'architect'ing. When something doesn't work, it didn't merely not work, it didn't work because... of some specific aspect or misconceptualization.
Subdividing a problem can be done many different ways. We want to separate concerns, but which ones, in what order and by what means. Keeping both higher-level and lower-level concerns in mind simultaneously speeds filtering of possibilities to something that has a good chance of working out.
Another good one is knowing what's fair game to modify when coming up with a solution is larger than one might think. Beyond the code, there's toolchains, data formats, even UX or documentation could be part of the answer.
Edit: I can't stress enough the importance of naming things. If you're bad at naming things, it could be you don't know or aren't even choosing the things consciously. Often, you start out needing a name for something but put in the time to think "what is it, why is it, is it more than one thing?" when you pick out names. I think practicing good naming probably gets you moving along the right path. Keep things as simple as you can, don't add to cognitive load by naming similar things with arbitrary differences in their names.