Io non so cosa tu studi, ma l'analisi numerica implementata su Matlab o R che si studia nelle ingegnerie è una finta
programmazione. Infatti fino ad ora non ho mai incontrato un ingegnere (non informatico) che conosca la logica della programmazione e che sappia formulare uno script più lungo di 10 righe.
Non sono uno studente, sviluppo software in ambito lavorativo da 5 anni e come hobby da quasi 20. Non metto in dubbio che quello che viene insegnato all'Università sia poco, ma non esiste alcuna "ricetta segreta" per passare da 10 righe a migliaia se non la volontà di farlo e l'esperienza. La "logica" della programmazione consiste spesso in idee molto semplici e una grande attenzione nei dettagli. Conosco artisti o ingegneri che hanno iniziato a programmare per necessità e che hanno finito per realizzare applicazioni anche molto complesse. Per fare un esempio. Nel mio precedente lavoro ho conosciuto un ingegnere che negli ultimi 15 anni ha realizzato un sistema per automatizzare le simulazioni fisiche all'interno della società per cui lavora. Il sistema permette a persone sparse per tutto il mondo (è una multinazionale) di progettare la simulazione attraverso una interfaccia web, gestire le licenze dei software di simulazione e fornire un feedback dei risultati (generando automaticamente un report). Il codice non è perfetto e in alcune parti non è particolarmente elegante o efficiente, ma funziona. Ho poi anche avuto modo di lavorare con un tesista di ingegneria meccanica che ha scritto un sacco di codice in Scilab per lo più in autonomia.
La realtà è che ad esempio progettare un sito web altamente funzionale richiede più astrazione e abilità che progettare un curve fitting. Ovviamente parlo del mero livello di scrittura e progettazione del codice. Anche se spesso il lavoro del programmatore è banale e ripetitivo, invidio comunque chi ha una formazione informatica che induce ad introiettare un metodo di programmazione funzionale, pulizia del codice ed efficienza, cosa che non acquisisci imparando a fare quegli script da 40 righe che servono per implementare un calcolo scientifico seppur complesso.
Progettare un software di una certa complessità è come progettare una casa. Non è qualcosa che si fa da un giorno all'altro e richiede pazienza e dedizione. Ogni pezzo non è più complicato di quelle 40 righe, spesso è in realtà più semplice. Pulizia del codice ed efficienza vengono principalmente con l'esperienza ed è in realtà più un ideale che la realtà. Il più delle volte questi valori sono gli ultimi ad essere considerati e a volte ci si rende conto che soluzioni che nella nostra mente erano eleganti ed efficienti in realtà non lo sono affatto. Un software è inoltre molto variabile ed è spesso soggetto a riscritture o riorganizzazioni del codice. Quando si inizia a realizzare una nuova funzionalità si cerca di solito di farlo nel modo più veloce e semplice possibile e si aggiusta poi il codice in seguito in base a quello che si impara da questa prima implementazione/prototipo.
Eppure continuo a ritenere la forma-mentis dell'ingegnere informatico la migliore, per attitudine al pensiero astratto, e per la capacità di problem-solving. Certo è che non ho né voglia né tempo di mettermi a studiare globalmente l'informatica "universitaria". Per questo ho chiesto consiglio qui. La domanda è: Io voglio salire di livello. Cosa potrei fare? Imparare OOP? Studiare Algoritmi? Pregare l'ave Maria tutte le notti per sei mesi? Tanto questo sentore di incompletezza non me lo tolgo di dosso Ahahahah
Sinceramente una buona parte dei corsi di informatica che ho frequentato consistevano in qualcosa di simile a quello che vivi nello studio dell'analisi numerica. Il mio consiglio è quello di provare a realizzare qualcosa al di fuori dell'Università. Può essere realizzare un progetto personale o lavorare ad un qualche progetto open source o altro.. Non ha importanza. Se trovi che R è limitante, puoi provare a studiare un altro linguaggio. Le basi di quasi ogni linguaggio si possono imparare in pochi giorni. Lascia perdere la teoria sulla programmazione ad oggetti. E' per lo più considerata datata e cerca di importi un punto di vista attraverso cui analizzare il problema quando altri potrebbero essere migliori (o a te più congeniali). Lo studio degli algoritmi può essere utile, ma non fondamentale, e puoi sempre guardare queste cose in seguito.