it-swarm.it

Materia / teoria più difficile in Informatica?

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

17

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

37
Brian Carlton

Onestamente, costruzione del compilatore!

35
Pemdas

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 a dimostrare che NP è completo o a cercare una soluzione temporale 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 compilatori, teoria dei gruppi e funzioni ricorsive primitive che possono essere difficili come il piano tematico o l'insegnante vuole; )

22
Oscar Mederos

Pattern Recognition ovvero Intelligenza artificiale. Questo si riferisce al calcolo intelligente insieme ad altri strumenti di riconoscimento dei modelli come, Riconoscimento ottico dei caratteri, Voice to text, 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.

18
Malfist

La mia scelta è teoria della calcolabilità

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

12
Maglob

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

10
Gareth

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

7
Steven A. Lowe

Cryptography

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

6
davidhaskins

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

E la ragione 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).

4
Peter Turner

Analisi numerica

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

3
Peter Taylor

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).

Al giorno d'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.

3
Martin York

Anche io voto per Compiler Design. Soprattutto quando arrivano le parti DFA e NFA. Non sono nemmeno così chiaro riguardo a NP problemi e cose del genere.

3
Yuva

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.

2
Steven Striga

Ci sono molti argomenti imbarazzanti nel campo, ma le mie scelte per pura e persistente difficoltà sono quelle che coinvolgono Proprietà globali del sistema. 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 scalano a problemi reali nella mia esperienza) fanno davvero solo ragionamenti locali . È difficile passare dal ragionamento sui pezzi del programma all'intero Shebang, soprattutto perché è 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 ...

1
Donal Fellows

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

1
Nipuna

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 a sicurezza informatica; Non so davvero cosa renda un sistema pericoloso, 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
jokoon

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++;, 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".

1
Kyle Rozendo

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 molti diversi tecniche.

0
philosodad

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, anche se facciamo un piccolo bug nell'architettura della concorrenza.

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

0
ern0

L'ottimizzazione dell'algoritmo è un argomento impegnativo.

0
Rachel

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 ti piace.

0
Ian

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, teoria dei grafi, blah blah .. argh!

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

0

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

0
Sorantis

Management Information Services Durante il mio periodo universitario avevo una materia di gestione ogni semestre che mi ha fatto impazzire totalmente.
Difficile! bene argomenti come Compiler Design, OS Design etc 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 affrontare molte teorie.

0
Ranger

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.

0
Manoj R

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.

0
oosterwal