se col passare del tempo e con costante esercizio una persona possa riuscire ad assumere la forma mentis adatta ad un programmatore.
Secondo me il modo migliore per crescere è "lavorare" (intendo sviluppando progetti reali - al lavoro, all'università o come hobby) possibimente in team (e quindi affiancati a qualcuno "più avanti" di noi sarebbe il massimo).
Fare esercizi non serve a niente, se non nei primissimi anni o quando si affrontano nuovi linguaggi.
Cioè, chi all'inizio non è molto bravo, riesce col passare del tempo a capire, sviluppare e risolvere esercizi a diversi livelli di difficoltà, "senza problemi"?
Ovviamente con il tempo si attinge a tutta un'esperienza passata e a soluzioni (funzionanti) già adottate; ma questo vale per qualsiasi mestiere.
O solo alcune tipologie di persone riescono in questo e sono in grado di diventare programmatori?
Non esiste un profilo del programmatore, così come non esiste il profilo dell'avvocato o del contadino; poi considera che esistono di migliaia di possibili applicazioni che richiedono capacità diverse, c'è lo sviluppatore web, c'è lo sviluppatore di programmi di contabilità, c'è lo sviluppatore di software per automazione industriale...