Вопрос очень интересный.
Думаю, программирование тут вообще не причем. Это просто один частный пример применения определенных способностей. А в общем это умение создавать что то «своими руками». Лично я мыслю абсолютно одинаково и когда занимаюсь программированием и когда планирую ремонт дома. Честно говоря, это происходит полностью интуитивно. Я практически всегда знаю какие общие и конкретные шаги надо предпринимать чтобы достигнуть нужных целей и сразу же представляю где могут быть проблемы и уже отдельно обдумываю варианты их решения. Понятное дело тут не последнюю роль играет опыт, но когда 25 лет назад начинал на бейсике и паскале, то мыслил точно также.
С другой стороны, тут на пикабу, узнал что люди покупают наборы лего, собирают их точно по инструкции и ставят на полку (понятное дело что все люди разные и я не в негативном ключе пишу). Для меня в детстве это было бы немыслимо. Лего у меня не было, но был похожий отличный советский конструктор. Даже если бы у меня была к нему инструкция, то я бы все равно строил что то свое. Кстати мыслительный процесс при этом очень похож на программирование.
Ну и самое главное - меня прет от процесса. И думаю всех, кто считает себя серьезным профессионалом в своей сфере. И началось это с самого первого раза, когда я на спектрумовском бейсике часики рисовал. Это дает возможность не останавливаться, если что то не получается. Любой баг, причин которого ты не понимаешь, становится персональным врагом. И когда ты наконец решаешь проблему, то организм радует тебя дофамином.
Я очень сомневаюсь, что этим конкретным навыкам и способностям можно научить, как ни крути. Можно толь дать базу тем, у кого они уже есть - думаю на всяких инфоцыганских курсах «войти в ИТ» каких либо положительных результатах добиваются только граждане которые сразу программировать умеют, только еще не знают об этом)
А еще хороший программист всегда ленив. И это тоже напрямую влияет на умение «писать код». Основная и, не побоюсь этого слова, основополагающая проблема в любом серьезном проекте не как что то сделать, а каким образом это сделать в контексте уже написанного и так, чтобы в будущем тоже можно было что то изменить. Лень позволяет сразу планировать все так, чтобы минимизировать труд потом.
Резюмируя, думаю что есть некий набор врожденных качеств и способностей и позволяет некоторым успешно работать программистами. Собственно это верно и в любой другой сфере)))