Sono nuovo nel campo CS e ho notato che in molti dei documenti che ho letto non ci sono risultati empirici (nessun codice, solo lemmi e prove). Perché? Considerando che l'Informatica è una scienza, non dovrebbe seguire il metodo scientifico?
Sono nuovo nel campo CS e ho notato che in molti dei documenti che ho letto non ci sono risultati empirici (nessun codice, solo lemmi e prove). Perché? Considerando che l'Informatica è una scienza, non dovrebbe seguire il metodo scientifico?
Risposte:
Anche la matematica è una scienza e dovresti cercare a lungo per trovare risultati empirici pubblicati in questo campo (anche se immagino che debbano essercene alcuni). Esistono altri settori scientifici in cui "lemmi e prove" sono valutati sull'esperienza, come la fisica quantistica. Detto questo, la maggior parte delle scienze mescola teoria e pratica (con vari rapporti) e l'Informatica non fa eccezione.
L'informatica ha le sue radici nella matematica (vedi la biografia di Turing per esempio http://en.wikipedia.org/wiki/Alan_Turing ), e come molti risultati (generalmente soprannominati nel campo dell '"informatica teorica") consistono in prove che i computer in alcuni modelli computazionali possono risolvere alcuni problemi in una determinata quantità di operazioni (ad esempio conferenze come FOCS, STOC, SODA, SoCG, ecc.). Tuttavia, molti altri risultati dell'informatica riguardano l'applicabilità di tali teorie alla vita pratica, attraverso l'analisi di risultati sperimentali (ad es. Conferenze come WADS, ALENEX, ecc ...).
Si suggerisce spesso che l'ideale sia un buon equilibrio tra teoria e pratica, come in "Scienze naturali", in cui l'osservazione di esperimenti induce la generazione di nuove teorie, che a loro volta suggeriscono nuovi esperimenti per confermare o affermare quelli: come tanti le conferenze tentano di accettare risultati sia sperimentali sia teorici (es. ESA, ICALP, LATIN, CPM, ISAAC, ecc ...). Il sottocampo di "Algorithms and Data Structures" nell'informatica potrebbe soffrire di uno squilibrio, nel senso che le conferenze "Teoriche" sono generalmente più classificate rispetto a quelle sperimentali. Credo che ciò non sia vero in altri sottocampi dell'informatica, come HCI o AI.
Spero che sia d'aiuto?
L'implementazione corretta degli algoritmi è un'abilità che richiede un diverso set di strumenti rispetto alla semplice dimostrazione di teoremi. Molti algoritmi scoperti dalla comunità teorica sono stati effettivamente implementati nella pratica (anche se mi piacerebbe vedere la comunità teorica assumere un ruolo più importante in questo processo). La fisica non chiede agli stessi ricercatori di fare teoria ed esperimento, anche se si prevede che i due gruppi comunichino. Perché non dovresti aspettarti di vedere la stessa divisione nell'informatica?
AGGIUNTO IN MODIFICA:
Espandendo il mio commento in risposta a Suresh su ciò che intendevo per "ruolo" sopra, presso Bell Labs e AT&T Labs, i ricercatori negli algoritmi sono stati incoraggiati a parlare con le persone in sviluppo. Non ho fatto tutto questo come avrei dovuto, ma ne ho ricavato almeno un documento e penso che sarebbe positivo per il settore se ci fosse più comunicazione tra le persone in teoria nelle università e nei professionisti . Questo non significa che penso che tutti quelli che escono con un algoritmo dovrebbero codificarlo (anche se è pratico).
D'altra parte, gli algoritmi di codifica (o il fatto che uno studente li codifichi) che ritieni possano essere pratici può essere utile per adattarli ai professionisti. Prendi in considerazione un esempio. Lempel e Ziv hanno scritto due articoli tecnici nel 1977 e nel 1978 su nuovi algoritmi di compressione dei dati. Tutti li hanno ignorati. Nel 1984, Welch ha scritto un documento molto meno tecnico dando una leggera svolta a LZ78 che ha migliorato un po 'le sue prestazioni e ha dato i risultati di un piccolo studio confrontando le sue prestazioni con altri metodi di compressione dei dati. È stato pubblicato in un diario letto da un numero di programmatori e l'algoritmo è stato dato da alcune righe di pseudocodice. Il metodo è stato rapidamente adattato in un certo numero di posti, risultando infine in una famigerata disputa sulla proprietà intellettuale.
Naturalmente, uno dei modi migliori per i ricercatori di algoritmi di comunicare con la pratica è quello di produrre studenti laureati che vanno e lavorano in Google, IBM o altre aziende, e lo stiamo già facendo. Un altro modo potrebbe essere quello di rispondere alle domande dei praticanti in questo forum. Speriamo che stiamo facendo un lavoro ragionevole anche in questo.
Un'area di ricerca che utilizza metodi e metodi empirici di informatica teorica è il campo chiamato "algoritmi sperimentali" o "ingegneria algoritmica". Come ha detto Chris, il calcolo ad alte prestazioni si basa fortemente su questo dato che i sistemi moderni presentano problemi di cache e latenza complessi che abbiamo difficoltà a modellare.
Gerth Brodal e Peter Sanders sono buoni esempi di ricercatori che mantengono un piede nei regni "di prova" e "empirico".
- Aggiornamento del 20/01/2013-- Vorrei anche menzionare una grande presentazione di Robert Sedgewick .
Questo dipende dalla disciplina in cui ti trovi; come afferma Jeremy, esiste uno spettro di teoria vs. pratica.
Temi come la complessità tendono ad essere ponderati dal lato della teoria, poiché spesso l'obiettivo è quello di trovare un limite per lo spazio o il tempo di esecuzione. L'implementazione di un algoritmo in C ++ e la sua esecuzione più volte non dimostrerà che un problema è NP-completo.
Come opposto polare, i computer ad alte prestazioni (con conferenze come il supercomputer ) sono tutti empirici; nessuno avrebbe mai presentato una prova a una pubblicazione HPC in quanto vi è troppa variabilità riguardo alla gerarchia di memoria e al sovraccarico del kernel.
Quindi, a quella che sembra la stessa domanda (quanto tempo ci vuole per correre?) Verranno affrontati due modi completamente diversi a seconda degli obiettivi, delle tecniche, della comunità, ecc. Vedi il capitolo di Poul-Henning Kamp che stai facendo per un esempio di la dissonanza.
Nella ricerca dei linguaggi di programmazione molte idee per nuovi costrutti del linguaggio di programmazione o nuovi meccanismi di controllo dei tipi derivano dalla teoria (forse informati dall'esperienza nella pratica, forse no). Spesso viene scritto un documento su tali meccanismi da una prospettiva formale / teorica / concettuale. È relativamente facile da fare. Segue il primo ostacolo: implementare i nuovi costrutti nel contesto di un compilatore esistente e sperimentarlo, in termini di efficienza o flessibilità. Anche questo è relativamente facile.
Ma possiamo quindi dire che il costrutto della programmazione costituisce un progresso nella scienza della programmazione? Possiamo dire che semplifica la scrittura di programmi? Possiamo dire che migliora il linguaggio di programmazione?
La risposta è no. Una risposta empirica adeguata che coinvolga decine di programmatori esperti per lunghi periodi di tempo sarebbe necessaria per rispondere a questo tipo di domande. Questa ricerca non è quasi mai stata fatta. L'unico giudice del valore di un linguaggio di programmazione (e dei suoi costrutti) è la popolarità del linguaggio. E per i puristi del linguaggio di programmazione, ciò va contro ciò che le nostre ipotesi ci dicono.
Forse mi manca la motivazione per la tua domanda, ma ci sono molti esempi di risultati empirici che motivano la ricerca, algoritmi e altri risultati.
Gli MP3 usano la psicoacustica per ottimizzare l'algoritmo per la codifica umana.
Sulla stessa linea, Bailey e Borwein sono grandi sostenitori della matematica sperimentale. Vedi "Il computer come crogiolo: un'introduzione alla matematica sperimentale" , "Escursioni computazionali nella teoria dei numeri" tra gli altri . Si potrebbe sostenere che si tratta di una matematica più sperimentale, ma direi che a questo livello la discussione la distinzione è semantica.
Le transizioni di fase dei problemi NP-Complete sono un'altra area in cui i risultati empirici sono fortemente utilizzati. Guarda Monasson, Zecchina, Kirkpatrick, Selman e Troyansky e Gent e Walsh per i principianti, anche se ce ne sono molti, molti altri (vedi qui per un breve sondaggio).
Sebbene non sia esattamente a livello di Teorica Informatica o Matematica, c'è una discussione qui su come l'utilità di unix di runtime medio di grep batte algoritmi del caso peggiore perché si basa sul fatto che sta cercando un testo leggibile dall'uomo (grep fa male o peggio su file con caratteri casuali).
Perfino Gauss ha usato prove sperimentali per dare la sua ipotesi del Teorema dei numeri primi.
Il data mining ( la soluzione di Bellkor al Premio Netflix per creare un sistema di raccomandazione migliore) potrebbe essere considerato una teoria completamente basata su prove empiriche. L'intelligenza artificiale (algoritmi genetici, reti neurali, ecc.) Si basa fortemente sulla sperimentazione. La crittografia è in costante spinta tra produttori di codice e interruttori di codice. Ne ho davvero nominati solo alcuni e se rilassi la tua definizione di empirico, allora potresti lanciare una rete ancora più ampia.
Mi scuso per essere stato così disperso nel rispondere alla tua domanda, ma spero di aver dato almeno alcuni esempi che sono utili.