2010-01-27 8 views
15

Ich habe seit Jahren als Berater programmiert, und ich verehre meine Arbeit, die eine Menge objektorientierte Analyse und Design von Softwaresystemen mit verwalteten Sprachen beinhaltet (dh. Software Engineering). Aber ich würde gerne promovieren, und es stört mich, dass ich die Theorie der Informatik nie richtig verstanden habe. In der Universität habe ich in diesen Kursen nur marginal gut abgeschnitten, weil die Art, wie sie unterrichtet wurden, bei mir nicht funktioniert hat. Ich lerne, indem ich die Anwendung von Konzepten beobachte, nicht das Auswendiglernen.Ich würde gerne zu den Grundlagen von CS zurückkehren. Anregungen für Tutorials oder anwendungsorientiertes Referenzmaterial?

Ein Beispiel dafür, wo ich zuvor eine solche Barriere überwunden habe - ich hatte ein schreckliches erstes Jahr. Der Professor (von dem ich weiß, dass er kaum qualifiziert war und ein inkompetenter Lehrer war) begann mit C++ und lehrte uns prozedurale Programmierung. Technisch hatte ich gelernt, was ein Objekt war, aber erst als ich die Anwendung objektorientierter Analyse und Design (mit Entwurfsmustern und anderen Strukturen wie verknüpften Listen) sah, verstand ich wirklich, wofür sie waren.

Wie würde ich lernen, Themen wie Compiler, Programmierung Sprachtheorie und Analyse von Algorithmen zu lernen? Was wäre ein guter Weg, damit anzufangen? Zum Beispiel würde ich gerne einen Compiler schreiben (zum Spaß), aber ich habe keine Ahnung, wo ich anfangen soll. War jemals jemand in dieser Situation? Irgendwelche Vorschläge für Tutorials, kostenlose Online-Vorlesungsvideos oder Referenz (etwas wie w3schools wäre wunderbar)?

(Ich möchte, dass Surfen hinzufügen Stackoverflow hat mich schon gelehrt Lasten, aber ich möchte es ein bisschen mehr formal sein:)

EDIT: Vielen Dank an Alle für die Anregungen. Ich habe eine Antwort markiert, die für mich persönlich funktioniert, aber halten Sie die Antworten kommen:)

+3

Beste Compiler-Ressource auf SO ist http://StackOverflow.com/Questions/1669/Learning-ToWrite-A-Compiler - ignorieren Sie die Dragon Book Empfehlungen obwohl. –

+0

Das ist eine großartige Ressource, danke. Warum ist das Drachenbuch nicht gut? Nur neugierig. –

+4

Mir gefiel das Drachenbuch, Neil. Warum argumentieren Sie dagegen? –

Antwort

4

Wenn Sie planen, einen Ph.D. eines Tages, warum gehst du nicht einfach zurück in die Schule? Es gibt Tonnen von Kursen, die Sie als Ph.D. Kandidat, und Suche nach Forschung in einem mehr CSish-Bereich (Algorithmen, etc.) wird Ihnen bei diesem Unterfangen noch mehr helfen.

+0

+1 Ich würde gerne, aber mein Partner ist auf halbem Weg durch seine Doktorarbeit und jemand muss ein Gehaltsscheck nach Hause bringen! :) Es wäre ansonsten der perfekte Vorschlag. –

+2

ah, also schauen Sie sich eine kurzfristige Lösung an, bis Sie wieder in die Schule kommen können? Sie können Kurse an sehr angesehenen Universitäten online besuchen. Ich habe jetzt http://lyle.smu.edu und genieße es wirklich. Wenn Sie Zeit haben, wieder zur Schule zu gehen, haben Sie bereits einige Intro-Kurse in der Tasche. –

+2

Ich habe die Videovorlesungen am MIT gefunden: http://ocw.mit.edu/OcwWeb/web/courses/courses/index.htm#ElectricalEngineeringandComputerScience Dies sollte mir eine gute Bewertung in meinem eigenen Tempo geben. Danke für die Idee! –

4

Ich bin auf der Suche nach der gleichen Art von Inhalten, und die Leute sagten mir, dass es eine gute Idee ist, zunächst einen Blick auf die Structure and Interpretation of Computer Programs zu werfen.

Es schmerzt mich, dass ich es immer noch nicht lesen konnte, aber ich bin mir sicher, dass ich es so schnell wie möglich tun werde.

Es soll ein großartiges Buch sein, und die Vorträge der Autoren sind avaiable online.

Ich bin sicher, dass Sie in der ersten Vorlesung viel mehr über Programmierung lernen werden, als in Ihrem ersten Jahr.

Auch, wenn ich mich nicht irre, implementiert das Buch einen Schema-Compiler, in einem Schema geschrieben.

2

In der Regel habe ich Computer Science-Theorie-Bücher gefunden, um nicht Massenkonsum im Gegensatz zu w3schools.com entworfen werden.

"Es gibt keine königliche Straße", wie Euclid gesagt haben soll.

Ich fand die Hopcroft und Ullman Buch auf Automaten lesbar; es ist sehr theoretisch, aber ich nahm die High-Level-Konzepte von ihm als Sophmore in der Schule. Ich habe Sara Baases Buch über Algorithmen eine gute (wenn auch trockene) Einführung gefunden. Cormen hat ein Buch über Algorithmen, das wahrscheinlich das kompletteste Lehrbuch ist, das derzeit geschrieben wird.

Natürlich, wenn Sie die klassischen Computer-Text wollen, müssen Sie durch Knuths Art der Computerprogrammierung lesen. Habe es nicht gelesen; es ist ein bisschen teuer für mich.

+0

Ich habe vor, Knuths Bücher zu lesen, wenn ich ein bisschen mehr über die grundlegenden Konzepte weiß. Sie sind sehr ... knapp. –

5

Ich mag Sedgewick die "Algorithmen" (ISBN 0201066734 1988 604P) weil es Gespräche man durch Algorithmen in einem Konversationsstil, und gute Beispiele hat. Siehe die Bewertungen unter Amazon. (Es gibt viele Varianten Ausgaben, mehrbändige C++ Java etc.)

(Hinzugefügt 2feb :) Althoough Algorithmen sind von grundlegender Bedeutung und Spaß, sie sind eher Fern — Wandern in Hochland, nicht der tägliche Stau.
Bentley „Programming Pearls“ (ISBN 0-201-65788-0 2000 239P pearls)
„von kleinen Fallstudien, reale Beispiele voll ist, und interessante Übungen zum Erlernen, wie man programmiert“.

Für große Team Software-Projekte, Brooks "Mythical Man-month" (ISBN 0201835959 2ed 1995 322P Amazon) ist ein Muss:
"konzeptionelle Integrität des Produkts ist von entscheidenden Bedeutung". Und zitieren Parnas auf p. 221:

statt Lehre Menschen, die O-O eine Art von Design, und sie Design-Prinzipien zu geben, haben die Menschen gelehrt, dass O-O die Verwendung eines bestimmten Werkzeug. Wir können mit jedem Tool gute oder schlechte Programme schreiben. Es sei denn, wir Menschen lehren, wie man Design ...

Schließlich Visualisierung/GUIs/UIs haben oft eine viel Raum für Verbesserungen. Ich kenne kein gutes Einführungsbuch in diesem Bereich, vergleichbar mit dem oben genannten; irgendjemand anderes ?

+0

+1 Vielen Dank. Ich werde das überprüfen. –

2

:) Ich bin ein Student, der gerade mit einem Kurs in Compiler-Design fertig ist. Es gibt dieses Buch von Aho, Ullman und Sethi mit dem Titel Compiler Design - Prinzipien, Techniken und Werkzeuge. Es gibt ein Buch über Programmiersprachentheorie mit dem Titel "The Practice of Programming" - Einfachheit, Klarheit und Allgemeingültigkeit von Kernighan und Pike, das ich gerade erst begonnen habe. Es erweist sich als sehr praktisch. Wenn ich zu Video-Kursen komme, kenne ich einige Video-Ressourcen, die sehr hilfreich sind, aber sie sind zwar aufgeladen, aber ich glaube, dass sie zumindest einen Blick wert sind, nur Google NPTEL-Ressourcen, schließlich finde ich indische Autorenbücher sehr einfach zu verstehen, da ich Inder bin , da es so ist, als wolltest du wieder von vorn anfangen ... du kannst diese Seite nach nützlichen Dingen durchsuchen ... www.kicit.com ... Glücklich lernen ... :) Ich bin mit dir auf der Idee, Dinge zu lernen praktischer (mit zB und vielleicht was besser als persönliche Erfahrung) als theoretisch ... cya .. :)

2

Es könnte ein bisschen zufällig sein, aber Project Euler kann eine ziemlich gute Ressource sein, mit den theoretischen und mathematischen Seiten der Informatik zu experimentieren, während gleichzeitig programmiert wird.

1

Ich habe gefunden, dass iTunes U sehr gut ist. Sie haben eine breite Palette von kostenlosem Material von erstaunlichen Hochschulen wie MIT, Stanford und Caltech. Ich habe sie schon lange nicht mehr gesehen, also weiß ich nicht, wie sie zu deinem Lerntyp passen würden, aber es ist eine gute Idee, so etwas zu sehen, bevor du wieder in die Schule gehst, nur damit du weißt, wie es wohl sein wird .