Ist es sinnvoll um programmieren zu lernen mit Assembler zu beginnen?
Bitte mit Begründung.
11 Antworten
Ich lese in einem Kommentar, dass du ne App, eine Art Messenger, entwickeln willst. - Dann würde ich dir das nicht empfehlen. Klar ist es gut, wenn du weißt, was dahinter steckt - aber es bringt dir objektiv gesehen nichts und ist aus meiner Sicht pure Zeitverschwendung.
Die Zeiten sind (glücklicherweise) vorbei, in denen man sich durch Register, Speicher und Pointer arbeiten musste, um den simpelsten Befehl auszuführen. Kurzum: wenn du direkt ne Hochsprache lernst, machst du auch nichts falsch. Siehe auch https://de.wikipedia.org/wiki/H%C3%B6here_Programmiersprache.
Welche Sprache das ist, entscheidet die Plattform, für die du die App entwickeln willst.
Schau mal hier: https://de.wikipedia.org/wiki/Assemblersprache#Vergleich_zur_Programmierung_in_einer_Hochsprache Hier sind die Nachteile und Vorteile von Assembler aufgelistet.
Besser ist es wenn man eine höhere Programmiersprache verwendet. Für Programmiereinsteiger empfehle ich Python. Das ist eine plattformunabhängige Programmiersprache. Man kann, falls einem der Funktionsumfang nicht reicht auch externe Bibliotheken einbinden.
Hier die benötigten Downloads für Windows:
- Python: https://www.python.org/ftp/python/3.6.5/python-3.6.5-amd64.exe
- pyCharm, das ist eine Entwicklungsumgebung für Python bestehend aus einem Editor mit Syntaxhervorhebung. Syntaxfehler werden sofort angezeigt. Hier der Download: https://www.jetbrains.com/pycharm/download/#section=windows Wähle die Community Version aus. Diese ist kostenlos
Hier gibt es eine Möglichkeit Python-Programmen in EXE-Dateien zu kompilieren. Dazu benötigt man folgendes: (bitte in dieser Reihenfolge installieren)
- MinGW Compiler: https://sourceforge.net/projects/mingw-w64/files/Toolchains%20targetting%20Win32/Personal%20Builds/mingw-builds/installer/mingw-w64-install.exe/download
- Nuitka: http://nuitka.net/releases/Nuitka-5.1.300.win-amd64.py36.msi
Und so kompiliert man ein Python-Programm damit. Man erstellt sich in Windows einen Ordner mit dem Namen Python-Projekte. Dort speichert man das Python-Programm ab. Dann ruft man von diesem Ordner aus die Powershell auf und gibt folgendes ein:
- nuitka --recurse-all --standalone programmname.py
Das erzeugt in dem Ordner Python-Projekte 2 weitere Ordner. Einmal programmname.build und programmname.dist. Der Ordner programmname.build kann nach dem Kompilieren gelöscht werden. Im Ordner programmname.dist befindet sich das kompilierte Python-Programm mit dem Namen programmname.exe und den Laufzeitbibliotheken.
Als Abschluss hat man noch die Möglichkeit das kompilierte Programm in eine Installationsroutine zu verpacken. Dazu benötigt man Inno Setup. Hier der Downlad: http://jrsoftware.org/download.php/is.exe?site=2 Dann muss man mit Inno Setup den ganzen Ordnerinhalt von programmname.dist im Assistenten hinzufügen. Inno Setup verpackt dann das ganze und erstellt eine setup.exe.Ideal wenn man das Programm weitergeben möchte.
Hier ein Python Tutorial: https://www.python-kurs.eu/python3_kurs.php Der Bereich Tkinter Tutorial erklärt wie man grafische Programme programmiert.
Man lernt dort an Hand von Beispielen.
P.S. Python wird auch verwendet um einen Einplatinencomputer wie z.B. den Raspberry Pi zu programmieren.
Die Zukunft des Programmierens ist die indem man plattformunabhängig programmiert.
Ein klares Nein.
Ich gehöre noch zu der Generation, die mit Assembler und sogar Maschinensprache aufgewachsen ist. C war das höchste der Gefühle, BASIC der nach dem Booten zur Verfügung stehende Standard. Dieses Wissen habe ich zwischenzeitlich, als ich Übergabemechanismen von FORTRAN nach C implementierte, noch ein wenig angewendet.
Später brauchte ich es so gut wie gar nicht. Wozu auch. Nicht einmal FORTH oder C sind so maschinennah, dass man das brauchte. Dafür halfen mir die Listenkonzepte von FORTH, in C abstrakter und damit besser (und effizienter) zu programmieren.
Heutige Compiler machen einen guten Job und optimieren eigenständig. Heutige Programme sind (endlich) so komplex (wie schon damals nötig gewesen wäre), da ist es wichtiger, sich auf die Fachaufgabe zu konzentrieren. Die sollte man möglichst ideal und abstrakt lösen - und i.d.R. hat der Rechner genug Power, wenn er nicht ausgebremst wird von On-Demand-Virenscannern (statt eine Datei beim Schreiben zu scannen und auf Betriebssystemebene zu versiegeln) und anderen schlechten Konzepten. Schlimmer sieht es also bei dem ganzen Overhead von Betriebssystem, Bibliotheken etc. aus, aber das verbessert man nicht auf Assemblerebene, sondern durch ausdünnen und Reduktion der Aufrufe und bessere Konzepte (z.B. einem gesicherten "Datei ist gescannt"-Attribut für einen Virenscanner).
Nur wenn Du Prozessoren entwickeln oder Compiler schreiben oder komplexe Berechnungen optimieren oder tiefe Schichten des Betriebssystems erstellen oder detailreiche Spiele programmieren willst, ist es sinnvoll, die dazu notwendigen Hintergründe zu kennen oder gar auf dieser Ebene zu programmieren. Da aber 95% der Programmierer anderes tun, brauchen 95% dies nicht.
Andererseits: Schaden wird es auch nicht. Aber mehr als Assembler fehlt den meisten Programmen eine gute High-Level-Abstraktion. Lerne lieber Entwurfsmuster und 2-3 nicht-ähnliche Hochsprachen.
Nein ist es nicht. Da assembler nicht viel gemeinsam hat mit neueren Programmiersprachen.
Architekten fangen doch auch nicht mit dem designen von Lehm hütten an......
Du hast erst krabbeln gelernt (Assembler), aber daran erinnerst du dich nicht mehr, also fang mit gehen an (C, FORTRAN, Python) dann lerne rennen (Java, C++ objektorientiere Programmiersprachen)
muss ich nicht erst gehen lernen bevor ich rennen kann?
Es gibt viele Dinge bei denen dieser Vergleich passt, Programmieren zu lernen ist keines davon. (zumindest nicht wenn gehen = Assembler)
Aber um die Methapher mal aufzugreifen: Assembler ist weniger gehen als mehr auf allen vieren durch die Savanne zu streifen, immer auf der Hut vor wilden Tieren, die einen minimal unaufmerksamen Programmierer mit Leichtigkeit erlegen un verspeisen können.
Assembler ist zwar so ziemlich der Ursprung der Programmmierung (zumindest sehr nah dran), aber nicht unbedingt eine Grundlage um Programmierung an sich zu lernen.
Naja, wenn du mit Assembler beginnen möchtest, musst du dich auf viele Sachen vorbereiten. Assembler ist definitiv einer der Programmiersprachen, die ganz unten sind. Keine objektorientierte Sprache, nur einige Methoden, oft ist ein Zugriff auf den Grafik- und Speicher nötig, also definitives Nein. Tatsächlich teile ich trotzdem gewissermaßen die Meinung von #Astrobiophys, denn wenn du Assembler beherrschst, verstehst du den Computer und wie er funktioniert, und wie Funktionen wie g.drawString in Java funktionieren oder wie das I/O funktioniert. Wenn du wirklich Grips hast, sollte es kein großes Problem sein, jedoch kann das Perfektionieren und Einprägen von der Funktionsweise von Assembler ein Jahrzehnt lang dauern. Deshalb empfehle ich dir wenigstens mit C++ oder C zu beginnen, wenn du es etwas komplizierter haben möchtest.
aber es ist doch deren grundlage? muss ich nicht erst gehen lernen bevor ich rennen kann?