daniele-gnudi, se fra gli esperti di informatica comprendi uno che sta per laurearsi, eccomi qua. Inoltre dal momento che ho un'ottima preparazione nella matematica pura, particolarmente in algebra e logica, so certamente di cosa parlo.
daniele-gnudi ha scritto:a parte il sarcasmo veramente povero e totalmente fuoriluogo (visto che si parlava del metodo di studio "matematico" o meno e non di quanta matematica c'e' nell'informatica), dove hai trovato questa definizione di informatica?
io, sul DeMauro leggo:
Informatica: disciplina che si occupa della raccolta e del trattamento delle informazioni o, più specificamente, dell’elaborazione di dati per mezzo di calcolatori elettronici.
oppure, Wikipedia:
L'informatica è una scienza interdisciplinare che riguarda tutti gli aspetti del trattamento dell'informazione mediante elaboratori elettronici.
...
A dire il vero non ho detto cose fuori luogo. Mi sembra che dire che l'informatica è matematica, abbia pertinenza in relazione al problema: "Chi studia informatica acquisisce un metodo matematico?" O no?
Per quanto riguarda le definizione di informatica dei dizionari, io le butterei. Come uno non impara il concetto di continuità di una funzione fra spazi topologici guardando sul dizionario la parola "continuità", o non capisce certo il concetto di "accelerazione" in fisica leggendo un dizionario, così non capisce cos'è un algoritmo o cos'è l'informatica con una definizione da dizionario. Il "De Mauro" del resto non è che può spiegare, ad esempio, il concetto di algoritmo definendo le macchine di Turing!
daniele-gnudi ha scritto:La "programmazione" si DEVE definire in modo astratto e matematico diciamo (anche se questo non c'entra nulla con il discorso della mentalita' di un informatico, di un medico, di un muratore, di un matematico, ecc...), ma non il linguaggio di programmazione!
Che senso ha definire in maniera astratta il C? semmai definiamo "matematicamente" il concetto di lista, di struttura, ecc...
ma e' una definizione teorica che si applica ad un linguaggio che di fatto e' assolutamente pratico e strattamente legato al calcolatore...
un po' quasi come la distinzione tra algoritmo (quindi valido a prescindere dal linguaggio di programmazione) e il codice in un linguaggio vero e proprio.
cmq era solo un esempio, certamente l'informatica non e' solo programmazione.
Ti spiego che senso ha definire matematicamente un linguaggio, e perché tale definizione è senza dubbio un assioma dell'informatica.
1) Un linguaggio non può esistere se non è definito formalmente. Nessuna macchina sarebbe in grado di eseguirlo se così non fosse. Ecco perché si usano dei sistemi formali matematici (le grammatiche) per definire la sintassi. Ecco perché si definiscono delle regole formali per la semantica operazionale del linguaggio e il concetto matematico astratto di "stato" (tale definizione serve per definire ciò che calcola il linguaggio). Un esempio di definizione non rigorosa è la spiegazione che si dà di un linguaggio nei testi tipo "C subito!", "Impara C presto e bene", e in generale i manuali letti da chi vuole imparare a programmare e in cui i concetti vengono spiegati in maniera discorsiva. Tale spiegazione va bene (spesso) per un essere umano, ma non certo per una macchina, o comunque per un operatore non intelligente che deve eseguire il calcolo.
2) Definire un linguaggio matematicamente è garanzia di precisione. E' chiaro che nessuno desidera usare un linguaggio senza che i suoi costrutti e il suo significato siano stato definiti in maniera formale, astratta e rigorosa. Le spiegazione non rigorose di C, lasciano dei dubbi e delle domande e delle ambiguità cui molti non sanno dare risposta. Una definizione matematica di un linguaggio è così precisa che l'esecuzione di un qualsiasi programma diventa una prova di un teorema e un programma qualsiasi può essere eseguito con carta e penna da un essere umano. Cioè, l'esistenza o meno di una scatola piena di silicio diventa poco interessante.
3) Solo attraverso una definizione matematica del linguaggio si possono provare poi teoremi sul linguaggio, e quindi indagare matematicamente il linguaggio stesso. Questo è un punto davvero fondamentale. Perché dovrebbe essere così importante provare teoremi sul linguaggio? Una delle tante risposte a questa domanda è ad esempio: "l'esigenza di correttezza". Per molti questo è uno dei problemi più urgenti dell'informatica. Definendo formalmente un linguaggio si possono poi formulare e dimostrare teoremi del tipo: "tale programma calcola in modo corretto la funzione f". Programmi liberi da errori!
4) I linguaggi funzionali, tipo il lambda calcolo, vengono addirittura definiti utilizzando spazi di funzioni continue da reticoli completi in reticoli completi. Quando vedi simili definizioni topologiche, e chiaro che capisci che effettivamente stai facendo matematica. Tali definizioni danno una giustificazione matematica al concetto di "ricorsione", essenziale per un informatico.
Inoltre vorrei aggiungere che non c'è distinzione fra algoritmo e codice in un linguaggio. Ti spiego perché. La definizione matematica di algoritmo universalmente accettata è: un algoritmo è un programma scritto per una macchina di Turing. Inoltre i linguaggi che si usano per la programmazione, equivalgono alle macchine di Turing, nel senso che una funzione è calcolabile tramite un programma di un qualsiasi linguaggio "potente" se e solo se è calcolabile anche da una macchina di Turing. Ne segue che si definisce equivalentemente il concetto di algoritmo come un programma scritto in C, Java, ecc.
daniele-gnudi ha scritto:io personalmente non ritengo l'informatica piu' facile della matematica.
Io sì, avendo esperienza con tutte e due. Ad ogni modo ho solo espresso un opinione personale, non volevo rispondere a tue affermazioni. Ma ho spiegato che tale facilità media si riferisce ad una contingenza storica. Ci sono aree dell'informatica sofisticate e difficili, quali ad esempio "la complessità computazionale", alla quale appartiene uno dei sette problemi matematici del millennio: P vs NP.
daniele-gnudi ha scritto:Ti faccio presente che pero' in quelle aree che dici tu, ci lavorano spesso matematici e non "informatici che di fatto sono matematici"...
E questo conferma in pieno l'indistinguibilità dell'informatica dalla matematica. Un matematico lavora in certe aree del'informatica come lavorerebbe in teoria dei numeri o topologia. Di fatto sono proprio i matematici che hanno inventato e sviluppato l'informatica. Turing, Godel, von Neumann, Church, e poi Scott e così via..
Io considero la matematica come una scienza indipendente dalla realtà fisica (anche se spesso si ispira ad essa), e che procede con definizioni formali, teoremi, dimostrazioni logiche. Così procede anche l'informatica, che è dunque matematica. Del resto perché considerare la geometria o la teoria di Galois "matematica", e non l'informatica? Tutte queste procedono in maniera astratta e formale.
Ciò che non è un ramo della matematica, ma una scienza a sè stante, e invece l'applicazione dell'informatica alla vita reale. Io credo che tu ti riferisca a tale applicazione. Naturalmente l'informatica per poter essere applicata alla vita di tutti i giorni, necessita di sporcarsi le mani con la realtà. Quindi se un vuole un programma funzionante deve conoscere perfettamente l'architettura di un calcolatore, i registri, e diavolerie varie, deve interfacciarsi con l'elettronica e la fisica, altrimenti l'informatica resterebbe una teoria matematica senza applicazione. Questi però sono problemi da ingegneri informatici, e non da informatici, e per questo l'informatica rimane un ramo della matematica. Ti assicuro che io dei Pc non so una mazza, e a momenti non so nemmeno accendere quelli del laboratorio.
Paradigmatico di questo è la seguente celeberrima storia. Il calcolatore come lo conosciamo oggi è nato come un'idea matematica astratta di Turing, e solo successivamente Turing stesso e von Neumann, affrontando problemi di ingegneria, e utilizzando i concetti di Turing, hanno costruito i primi calcolatori reali.
Spero che sia chiaro il mio discorso. In ogni caso, il fatto che l'informatica sia matematica uno non può saperlo se non la studia completamente e decentemente. Se per informatica uno intende la sua applicazione pratica, questa è un'altra storia, e i questo caso c'è senza dubbio un'intersezione con l'ingegneria e la fisica.