Commenti
- Penso che questo dipenda in gran parte dalla persona che impara la materia e dalla persona che la insegna
Risposta
“Ci sono due problemi difficili in informatica: caching, denominazione ed errori off-by-1”
Commenti
- I
d add threading …
Answer
Onestamente, costruzione del compilatore!
Commenti
- +1 I compilatori erano i più difficili e i più gratificanti.
- Era lassù con il lavoro più importante e una buona preparazione per la codifica grugnita, ma non ' penso che sia stato così difficile. Forse più difficile senza lutilizzo di YACC o qualsiasi altro strumento che abbiamo usato, non so.
- I compilatori sono davvero difficili solo perché la maggior parte della teoria risale a tempi di vincoli hardware follemente severi e molte delle istruzioni formali non hanno ' non è andato troppo oltre. Dai unocchiata a Consenti a ' s Build A Compiler per vedere quanto può essere facile scrivere un compilatore se ti avvicini da una prospettiva diversa.
- @Martin York, come scrittore di compilatori, penso che la complessità dellimplementazione dei compilatori sia fortemente sovrastimata. In generale, un compilatore è molto più semplice di un interprete. Sospetto che ' sia un Libro dei draghi e il suo genere sia da biasimare, essi ' ripropongono i modi più complicati di fare cose semplici e pagare troppa attenzione al passaggio meno importante, ovvero lanalisi.
- @Martin York, ci sono tecniche per mantenere un AST il più semplice e gestibile possibile, non importa quanto complicato sia il linguaggio sorgente. Inoltre ci sono una serie di tecniche molto semplici ma potenti per mantenere ogni fase della compilazione banale e isolata.
Risposta
Progettazione & Analisi degli algoritmi
Penso che la domanda dipenda dallinsegnante che hai avuto e da come è stata organizzata la materia in la tua carriera.
Lanalisi degli algoritmi può essere difficile quanto qualcuno vuole. Tieni presente che ci sono problemi irrisolti, e non solo: problemi che non possono essere risolti.
Il fatto è che puoi avere un problema, e se sai che non può essere risolto, è perfetto. Ma cosa succede se non lo fai? Puoi dedicare molto tempo a provare a dimostrare che è NP-Complete, o provare a trovare una soluzione temporale polinomiale per risolverlo.
Dimostrare NP-Completness non è facile. Sì, molti problemi lo sono noto, ma il fatto è trovare le riduzioni per dimostrare che è NP-Complete. E se passassi molte ore / giorni / mesi a provare a dimostrarlo, e può essere risolto in tempo polinomiale? 🙂
Ci sono anche altri argomenti, come Compilatori , Teoria dei gruppi e Funzioni ricorsive primitive che possono essere come difficile come vuole la materia o linsegnante;)
Commenti
- s / Analisis / Analysis … altrimenti esattamente quello che penso … funzioni ricorsive primitive, uargh !!
- Daccordo, mi sono arrangiato con la laurea triennale senza essere mai sicuro di aver ' dimostrato ' qualsiasi cosa (anche se la mia lezione di algoritmi era troppo semplice, a causa del professore)
- Ti mostrerò in questi giorni quanto possono essere difficili gli algoritmi 🙂
Risposta
Riconoscimento pattern ie Intelligenza artificiale. Questo si riferisce allo smart computing insieme ad altri strumenti di riconoscimento dei pattern come il riconoscimento ottico dei caratteri, la voce in testo, lidentificazione facciale, ecc.
Molte delle cose “interessanti” che puoi fare o che vorresti fare con i computer fare affidamento su questi algoritmi e abbiamo tentato di perfezionarli per decenni senza molto successo.
Commenti
- È ' difficile perché ' non è qualcosa che ' è deterministico. Lo sviluppo di un buon riconoscimento del pattern AI richiede la sperimentazione per ogni applicazione per cui si desidera utilizzarlo, per assicurarsi di scegliere lalgoritmo giusto, le caratteristiche giuste, ecc …
- Sto appena iniziando a scalare questa montagna in particolare (riconoscimento del modello). È ' difficile. MOLTA matematica. Grandi, enormi, minacciose pile di matematica, che mi fissano, sfidandomi a entrare.
- beh … il riconoscimento dei pattern può anche essere visto come statistica applicata, ' non è solo un problema nellintervallo di CS
Risposta
La mia scelta è teoria della computabilità
(Hmm … forse non è così importante, ma sicuramente era difficile)
Commenti
- Sono daccordo e lo generalizzerei personalmente come en.wikipedia.org/wiki/Theory_of_computation .
- Sono ' daccordo sul fatto che la teoria del calcolo era difficile, ma era anche una delle mie materie preferite. Certo, frequentavo una doppia specializzazione in matematica. ..
- +1 Anchio ho conseguito la doppia laurea. Potrei occuparmi di unintroduzione a questa roba, ma la versione per laureati … felice di averla lasciata!
- è stata dura, non ne sappiamo così tanto da non ' molto.
Risposta
Ci sono solo due difficili problemi in Informatica: invalidazione della cache e denominazione delle cose. – Phil Karlton
Risposta
teoria delle categorie (matematica discreta), ma ne vale la pena
Commenti
- Quali vantaggi specifici hai ottenuto dalla categoria di apprendimento teoria?
- @zvrba: una comprensione più profonda delle tecniche di astrazione e della mappatura dei problemi
- Da dove lhai imparato?
- @zvrba: I don ' Per vedere il libro sulla mia libreria, ' è probabilmente ancora in deposito (rimodellamento) ma penso che fosse questo libro amazon.com/Category-Computer-Scientists-Foundations-Computing/…
Risposta
Crittografia
Se lo fai in modo leggermente sbagliato, potrebbe costare a unazienda milioni.
Commenti
- Sebbene sempre più popolare, Cryp non è ' t unico per il software.
- Crypto non è ' così difficile. Il problema è che la sicurezza non può ' essere testata facilmente, quindi noti i tuoi errori solo quando qualcuno ti hackera. Ma la mancanza di testabilità si applica alla maggior parte delle forme di sicurezza IT, non solo alle criptovalute.
Answer
Sistemi operativi, soprattutto la parte che ha qualcosa a che fare con il threading.
E il motivo non è perché era così difficile far mangiare la pizza a 5 filosofi con una forchetta. Il motivo è perché scrivere codice multithread è dentro e è difficile e non necessariamente facile da calcolare per la mente umana (almeno maschile – secondo mia moglie).
Commenti
- Lascia che tua moglie scriva il codice multithread quindi 🙂
- Ricorda, quando si tratta di multithreading a memoria condivisa, il computer è un subdolo porco che vuole prenderti. Il doppio è quando si tratta di un processore multicore; un core può essere distraendoti davanti ai tuoi occhi dove ' stai guardando, e laltro può andare dietro di te e pugnalarti alla schiena.
Risposta
Anchio voto per Progettazione del compilatore. Soprattutto quando entra in gioco la parte DFA e NFA. Inoltre, non sono così chiaro sui problemi NP e altro.
Commenti
- Sì, io ' avrei avuto più difficoltà con i compilatori se ' non avessi preso prima la Teoria del calcolo.
- DFA e NFA sono mangimi per polli. Aspetta di dover eseguire lanalisi LALR (1).
Rispondi
Teoria delle code
Tecnicamente, questa è una branca della matematica, ma è molto rilevante in CS.
Quasi tutto in CS è basato su code (visibili (ovvie) e invisibili (non così ovvie o implicite)).
Nei primi giorni di CS le code erano ovvie.
Una coda di programmi (ogni programma un mazzo di carte).
Oggigiorno le code non sono così ovvie. Internet, ad esempio: una rete a commutazione di pacchetto, ma i pacchetti formano code e linstradamento dei pacchetti è una forma di minimizzazione delle code.
Commenti
- Ehi ! (?Sei un (programmatore Lisp)
- Non (tanto quanto (Si potrebbe (vedere), Ma (È (noto)). Accadere)).
Risposta
Analisi numerica
Non è troppo difficile per i problemi con i giocattoli che ti vengono dati nel corso, ma una volta che inizi a considerare i problemi reali, si trasforma in un duro lavoro.
Rispondi
Interpretare i requisiti del cliente quando il cliente non sa veramente cosa vuole. Questo non viene insegnato al college ed è una delle abilità più essenziali da avere.
Commenti
- Non ' non sono sicuro di essere daccordo con questo in quanto concetto di informatica. Anchio don ' t vedere come può essere risolto utilizzando il metodo scientifico.
- @ jmort253 – Questo è vero, ma linformatica tenta (senza successo secondo me) di indagare questo campo con metodi formali di progettazione ne convalida.
- Sono daccordo non è un concetto di " informatica ", ma quando ho iniziato la mia carriera Non ero consapevole / ignaro del fatto che i clienti non ' sapessero cosa vogliono. Pensavo che TUTTI i progetti software avessero una sorta di documento sui requisiti formali. Forse un argomento di lezione per un corso di ingegneria del software (forse il mio college non ' lo ha trattato)?
Risposta
Personalmente, la mia era logica formale. È stato difficile iniziare, ma una volta che hai appreso le regole e riesci a giocarci abbastanza, il tuo cervello va Logic++;
, che in fase di sviluppo è unottima cosa.
Come nota a margine, rispondo direttamente alla domanda: questa non era sicuramente la materia più difficile quando mi sono laureata, ma probabilmente era la materia più difficile “applicabile nella vita reale”.
Commenti
- La logica formale è qualcosa con cui ho avuto un rapporto di amore / odio. Mi piaceva riflettere sui concetti, ma non riuscivo mai a capire come mi stesse aiutando fino a più tardi, quando ho incontrato problemi del mondo reale che richiedevano il pensiero logico.
- @ jmort253 – Per me è stato lo stesso. Ho anche lottato al punto di pensare che ' avrei fallito, studiato così a lungo e duramente fino a quando finalmente cliccato nella mia testa. Dopo di che, i vantaggi sono stati sorprendenti.
Answer
Costruzioni del compilatore. Difficile ma è necessario comprendere i concetti alla base
Commenti
- Dovresti dare un voto positivo per la stessa risposta che è stata fornita prima di te, piuttosto che dando di nuovo la stessa risposta.
Risposta
Kernel Qualcuno vuole progettare ? Beh, non so davvero come sia fatto e quali siano le caratteristiche mirate per un sistema operativo, ma per me pensare di progettare un kernel deve essere un compito arduo.
Penso anche a sicurezza informatica ; Non so veramente cosa renda un sistema insicuro tranne, ovviamente, ovvi buffer overflow, XSS e SQL injection.
Non ne sono sicuro, ma sembra che anche alcuni algoritmi non siano sicuri; guarda il progetto MetaSploit, elenca tutti i tipi e i tipi di violazioni della sicurezza: puoi vedere che ci sono molti modi in cui un programma può essere difettoso.
Risposta
Ci sono molti argomenti imbarazzanti nel campo, ma le mie scelte per la difficoltà persistente sono quelle che coinvolgono Proprietà del sistema globale . Esempi di questo argomento generale includono:
- Multi-threading sicuro e senza deadlock
- Sicurezza
Questi sono difficili perché tu ” stai cercando qualcosa che esiste solo quando tutto è corretto; hai bisogno di una proprietà di sistema globale e tuttavia virtualmente tutti gli strumenti disponibili (e tutti quelli che si adattano ai problemi reali nella mia esperienza) fanno solo ragionamento locale . È il processo di passare dal ragionamento sui pezzi del programma allintera faccenda che è difficile, soprattutto perché è del tutto possibile avere pezzi che sono tutti corretti in se stessi ma dove ci sono ancora piccoli bug perché il i componenti non sono disposti correttamente; i bug possono essere caratteristiche emergenti indesiderabili …
Risposta
Servizi di gestione delle informazioni Durante il periodo universitario avevo una materia di gestione ogni semestre che mi faceva impazzire totalmente.
Duro! bene argomenti come Compiler Design , OS Design ecc. sono difficili ma sono davvero interessanti e stimolanti.Ho davvero incasinato argomenti come il sistema informativo gestionale / servizi, ecc. Perché sono pieni di noia e devi passare attraverso un sacco di teoria.
Commenti
- Pieni di noia perché ' stanno parlando delle complessità concettuali di ogni sistema, mentre la metà delle persone non ha mai scritto alcun sistema (ma sicuramente ne usavano una varietà). Inoltre, i seminari usano così tante parole caricate ma non riescono a fornire un esempio di vita reale in un inglese semplice. Come i sistemi di supporto decisionale … non è possibile ' inserire solo alcuni screenshot dei rapporti di Google Analytics, FML, solo per portare gli studenti sulla stessa pagina prima di scappare con un intellettuale orgasmo di fronte al pubblico.
Risposta
Se lavori in C / C ++, i puntatori sono i più concetto importante da sapere. Ma in qualche modo non lho mai capito appieno al college.
Commenti
- davvero? Voglio dire, ogni persona è diversa, ma penso che ci siano molti (voglio dire, molti ) di argomenti più difficili dei semplici suggerimenti . Ad esempio, Computer ' s Architecture , Assambler che in qualche modo sono correlate a puntatori ; )
- Vero, ma ' troverai molto più facile capire i riferimenti alla memoria tramite gli assemblatori, perché in realtà lavori con puntatori grezzi , mentre in C / C ++ si lavora con i riferimenti ai puntatori, che confonde a morte le persone perché lastrazione non è mai discussa apertamente.
- Ah assambler, il miglior programmatore ' s tea
- Il ragazzo ha chiesto gli argomenti che sono difficili ma importanti, quindi dei suggerimenti.
- @ Matt: Mi hai appena reso la giornata: D @Manoj R: I puntatori sono banali se li consideri solo come un accesso agli array. O laccesso agli array è difficile?
Risposta
Progettazione e analisi di algoritmi. Non è tanto difficile capire e analizzare algoritmi noti , è che progettare e analizzare nuovi algoritmi per problemi difficili è difficile e richiede unampia comprensione di molte aree e pratica nellapplicazione di molte tecniche diverse.
Risposta
Programmazione con vincoli. che si occupa di problemi combinatori, problemi NP-complete.
Risposta
Ottimizzazione di Lalgoritmo è un argomento impegnativo.
Risposta
Qual è la teoria / materia di informatica più difficile che hai studiato ma importante per il campo?
Matematica discreta.
Era difficile perché le teorie sono molto vagamente correlate luna allaltra ma “vengono utilizzate in CS. Troppa memorizzazione immagino …
Dimostrazione per induzione, Big O, ricorsione, divisione e conqura, teoria dei grafi, blah blah .. argh!
Il compilatore per me è stato facile, perché dovevamo prendere la teoria degli automi. ^^
Risposta
Notazione Z / metodi formali usati per ferire il mio cervello al college. Principalmente perché lo odiavo. Difficile è molto più facile quando ti piace quello che stai facendo e molto più difficile quando non lo fai.
Risposta
Mi piacciono le tue risposte (e non ho dimenticato di votarle), come compilatore, kernel, ecc. ma la maggior parte dei programmatori non ha mai incontrato questi problemi. Cè un problema un po più semplice, ma più comune: concorrenza – thread, blocco. È molto facile scrivere un programma che produca errori magici, se facciamo anche un piccolo bug nellarchitettura della concorrenza.
Quindi, dico, non è il problema più difficile nellinformatica, ma perché è comunemente usato, è pericoloso.
Risposta
Programmazione orientata agli oggetti
Probabilmente è perché mi sono fatto le ossa con FORTRAN e APL, ma il passaggio dai linguaggi strettamente procedurali agli oggetti è stato qualcosa che ho “con cui ho lottato per anni. Non aiuta i cosiddetti “esperti” a scrivere articoli ed esercitazioni contrastanti su cosa significhi essere orientati agli oggetti e sui modi migliori / appropriati di costruire programmi orientati agli oggetti.