it-swarm.com.de

Wie lerne ich Informatik vollständig selbst?

Als völlig autodidaktischer Programmierer würde ich es gerne sehen, wenn ich mich selbst verbessern könnte, indem ich den Informatikkurs, der einem typischen CS-Absolventen beigebracht wird, selbst lerne.

Es war einfach, verschiedene Ressourcen im Internet zu finden, es gibt natürlich MIT Open Course Ware und Coursera-Kurse von Stanford und anderen Universitäten. Es gibt zahlreiche andere offene Ressourcen im Internet und einige gute Bücher, die wiederholt empfohlen werden.

Ich habe viel gelernt, aber mein Studium ist stark fragmentiert, was mich wirklich nervt. Ich würde es lieben, wenn ich irgendwo einen Weg finden könnte, dem ich folgen sollte, und einen Stapel, auf den ich mich beschränken sollte, damit ich sicher sein kann, was wesentlich Teile der Informatik, die ich studiert habe, und nähere mich dann systematisch denen, die ich nicht habe.

Das Problem mit Wikipedia ist, dass es Ihnen nicht sagt, was wichtig ist, sondern darauf besteht, eine vollständige Referenz zu sein.

MIT Open Course Ware für Informatik und Elektrotechnik. hat eine riesige Liste von Kursen, die Ihnen auch nicht sagen, welche Kurse wesentlich und welche optional sind, je nach Interesse/Anforderung der Person. Ich fand keine Erwähnung einer Reihenfolge, in der man verschiedene Fächer studieren sollte.

Was ich lieben würde, ist eine Liste zu erstellen, der ich folgen kann, wie diese Dummy-Liste

SUBJECTS                                                        DONE

Introduction to Computer Science                                  *
Introduction to Algorithms                                        *
Discrete Mathematics                   
Adv. Discrete Mathematics
Data structures                                                   *
Adv. Algorithms
...

Wie Sie deutlich sehen können, habe ich wenig Ahnung, woraus bestimmte Fächer der Informatik bestehen.

Es wäre sehr hilfreich, selbst wenn jemand auf wesentliche Kurse von MIT Course ware (+ wesentliche Themen, die nicht bei MIT OCW) vorhanden sind) in einer empfohlenen Reihenfolge von Studie.

Ich werde die Beiträge auflisten, die ich bereits durchlaufen habe (und ich habe dort nicht bekommen, wonach ich gesucht habe)

https://softwareengineering.stackexchange.com/questions/49557/computer-science-curriculum-for-non-cs-major - Die oberste Antwort besagt, dass es sich nicht lohnt, cse zu studieren

https://softwareengineering.stackexchange.com/questions/110345/how-can-a-self-taught-programmer-learn-more-about-computer-science - zeigt auf MIT OCW

https://softwareengineering.stackexchange.com/questions/49167/studying-computer-science-what-am-i-getting-myself-into

https://softwareengineering.stackexchange.com/questions/19912/overview-of-computer-science-programming

46
Optimus

Ich habe Kursmaterial vom MIT gesehen und es war schockierend schlecht . Sie hatten Unterrichtsmaterialien, die VC5 erforderten, Bündel impliziter globaler Variablen, die Farben als "Blau" anstelle von 32-Bit-ARGB übergaben, geschweige denn 4x [0,1] Floats, so etwas. Ich würde einem Lehrplan oder Code nicht vertrauen, nur weil er von einer namhaften Universität stammt.

Mein CS-Abschluss (von einer Universität, die für CS zu den Top 10 in Großbritannien gehört) bestand aus:

Erstes Jahr:

  1. OOP - die super Grundlagen
  2. Computersysteme - Dinge wie binäre Ganzzahldarstellungen.
  3. Grundlegende relationale Datenbanktheorie
  4. Mathematik für CS - einfache 2D- und 3D-Geometrie.
  5. Ein bisschen HTML/JS - komplett für Anfänger
  6. Ein ebenso kleines Stück PHP.
  7. Ein bisschen funktionale Programmierung

Zweites Jahr:

  1. Rechtliche Fragen im Bereich Computer wie Gesetze zum Schutz von Benutzerdaten
  2. Programmiersprachen - Chomsky-Hierarchie und Lexing wurden behandelt
  3. Betriebssysteme, Netzwerke und das Internet - meistens Dinge wie virtueller Speicher und Paging, IP-Stack
  4. 2D-Computergrafik - meistens nur als Beweis für Theoreme der zugrunde liegenden Mathematik
  5. Grundlegende Beschreibungen neuronaler Netze, Bayes'scher Glaubenssysteme usw.
  6. Anforderungsanalyse - Kurzer Überblick über UML, funktionale/nicht funktionale Anforderungen.
  7. Team-Projekt

Drittes Jahr:

  1. Meistens Algorithmusanalyse - Komplexitätstheorie
  2. Implementierung von Programmiersprachen - LL/LR-Parsing-Techniken, CFGs und dergleichen.
  3. Software-Projektmanagement - Ein Blick auf Waterfall/Agile-Modelle
  4. Internationales Computing - Unicode und anderer Lokalisierungsspaß
  5. Fortgeschrittene KI - weiß es nicht, ehrlich gesagt, und ich habe bald eine Prüfung dazu
  6. 3D-Computergrafik - meistens wieder nur als Beweis für Theoreme für Rotationsmatrizen und dergleichen
  7. Agentenbasierte Systeme - hauptsächlich über asynchrone Agenten, die kommunizieren, Gruppenentscheidungen treffen usw.
  8. Mikroprozessoranwendungen - digitale Signalverarbeitung
  9. Robotik - deckt Dinge wie Computer Vision und Roboterentscheidung auf hohem Niveau ab

Wie Sie feststellen werden, ist so ziemlich alles "die Grundlagen" von etwas und fast nichts wird bis zu einer nützlichen Tiefe behandelt.

Das Zeug, das sich tatsächlich gelohnt hat, ist wichtig:

  1. OOP- und dann noch mehr und dann noch mehr
  2. Funktionale Programmierung - auch noch mehr. Versuchen Sie, eine Sprache wie C++ oder C # auszuwählen, in der Sie die Syntax, die Tools usw. nicht neu lernen müssen, um beide Stile abzudecken.
  3. Der Teil des virtuellen Speichers des Betriebssystems ist gut zu kennen, ebenso wie der Kernel-Modus im Vergleich zum Benutzermodus. Segmentierung und IP-Stack überspringen.
  4. Anforderungsanalyse - Muss für jedes Projekt nützlich sein
  5. Algorithmusanalyse - Es ist wichtig zu wissen, was algorithmische Komplexität ist, wie sie reduziert werden kann und wie komplex allgemeine Operationen sind.
  6. Software-Projektmanagement-Modelle - viele Geschäfte arbeiten mit Agile und viele ältere mit Wasserfall-Modellen.
  7. Internationales Computing - Unicode ist unerlässlich

Das Zeug, das es wert war, optional:

  1. Programmiersprachen - Chomsky-Hierarchie, die Werkzeuge zum Lexen und Parsen. Überspringen Sie die Theorie hinter LL- oder LR-Parsern - ein LR-Parser kann praktisch jedes realistische eindeutige CFG akzeptieren, und wenn dies nicht möglich ist, werden Sie in der Dokumentation Ihres Parser-Generators darüber informiert.
  2. 3D-Grafik. Ich meine nicht "Beweise, dass dies eine Rotationsmatrixformel ist" Zeitverschwendung, ich meine tatsächlich "Dies ist ein Vertex-Shader" Zeug oder GPGPU. Das macht Spaß, ist interessant und anders.
  3. Einige der KI-Dinge machen Spaß - wie potenzielle Felder und Wegfindung.

Dinge, die wichtig sind, aber ich habe sie trotzdem nicht behandelt:

  1. Parallelität - ein Muss, zumindest die Grundlagen, für jeden im Jahr 2012.

Der Rest war reine Zeitverschwendung. Leider kannte ich die meisten dieser neun Punkte entweder bereits oder habe die nützlichen Teile an anderer Stelle aufgegriffen. Wenn Sie über Dinge wie das FizzBuzz-Problem lesen, wird schnell klar, dass Sie nicht wirklich viel wissen müssen, um ganz oben auf der Liste zu stehen - was ein Glück ist, seit meinem Abschluss und vielen anderen Die Materialien, die ich online für andere Abschlüsse gesehen habe, lehren überhaupt nicht viel.

24
DeadMG

Probieren Sie die Empfehlungen des Lehrplans für Informatik 2001 von ACM/IEEE aus, die hier verlinkt sind: http://www.acm.org/education/curricula-recommendations

zusammen mit den CS-Updates 2008.

Seite 17 des Berichts von 2001 enthält eine handliche Tabelle, die das gesamte "Kernwissen" unterstreicht und weiterhin Wahlfächer auflistet.

Ein Bachelor-Programm hätte keine Zeit, um auch nur die Kurse abzudecken, die von diesen Empfehlungen als Kern betrachtet werden. Daher werden einige der Kategorien zusammengefasst und die Studenten können zwischen ihnen auswählen (z. B. Betriebssysteme, Programmiersprachen und Software-Engineering) Software und Schüler wählen einen Track aus).

Sie finden die erforderlichen Kursarbeiten auf der Website der CS-Abteilung für so ziemlich jede Schule, und sie sollten eine Version davon sein.

5
Ruan Caiman

Open Course ware ist nur eine Liste der Kurse, die sie zur Verfügung gestellt haben. Wenn Sie wissen möchten, was ein Schüler genommen hätte, besuchen Sie die MIT-Website (nicht OCW) und sehen Sie sich das aktuelle Programm an. Sie haben eine Liste, was erforderlich ist und was als Voraussetzung für was angesehen wird. Hier ist ihre Seite.

5
stonemetal