Materia / teoria più difficile in Informatica? [chiuso]


17

Qual è la materia / teoria CS più difficile che hai studiato ma importante per il campo? E il motivo per favore?


3
Penso che ciò dipenda in gran parte dalla persona che impara la materia e dalla persona che la insegna
Mahmoud Hossam

Risposte:


37

"Ci sono 2 problemi gravi nell'informatica: memorizzazione nella cache, denominazione ed errori off-by-1"


4
Aggiungerei il threading ...
Carra,

35

Onestamente, costruzione del compilatore!


13
I compilatori +1 sono stati i più difficili e i più gratificanti.
dietbuddha,

3
Era lassù con il più di tutto il lavoro e una buona preparazione per la codifica grugnita, ma non credo che sia stato così difficile. Forse più difficile senza l'uso di YACC o qualunque altro strumento abbiamo usato, non lo so.
Peter Turner,

4
I compilatori sono davvero difficili solo perché la maggior parte della teoria risale a tempi di vincoli hardware follemente gravi e molte delle istruzioni formali non sono andate molto oltre. Dai un'occhiata a Let's Build A Compiler per vedere come può essere semplice scrivere un compilatore se ti avvicini da una prospettiva diversa.
Mason Wheeler,

1
@Martin York, come scrittore di compilatori, penso che la complessità dell'implementazione dei compilatori sia gravemente sopravvalutata. In generale, un compilatore è molto più semplice di un interprete. Ho il sospetto che sia un Libro dei draghi e la sua specie è da incolpare, stanno proponendo i modi più complicati di fare cose semplici e prestando troppa attenzione al passaggio meno importante, vale a dire l'analisi.
SK-logic

1
@Martin York, ci sono tecniche per mantenere un AST il più semplice e gestibile possibile, non importa quanto sia complicata la lingua di origine. Inoltre, esistono numerose tecniche molto semplici ma potenti per mantenere banale e isolata ogni fase della compilazione.
Logica SK

22

Progettazione e analisi di algoritmi

Penso che questa domanda dipenda dall'insegnante che hai avuto e da come quella materia è stata organizzata nella tua carriera.

Analizzare gli algoritmi può essere difficile come qualcuno vuole. Tieni conto 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. E se non lo facessi? Puoi dedicare molto tempo a provare che è NP-Complete o a cercare una soluzione di tempo polinomiale per risolverlo.

Dimostrare NP-completezza non è facile. Sì, sono noti molti problemi, ma il punto è trovare le riduzioni per dimostrare che è NP-Complete. E cosa succede se passi molte ore / giorni / mesi a provare a dimostrarlo e può essere risolto in tempo polinomiale? :)

Ci sono anche altre materie, come i compilatori , la teoria dei gruppi e le funzioni ricorsive primitive che possono essere difficili come il piano tematico o l'insegnante vuole;)


1
s / Analisi / Analisi ... altrimenti esattamente quello che penso ... funzioni ricorsive primitive, uargh !!
Felix Dombek,

D'accordo, ho confuso con il mio diploma di laurea senza mai essere sicuro di aver mai "provato" qualcosa con successo (anche se la mia lezione di algoritmi era troppo semplice, a causa del professore)
Peter Turner,

In questi giorni ti mostrerò quanto possono essere difficili gli algoritmi :)
Oscar Mederos,

18

Riconoscimento del modello, ovvero intelligenza artificiale. Questo si riferisce al calcolo intelligente insieme ad altri strumenti di riconoscimento dei modelli come il riconoscimento ottico dei caratteri, la voce al testo, l'identificazione facciale, ecc.

Molte delle cose "belle" che puoi fare o che desideri che tu possa fare con i computer si basano su questi algoritmi e abbiamo tentato di perfezionarle per decenni senza molto successo.


È difficile perché non è qualcosa che è deterministico. Lo sviluppo di un buon riconoscimento del pattern AI richiede la sperimentazione per ogni applicazione per la quale si desidera utilizzarlo, per assicurarsi di scegliere l'algoritmo giusto, le funzionalità giuste, ecc ...
Ken Bloom,

1
Sto solo cominciando a scalare questa particolare montagna (riconoscimento del modello). È difficile. MOLTA matematica. Mucchi di matematica grandi, enormi e intimidatori, che mi fissavano, sfidandomi ad entrare.
David Poole,

beh ... la registrazione dei modelli può anche essere vista come una statistica applicata, non è solo un problema nel raggio di CS
aggietech

12

La mia scelta è la teoria della calcolabilità

(Hmm ... forse non è così importante, ma sicuramente è stato difficile)


2
Sono d'accordo e lo generalizzerei personalmente come en.wikipedia.org/wiki/Theory_of_computation .
Matt H

Concordo sul fatto che la teoria del calcolo era difficile, ma era anche una delle mie materie preferite. Certo, ero in doppia specializzazione in matematica ...
Poindexter,

+1 Anche io ho il doppio titolo. Potrei gestire un'introduzione a questa roba, ma la versione laureata ... felice di averla lasciata cadere!
Lavoro

è stato difficile, non ne sappiamo così tanto che non importa molto.
Visualizza nome

10

Ci sono solo due problemi gravi in ​​Informatica: invalidazione della cache e denominazione delle cose. - Phil Karlton


7

teoria delle categorie (matematica discreta), ma ne vale la pena


Quali benefici specifici hai tratto dall'apprendimento della teoria delle categorie?
zvrba,

@zvrba: una comprensione più profonda delle tecniche di astrazione e mappatura dei problemi
Steven A. Lowe,

Da dove l'hai imparato?
zvrba,

@zvrba: Non vedo il libro sulla mia libreria, probabilmente è ancora in archivio (rimodellamento) ma penso che fosse questo libro amazon.com/Category-Computer-Scientists-Foundations-Computing/…
Steven A. Lowe

6

Crittografia

Se lo fai in modo leggermente sbagliato, potrebbe costare milioni di aziende.


Sebbene sempre più popolare, Crypto non è unico per il software.
JBR Wilkinson,

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 alla crittografia.
CodesInChaos,

4

Sistemi operativi, in particolare la parte che ha a che fare con il threading.

E il motivo non è perché è stato così difficile fare in modo che 5 filosofi mangiassero la pizza con una forchetta. Il motivo è perché scrivere codice multithread è di per sé difficile e non necessariamente facile da calcolare per la mente umana (almeno maschio - secondo mia moglie).


9
Lascia che tua moglie scriva il codice multithread quindi :)

3
Ricorda, quando si tratta di multithreading a memoria condivisa, il computer è un suino subdolo che è fuori per prenderti. Doppiamente quando si ha a che fare con un processore multicore; un nucleo può distrarti davanti ai tuoi occhi dove stai guardando, e l'altro può quindi andare dietro di te e pugnalarti alla schiena.
Donal Fellows

3

Anche io voto per Compiler Design. Soprattutto dove arrivano le parti DFA e NFA. Non sono anche così chiaro sui problemi e le cose NP.


Sì, avrei avuto dei momenti difficili con i compilatori se non avessi preso prima Teoria del calcolo.
Peter Turner,

DFA e NFA sono mangimi per polli. Attendere fino a quando non è necessario eseguire l'analisi LALR (1).
David Thornley,

3

Teoria delle code

Bene tecnicamente questo è un ramo della matematica, ma è molto rilevante in CS.

Quasi tutto in CS si basa su code (visibile (ovvio) e invisibile (non così ovvio o implicito)).

All'inizio di CS le code erano ovvie.
Una coda di programmi (ogni programma un mazzo di carte).

Oggi le code non sono così ovvie. Internet ad esempio: una rete a commutazione di pacchetto, ma i pacchetti formano le code e il routing dei pacchetti è una forma di minimizzazione della coda.


Hey! (? Sei un (programmatore Lisp)
Segna C

Non (tanto quanto (Uno potrebbe (vedere), ma (è (stato conosciuto)). Accadere)).
Martin York,

3

Analisi numerica

Non è troppo difficile sui problemi del giocattolo che ti vengono dati nel corso, ma una volta che inizi a considerare problemi reali si trasforma in un duro lavoro.


2

Interpretazione dei requisiti del cliente quando il cliente non sa davvero cosa vuole. Questo non viene insegnato al college ed è una delle abilità più essenziali da avere.


1
Non sono sicuro di essere d'accordo con questo come concetto di informatica. Inoltre non vedo come possa essere risolto usando il metodo scientifico.
jmort253,

@ jmort253 - Questo è vero, ma l'informatica cerca (secondo me senza successo) di investigare questo campo con metodi formali di progettazione e validazione.
mouviciel,

Sono d'accordo non è un concetto di "informatica", ma quando ho iniziato la mia carriera ero inconsapevole / ignaro del fatto che i clienti non sapessero quello che volevano. Pensavo che TUTTI i progetti software avessero una sorta di documento formale sui requisiti. Forse un argomento di lezione per un corso di ingegneria del software (forse il mio college non lo ha coperto)?
Steven Striga,

1

Personalmente, la mia era Logica formale. Iniziare è stato difficile, ma una volta che abbassi le regole e riesci a giocarci abbastanza, il tuo cervello va Logic++;, il che in fase di sviluppo è un'ottima cosa.

Come nota a margine, sto rispondendo direttamente alla domanda - questo non era sicuramente l'argomento più difficile quando ho conseguito la laurea, ma era probabilmente l'argomento più "applicabile nella vita reale".


La logica formale è qualcosa con cui ho avuto una relazione amore / odio. Mi piaceva pensare attraverso i concetti, ma non riuscivo mai a capire come mi avrebbe aiutato fino a tardi, quando ho incontrato problemi del mondo reale che richiedevano il pensiero logico.
jmort253,

@ jmort253 - Per me è stato lo stesso. Ho persino lottato fino al punto di pensare che avrei fallito, ho studiato così a lungo e duramente fino a quando finalmente mi è scattato in testa. Successivamente, i benefici sono stati sorprendenti.
Kyle Rozendo,

1

Costruzioni del compilatore. Difficile ma deve capire i concetti alla base


5
Dovresti dare un voto positivo per la stessa risposta che ti è stata fornita, piuttosto che dare di nuovo la stessa risposta.
Abimaran Kugathasan,

1

Kernel Design qualcuno? Beh, non so davvero come sia fatto e quali siano le funzionalità di destinazione di un sistema operativo, ma per me pensare di progettare un kernel deve essere un compito scoraggiante.

Penso anche alla sicurezza informatica ; Non so davvero cosa renda pericoloso un sistema, tranne ovviamente ovvi overflow del buffer, iniezioni di XSS e SQL.

Non ne sono sicuro, ma sembra che alcuni algoritmi non siano sicuri; guarda il progetto MetaSploit, elenca tutti i tipi e tipi di violazioni della sicurezza: puoi vedere che ci sono molti modi in cui un programma può essere imperfetto.


1

Ci sono molti argomenti imbarazzanti nel campo, ma le mie scelte per pura e persistente difficoltà sono quelle che riguardano le proprietà del sistema globale . Esempi di questo argomento generale includono:

  • Multithreading sicuro e senza deadlock
  • Sicurezza

Questi sono difficili perché stai cercando qualcosa che esiste solo quando tutto è corretto; hai bisogno di una proprietà di sistema globale e tuttavia praticamente tutti gli strumenti disponibili (e tutti quelli che si adattano a problemi reali nella mia esperienza) fanno davvero solo ragionamenti locali. È difficile passare dal ragionamento sui brani del programma all'intero shebang, in particolare perché è del tutto possibile avere pezzi che sono tutti corretti in se stessi ma dove ci sono ancora bug sottili perché i componenti sono disposti in modo errato; i bug possono essere caratteristiche emergenti indesiderabili ...


0

Servizi informativi sulla gestione Durante il mio periodo universitario, ogni semestre avevo una materia di gestione che mi rendeva totalmente pazzo.
Difficile! bene argomenti come Compiler Design , OS Design ecc. sono difficili ma sono davvero interessanti e stimolanti. Ho davvero incasinato argomenti come il Sistema informativo / servizi di gestione ecc. Poiché sono pieni di noia e devi passare attraverso molta teoria.


2
Pieni di noia perché parlano delle complessità concettuali di ciascun sistema, mentre la metà delle persone non ha mai scritto alcun sistema (ma ne ha sicuramente usato 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 alle decisioni ... non potresti semplicemente rilasciare alcuni screenshot dei rapporti di Google Analytics, FML, solo per portare gli studenti sulla stessa pagina prima di scappare con un orgasmo intellettuale di fronte al pubblico.
Filip Dupanović,

0

Se stai lavorando in C / C ++, i puntatori sono il concetto più importante da sapere. Ma in qualche modo non l'ho mai capito completamente al college.


12
veramente? Voglio dire, ogni persona è diversa, ma penso che ci siano molti (voglio dire, molti ) argomenti più difficili dei semplici puntatori . Ad esempio, Computer's Architecture , Assambler che in qualche modo sono legati ai puntatori ;)
Oscar Mederos

È vero, ma troverai la comprensione del riferimento di memoria attraverso gli assemblatori molto più semplice, perché in realtà lavori con puntatori grezzi , mentre in C / C ++ stai lavorando con riferimenti a puntatori, che confondono semplicemente l'inferno delle persone perché l'astrazione non è mai parlata apertamente di.
Filip Dupanović,

2
Ah assambler, il miglior tè del programmatore
Matt Ellen,

Il ragazzo ha chiesto agli argomenti che sono difficili ma importanti, quindi suggerimenti.
Manoj R,

@Matt: Mi hai appena reso felice: D @Manoj R: I puntatori sono banali se li consideri semplicemente come un array. O l'accesso all'array è difficile?
back2dos

0

Progettazione e analisi di algoritmi. Non è tanto difficile da capire e analizzare algoritmi noti , è che progettare e analizzare nuovi algoritmi per problemi difficili è difficile e richiede un'ampia comprensione di molte aree e pratiche nell'applicazione di molte tecniche diverse.


0

Programmazione dei vincoli. che si occupa di problemi combinatori, problemi NP-completi.


0

L'ottimizzazione dell'algoritmo è un argomento impegnativo.


0

Qual è la materia / teoria CS più difficile che hai studiato ma importante per il campo?

Matematica discreta.

È stato difficile perché le teorie sono molto vagamente correlate tra loro ma vengono utilizzate in CS. Troppa memorizzazione credo ...

Prova di Induction, Big O, ricorsione, divisione e conqure, Graph Theory, blah blah .. argh!

Il compilatore per me è stato facile, perché abbiamo dovuto prendere la teoria degli automi. ^^


0

Notazione z / metodi formali usati per ferire il mio cervello al college. Principalmente perché l'ho odiato. Difficile è molto più facile quando ti piace quello che stai facendo e molto più difficile quando non lo fai.


0

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 si commette anche un piccolo bug nell'architettura di concorrenza.

Quindi, dico, non è il problema più difficile nell'informatica, ma poiché è comunemente usato, è pericoloso.


0

Programmazione orientata agli oggetti

Probabilmente è perché mi sono tagliato i denti su FORTRAN e APL, ma il passaggio da linguaggi strettamente procedurali a oggetti è stato qualcosa 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 / adeguati per costruire programmi orientati agli oggetti.

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.