Newsgroup: it.scienza.informatica
Titolo: Dilemma

Salve!
Sperando di non essere OT, viste anche le recenti polemiche,
volevo sapere, essendo questo un NG dedicato all'informatica
teorica, se effettivamente però l'informatica teorica serve
"davvero" a qualcosa, cioè...
Se io devo, ad esempio, fare per davvero un sistema operativo,
cioè non studiarlo solo a livello logico tipo corso di Sistemi
Operativi, in cui si studiano argomenti tipo la gestione dei
processi, la gestione concorrente, i semafori e compagnia bella,
ma se devo scrivere il kernel, poi il gestore della memoria,
il file-system, ecc..., premesso che sarà sicuramento un lavoro
lungo e faticoso...beh...mah...tutte quelle cose lì a cosa servono?
Quando poi uno dei primi problemi è quello di interfacciarsi con
il BIOS per rendere il "nostro" sistema operativo effettivamente
eseguibile, oppure c'è il problema di definire tutti i vari vettori
di interrupt, tutte le tabelle per la corretta gestione dei processi,
oppure affrontare problematiche come accedere al disco per creare
un file a basso livello, eccetera eccetera.
Ecco, di fronte a tutta questa serie di cose...l'informatica teorica,
non rischia di essere solo un elenco di buone regole da tenere a mente
e basta? Cioè sicuramente sappiamo che un processo ha un proprio
contesto, può essere in certi stati come ad esempio, PRONTO, IN ATTESA,
IN ESECUZIONE, ecc... ma poi scrivere dei programmi in C o in Assembler
che portino i programmi in questi stati (dovendo tra l'altro gestire
opportunamente la memoria) mi sembra un pochino più complesso...o forse
sono io che mi sbaglio?
Un Grazie anticipato per le vostre risposte.
Paolo
p.pa...@agonet.it
 
--
Posted from 
ro...@mago.agonet.it
 [195.32.124.10]
via Mailgate.ORG Server - 
http://www.mailgate.org

 sono io che mi sbaglio?
Fra il dire e il fare ...
E' ovvio che scrivere il codice che implementa quello che si e' studiato
e' piu' complesso che studiarlo e basta. Non basta sapere che stati puo'
avere un processo, pero' non puoi scrivere un programma che porta un
processo in certi stati se non saiquali sono. Scrivere un SO e' molto
complicato (la Microsoft ci sta provando da quasi 20 anni), e' normale
che si presentino problemi di tutti i generi, che non si possono risolvere
solo conoscendo la teoria. E' necessario conoscere l'hardware, le 
istruzioni del processore usato, ..., ma anche la teoria. Prendi per
esempio il DOS (considerato da alcuni un SO): si interfaccia al BIOS,
riempie le tabelle dei vettori di interrupt, ma non gestisce i processi
e non fa niente di quello che si studia nel corso di SO, e i risultati
si vedono.
Spesso avrai bisogno di scegliere che algoritmo usare, magari con problemi
di velocita'. Per problemi semplici puoi sempre provarli tutti e misurare
i tempi, ma se devi garantire un certo comportamento anche nel caso 
peggiore? E' sempre meglio sapere se un certo algoritmo e' O(n log n),
O(n^3) o O(2^n), se un certo problema e' NP-completo o no, e sapere
come si fa a scoprirlo. 
Dopo il SO potresti voler scrivere un interprete. Sara' utile sapere
se la grammatica e' context-free, regolare, ...
P.S. se vuoi scrivere un sistema operativo partendo da zero e vederlo
funzionare ci vorra' come minimo qualche anno, soprattutto se sei da
solo o con un gruppo ristretto di collaboratori. Linux e' stato scritto
in tempi abbastanza brevi, ma con il contributo di migliaia di 
programmatori da tutto il mondo; inoltre, essendo simile agli altri unix,
con chiamate disistema standard, si e' trovato un sacco di programmi
praticamente gia' pronti, compresi utility di sistema e compilatore.
Se il tuo SO e' innovativo, con microkernel, con soluzioni che si
studiano in teoria ma che sono poco diffuse, i tempi si allungano
	Mauro

sono io che mi sbaglio?
La realizzazione puo' essere piu' complessa della 'teoria' ma senza
questa sicuramente e' impossibile ... IMHO ...
Ciao
	Steve

...
la tua domanda l'ho sentita spesso all'Universita' e non la ritengo OT.
In effetti non e' proprio sbagliata, ma senza aggiungere altro a quello che
ti hanno gia' risposto, penso che studiare la Teoria e, per l'argomento del
post, l'Informatica teorica, serva eccome.
Per due motivi.
1: la teoria si riesce a studiare bene solo a scuola (o all'universita');
sono poche le persone che studiano "certe cose" quando iniziano a lavorare:
perche' non c'e' tempo, non serve, e' materia da studiosi e basta ecc. . Per
cui e' una di quelle materie che viene trattata solo durante gli studi e
costituisce un bagaglio culturale che altrimenti sarebbe difficile
acquisire. Inoltre ti consente di 'conoscere' studiosi che hanno un taglio
culturale diverso dai soliti CEO, Amm. delegati e Resp. Comm.li delle grandi
societa' multinazionali (con rispetto parlando per quest'ultimi);
2: uno degli argomenti base da cui alcuni corsi di studio partono e' la
differenza fra calcolatori analogici e digitali; cio' ti puo' far capire che
quello che noi vediamo e usiamo oggi e' il risultato di un'evoluzione
scientifica, che 'passa attraverso' ragionamenti e speculazioni teoriche che
hanno anticipato, nella teoria, cio' che noi oggi abbiamo.
Bye Max