Schwerstes Fach / Theorie in der Informatik? [geschlossen]


17

Welches ist das schwierigste CS-Fach / die schwierigste Theorie, die Sie studiert haben, aber für das Fach wichtig? Und der Grund bitte?


3
Ich denke, dies hängt in hohem Maße von der Person ab, die das Fach lernt, und von der Person, die es unterrichtet
Mahmoud Hossam,

Antworten:


37

„In der Informatik gibt es zwei schwierige Probleme: Caching, Benennung und 1-malige Fehler.“


4
Ich würde Threading hinzufügen ...
Carra

35

Ehrlich gesagt, Compilerbau!


13
+1 Compiler waren die schwierigsten und lohnendsten.
Dietbuddha

3
Es war dort oben mit der allermeisten Arbeit und einer guten Vorbereitung für die Grunz-Programmierung, aber ich glaube nicht, dass es allzu schwierig war. Vielleicht schwieriger ohne die Verwendung von YACC oder irgendwelchen Tools, die wir verwendet haben, keine Ahnung.
Peter Turner

4
Compiler sind wirklich nur schwierig, weil die meisten Theorien auf Zeiten extrem schwerwiegender Hardwareeinschränkungen zurückgehen und ein Großteil der formalen Anweisungen noch nicht allzu weit fortgeschritten ist. Schauen Sie sich Let's Build A Compiler an, um zu sehen, wie einfach das Schreiben von Compilern sein kann, wenn Sie es aus einem anderen Blickwinkel betrachten.
Mason Wheeler

1
@Martin York, als Compiler-Autor denke ich, dass die Komplexität der Implementierung von Compilern stark überschätzt wird. Im Allgemeinen ist ein Compiler viel einfacher als ein Interpreter. Ich vermute, es ist ein Drachenbuch, und die Schuld liegt bei seiner Art. Sie schlagen die kompliziertesten Wege vor, einfache Dinge zu tun und dem am wenigsten wichtigen Schritt, nämlich dem Parsen, zu viel Aufmerksamkeit zu schenken.
SK-logic

1
@Martin York, es gibt Techniken, um einen AST so einfach und wartbar wie möglich zu halten, egal wie kompliziert die Ausgangssprache ist. Es gibt auch eine Reihe sehr einfacher, aber leistungsstarker Techniken, um jede Stufe der Kompilierung trivial und isoliert zu halten.
SK-logic

22

Entwurf und Analyse von Algorithmen

Ich denke, diese Frage hängt von dem Lehrer ab, den Sie hatten, und wie dieses Fach in Ihrer Karriere organisiert war.

Das Analysieren von Algorithmen kann so schwierig sein, wie es jemand möchte. Berücksichtigen Sie, dass es ungelöste Probleme gibt, und nicht nur das: Probleme, die nicht gelöst werden können.

Die Sache ist, dass Sie ein Problem haben können, und wenn Sie wissen, dass es nicht gelöst werden kann, ist das perfekt. Aber was ist, wenn du es nicht tust? Sie können viel Zeit damit verbringen, zu zeigen, dass es sich um NP-Complete handelt, oder versuchen, eine polynomielle Zeitlösung zu finden, um es zu lösen.

NP-Vollständigkeit nachzuweisen ist nicht einfach. Ja, viele Probleme sind bekannt, aber es geht darum, die Reduzierungen zu finden, um zu beweisen, dass es sich um NP-Complete handelt. Und was ist, wenn Sie viele Stunden / Tage / Monate damit verbringen, es zu demonstrieren, und es in polynomieller Zeit gelöst werden kann? :)

Es gibt auch andere Fächer wie Compiler , Gruppentheorie und primitive rekursive Funktionen , die so schwierig sein können, wie es der Fachplan oder der Lehrer wünscht;)


1
s / Analisis / Analysis ... ansonsten genau das, was ich denke ... primitive rekursive Funktionen, uargh !!
Felix Dombek

Ich stimmte zu, dass ich während meines Bachelor-Studiums nie zuversichtlich war, irgendetwas jemals erfolgreich "bewiesen" zu haben (obwohl mein Algorithmus-Kurs aufgrund des Professors viel zu einfach war)
Peter Turner,

Ich werde Ihnen in diesen Tagen zeigen, wie schwer Algorithmen sein können :)
Oscar Mederos

18

Mustererkennung, dh künstliche Intelligenz. Dies bezieht sich auf Smart Computing zusammen mit anderen Werkzeugen zur Mustererkennung wie der optischen Zeichenerkennung, der Spracherkennung, der Gesichtserkennung usw.

Viele der "coolen" Dinge, die Sie mit Computern tun können oder möchten, beruhen auf diesen Algorithmen, und wir haben jahrzehntelang versucht, sie zu perfektionieren, ohne großen Erfolg.


Es ist schwer, weil es nicht deterministisch ist. Die Entwicklung einer guten KI-Mustererkennung erfordert Experimente für jede Anwendung, für die Sie sie verwenden möchten, um sicherzustellen, dass Sie den richtigen Algorithmus, die richtigen Funktionen usw. auswählen.
Ken Bloom

1
Ich fange gerade an, diesen bestimmten Berg zu besteigen (Mustererkennung). Es ist schwer. VIEL Mathe. Großartige, riesige, einschüchternde Haufen Mathe, die mich anstarrten und mich aufforderten einzutreten.
David Poole

naja ... pattern recog kann auch als angewandte statistik angesehen werden, es ist nicht nur ein problem im
bereich

12

Meine Wahl ist die Berechenbarkeitstheorie

(Hmm ... vielleicht ist es nicht so wichtig, aber es war sicher schwierig)


2
Ich bin damit einverstanden und würde es persönlich als en.wikipedia.org/wiki/Theory_of_computation verallgemeinern .
Matt H

Ich stimme zu, dass die Berechnungstheorie schwierig war, aber es war auch eines meiner Lieblingsfächer. Zugegeben, ich hatte zwei Hauptfächer in Mathematik ...
Poindexter

+1 Ich habe auch ein Doppel-Hauptfach belegt. Ich könnte ein Intro für dieses Zeug machen, aber die Abschlussversion ... froh, dass ich es fallen gelassen habe!
Job

es war schwer, nicht wir wissen so viel darüber, dass es nicht viel ausmacht.
Anzeigename

10

In der Informatik gibt es nur zwei schwierige Probleme: die Ungültigmachung des Cache und die Benennung von Dingen. - Phil Karlton


7

Kategorietheorie (diskrete Mathematik), aber es lohnt sich


Welche spezifischen Vorteile hat Ihnen das Erlernen der Kategorietheorie gebracht?
zvrba

@zvrba: ein tieferes Verständnis für Abstraktionstechniken und Problem Mapping
Steven A. Lowe

Woher hast du es gelernt?
zvrba

@zvrba: Ich sehe das Buch nicht in meinem Bücherregal, es befindet sich wahrscheinlich noch im Lager (Umbau), aber ich denke, es war dieses Buch amazon.com/Category-Computer-Scientists-Foundations-Computing/…
Steven A. Lowe

6

Kryptographie

Wenn Sie es nur leicht falsch machen, kann es eine Firma Millionen kosten.


Obwohl Crypto immer beliebter wird, ist es nicht nur Software.
JBRWilkinson

Krypto ist nicht so schwer. Das Problem ist, dass die Sicherheit nicht einfach getestet werden kann, sodass Sie Ihre Fehler nur bemerken, wenn Sie von jemandem gehackt werden. Die mangelnde Testbarkeit betrifft jedoch die meisten Formen der IT-Sicherheit, nicht nur die Kryptografie.
CodesInChaos

4

Betriebssysteme, insbesondere der Teil, der mit Threading zu tun hat.

Und der Grund ist nicht, dass es so schwer war, 5 Philosophen dazu zu bringen, Pizza mit einer Gabel zu essen. Der Grund dafür ist, dass das Schreiben von Multithread-Code an sich schwierig und für den menschlichen (zumindest männlichen - meiner Frau zufolge) Verstand nicht unbedingt einfach zu berechnen ist.


9
Lassen Sie Ihre Frau dann den Multithread-Code schreiben :)

3
Denken Sie daran, wenn es um Shared-Memory-Multithreading geht, ist der Computer ein hinterhältiger Trottel, der Sie in den Bann ziehen will. Doppelt so, wenn es sich um einen Multicore-Prozessor handelt; Ein Kern kann dich vor deinen Augen ablenken, wo du hinschaust, und der andere kann dann hinter dich gehen und dich in den Rücken stechen.
Donal Fellows

3

Ich stimme auch für Compiler Design. Vor allem, wenn der DFA- und der NFA-Teil hinzukommen. Ich bin mir auch nicht so klar über NP-Probleme und so.


Ja, ich hätte es mit Compilern schwerer gehabt, wenn ich nicht zuerst Theory of Computation genommen hätte.
Peter Turner

DFAs und NFAs sind Hühnerfutter. Warten Sie, bis Sie LALR (1) -Parsing durchführen müssen.
David Thornley

3

Warteschlangentheorie

Nun, technisch gesehen ist dies ein Zweig der Mathematik, aber in CS von hoher Relevanz.

Fast alles in CS basiert auf Warteschlangen (sichtbar (offensichtlich) und unsichtbar (nicht so offensichtlich oder impliziert)).

In den frühen Tagen von CS waren die Warteschlangen offensichtlich.
Eine Reihe von Programmen (jedes Programm ein Kartenspiel).

Heutzutage sind die Warteschlangen nicht so offensichtlich. Das Internet zum Beispiel: Ein paketvermitteltes Netzwerk, aber die Pakete bilden Warteschlangen, und das Weiterleiten der Pakete ist eine Form der Warteschlangenminimierung.


Hallo! (? Sind Sie ein (Lisp-Programmierer)
Mark C

Nicht (so viel wie (man konnte (sehen), aber (es war (bekannt)). Um zu geschehen)).
Martin York

3

Numerische Analyse

Es ist nicht allzu schwer, welche Probleme mit dem Spielzeug im Kurs auftreten, aber sobald Sie anfangen, über echte Probleme nachzudenken, wird es zu einer schweren Plackerei.


2

Interpretieren von Kundenanforderungen, wenn der Kunde nicht genau weiß, was er möchte. Dies wird nicht im College unterrichtet und ist eine der wichtigsten Fähigkeiten, die man haben muss.


1
Ich bin mir nicht sicher, ob ich damit einverstanden bin, dass es sich um ein Informatik-Konzept handelt. Ich sehe auch nicht ein, wie es mit der wissenschaftlichen Methode gelöst werden kann.
jmort253

@ jmort253 - Das stimmt, aber die Informatik versucht (meiner Meinung nach erfolglos), dieses Feld mit formalen Methoden des Designs und der Validierung zu untersuchen.
Mouviciel

Ich bin damit einverstanden, dass es kein "Informatik" -Konzept ist - aber als ich meine Karriere begann, war mir nicht bewusst, dass Kunden nicht wissen, was sie wollen. Ich dachte, dass ALLE Softwareprojekte eine Art formales Anforderungsdokument enthielten. Vielleicht ein Vorlesungsthema für einen Software-Engineering-Kurs (vielleicht hat mein College es nicht behandelt)?
Steven Striga

1

Persönlich war meine formale Logik. Es war anfangs schwierig, aber wenn man erst einmal die Regeln festgelegt hat und es geschafft hat, genug damit zu spielen, geht es dem Gehirn gut Logic++;, was in der Entwicklung eine sehr gute Sache ist.

Als Randbemerkung beantworte ich die Frage direkt - dies war definitiv nicht das schwierigste Fach, als ich meinen Abschluss machte, aber es war wahrscheinlich das schwierigste "im wirklichen Leben anwendbare" Fach.


Formal Logic ist etwas, mit dem ich eine Hassliebe hatte. Ich dachte gern über die Konzepte nach, konnte aber nie verstehen, wie es mir half, bis ich später auf Probleme in der Praxis stieß, die logisches Denken erforderten.
jmort253

@ jmort253 - Es war für mich wirklich das gleiche. Ich kämpfte sogar bis zu dem Punkt, an dem ich dachte, ich würde scheitern, studierte so lange und intensiv, bis es schließlich in meinem Kopf klickte . Danach waren die Vorteile erstaunlich.
Kyle Rozendo

1

Compiler-Konstruktionen. Schwer, aber muss die Konzepte dahinter verstehen


5
Sie sollten für dieselbe Antwort, die Sie zuvor erhalten haben, eine Gegenstimme abgeben, anstatt dieselbe Antwort erneut zu geben.
Abimaran Kugathasan

1

Kernel Design jemand? Nun, ich weiß nicht wirklich, wie es gemacht wird und welche Features ein Betriebssystem haben soll, aber für mich muss es eine entmutigende Aufgabe sein, über das Entwerfen eines Kernels nachzudenken.

Ich denke auch an die Computersicherheit . Ich weiß nicht wirklich, was ein System unsicher macht, außer natürlich offensichtlichen Pufferüberläufen, XSS- und SQL-Injections.

Ich bin nicht sicher, aber es scheint, dass einige Algorithmen auch unsicher sind; Wenn Sie sich das MetaSploit-Projekt ansehen, werden alle Arten und Arten von Sicherheitsverletzungen aufgelistet: Sie können feststellen, dass ein Programm auf vielfältige Weise fehlerhaft sein kann.


1

Es gibt viele unangenehme Themen auf dem Gebiet, aber meine Auswahl für bloß anhaltende Schwierigkeiten sind diejenigen, die globale Systemeigenschaften betreffen . Beispiele für dieses allgemeine Thema sind:

  • Sicheres und Deadlock-freies Multithreading
  • Sicherheit

Diese sind schwierig, weil Sie nach etwas suchen, das nur existiert, wenn alles korrekt ist. Sie benötigen eine globale Systemeigenschaft und dennoch können praktisch alle verfügbaren Tools (und alle Tools , die sich nach meiner Erfahrung auf echte Probleme skalieren lassen) nur lokal argumentieren. Es ist der Prozess, von der Überlegung über die Teile des Programms zum ganzen Schebang zu gelangen, der schwierig ist, insbesondere, weil es durchaus möglich ist, Teile zu haben, die in sich korrekt sind, aber wo es immer noch subtile Fehler gibt, weil die Komponenten falsch angeordnet sind. die Bugs können unerwünschte auftauchende Merkmale sein ...


0

Management Information Services Während meiner Studienzeit hatte ich jedes Semester ein Managementfach, was mich total verrückt machte.
Zäh! Gute Themen wie Compiler-Design , OS-Design usw. sind schwierig, aber wirklich interessant und herausfordernd. Ich habe Themen wie Management Information System / Services usw. wirklich durcheinandergebracht, da sie voller Langeweile sind und Sie eine Menge Theorie durchlaufen müssen.


2
Voller Langeweile, weil sie über die konzeptionellen Feinheiten jedes Systems sprechen, während die Hälfte der Leute nie selbst ein System geschrieben hat (aber sie haben sicherlich eine Vielzahl von verwendet). Außerdem verwenden die Seminare so viele geladene Wörter, dass sie kein reales Beispiel in einfachem Englisch liefern. Wie bei Entscheidungsunterstützungssystemen ... können Sie nicht einfach ein paar Screenshots von Google Analytics-Berichten (FML) ablegen, um die Schüler auf die gleiche Seite zu bringen, bevor Sie einen intellektuellen Orgasmus vor dem Publikum erleben.
Filip Dupanović

0

Wenn Sie in C / C ++ arbeiten, sind Zeiger das wichtigste Konzept, das Sie kennen müssen. Aber irgendwie habe ich es im College nie richtig verstanden.


12
Ja wirklich? Ich meine, jede Person ist anders, aber ich denke, es gibt viele (ich meine, viele ) Themen, die schwieriger sind als nur Hinweise . Zum Beispiel Computer's Architecture , Assambler , die in irgendeiner Weise auf Zeiger verwandt sind ;)
Oscar Mederos

Richtig, aber Sie werden das Verstehen von Speicherreferenzen durch Assembler viel einfacher finden, da Sie tatsächlich mit rohen Zeigern arbeiten, während Sie in C / C ++ mit Verweisen auf Zeiger arbeiten, was die Leute nur verwirrt, weil die Abstraktion nie ausgesprochen wird Über.
Filip Dupanović

2
Ah Assambler, der beste Programmier-Tee
Matt Ellen

Der Typ fragte die Themen, die schwierig, aber wichtig sind, daher Hinweise.
Manoj R

@Matt: Du hast gerade meinen Tag gemacht: D @Manoj R: Zeiger sind trivial, wenn du sie nur als Arrayzugriff betrachtest. Oder ist der Array-Zugriff schwierig?
back2dos

0

Entwurf und Analyse von Algorithmen. Es ist nicht so schwer, bekannte Algorithmen zu verstehen und zu analysieren , sondern es ist schwierig, neue Algorithmen für schwierige Probleme zu entwerfen und zu analysieren, und es erfordert ein umfassendes Verständnis vieler Bereiche und Praktiken bei der Anwendung vieler verschiedener Techniken.


0

Constraint-Programmierung. die sich mit kombinatorischen Problemen befasst, NP-vollständige Probleme.


0

Die Optimierung des Algorithmus ist ein herausforderndes Thema.


0

Welches ist das schwierigste CS-Fach / die schwierigste Theorie, die Sie studiert haben, aber für das Fach wichtig?

Diskrete Mathematik.

Es war schwierig, weil die Theorien sehr eng miteinander verwandt sind, aber sie werden in CS verwendet. Zu viel Auswendiglernen, denke ich ...

Beweis durch Induktion, Big O, Rekursion, Dividieren und Konquirieren, Graphentheorie, bla bla .. argh!

Compiler war für mich einfach, weil wir Theory of Automata nehmen mussten. ^^


0

Z-Notation / formale Methoden, die mein Gehirn am College verletzen. Hauptsächlich, weil ich es hasste. Schwer ist viel einfacher, wenn Sie Spaß an dem haben, was Sie tun, und viel schwieriger, wenn Sie es nicht tun.


0

Ich mag Ihre Antworten (und ich habe nicht vergessen, sie zu aktualisieren), wie Compiler, Kernel usw., aber die meisten Programmierer sind diesen Problemen nie begegnet. Es gibt ein etwas einfacheres, aber häufigeres Problem: Parallelität - Threads, Sperren. Es ist sehr einfach, ein Programm zu schreiben, das magische Fehler erzeugt, wenn wir auch nur einen kleinen Fehler in der Parallelitätsarchitektur machen.

Also, ich sage, es ist nicht das schwierigste Problem beim Rechnen, aber weil es allgemein verwendet wird, ist es gefährlich.


0

Objekt orientierte Programmierung

Das liegt wahrscheinlich daran, dass ich FORTRAN und APL auf den Kopf gestellt habe, aber mit der Verlagerung von streng prozeduralen Sprachen zu Objekten habe ich jahrelang zu kämpfen. Es hilft nicht, dass sogenannte "Experten" widersprüchliche Artikel und Tutorials darüber schreiben, was es bedeutet, objektorientiert zu sein und die besten / richtigen Wege zu finden, um objektorientierte Programme zu erstellen.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.