Tiefergehendes Verständnis - welche Programmiersprache (Einsteiger) ?

Registriert
Apr. 2010
Beiträge
7
Hi,

ich suche nach Möglichkeiten mein Verständnis von Computern, insbesondere deren Funktionsweise, zu erweitern. Mein Problem besteht darin, dass mir die Anwendung von PC/OS/Applications/etc. keine/wenig Mühe bereitet, ich aber nicht das WIE und WARUM verstehe.

Deshalb würde ich gerne eure Meinungen/Erfahrungen lesen, ob das Programmieren eine empfehlenswerte Möglichkeit zur Erweiterung des Verständnisses ist und welche Programmiersprachen dafür geeignet sind. Die Sprache sollte die 'dahinter verborgene Logik' (falls es eine gibt
biggrin.gif
) möglichst exakt wiedergeben, also ins Detail gehen und nicht nur an der Oberfläche kratzen, sowie viel Raum für Fehler und 'Handarbeit' bieten (ganz nach dem Motto "Experĭentia est optĭma rerum magistra"). Letztendlich bitte ich euch, dazu passende und empfehlenswerte Lektüre zu nennen.

Ich hoffe ich konnte mein Anliegen einigermaßen verdeutlichen
verwirrt.gif


Gruß
curiositas1993

PS: Ich habe diese Frage auch bei Chip gestellt. (Meinungsvielfalt)
Link: http://forum.chip.de/programmieren/...he-programmiersprache-einsteiger-1370113.html
 
Wenn dir Assembler ebenfalls nicht die Logik dahinter verrät, dann google mal nach 'fpga' ;)
 
Weil er mit Brainfuck kein tiefergehendes Verständnis bekommt ;(
 
@Rossibaer: Aber durch Brainfuck kann man nicht wirklich die Arbeitsweise eines Computers verstehen, eher die einer Turingmaschine und das ist dann doch etwas anderes.

Assembler ist wirklich die Programmiersprache, die all das beinhaltet, was du suchst, nur ist Assembler nicht gerade die einfachste Sprache und für Anfänger sehr sehr schwer zu lernen.

Gruß
BlackMark
 
Dann habe ich eindeutig seine Anforderungen nicht verstanden:

1. Die Sprache sollte die 'dahinter verborgene Logik' (falls es eine gibt ) möglichst exakt wiedergeben
2. viel Raum für Fehler und 'Handarbeit' bieten

Assembler bietet zwar den direkten Zugriff auf die Hardware, aber die dahinter verborgene Logik bleibt ihm weiterhin "verborgen". Aber das ist nur so gefährliches Halbwissen meinerseits. Also ignorieren und weiter im Text ...
 
Assembler bietet zwar den direkten Zugriff auf die Hardware, aber die dahinter verborgene Logik bleibt ihm weiterhin "verborgen".
Nicht wirklich, durch Assembler erfährt man mehr über die Arbeitsweise der CPU, als durch Brainfuck.
Deine zwei genannten Punkte treffen auf fast jede Programmiersprache zu, oder kann man dort nicht experimentieren und haben andere Programmiersprachen keine Logik?
Aber das ist nur so gefährliches Halbwissen meinerseits. Also ignorieren und weiter im Text ...
Willst wohl nichts neues dazulernen :D

Gruß
BlackMark
 
Das allmächtige Wikipedia sagt:
Das Besondere an einer Turingmaschine ist, dass sie mit nur drei Operationen (Lesen, Schreiben und Schreib-Lese-Kopf bewegen) alle Probleme lösen kann, die auch von einem Computer gelöst werden können. Sämtliche mathematischen Grundfunktionen wie Addition und Multiplikation lassen sich mit diesen drei Operationen simulieren. Darauf aufbauend kann man dann komplexe Operationen der üblichen Computerprogramme simulieren.

Also wenn das mal nicht tiefgeht. Bei Assembler habe ich dann nur ADD, SUB etc. Was aber genau da passiert, bleibt verborgen ...

@Blackmark:
Willst wohl nichts neues dazulernen
Ne, heute ist Sonntag, da will ich nicht lernen, nur surfen und in der Nase poppeln ... :D
 
Zuletzt bearbeitet:
Also wenn das mal nicht tiefgeht. Bei Assembler habe ich dann nur ADD, SUB etc. Was aber genau da passiert, bleibt verborgen ...
Sicher ist das Tiefgründig, aber es ist eben nicht die gleiche Funktionsweise wie bei einem Computer, das wollte ich damit sagen.
Die ADD, SUB, MUL, etc. Funktionen in Assembler werden aber in allen möglichen Referenzen, Tutorials, etc. erklärt, sonst könntest du sie doch gar nicht richtig verwenden, und wenn du dazu noch mit einem Disassembler oder Debugger arbeitest siehst du sogar, was welche Funktion macht. Also würde ich schon sagen, dass Assembler sehr tiergründig ist und weiters auch die dahinter verborgene Logik zeigt.

Gruß
BlackMark
 
ja, Turingmaschine ist toll. Weiterhin wäre ein Microcodesimulator ganz nett und dann im nächsten Schritt Maschinensprache und Assembler. Also Schicht für Schicht von unten nach oben sich durchkämpfen.

Toll wäre auch, Veranstaltungen wie Compilerbau oder Semantik von Programmiersprachen zu besuchen. "Parallele Programmierung und verteilte Algorithmen" würden bei der Parallelisierung von Ideen helfen.

der hat damals im ersten Semester Spaß gemacht: http://mikrocodesimulator.de/Detailinfo/cebit95.htm (technische Informatik)
 
Also fasse ich mal kurz zusammen, wenn der TE an der "Oberfläche kratzen" will, nimmt er Assembler, wobei z.B. ADD, SUB und MUL dann als gegeben hingenommen werden müssen. Wenn er aber auch noch tiefer gehen will, dann simuliert er die hinter diesen Funktionen stehende Logik über Brainfuck. ;)

Aber egal, das gleitet jetzt zu sehr in einer Grundsatzdiskussion ab. Ihr habt ja recht, für das was der TE wahrscheinlich will, wäre Assembler sicher eine gute Wahl und alle mal besser als Brainfuck.

Mist! Jetzt habe ich doch mein eigentliches Sonntagsziel verfehlt: Surfen und Nase poppeln ... :D Aber man lernt nie aus.
 
Also ich hätte da eine Buch-Empfehlung:

Hacking - Die Kunst des Exploits von Jon Erickson

Behandelt wird zwar nicht unbedingt die Softwareentwicklung,
aber es liegt unter anderem eine Einführung in die Assemblersprache vor.

Wie in der Einleitung erwähnt, beschäftigt sich das Buch nicht mit Schädlingen
und wie diese programmiert werden, sondern wie man Probleme sinnvoll und
elegant lösen kann ("Hacking").

Empfehlenswert, erfordert aber Geduld und Einarbeitungszeit. Vorkenntnisse
in der Programmierung wären auch nicht schlecht.
 
Schonmal vielen vielen Dank euch allen :daumen:

Laut wiki:
http://de.wikipedia.org/wiki/Assemblersprache schrieb:
Eine Assemblersprache ist eine spezielle Programmiersprache, welche die Maschinensprache einer spezifischen Prozessorarchitektur in einer für den Menschen lesbaren Form repräsentiert. Jede Computerarchitektur hat folglich ihre eigene Assemblersprache.

Assembly ist also von der CPU-Architektur abhängig (auch vom OS?). Ist das nicht ein Problem beim Erlernen? Kommen die Änderungen von einer Architektur zur Anderen einer kompletten Umstellung gleich, oder gibt so etwas wie einen 'roten Faden'?
Ich habe z.B. derzeit einen Q9550 und Vista Home Premium 64 Bit, also x86-64?

Achja, die Lektüre darf auch auf Englisch sein, Deutsch wird allerdings bevorzugt. ;)
Weitere Meinungen sind ausdrücklich erwünscht. :D
 
Vom Betriebssystem ist die Assemblersprache überhaupt nicht abhängig. Und was die CPU-Architektur angeht,
gibt es in der x86-Architektur, auf der dein Prozessor aufgebaut ist, einen gemeinsamen Nenner in der Sprache
des 386, die bis heute von jedem x86 Prozessor ausgeführt wird. Darauf wurden im Laufe der Zeit viele
Erweiterungen gepflanzt, wie beim Pentium, dann mit MMX, SSE und in letzter Zeit die 64bit Erweiterungen
und beispielsweise Virtualisierungserweiterungen, wie AMD-V und VT.

All das kann man sich nach und nach aneignen, wenn man erstmal die Programmierung des 386er kennt.

Wenn du aber dann zu einer völlig anderen Architektur wechselst, wie beispielsweise ARM oder PPC, musst
du dann auch eine andere Assemblersprache lernen.
 
Schau dir evtl mal MMIX an. Der simuliert einen x86 Assambler und ist total einfach zu bedienen... da kannst du dich dann problemlos nen bissl austoben und trotzdem relativ bequem arbeiten.

Ich würd vorschlagen dann einfach erstmal mathematische Probleme zu realisieren dann bekommt man sehr schnell ein gutes Verständnis dafür wie Assambler funktioniert.
z.b. primzahlen berechnen oder so

Wenn du danach noch lust hast dann würde ich direkt den schritt zu einer einsteigerfreundlichen Programmiersprache gehen wie z.B. Java oder so.
 
Also ich habe mich vor ein paar wochen ein wenig mit dem Inline Assembler von Delphi beschäftigt und würde sagen, dass das auch ein ganz passabler Ansatz wäre, wenn man quasi neu ins Programmieren einsteigt und gleich möglichst systemnah arbeiten will.

Zusätzlich zum reinen Assembler hat man hier aber noch die Möglichkeit, relativ leichtbei Bedarf auf die anderen, konzeptionelleren Aspekte des Programmierens zuzugreifen.

Ich nehme an, dass es genauso in jeder anderen Sprache mit Inline Assembler gehen würde, aber da ich mich mit Delphi besser auskenne, hab ich halt das hier erwähnt.

Schließlich muss die "dahinter vorborgene Logik" auch nicht zwangsweise auf 0 und 1 beschränkt werden. Auch hinter OOP, API-Zugriffen, dem Gebrauch von Zeigern und Libraries verbirgt sich einiges an "Logik", die zu berücksichtigen wäre.
 
Die Logik, die sich dahinter verbirgt, repräsentiert aber nicht die Funktionsweise des Computers.
 
Soweit ich den Eingangspost verstanden habe, war auch nicht gefordert, die Logik der Hardware "Computer" möglichst genau abzubilden, sondern allgemein die Funtionsweise von PC/OS/Programmen durch eine beispielhafte Programmiersprache kennenzulernen.

Und da es in Assembler leider etwas komplizierter und unanschaulicher ist, bestimmte Aspekte des Programmierens an sich zu erlernen, weil das Erstellen von OOP-Klassen und ähnliches eine ziemliche Fummelarbeit ist, würde ich daher dringend empfehlen, den Assembler (sofern es denn wirklich einer sein muss) mit einer Hochsprache zu kombinieren, die für die entsprechenden Methodiken komfortablere Zugänge anbietet.

Falls wie hier scheinbar vom gesamten Rest angenommen tatsächlich Assembler und die einzelnen Bits als "Funktionsweise" gemeint sindm würde ich übrigens noch weiter gehen als "Assembler auf x86" und zu einem Controllerboard-Bausatz raten.
Damit bekommt man dann neben dem "Wie" zur Software auch gleich noch tiefere Einblicke in das "Wie" zur Hardware.
 
Zurück
Oben