====== Proseminar From NAND to Tetris ====== ===== Aktuelles ===== ^ Datum ^ Inhalt ^ | 02.11.20|Ort (online) aktualisiert | | 11.10.20|Initialen der Vortragenden ergänzt | | 29.09.20|Daten der Sitzungen ergänzt | ===== Informationen zur Veranstaltung ===== === Inhalte === Betrachte den folgenden Code und überlege, **was** passiert, wenn er ausgeführt wird: public class Printer { private String text; public Printer(String text) { this.text=text; } public void print() { System.out.println(text); } public static void main(String[] args) { Printer printer=new Printer("Hello World"); printer.print(); } } Wenn du dies ohne größere Schwierigkeiten geschafft hast, überlege nun, **wie** der Computer den Code ausführt. Was passiert in den Logikgattern, aus denen der Rechner aufgebaut ist? Und was geschieht mit dem Code auf dem Weg dort hin? In den frühen Tagen der Informatik hatte jeder Programmierer eine Vorstellung davon hatte, wie sein Computer funktioniert. Heute sind die Systeme allerdings so komplex geworden, dass kaum eine einzelne Person sie vollständig durchblicken kann. Die in einem Rechner ablaufenden Prozesse sind hinter Schichten über Schichten an Abstraktionsebenen verborgen. Dies sorgt auch bei Fachleuten dafür, dass sich tragfähige Vorstellungen über die Funktionsweise von Computern nur schwer bilden können. Im Proseminar werden wir das Buch //The Elements of Computing Systems, Building a Modern Computer from First Principles// von Nisan und Schocken nutzen, um die Verbindung zwischen Logikgattern, dem Betriebsystemebene und allen Ebenen dazwischen herzustellen. Dazu werden wir die im Buch beschriebene //Hack-Plattform// nachvollziehen und die verschiedenen Abstraktionsebenen entmystifizieren. === Lernziele === Die Studierenden... * ...//erarbeiten// selbstständig ein informatisches Themengebiet * ...//bereiten// den gelernten Stoff für einem Vortrag //auf// * ...//bereiten// eine Übungsaufgabe zum Stoff //vor// * ...//präsentieren// den aufbereiteten Stoff in einem Vortrag * ...//formulieren// den präsentierten Stoff in einer schriftlichen Ausarbeiteung //aus// === Wichtige Infos === **LAGB2009:** Das Proseminar kann als //Seminar// für INF-ML-101 Nr.3 angerechnet werden. (siehe [[http://www.cs.tu-dortmund.de/nps/de/Studium/besondere_Lehrveranstaltungen/Proseminare/index.html|Infoseite zu Proseminaren]]) Beachten Sie neben den {{:fischer:teaching:allgemeine_proseminarhinweise.pdf |allgemeinen Hinweisen zu Proseminaren}}, dass Grafiken nicht kopiert werden sollen. Wenn Sie eine Grafik //abzeichnen//, wird dies auch als Kopie angesehen. Falls Sie Ihre Grafik auf Basis einer anderen erstellen, sollte erkennbar sein, dass Sie sich eigene Gedanken gemacht haben. Die [[http://www.zhb.tu-dortmund.de/zhb/Wil/de/Forschungswerkstatt/index.html | Forschungswerkstatt]] bietet Unterstützung bei LaTeX-Fragen. Zum Buch gibt es einen [[https://www.coursera.org/learn/build-a-computer?ranMID=40328&ranEAID=*GqSdLGGurk&ranSiteID=.GqSdLGGurk-Oq_diI3.FuZn6GW1YXBncQ&siteID=.GqSdLGGurk-Oq_diI3.FuZn6GW1YXBncQ&utm_content=10&utm_medium=partners&utm_source=linkshare&utm_campaign=*GqSdLGGurk | MOOC]], der ggf. nützlich sein kann. ===== Zu erbringenden Leistungen ===== Die Studienleistung für das Seminar besteht darin, einen Vortrag zu einem Buchkapitel auszuarbeiten und zu halten. Die Modulprüfung ist die schriftliche Ausarbeitung === Zeitplan === Alle Termine sind als letzte Fristen anzusehen. Es wird dringend empfohlen, deutlich vorher Kontakt aufzunehmen. Bei Fragen oder Problemen kannst du jederzeit einen Termin per [[mailto:martin.weinert@cs.tu-dortmund.de?subject=Proseminar Termin für Rücksprache | Mail]] vereinbaren. Kurzfragen können wir per Mail klären. Längere Themen z.B. in einer Videokonferenz. **Achtung:** Falls dein Thema mehrfach besetzt ist, teile es selbstständig mit deinen Kommilitonen auf und besprecht dies **rechtzeitig** (deutlich vor der ersten Frist) mit der Seminarleitung! Halte unbedingt folgende Fristen ein: ^ Zeit ^ Frist für ^ | min. 14 Tage vor dem Vortrag | Gliederung des Vortrages abgeben | | min. 7 Tage vor dem Vortrag | Fertige Vortragsfolien/-materialien abgeben | | Vortragsdatum | Vortrag halten | | max. 14 Tage nach dem Vortrag | Schriftliche Ausarbeitung abgeben | === Vortrag === Der Vortrag sollte 20-25 Minuten umfassen und die Inhalte des von dir bearbeiteten Kapitels verständlich erklären. Im Idealfall erklärst du die Inhalte auf eine Weise, die leichter verständlich ist, als das Buch selbst. Im Anschluss an der Vortrag klären wir zuerst Fragen, die offen geblieben sind. Anschließend bearbetien die Zuhörer eine kurze Aktivität zu den Vortragsthemen, die von dir vorbereitet wurde. Die Aktivität soll den Charakter einer Übungsaufgabe haben und in 5-10 Minuten bearbeitet werden können. Sie soll aufdecken, ob doch noch Unklarheiten bestehen und dafür sorgen, dass sich alle aktiv mit dem Stoff auseinandersetzen. Abschließend klären wir verbleibende Fragen, diskutieren die Themen und geben dir Feedback zu deinem Vortrag. === Ausarbeitung === Die Ausarbeitung umfasst 6 Seiten Inhalt. Damit ist gemeint, dass nach dem entfernen von strukturierenden Inhalten (Deckblatt, Inhltsverzeichnis, sehr große Überschriften, etc.) 6 Seiten übrig bleiben sollten. Außerdem sind die Lösungen zu den Übungsaufgaben aus dem Buch mit abzugeben. Falls du nur einen Teil des Kapitels bearbeitest, gib auch nur die dafür relevanten Aufgaben ab. Du kannst für die Ausarbeitung die Vorlage für Abschlussarbeiten der [[http://www.cs.tu-dortmund.de/nps/de/Studium/besondere_Lehrveranstaltungen/Abschlussarbeiten/index.html | Fakultät für Informatik]] oder die von mir {{:staff:weinert:vorlage_abschlussarbeit.zip | modifizierte Version}} benutzen. ===== Präsentationskurs ===== Der Präsentationskurs findet **extern** statt ===== Termine ===== * Der Termin der Vorbesprechung wird noch bekannt gegeben * Das Seminar findet Dienstags von 14 - 16 Uhr c.t. an den in der Tabelle unten angegebenen Tagen statt (Änderungen vorbehalten) Das Seminar findet online statt. Der Einladungslink für die Teilnehmer wird per Email verteilt. Der Ort, an dem wir uns Treffen wird noch bekannt gegeben. (Falls Präsenzlehre möglich ist Schullabor (OH12, Raum 3.030), sonst online) ^ Datum ^ Kapitel ^ Inhalt ^ Vortragende/-r ^ | 27.10.20 | --- | //**Entfällt**// | --- | | 3.11.20 | 1 | Boolean Logic | YM | | 10.11.20 | 2 | Boolean Arithmetic | TZ | | 17.11.20 | --- | //**Entfällt**// | --- | | 24.11.20 | 3 | Sequential Logic | LJW | | 1.12.20 | 4 | Machine Language | JH, MaLT | | 8.12.20 | 5 | Computer Architecture | AO | | 15.12.20 | 6 | Assembler | JNH | | 22.12.20 | --- | //**Vorlesungsfrei**// | --- | | 29.12.20 | --- | //**Vorlesungsfrei**// | --- | | 5.01.21 | 7 | VM I: Stack Arithmetic | IC, JS | | 12.01.21 | 8 | VM II: Program Control | FD, JD | | 19.01.21 | 9 | High-Level Language | JR, KS | | 26.01.21 | 10 | Compiler I: Syntax Analysis | SB, YA | | 2.02.21 | 11 | Compiler II: Code Generation | DB, VSK | | 9.02.21 | 12 | Operating System | MiT, YD | ===== Literatur ===== [NS05] Nisan, Noam; Schocken, Shimon: //The Elements of Computing Systems, Building a Modern Computer from First Principles.// The MIT Press, 2005 Vom Buch stehen zwei Exemplare zur Verfügung. Es wird noch bekannt gegeben, ob eine Ausleihe möglich ist.