Alcune considerazione spicciole:
1) la programmazione NON SI DISCOSTA PER NULLA dal mondo della matematica. ANZI, TUTT'ALTRO. E' matematica del DISCRETO e NON del continuo. Automa a stati finiti, grammatiche, analisi lessicale, sintattica, macchena di turing, complessita' computazionale, calcolo numerico, sono tutti argomenti che hanno piu' a che fare con la matematica che con la programmazione
2) tu NON HAI ASSIMILATO la programmazione ad oggetti. NON STO PARLANDO di linguaggio di programmazione, ma di MODELLO DI CALCOLO/VALUTAZIONE. Ne sai, forse lo 0.001% di quello che c'e' da sapere!
3) un paio di linguaggi perfetti per un matematico, che il 99.999999% dei programmatori non conosce
A) paradigram di programmazione funzionale -> Haskel, o ancora il caro vecchio LISP, o Clojure, se vuoi continuare con qualcosa che usa ancora la virtual machine Java
B) paradigma di programmazione logico, basato sulle clausole di Horn ed un dimostratore di teoremi ( robbbba tosta ): Prolog! Non mi risula esistano alternative
Se vuoi dedicarti a qualcosa di un po' piu' ""ameno"", studiare un po' di algoritmi e di strutture dati e' la base per tutto il resto.
Le strutture dati hanno MOLTISSIMO a che fare con l'algebra astratta, funzioni ricorsive, funzioni parzialmente definite, e n-mila altri concetti.
Diciamo che le strutture FONDAMENTALI sono:
se T e' il dominio del valore (ad esempio, interi, reali, charatteri, ecc)
vettore -> T^n
structtura-> T1 x T2 x ... (prodotto cartesiano)
lista -> T^* = T^0 U T^1 U T^2 U .... (chiusura, o anche unione di vettori di TUTTE LE POSSIBILI potenze/lunghezze. OVVIAMENTE c'e' l'elemento neutro ).
albero (binario) -> T = nil | (T,T) (questa e' una bella definizione ricorsiva )
grafo -> G = (T, E) con E=TxT
mappa -> K -> T (praticamente la definizione di una funzione ad un parametro che ritorna un valore, ma DISCRETA. Parametro e valore possono essere uno qualunque degli oggetti appena indicati)
Nota che un vettore e' una mappa N -> T (N: numeri NATURALI)
Come vedi o usato strumenti matematici (con i limiti della scrittura imposti dall'editor)
Poi ci sono gli algoritmi, i modelli di calcolo parallelo, quello distribuito, i modelli di calcolo a memoria condivisa, a memoria distribuita, ecc.
Tutti argomenti che sono basati du concetti discreti, di algebra astratta ed, ovviamente, una serie di concetti specifici di questa materia.
Da buon matematico (TU, NON io , il consiglio e' : l'aspetto teorico della computer science e' decisamente interessante.
Che cosa scegliere? Hai tempo per decidere.
Se vuoi un paio di testi ""carini"" (e te ne accorgerai QUANTO sono CARINI ) pratcamente le sub-bibbie per un VERO Computer Scientist:
Diciamo che questi tre TESTI (NON LIBRI) sono il meglio del meglio per quanto riguarda la parte teorica ed introduttiva
Nota: c'e' un concetto fondamentale che la maggior arte dei programmatori continua a non capire!
In Java, se il codice dovrebbe ritornare un vettore, ma NON HO NIENTE DA RITORNATE, NON SI RITORNA "null"!!!!!!!
Ma il VETTORE DI LUNGHEZZA ZERO!
E il vettore di lunghezza zero e' ESATTAMENTE l'elemento neutro della funzione ""concatenazione""