Il modo in cui un programmatore pensa a un problema (e una soluzione) dipende notevolmente da come pensano le cose in generale, il problema stesso e il loro livello di esperienza in particolare. Vediamoli in ordine:
In che modo le persone pensano in generale
Diverse persone imparano e pensano in modo diverso. Personalmente, sono un pensatore estremamente visivo e tendo ad usare molta intuizione su come le cose "si adattano". Questo è letteralmente perché ho un modello mentale per diversi modelli, moduli e dipendenze all'interno del codice. Quando non riesco a sistemarli in una buona forma, so che la soluzione non è adeguata.
Gli altri sono molto logici, hanno serie di fatti che sembrano ridurre in un risultato. Eppure altri sono legati a un tipo di apprendimento verbale o uditivo. Hanno bisogno di sentire un problema descritto per capire le relazioni e sottolineare di esso. E, naturalmente, nessuno è "solo" visivo o "solo" verbale. Si mischiano e si abbinano a diversi livelli.
Il problema stesso
Diversi problemi richiedono soluzioni diverse. Quando sto progettando un'architettura per gestire migliaia di transazioni al secondo, ci penso diversamente da come provo a creare un algoritmo di pianificazione. Hanno esigenze diverse e l'utilizzo di approcci diversi per la risoluzione dei problemi mi consente di essere più efficace rispetto all'utilizzo dello stesso approccio per tutto.
Il livello di esperienza del programmatore
Quando i principianti iniziano, conoscono la sintassi e (se sono fortunati) hanno una buona conoscenza del concetto di variabili. Quando vengono presentati con un problema di programmazione, lo affronteranno con questi concetti, perché è quello che sanno.
Man mano che acquisiscono esperienza ( specialmente con linguaggi / paradigmi diversi ) iniziano a astrarre la concreta sintassi in concetti. Invece di pensare "oh fai una classe che eredita da XYZ" loro possono pensare "ho bisogno di qualche sorta di polimorfismo qui". I Pattern di progettazione (se usati bene) sono il tipo di cosa che estende ulteriormente questo in modo che il programmatore possa pensare a strumenti che comprendono più ampi andamenti di sintassi.
Questa è la ragione principale per cui "apprendere una varietà di paradigmi del linguaggio di programmazione" è un suggerimento comune nello sviluppo dei programmatori. È anche il motivo per cui il C ++ ha perso molto favore come primo linguaggio di programmazione (in alcuni ambienti): passi troppo tempo a pensare alla sintassi e non a imparare come risolvere i problemi.
( tl; dr ) In generale, per la maggior parte dei problemi, i programmatori passano dal pensare in sintassi al pensare nel proprio modello mentale mentre acquisiscono più esperienza.