Ich bin ein ziemlich erfahrener Softwareentwickler, aber ich kenne nicht viel Theorie. Ich möchte mehr Theorie lernen. Bestimmte Themen, die mich interessieren, sind: Komplexität der Berechnungen, formale Sprachen und Typentheorie. Aber ich bin ratlos, wie ich anfangen soll, über diese Felder zu lernen.
Welche Ressourcen würden Sie jemandem empfehlen, der mehr Theorie durch Selbststudium lernen möchte? Gibt es Anleitungen zum theoretischen Selbststudium in der Informatik für Software-Ingenieure?
soft-question
teaching
books
Henry H.
quelle
quelle
Antworten:
Es ist ein weites Feld mit ein paar ganz unterschiedlichen Bereichen.
Ich würde mit einigen der grundlegendsten Ideen darüber beginnen, was Computer sind: Hopcroft und Ullman, "Einführung in die Automatentheorie, Sprachen und Berechnungen".
Der Grund, warum ich das besonders empfehlen würde, ist ihre Betonung auf Beweisen. Sie führen Sie durch eine rigorose Denkweise. Das ist der Unterschied zwischen dem Schreiben von Programmen und dem wissenschaftlichen Arbeiten.
quelle
Es gibt verschiedene Möglichkeiten, die Typentheorie kennenzulernen. Für einen arbeitenden Programmierer ist Types and Programming Languages von B. Pierce ein guter Anfang. Praktische Grundlagen für Programmiersprachen von R. Harper könnten ebenfalls gut sein. Wenn Sie leicht lesbare Hintergrundinformationen zur operativen Semantik wünschen, empfehle ich G. Winskels, Die formale Semantik von Programmiersprachen: Eine Einführung . Mit T. Nipkow, G. Klein, Concrete Semantics, eine Variante von Winskels Buch wurde für den interaktiven Proofassistenten Isabelle / HOL formalisiert. Ich vermute, es ist wirklich schwierig, einen Prüfer nur aus diesem (oder irgendeinem) Buch heraus in den Griff zu bekommen. Man möchte, dass ein Experte in der Nähe Fragen stellt. Wenn Sie eine mathematischere Herangehensweise an die Typentheorie suchen, können Sie JR Hindley, JP Seldin, Lambda-Kalkül und Kombinatoren: Eine Einführung oder H. Barendregts , Lambda-Kalkül mit Typen betrachten . Obwohl ich es nicht empfehlen würde, von Barendregt aus zu starten.
Wenn Sie eine einzige Empfehlung wünschen, würde ich sagen, dass Sie alles von Pierce mit Ausnahme von Teil VI (Systeme höherer Ordnung) lesen und die in diesem Buch behandelten Spielzeugsprachen implementieren. Sie werden eine solide Grundlage in der Typentheorie haben und wahrscheinlich auch einen besseren Programmierer.
quelle
Ich empfehle Berechenbarkeit, Komplexität und Sprachen von Martin Davis, Ron Sigal und Elaine Weyuker.
quelle
Ich bin ein großer Fan von Theorie und Algorithmen. Ich hatte einmal die Gelegenheit, Theoretische Informatik am Indian Institute of Technology in Madras (IIT-M), Indien, zu besuchen. Ich habe dort am IIT-M viele Theoretiker kennengelernt. Als ich dorthin ging, hatte ich keine Ahnung, was Theorie ist, aber heute bin ich total verliebt in sie.
Dank @Kate F für den Zeiger, ja, Hopcroft und Ullman sind ein ausgezeichneter Ausgangspunkt.
Aber hier ist, wie ich angefangen habe,
Lesen Sie die Einführung in Algorithmen von Cormen. <\ Br> Dies ist ein ausgezeichneter Ausgangspunkt. Versuchen Sie beim Lernen, jeden Beweis so ausführlich wie möglich zu verstehen. Wenn Sie den Beweis gut verstehen, versuchen Sie, dieselbe Logik in einer Sprache Ihrer Wahl zu codieren. (Es dauert ein bisschen länger, aber es ist einen Versuch wert)
Folgen Sie den Top - Konferenzen in Theorie wie
FOCS
SODA
STOC
EC (Elektronischer Handel) - Algorithmische Spieltheorie
COLT (Konferenz für Lerntheorie) - Lerntheorie
CRYPTO - Kryptographie
SOCG (Symposium für Computational Geometry) - Computational Geometry
CCC (Konferenz für Computational Complexity) - Komplexitätstheorie
Auch wenn Sie nicht viel verstehen, versuchen Sie, so viel wie möglich zu lesen und zu DENKEN . Sie müssen so viele Beweise wie möglich machen.
quelle