Questa potrebbe essere un'occasione in cui può esserci una distinzione semanticamente significativa tra "programmatore" e "ingegnere del software". In questo contesto, in particolare, vediamo che hai una conoscenza di diversi linguaggi di programmazione e tecnologie correlate e che puoi usarli per produrre i risultati desiderati. Questa è una definizione operativa di "programmatore di computer".
Mi considero un ingegnere del software. Nella maggior parte degli aspetti quotidiani del mio lavoro, probabilmente faccio le stesse cose che fai tu. Uso il linguaggio del computer e le tecnologie correlate per produrre alcuni risultati desiderati. Tuttavia, ho una comprensione delle strutture dati e degli algoritmi e ritengo che la conoscenza sia una base fondamentale della mia capacità di fare molto di più.
Spesso, anche se non sempre, il mio lavoro consiste nel trovare una soluzione a problemi complessi per i quali non ci sono soluzioni ovvie, nulla che sia direttamente indirizzato dalle caratteristiche del framework che sto usando o dalle capacità del linguaggio che Sto lavorando con. In questo, ho bisogno di analizzare il problema e ideare una soluzione e occasionalmente questo processo va nel regno dell'architettura su larga scala.
Mentre un'eccellente comprensione di questi problemi più profondi è necessaria per fare quel tipo di lavoro, non è sufficiente . In altre parole, solo sapere come funziona una tabella di hash o perché un ordinamento di heap di solito ha buone caratteristiche di prestazione non è sufficiente per essere un architetto di sistemi o un ingegnere senior. È il punto di partenza logico, e da lì puoi iniziare a scavare più a fondo e viaggiare più ampiamente e ottenere l'esperienza necessaria anche per affrontare i problemi più grandi.
Suppongo che per rispondere alla tua domanda, dovresti chiederti: "Cosa voglio essere? Dove andrò con la mia carriera?" Se ti accontenti di continuare a fare quello che stai facendo, allora potresti semplicemente voler imparare abbastanza strutture dati e algoritmi per superare le domande dell'intervista in gran parte arbitrarie con cui ti trovi.
Se vuoi crescere nella tua carriera e hai la passione per questo che è essenziale, dovresti abbracciare queste materie il più strettamente possibile. Se hai del tempo per lavorarci, una mente aperta e un vero entusiasmo, troverai cose meravigliose ed eccitanti. Non dimenticherò mai il giorno in cui ho capito per la prima volta quicksort. La sensazione di eccitazione e scoperta ha segnato il corso per gran parte del resto della mia vita, e non potrei essere più grato per questo. Ora, non posso immaginare di fare altro che lavorare come ingegnere del software.
Buona fortuna con tutto ciò che scegli.