Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Du solltest ein Upgrade durchführen oder einen alternativen Browser verwenden.
Alles über Computer lernen
- Ersteller DevNoteHQ
- Erstellt am
Ich würde dir eine Ausbildung und/oder ggf. direkt ein Studium empfehlen. Ich selbst hab eine 3-jährige Ausbildung zum Mikrotechnologen gemacht. Dort habe ich kennen gelernt, wie Halbleiter hergestellt werden, wie sie aufgebaut, was es überhaupt alles an Chips gibt usw.
Danach habe ich dann ein Studium der Informations- und Elektrotechnik mit der Fachrichtung Digitale Systeme gemacht, wo ich programmieren gelernt habe (C, Java, Grundlagen Assembler) sowie alle möglichen Schaltungen, wie ein PC aufgebaut ist und ich habe auch viele verschiedene Anwendungen selbst programmiert. Angefangen von dem Entwickeln eines digitalen Multimeters bis hin zur Erstellung von Navigationssystemen (sowohl Hard- als auch Software). Es ist sehr komplex und man wird in den Grundlagen in jede verschiedene Richtung ausgebildet aber man hat so einen guten Überblick und man kann sich auch dann noch weiter Spezialisieren. Es gäbe z.B. danach den Master für Mikroelektronische Systeme, welcher noch tiefer in die Materie rein geht. Das ganze Studium bezieht sich mehr auf die Hardware sowie die Inbetriebnahme dieser (mit Betriebssystem und co) als auf die Spieleentwicklung. Aber du sagtest ja selber, dass du gerne ALLES dazu lernen willst und das wäre ein guter Weg, um wirklich die Hardware zu verstehen. Danach kannst du dann natürlich weiter in die Spieleentwicklung gehen.
Danach habe ich dann ein Studium der Informations- und Elektrotechnik mit der Fachrichtung Digitale Systeme gemacht, wo ich programmieren gelernt habe (C, Java, Grundlagen Assembler) sowie alle möglichen Schaltungen, wie ein PC aufgebaut ist und ich habe auch viele verschiedene Anwendungen selbst programmiert. Angefangen von dem Entwickeln eines digitalen Multimeters bis hin zur Erstellung von Navigationssystemen (sowohl Hard- als auch Software). Es ist sehr komplex und man wird in den Grundlagen in jede verschiedene Richtung ausgebildet aber man hat so einen guten Überblick und man kann sich auch dann noch weiter Spezialisieren. Es gäbe z.B. danach den Master für Mikroelektronische Systeme, welcher noch tiefer in die Materie rein geht. Das ganze Studium bezieht sich mehr auf die Hardware sowie die Inbetriebnahme dieser (mit Betriebssystem und co) als auf die Spieleentwicklung. Aber du sagtest ja selber, dass du gerne ALLES dazu lernen willst und das wäre ein guter Weg, um wirklich die Hardware zu verstehen. Danach kannst du dann natürlich weiter in die Spieleentwicklung gehen.
fliger5
Commander
- Registriert
- Nov. 2009
- Beiträge
- 2.301
Es gibt auch Leute die machen 2 Studiengänge gleichzeitig, z.B. Philosophie und Germanistik, nur sind das eben Studiengänge mit vergleichsweise wenig Vorlesungen und viel Freizeitig weswegen es sich eignet, gleich 2 Studiengänge zu machen. Das wäre ne Alternative für dich wobei die Studiengänge der Informatik/Elektrotechnik natürlich von der Stoffmenge her ne gute Nummer größer sind 
Das nächste mal lass ich mir einen besseren Titel einfallen 
Und ich würde gerne Informatik und Physik studieren, weil mich Physik auch wahnsinnig interessiert und ich schon fast glaube, dass ich an der HTL (=Höhere Technische Lehranstalt) für Elektronik und Technische Informatik, die ich im Moment besuche, genügend über dieses Thema lerne, damit ich die Hardware weit genug verstehe, um auch sehr Hardwarenahe programmieren zu können, ohne jeden zweiten Begriff googln zu müssen.
http://openbook.rheinwerk-verlag.de/it_handbuch/
(von der ersten Antwort) Ist glaube ich sogar schon, was ich suche, wobei ich bisher noch nicht weiß, wie weit das Buch in die Tiefe geht, aber bisher gefällt es mir recht gut
Und ich würde gerne Informatik und Physik studieren, weil mich Physik auch wahnsinnig interessiert und ich schon fast glaube, dass ich an der HTL (=Höhere Technische Lehranstalt) für Elektronik und Technische Informatik, die ich im Moment besuche, genügend über dieses Thema lerne, damit ich die Hardware weit genug verstehe, um auch sehr Hardwarenahe programmieren zu können, ohne jeden zweiten Begriff googln zu müssen.
http://openbook.rheinwerk-verlag.de/it_handbuch/
(von der ersten Antwort) Ist glaube ich sogar schon, was ich suche, wobei ich bisher noch nicht weiß, wie weit das Buch in die Tiefe geht, aber bisher gefällt es mir recht gut
fliger5
Commander
- Registriert
- Nov. 2009
- Beiträge
- 2.301
Ja bei dem Titel hat bestimmt der eine oder andere mit dem Kopf geschüttelt, in einem Forum sollte man vorallem als Threadersteller bescheiden auftreten (das muss du noch lernen), Arroganz kann man sich nur als "Helfer" leisten wenn man sich auch zu 100% sicher ist 
Also, Vieles von dem was du erwähnt hast liegt oberflächlich gesehen durchaus im Bereich des Möglichen (wenn du bereit bist viel Zeit zu investieren):
Eine eigene, einfache RISC-ISA nebst dazu passendem rudimentärem Prozessor zu entwerfen ist kein Hexenwerk (solange du nicht erwartest das er auch nur annähernd mit nem 486er mithalten kann). Den kann man erstmal auf einem FPGA implementieren und wenn du im Lotto gewinnst kannst du dir evtl. sogar einen entsprechenden ASIC herstellen lassen. Das Wissen um sowas theoretisch in nem archaischen Fertigungsprozess per Hand layouten zu können lässt sich auch in endlicher Zeit aneignen.
Wenn die ISA einfach gehalten ist, dann ist ein Assembler auch kaum mehr als ein Textprozessor und ein primitives OS, nebst nicht-optimierendem c89-like-Compiler ist ebenfalls nach Schema-F umsetzbar.
Was du aber verstehen musst ist, dass das Ergebnis praktisch nicht das geringste mit einem modernen PC zu tun hat.
Umgekehrt ist es durchaus realistisch sich in einigen Jahren das für die Programmierung (und Optimierung) von Spielen relevante Wissen über die Funktionsweise moderner PCs und Compiler anzueignen, das heißt dann aber noch lange nicht, dass du auf Registerebene verstehst, wie die CPU die Maschinenbefehle umsetzt, du vorhersehen kannst, was der Compiler genau aus deinem Programmcode macht oder du einen "perfekten" Grafikkartentreiber schreiben kannst. Ganz davon abgesehen das bei der Spielentwicklung das klassische Programmieren nur ein Problem unter vielen ist.
Eine eigene, einfache RISC-ISA nebst dazu passendem rudimentärem Prozessor zu entwerfen ist kein Hexenwerk (solange du nicht erwartest das er auch nur annähernd mit nem 486er mithalten kann). Den kann man erstmal auf einem FPGA implementieren und wenn du im Lotto gewinnst kannst du dir evtl. sogar einen entsprechenden ASIC herstellen lassen. Das Wissen um sowas theoretisch in nem archaischen Fertigungsprozess per Hand layouten zu können lässt sich auch in endlicher Zeit aneignen.
Wenn die ISA einfach gehalten ist, dann ist ein Assembler auch kaum mehr als ein Textprozessor und ein primitives OS, nebst nicht-optimierendem c89-like-Compiler ist ebenfalls nach Schema-F umsetzbar.
Was du aber verstehen musst ist, dass das Ergebnis praktisch nicht das geringste mit einem modernen PC zu tun hat.
Umgekehrt ist es durchaus realistisch sich in einigen Jahren das für die Programmierung (und Optimierung) von Spielen relevante Wissen über die Funktionsweise moderner PCs und Compiler anzueignen, das heißt dann aber noch lange nicht, dass du auf Registerebene verstehst, wie die CPU die Maschinenbefehle umsetzt, du vorhersehen kannst, was der Compiler genau aus deinem Programmcode macht oder du einen "perfekten" Grafikkartentreiber schreiben kannst. Ganz davon abgesehen das bei der Spielentwicklung das klassische Programmieren nur ein Problem unter vielen ist.
christan
Lt. Commander
- Registriert
- Mai 2014
- Beiträge
- 1.057
Außerdem: Kein modernes technisches Gerät wird heutzutage von einer Person konstruiert. Ob es das Auto, der Computer oder die Waschmaschine ist. Jeder Prozess wird in Aufgabenbereiche eingeteilt und von spezialisierten Arbeitern entgegengenommen. Das ist bei Spielen genau dasselbe. Der Programmierer hat i.d.R. keine Ahnung vom Grafikdesign und manche werden nie einen Einblick in die anderen Bereiche erhalten. Und so ist es vermutlich unmöglich ein Auto oder einen Computer bis in jede kleinste Ecke zu kennen und zu verstehen, auch wenn ich mir das manchmal ebenso wünsche.
Merle
Fleet Admiral
- Registriert
- März 2009
- Beiträge
- 11.624
Genau das ist es ja. Such dir 2-3 Themengebiete, die dich am meisten interessieren, und investiere dein Engagement lieber dort hinein.
Zeit ist eine endliche Ressource. Irgendwann soll das Lernen nämlich dem Anwenden weichen. Du willst ja auch mal was verdienen, oder?
Und beim Anwenden endet der Lernprozess ja auch nicht direkt, er verlagert sich nur ins praktische. Und ich glaube, aus der Art wie du schreibst herausgelesen zu haben, dass dir genau das fehlt. Praxis.
Zeit ist eine endliche Ressource. Irgendwann soll das Lernen nämlich dem Anwenden weichen. Du willst ja auch mal was verdienen, oder?
Und beim Anwenden endet der Lernprozess ja auch nicht direkt, er verlagert sich nur ins praktische. Und ich glaube, aus der Art wie du schreibst herausgelesen zu haben, dass dir genau das fehlt. Praxis.
V
VikingGe
Gast
@MathiLpHD Wenn du irgendwas zu tun brauchst und ohnehin schon C-Erfahrung hast, bau nen Z80-Emulator (gibt zwar schon zehntausende davon, aber es ist mE eine gute Übung, anhand der man versteht, wie eine einfache CPU Programme abarbeitet), bau ne kleine Plattform drum herum, die z.B. die Ein- und Ausgabe von Text auf der Konsole erlaubt und programmiere ein kleines Betriebssystem dafür. Das nimmt nicht einmal übermäßig viel Zeit in Anspruch.
Wie z.B. das Instruction Scheduling auf modernen CPUs funktioniert und solche Sachen, lernt man auch im Studium, wenn man die richtigen Vorlesungen besucht. Ist ein sehr interessantes Thema, aber nichts, was man sich mal so eben selbst beibringt, wenn man noch ziemlich am Anfang steht.
@alle anderen, die ihm hier sagen, man solle sich besser spezialisieren: Um das zu können, muss man erst einmal ein grundlegendes Verständnis dafür haben, was es überhaupt für Bereiche gibt, wie die zusammenhängen und was einem am Ende überhaupt Spaß macht. Da kann er ruhig mal das Rad neu erfinden - auch wenn ich ebenfalls der Meinung bin, dass es wenig bringt, sich jahrelang damit zu beschäftigen, eine eigene CPU im 80er Jahre-Stil zu bauen.
Wie z.B. das Instruction Scheduling auf modernen CPUs funktioniert und solche Sachen, lernt man auch im Studium, wenn man die richtigen Vorlesungen besucht. Ist ein sehr interessantes Thema, aber nichts, was man sich mal so eben selbst beibringt, wenn man noch ziemlich am Anfang steht.
@alle anderen, die ihm hier sagen, man solle sich besser spezialisieren: Um das zu können, muss man erst einmal ein grundlegendes Verständnis dafür haben, was es überhaupt für Bereiche gibt, wie die zusammenhängen und was einem am Ende überhaupt Spaß macht. Da kann er ruhig mal das Rad neu erfinden - auch wenn ich ebenfalls der Meinung bin, dass es wenig bringt, sich jahrelang damit zu beschäftigen, eine eigene CPU im 80er Jahre-Stil zu bauen.
Zuletzt bearbeitet:
Werde das mal probieren, lese mir aber momentan das IT-Handbuch für Fachinformatiker durch. Ich habe auch nicht vor eine CPU zu konstruieren, ich wollte mir nur einmal den Aufbau und die Funktionsweise eines einfachen Prozessors anschauen, und das geht vermutlich am besten, wenn ich mir alte CPU's anschaue, weil die am wenigsten fortgeschritten sind. Ich lerne ja auch in der Schule zumindest die Grundsätze der Elektronik, allerdings arbeiten wir da zumindest momentan mehr Analog als Digital. Ich weiß, dass wir Prozessoren nächstes Jahr genauer besprechen werden, wie genau weiß ich jedoch nicht. Auch habe ich in der Schule alte, handgemachte Zeichnungen eines alten Mikrocontrollers (glaub ich zumindest) gesehen, bei dem noch Prozessor und EEP-ROM getrennte IC's waren.
Homer
Ensign
- Registriert
- Okt. 2012
- Beiträge
- 166
Hi 
Also wenn du wirklich ALLES über Computer lernen willst, dann fang mal mit den Computer Grundlagen an und dann arbeitest du dich durch Wikipedia und Co. Anschließend gehst du einfach auf die, "Ich will ein Computergenie werden" Schule, machst eine "Ich kann alles bauen" Ausbildung und dann musst du nur noch 100 Jahre meditieren um alles im Kopf behalten zu können, weil es einfach so viele Infos sind.
Ne, mal Spaß beiseite. Computer Grundlagen gehören dazu, auch wenn sie alltäglich erscheinen. In diesem Fall hab ich dir das aus reiner, nettgemeinter Ironie gezeigt, normalerweise würde ich so ein Blatt eher meiner Oma geben, falls sie Probleme mit dem Verständnis eines Programms/Symbols am PC hat, oder vergessen hat wie man die E-mails aufmacht.

Also nicht beleidigt fühlen, hab heute nen Clown gefrühstückt.
Liebe Grüße
Also wenn du wirklich ALLES über Computer lernen willst, dann fang mal mit den Computer Grundlagen an und dann arbeitest du dich durch Wikipedia und Co. Anschließend gehst du einfach auf die, "Ich will ein Computergenie werden" Schule, machst eine "Ich kann alles bauen" Ausbildung und dann musst du nur noch 100 Jahre meditieren um alles im Kopf behalten zu können, weil es einfach so viele Infos sind.
Ne, mal Spaß beiseite. Computer Grundlagen gehören dazu, auch wenn sie alltäglich erscheinen. In diesem Fall hab ich dir das aus reiner, nettgemeinter Ironie gezeigt, normalerweise würde ich so ein Blatt eher meiner Oma geben, falls sie Probleme mit dem Verständnis eines Programms/Symbols am PC hat, oder vergessen hat wie man die E-mails aufmacht.
Also nicht beleidigt fühlen, hab heute nen Clown gefrühstückt.
Liebe Grüße
Naja, ich habe mir schon eine wahrscheinlich funktionierende, sehr einfache 4-Bit-CPU(bzw. 8-Bit-CPU, da ich 4-Bit für Daten und 4-Bit für Befehle reserviert habe, um weder zwei Takt-Zyklen warten zu müssen, bis ein Befehl ausgeführt ist, noch eine Schaltung konstruieren zu müssen, die zuerst Befehle und dann Daten einließt, unter anderem auch weil ich dazu entweder einen extra Bit bräuchte oder festlege, dass immer ein Befehl und die dazugehörigen Daten hintereinanderstehen) ausgedacht, die allerdings noch mit keinem Peripherie-Gerät kommunizieren kann (da ein richtiges Steuerwerk fehlt) und momentan noch keine Schleifen, also Sprünge ausführen kann, da ich noch eine Schaltung brauche, um den Befehlszähler auf einen bestimmten Zustand zu setzen und noch einen Befehl dazu festlegen müsste. Also führt der Prozessor im Prinzip 16 Befehle aus (da ich einen 4-Bit-Adressbus habe und auch 16 Arbeitsspeicherzellen einplane) und fängt dann wieder von vorne an, da sich der Befehlszähler am Ende selbst Resetet und von vorne zu zählen anfängt.
Mir fällt gerade auf, dass ich mindestens 2 Datensätze brauche, um etwas rechnen zu können... Fail XD
Mir fällt gerade auf, dass ich mindestens 2 Datensätze brauche, um etwas rechnen zu können... Fail XD
Zuletzt bearbeitet:
Bob1337 schrieb:
VHDL bedarf aber auch ein paar anderer Denkweisen was das Programmieren betrifft. Wenn man parallel mit VHDL arbeitet und in der Uni nebenbei noch Matlab, C und Java lernt verwechselt man hier und da mal was und wundert sich, wieso auf einmal etwas nicht funktioniert. Hatte damit schon sehr viel Spaß gehabt
SoDaTierchen
Commodore Pro
- Registriert
- Feb. 2011
- Beiträge
- 4.607
@MathiLpHD:
Sämtliche Vorredner hatten tatsächlich recht: Es ist unmöglich alles über Computer zu wissen. Schon alleine, weil die Zeit, die vergeht, bis du sämtliches Wissen einmal gesehen hast (angenommen du verstehst es sofort beim ersten mal sehen) die Lebenszeit eines Menschen um ein vielfaches übersteigt.
Im Laufe des Threads hattest du ein kleines Einsehen und dich darauf reduziert, dass du einen PC dahingehend verstehen möchtest, dass du hardwarenah und -optimiert programmieren kannst. Lektüre zu diesem Thema ist leider oberflächlich (also erzählt dir wie du das machst, selten warum) oder sehr spezialisiert (du bräuchtest pro Thema ein Buch). Das liegt aber auch schlicht an dem Umfang, der damit einhergeht.
Am besten fährst du, wenn du dir eine Liste mit Sachen erstellst, die du wissen möchtest, dann dazu Lektüre suchst (ob als Buch, als Wikipedia-Artikel, als Zeitschrift oder als was anderes ist eigentlich egal) und diese verstehst. Dabei werden häufiger Passagen auftauchen, die so scheinbar keinen Sinn ergeben, speziell die mathematischen Teile. Hier ist dann ein Ausreißer zur Mathematik notwendig, um diese zu verstehen.
Vielleicht ein paar gute Ansätze:
Aus der Rubrik Grundlagen:
- formale Grammatiken (werden idR. im ersten und zweiten Semester jedes Informatik-Studiums beigebracht)
- boolsche Algebra (recht schnell erlernt, aber fast das wichtigste, um Bits zu verstehen)
- Nebenläufigkeit (um Hardware ab ca. 1990 zu verstehen)
- CPU Op-Codes ansehen (du musst keinen einzigen können, einfach das verstehen hilft)
- CPU Befehlszyklus ansehen (fürs hardwarenahe programmieren und mikro-optimierung hilfreich)
- Scheduling (werden idR. im zweiten bis vierten Semester jedes Informatik-Studiums beigebracht)
Aus der Rubrik Hardware:
- Turing-Maschine verstehen und auch mal benutzen (SEHR hilfreich fürs Grundlagenverständnis)
- Aufbau einer einfachen Addierer-Schaltung erlernen, eigene Schaltung bauen (notwendig fürs Verständnis von Schaltungen, auch die Praxis)
- Teile eines Prozessors ansehen, z.B. einen erklärten Die-Shot. Weiterführend: Interessante Teile separat anlesen
- Aufbau eines BUS-Systems (absolut notwendig um Kommunikation von CPU mit anderer Hardware zu verstehen)
- Funktionsweise von Interrupts (nicht unbedingt nötig, aber interessant)
- Bestandteile eines PCs, bei Bedarf interessante Teile separat anlesen.
- Falls auch Grafikprogrammierung ansteht: separat erlernen. GPUs sind ein eigenes gigantisches Thema
- PC-Peripherie ansehen, interessante Teile separat anlesen
Aus der Rubrik Software:
- Assembler programmieren. Auch wenn du Assembler nicht magst, näher an die Hardware kommst du nicht (bzw. ist es dann nicht mehr zeiteffizient möglich noch etwas zu verstehen)
- Verstehen, wie Bibliotheken funktionieren. Sowohl statische Bibliotheken als auch dynamische Bibliotheken sind fürs Verständnis von großen Programmen hilfreich.
Selbst wenn du das alles durch hast (realistisch brauchst du dafür ca. 5 Jahre, wenn du keine weiteren Verpflichtungen hast) bist du noch weit weg davon alles zu wissen. Aber du hast ein SEHR breites Grundwissen und nach Ablauf der 5 Jahre auch definitiv eine Vorstellungen, was du danach damit machen willst.
Um mal aus eigener Erfahrung zu erzählen: Am Anfang sind die Grundlagen absolut notwendig, das heißt der Start ist trocken und öde (außer man fährt auf Mathematik ab). Danach kannst du durch kleine Projektaufgaben aber SEHR viel lernen. Wichtig dabei ist aber, nicht mehrere Aufgaben parallel abzuarbeiten, sondern nacheinander. Und Pausen einzulegen (wobei man in den Pausen wieder weitere Grundlagen lernen könnte oder andere Themen anlesen). Speziell die Aufgabe "Programmieren eines eigenen Betriebssystems" - wobei nach einem halben Jahr nur ein Bootloader mit eigenem Dateisystem und der Möglichkeit beliebigen C-Code auszuführen stand - hat sehr sehr viel Wissen gebracht. Hier war aber nicht die Theorie das ausschlaggebende, sondern die Praxis. Dass man das "Betriebssystem" soweit programmiert, bis es wirklich läuft und dass man es vor allem versteht hat so viel mehr an Wissen gebracht als zu lesen, wie man das macht.
Theoretisch Sachen wissen ist zwar ganz gut, aber du verstehst es erst wirklich, wenn du es mal gemacht hast. Kein Bereich der Computer ist durch Theorie vollständig erlernbar. Die Eigenheiten der Praxis machen es einfach aus.
Sämtliche Vorredner hatten tatsächlich recht: Es ist unmöglich alles über Computer zu wissen. Schon alleine, weil die Zeit, die vergeht, bis du sämtliches Wissen einmal gesehen hast (angenommen du verstehst es sofort beim ersten mal sehen) die Lebenszeit eines Menschen um ein vielfaches übersteigt.
Im Laufe des Threads hattest du ein kleines Einsehen und dich darauf reduziert, dass du einen PC dahingehend verstehen möchtest, dass du hardwarenah und -optimiert programmieren kannst. Lektüre zu diesem Thema ist leider oberflächlich (also erzählt dir wie du das machst, selten warum) oder sehr spezialisiert (du bräuchtest pro Thema ein Buch). Das liegt aber auch schlicht an dem Umfang, der damit einhergeht.
Am besten fährst du, wenn du dir eine Liste mit Sachen erstellst, die du wissen möchtest, dann dazu Lektüre suchst (ob als Buch, als Wikipedia-Artikel, als Zeitschrift oder als was anderes ist eigentlich egal) und diese verstehst. Dabei werden häufiger Passagen auftauchen, die so scheinbar keinen Sinn ergeben, speziell die mathematischen Teile. Hier ist dann ein Ausreißer zur Mathematik notwendig, um diese zu verstehen.
Vielleicht ein paar gute Ansätze:
Aus der Rubrik Grundlagen:
- formale Grammatiken (werden idR. im ersten und zweiten Semester jedes Informatik-Studiums beigebracht)
- boolsche Algebra (recht schnell erlernt, aber fast das wichtigste, um Bits zu verstehen)
- Nebenläufigkeit (um Hardware ab ca. 1990 zu verstehen)
- CPU Op-Codes ansehen (du musst keinen einzigen können, einfach das verstehen hilft)
- CPU Befehlszyklus ansehen (fürs hardwarenahe programmieren und mikro-optimierung hilfreich)
- Scheduling (werden idR. im zweiten bis vierten Semester jedes Informatik-Studiums beigebracht)
Aus der Rubrik Hardware:
- Turing-Maschine verstehen und auch mal benutzen (SEHR hilfreich fürs Grundlagenverständnis)
- Aufbau einer einfachen Addierer-Schaltung erlernen, eigene Schaltung bauen (notwendig fürs Verständnis von Schaltungen, auch die Praxis)
- Teile eines Prozessors ansehen, z.B. einen erklärten Die-Shot. Weiterführend: Interessante Teile separat anlesen
- Aufbau eines BUS-Systems (absolut notwendig um Kommunikation von CPU mit anderer Hardware zu verstehen)
- Funktionsweise von Interrupts (nicht unbedingt nötig, aber interessant)
- Bestandteile eines PCs, bei Bedarf interessante Teile separat anlesen.
- Falls auch Grafikprogrammierung ansteht: separat erlernen. GPUs sind ein eigenes gigantisches Thema
- PC-Peripherie ansehen, interessante Teile separat anlesen
Aus der Rubrik Software:
- Assembler programmieren. Auch wenn du Assembler nicht magst, näher an die Hardware kommst du nicht (bzw. ist es dann nicht mehr zeiteffizient möglich noch etwas zu verstehen)
- Verstehen, wie Bibliotheken funktionieren. Sowohl statische Bibliotheken als auch dynamische Bibliotheken sind fürs Verständnis von großen Programmen hilfreich.
Selbst wenn du das alles durch hast (realistisch brauchst du dafür ca. 5 Jahre, wenn du keine weiteren Verpflichtungen hast) bist du noch weit weg davon alles zu wissen. Aber du hast ein SEHR breites Grundwissen und nach Ablauf der 5 Jahre auch definitiv eine Vorstellungen, was du danach damit machen willst.
Um mal aus eigener Erfahrung zu erzählen: Am Anfang sind die Grundlagen absolut notwendig, das heißt der Start ist trocken und öde (außer man fährt auf Mathematik ab). Danach kannst du durch kleine Projektaufgaben aber SEHR viel lernen. Wichtig dabei ist aber, nicht mehrere Aufgaben parallel abzuarbeiten, sondern nacheinander. Und Pausen einzulegen (wobei man in den Pausen wieder weitere Grundlagen lernen könnte oder andere Themen anlesen). Speziell die Aufgabe "Programmieren eines eigenen Betriebssystems" - wobei nach einem halben Jahr nur ein Bootloader mit eigenem Dateisystem und der Möglichkeit beliebigen C-Code auszuführen stand - hat sehr sehr viel Wissen gebracht. Hier war aber nicht die Theorie das ausschlaggebende, sondern die Praxis. Dass man das "Betriebssystem" soweit programmiert, bis es wirklich läuft und dass man es vor allem versteht hat so viel mehr an Wissen gebracht als zu lesen, wie man das macht.
Theoretisch Sachen wissen ist zwar ganz gut, aber du verstehst es erst wirklich, wenn du es mal gemacht hast. Kein Bereich der Computer ist durch Theorie vollständig erlernbar. Die Eigenheiten der Praxis machen es einfach aus.
Okay, dann werde ich mal auflisten, was ich von den von dir genannten Themen schon kann bzw. nicht kann:
Grundlagen:
-formale Grammatiken: Keine Ahnung was das ist
-boolsche Algebra: Schon seit zwei Jahren aus der Schule bekannt
-Nebenläufigkeit, CPU OP-Codes usw.: Keine Ahnung
Hardware:
-Turing-Maschine: Aus einem verlinktem Buch
-Addierer-Schaltung und andere Logikschaltungen: Schon seit zwei Jahren regelmäßig in der Schule
-Teile eines Prozessors: Wie gesagt, ich habe eine Idee für einen einfachen 4-Bit-Prozessor. Ansonsten muss ich mir noch einen echten Prozessor anschauen.
-Aufbau eines BUS-Systems: Naja, ein BUS besteht doch aus Datenleitungen, Adressleitungen und Steuerleitungen. Die Adressleitungen geben an, welches Gerät/Speicherzelle/etc. angesprochen werden soll und die Steuerleitungen geben an, ob Daten von den Datenleitungen eingelesen oder ausgegeben werden sollen. Zählt das Steuerwerk auch zu einem BUS-System?
-Interrupts: Sind Befehle, die eigene Pins am Prozessor haben, also nicht das normale BUS-System nutzen (so viel ich weiß) und der CPU verschiedene Dinge signalisieren. Das geht von Eingaben bis zu Systemfehlern etc.. Lieg ich da richtig?
-Bestandteile eines PC's: Ich habe mir schon einen PC selber zusammengebaut und auch in der Schule "alle" Bestandteile eines PC's kennengelernt
-GPU's muss ich noch lernen
-PC-Peripherie: Wie genau meinst du das?
Software
-Assembler: Werde ich wohl lernen müssen
-Bibliotheken: Muss ich noch machen
Grundlagen:
-formale Grammatiken: Keine Ahnung was das ist
-boolsche Algebra: Schon seit zwei Jahren aus der Schule bekannt
-Nebenläufigkeit, CPU OP-Codes usw.: Keine Ahnung
Hardware:
-Turing-Maschine: Aus einem verlinktem Buch
-Addierer-Schaltung und andere Logikschaltungen: Schon seit zwei Jahren regelmäßig in der Schule
-Teile eines Prozessors: Wie gesagt, ich habe eine Idee für einen einfachen 4-Bit-Prozessor. Ansonsten muss ich mir noch einen echten Prozessor anschauen.
-Aufbau eines BUS-Systems: Naja, ein BUS besteht doch aus Datenleitungen, Adressleitungen und Steuerleitungen. Die Adressleitungen geben an, welches Gerät/Speicherzelle/etc. angesprochen werden soll und die Steuerleitungen geben an, ob Daten von den Datenleitungen eingelesen oder ausgegeben werden sollen. Zählt das Steuerwerk auch zu einem BUS-System?
-Interrupts: Sind Befehle, die eigene Pins am Prozessor haben, also nicht das normale BUS-System nutzen (so viel ich weiß) und der CPU verschiedene Dinge signalisieren. Das geht von Eingaben bis zu Systemfehlern etc.. Lieg ich da richtig?
-Bestandteile eines PC's: Ich habe mir schon einen PC selber zusammengebaut und auch in der Schule "alle" Bestandteile eines PC's kennengelernt
-GPU's muss ich noch lernen
-PC-Peripherie: Wie genau meinst du das?
Software
-Assembler: Werde ich wohl lernen müssen
-Bibliotheken: Muss ich noch machen
SoDaTierchen
Commodore Pro
- Registriert
- Feb. 2011
- Beiträge
- 4.607
formale Grammatiken fördern das Verständnis. Am besten mal den Wiki-Artikel lesen, das hilft schon.
Nebenläufigkeit ist wichtig um zu verstehen, wieso mehrere Programme auf einem Prozessor laufen können. CPU OP-Codes sind eher ein NiceToKnow um zu verstehen, wieso der Prozessor tut was er tun soll.
Teile eines Prozessors: Ist nicht zwingend nötig, da du ALUs ja schon kennst. Ist auch eher die Frage inwieweit man das kennen möchte. Interessant sind noch Caches (wobei hier theoretisch auch zu wissen reicht, dass du diese auf der CPU ohnehin nicht bewusst nutzen kannst), Branch Prediction Unit (wer das kennt findet if-anweisungen plötzlich blöd) und der Hardware-Scheduler (läuft auf fast das selbe hinaus).
Aufbau eines Bus-Systems: Ja, im Prinzip trifft das so zu.
Interrupts: Jain. Interrupts können auch über BUS-Systeme laufen. Üblicherweise werden diese verwendet, um zeitkritische oder asynchrone Vorgänge an die CPU zu melden. Zum Beispiel, wenn eine Festplatte mit dem Lese-Vorgang fertig ist wird auch ein Interrupt ausgelöst. Der Wiki-Artikel hilft hier auch
PC-Peripherie: Maus, Tastatur, Drucker ... alles außerhalb des PCs. Je nachdem, ob du das auch wissen möchtest.
Assembler: Dringende Empfehlung, JA, lern das. Du musst es ja nicht mögen, aber das Wissen über Register, Sprünge, Funktionen und Seiteneffekte wird dir sehr viel Wissen bringen.
Bibliotheken: Solltest du. Ist für das Verständnis ungemein förderlich, wenn auch nicht notwendig zu wissen.
Ansonsten gilt wie bei allen Foren-Themen: Wenn du konkrete Fragen zu einem Thema hast, kannst du diese hier gerne formulieren
Dann sind viele von uns bereit dir auch Hilfe anzubieten.
Nebenläufigkeit ist wichtig um zu verstehen, wieso mehrere Programme auf einem Prozessor laufen können. CPU OP-Codes sind eher ein NiceToKnow um zu verstehen, wieso der Prozessor tut was er tun soll.
Teile eines Prozessors: Ist nicht zwingend nötig, da du ALUs ja schon kennst. Ist auch eher die Frage inwieweit man das kennen möchte. Interessant sind noch Caches (wobei hier theoretisch auch zu wissen reicht, dass du diese auf der CPU ohnehin nicht bewusst nutzen kannst), Branch Prediction Unit (wer das kennt findet if-anweisungen plötzlich blöd) und der Hardware-Scheduler (läuft auf fast das selbe hinaus).
Aufbau eines Bus-Systems: Ja, im Prinzip trifft das so zu.
Interrupts: Jain. Interrupts können auch über BUS-Systeme laufen. Üblicherweise werden diese verwendet, um zeitkritische oder asynchrone Vorgänge an die CPU zu melden. Zum Beispiel, wenn eine Festplatte mit dem Lese-Vorgang fertig ist wird auch ein Interrupt ausgelöst. Der Wiki-Artikel hilft hier auch
PC-Peripherie: Maus, Tastatur, Drucker ... alles außerhalb des PCs. Je nachdem, ob du das auch wissen möchtest.
Assembler: Dringende Empfehlung, JA, lern das. Du musst es ja nicht mögen, aber das Wissen über Register, Sprünge, Funktionen und Seiteneffekte wird dir sehr viel Wissen bringen.
Bibliotheken: Solltest du. Ist für das Verständnis ungemein förderlich, wenn auch nicht notwendig zu wissen.
Ansonsten gilt wie bei allen Foren-Themen: Wenn du konkrete Fragen zu einem Thema hast, kannst du diese hier gerne formulieren
Also wenn Performance wichtig ist (z.B. bei Spielen) gehört das wissen darüber, wie Caches funktionieren (bzw. wie sie sich verhalten) zu den absoluten Grundlagen. Der Algorithmus oder die Datenstruktur kann in der Theorie noch so effizient sein. Wenn es sich nicht cachefreundlich implementiert ist, dann hat man verloren.SoDaTierchen schrieb:Interessant sind noch Caches (wobei hier theoretisch auch zu wissen reicht, dass du diese auf der CPU ohnehin nicht bewusst nutzen kannst),
SoDaTierchen
Commodore Pro
- Registriert
- Feb. 2011
- Beiträge
- 4.607
@Miuwa: Das ist bedingt richtig. Allerdings hilft hier Wissen über die Branch Prediction Units teils erheblich mehr weiter. Auch sind bestimmte Sprachspezifiken ungemein hilfreich. Im Prinzip ist es wichtig zu wissen, was wann im Cache landet (zumindest ungefähr, genau kann man das ohnehin nicht wissen) und wie man davon am besten profitiert bzw. am wenigsten Cache Misses produziert. Und das schafft man am besten, wenn man dem Programm keine unerwarteten Sprünge auferlegt und nicht vollkommen quer durch den Speicher referenziert.
Den CPU-Cache kann man leider (oder zum Glück) nicht aktiv beeinflussen. Daher ist hier eher das Wissen, was im Cache landet, wichtig, als wie der Cache selber funktioniert.
Eventuell noch ein Wort zu den Sprachspezifiken, bevor ich das ganz unkommentiert lasse: In C# zum Beispiel ist es so, dass die ersten 4 Funktionsparameter in den Registern abgelegt werden, alle weiteren landen im Hauptspeicher. Daher sind Funktionen mit mehr als 4 Parametern im Aufruf um ein vielfaches langsamer als solche mit weniger Parametern. Das ist nur ein Beispiel und muss nicht für jede Programmiersprache gelten. Hier sollte man sich über seine Wunschsprache informieren.
Den CPU-Cache kann man leider (oder zum Glück) nicht aktiv beeinflussen. Daher ist hier eher das Wissen, was im Cache landet, wichtig, als wie der Cache selber funktioniert.
Eventuell noch ein Wort zu den Sprachspezifiken, bevor ich das ganz unkommentiert lasse: In C# zum Beispiel ist es so, dass die ersten 4 Funktionsparameter in den Registern abgelegt werden, alle weiteren landen im Hauptspeicher. Daher sind Funktionen mit mehr als 4 Parametern im Aufruf um ein vielfaches langsamer als solche mit weniger Parametern. Das ist nur ein Beispiel und muss nicht für jede Programmiersprache gelten. Hier sollte man sich über seine Wunschsprache informieren.
Ähnliche Themen
- Antworten
- 6
- Aufrufe
- 914
- Antworten
- 11
- Aufrufe
- 2.047
- Antworten
- 12
- Aufrufe
- 4.854
- Antworten
- 11
- Aufrufe
- 32.483