Es gibt Unmengen spannender Arduino-Projekte. Es ist einfach erstaunlich, was man mit einem kleinen Mikrocontroller und ein bisschen Programmcode alles machen kann. Aber was ist Programmierung eigentlich und warum solltest du damit beginnen?
Computer sind einfach überall. Sie stehen auf unseren Schreibtischen, wir tragen sie in unserer Hosentasche mit uns herum und finden sie auch in Autos, Zeitschaltuhren und Thermostaten. Computern denken normalerweise nicht selbst. Jemand muss ihnen sagen, was sie tun sollen. Wenn du eine Zeitschaltuhr einstellst, um beispielsweise Abends eine Lichterkette anzuschalten, dann handelt es sich dabei bereits um einen Programmiervorgang. So einfach? Nun ja, offensichtlich hat jemand anderes zuvor die harte Arbeit für dich erledigt.
Wenn wir über Programmierung und Programmierer sprechen, denken wir im Allgemeinen an jemanden, der ein Computerprogramm schreibt. Wir haben dieses Bild im Kopf. Ein Nerd, der irgendwo im Keller in einer dunklen Kammer sitzt und magische Befehle auf seiner Tastatur eingibt. Das ist das Klischee, das wir über Programmierer haben. Die Realität könnte unterschiedlicher nicht sein. Sie ist nicht so dunkel und leider ist sie auch nicht so magisch. Aber hey, während ich dir das alles erzähle, denkst du dir vielleicht: Warum sollte mich das kümmern?
Programmieren ist nicht schwer. Auch du kannst das schaffen. Fang an deine eigenen Projekte zu entwickeln anstatt nur die Projekte anderer anzugucken. Arduino ist eine großartige Plattform für Einsteiger und bietet viel Spaß. Um es in den Worten des Linux-Autors Linus Torvalds auszudrücken:
Die meisten guten Programmierer programmieren nicht, weil sie erwarten, bezahlt zu werden oder öffentliche Anerkennung zu bekommen, sondern weil es Spaß macht, zu programmieren.
Linus Torvalds
Darüber hinaus wirst du beginnen, die Welt um dich herum besser zu verstehen. Es gibt dort keine Magie und Computer haben auch keine Persönlichkeit. Also bitte hör auf, deinen Computer anzuschreien - nichts wird sich ändern, wenn du das tust. Ich möchte noch einen weiteren Punkt hinzuzufügen. Wenn du Freude am Programmieren hast und liebst was du tust, dann möchtest du vielleicht dein Hobby zum Beruf machen und Softwareentwickler werden. Es gibt viele tolle Jobs da draußen.
Okay, zurück in den Keller. Lass uns noch ein bisschen mehr über die magischen Worte reden. Beim Programmieren verwenden wir spezielle Sprachen - Programmiersprachen. Auch wenn diese am Anfang möglicherweise schwer zu lernen sind, erlauben sie etwas wirklich Erstaunliches. Wir können für uns verständlichen Code schreiben, der dann von einer Software, dem Compiler, in etwas übersetzt werden kann, das ein Computer versteht und ausführen kann. Aber warum ist das nötig? Wäre es nicht einfacher, wenn wir einfach direkt mit dem Computer sprechen und ihm sagen, was er tun soll? Das Problem ist, dass unsere natürliche Sprache immer Interpretation erfordert. Wir alle wissen, dass nicht immer sofort klar ist, was es bedeuten, wenn Menschen etwas sagen. Die Wörter, die wir sagen, können sogar mehrdeutig sein. Wäre das bei Programmiersprachen genauso, hätte das möglicherweise unschöne Konsequenzen. Denk daran wie viele "Computer" zum Beispiel in einem Auto verbaut sind.
Er bremst. Ich denke, er will, dass ich anhalte, aber vielleicht ...
Das Auto, am Tag deines Todes
Ja, das würdest du nicht wollen. Deshalb verwenden wir Programmiersprachen. Programmiersprachen sind eindeutig.
Vielleicht hast du es schon mitbekommen, es gibt nicht nur eine Programmiersprache, es gibt Hunderte von ihnen. Warum ist das so? Programmiersprachen machen noch eine coole Sache. Sie definieren grundlegende Regeln und Konstrukte, die uns das Leben leichter machen. Der Grund, warum wir nicht Assembler zum Schreiben aller unserer Programme verwenden ist, dass es nicht sehr produktiv wäre. Es würde ewig dauern so Programme zu entwickeln. Für diejenigen, die es nicht wissen, Assembler ist eine Sprache die vor allem in der Anfangszeit der Computer und der Programmierung oft verwendet wurde. Mit einer großen Tabelle kann man den Code fast direkt in Maschinencode übersetzen. Das Problem ist, dass Assemblersprachen zwischen verschiedenen Plattformen variieren. Die Assemblersprache für einen Arduino Uno unterscheidet sich stark von der für deinen PC. Letztendlich muss man für jede Plattform eine ganz neue Sprache lernen. Aus diesem Grund wurden Programmiersprachen wie C entwickelt. Mit C kann man Code schreiben und diesen für mehrere Plattformen verwenden. Nun gut, man braucht immer noch verschiedene ausführbare Dateien je nach Plattform, aber zumindest kann man denselben Code verwenden. Wie ist das möglich? Erinnerst du dich an das, was ich zuvor über die Übersetzung von Programmiersprachen in Maschinencode durch einen Compiler gesagt habe? Nun, du hast die Antwort gefunden. Der Compiler macht die Arbeit, um unser Leben leichter zu machen. Dieses Prinzip nennt man Abstraktion. Wir können unseren Code schreiben, ohne darüber nachzudenken, wie der dazugehörige Maschinencode aussehen wird. Verschiedene Programmiersprachen bieten unterschiedliche Abstraktionslevel.
Mit C und C ++ hat man eine große Kontrolle über das System selbst. Das Problem ist, mit großer Macht geht große Verantwortung einher. Dadurch, dass Sprachen wie C und C ++ es dir ermöglichen, Dinge wie den genutzten Arbeitsspeicher nach deinen Wünschen selbst zu verwalten, kannst du auch viele Fehler machen. Sprachen wie Java oder C # erledigen das für dich und du musst dir keine Sorgen machen. Aus diesem Grund werden sie für viele Desktop-Anwendungen verwendet. Wenn man noch weiter gehen möchte, dann sagt man dem Computer nicht, was er tun soll, sondern wie z. B. eine Website aussehen sollen. Genau das tun Beschreibungssprachen wie HTML. Sie teilen dem Browser mit, wie deine Webseite aussehen soll, und er erledigt die komplette Darstellung auf dem Bildschirm für dich.
Okay, ich denke du hast es verstanden, verschiedene Sprachen bieten ein unterschiedliches Abstraktionsniveau. Aber rechtfertigt das hunderte von Sprachen? Die Antwort ist nein, tut es nicht. Es gibt viele Sprachen mit ähnlichem Abstraktionsniveau. Manchmal sind sie auf bestimmte Anwendungsgebiete spezialisiert, wie zum Beispiel die Sprache R, die insbesondere zum Erstellen von Statistiken verwendet wird. Manchmal geht es aber auch nur darum, welcher Syntax-Stil genutzt wird. Python zum Beispiel zwingt dich dazu, den gesamten Code korrekt einzurücken, da es die Einrückung anstelle von geschweiften Klammern und Semikolons verwendet, um zu bestimmen, welche Codezeilen zusammengehören. Das mag dir gefallen oder nicht, der Entwickler der Sprache hat das bereits für dich entschieden.
So und nun konkret: Welche Sprache solltest du verwenden?
Im Allgemeinen ist es ratsam die Sprache zu nutzen, die auch andere in dem Bereich verwenden, für den du Software erstellst. Der Vorteil ist, dass du viel Informationen zur Verwendung der Sprache zur Lösung bestimmter Probleme im Internet finden kannst.
In dieser Tutorialserie geht es um die Programmierung von Arduinos. Ein Arduino wird normalerweise in C ++ programmiert, deshalb solltest du C ++ lernen, wenn du Arduinos programmieren willst.
Der Grund, warum Arduino C ++ verwendet, ist, dass wir die volle Kontrolle über die Plattform haben müssen, um die Dinge zu tun, die wir tun möchten (z. B. eine LED zum Blinken zu bringen). Versuche mal mit einer normalen Desktop-Anwendung eine LED an deinen Computer zu steuern. Aber halt, renn jetzt nicht einfach los und kauf ein Buch mit einem Titel wie "Wie lerne ich möglichst schnell C ++?". Viele Konstrukte, die wir in C ++ bei der Programmierung regulärer Anwendungen nutzen, verwenden wir beim Arduino nicht. Bücher über C ++ konzentrieren sich oft darauf, wie man objektorientierte Programme schreibt. Wenn du nicht weist, was das bedeutet, dann ist das kein Problem. Du brauchst es nicht, solange du nicht vorhast eigene Arduino-Bilbiotheken für bisher nicht unterstützte Sensoren oder Module zu schreiben. Wenn nicht weist, was eine Bibliothek ist, spielt auch das keine Rolle, wir werden in einem späteren Tutorial darauf zurückkommen. Im Moment reicht es zu wissen, dass du nach Information suchen musst, die sich speziell auf die Programmierung von Arduinos und nicht auf C ++ im Allgemeinen beziehen. Das Gute ist, dass bei Arduino versucht wurde, die Dinge so einfach wie möglich zu gestalten. Du musst dir also keine Sorgen machen über Dinge, die du vielleicht schon über C++ gehört hast.
Ich möchte diesen Abschnitt mit einem Zitat von Steve Jobs, dem Gründer und ehemaligen Leiter von Apple, beginnen.
Jeder in diesem Land sollte lernen, einen Computer zu programmieren, weil es einem beibringt zu denken.
Steve Jobs
Was meint er damit? Programmieren ist nicht nur das Schreiben von Code. Eigentlich ist es das die meiste Zeit nicht. Das Erstellen eines Programms besteht aus mehreren Schritten:
Definiere das Ziel
Das erste, was beim Schreiben eines Programms wichtig ist, ist zu definieren, was es überhaupt tun soll.
In der Softwareentwicklung wird dies auch als "Anforderungsanalyse" bezeichnet.
Was sind deine Anforderungen an die fertige Software? Möchtest du nur eine LED zum Blinken bringen oder alle möglichen ausgefallenen Dinge tun?
Ich weiß es noch nicht. Kann ich nicht einfach rumprobieren und schauen was am Ende dabei rauskommt?
Du, während Sie diese Zeilen liest
Für einen Anfänger ist es oft schwer zu sagen, was ein sinnvolles Ziel ist und ob man es schon erreichen kann. Das ist kein Problem. Ich ermutige dich, so viel wie möglich mit dem Arduino zu experimentieren, aber wenn du ein Projekt umsetzen möchtest, solltest du besser darüber nachdenken, was du willst. Das Problem mit undefinierten Anforderungen ist, dass du nie weist, ob dein Projekt jetzt eigentlich fertig ist oder nicht. Vielleicht wird es so auch niemals fertig. Möglicherweise denkst du auch schon bei der Planung daran was du nicht noch alles Tolles in dein Projekt integrieren könntest. Definiere dir ein klares Ziel. Du kannst selbst entscheiden, was du dir vornimmst. Bei einer kommerziellen Software entscheidet normalerweise der Kunde. Manchmal sind sich Kunden dabei nicht sicher, was sie wollen, aber das ist eine ganz andere Geschichte ...
Überlegen dir, wie du das Problem lösen kannst
Sobald du dir ein klares Bild davon gemacht hast, wie dein Projekt aussehen soll, kannst du mit der Lösung des Problems beginnen. Stopp! Wenn du jetzt mit dem Schreiben von Code beginnen willst, dann hör wieder auf damit. Beim Programmieren geht es mehr um Problemlösung als um das Schreiben von Code.
Du hast deine Ziele ja bereits festgelegt. Denke jetzt darüber nach, wie du dorthin gelangst. Code schreiben ist nicht denken. Denken ist das, was du mit deinem Kopf tust.
Warum sage ich das? Viele beginnen einfach Code zu schreiben und müssen später noch einmal von Vorne anfangen, da der von geschriebene Code die Anforderungen nicht erfüllt. Mache dir deshalb zuerst klar, wie du das Problem lösen möchtest und prüfe dann, ob du auf diesem Weg zum Ziel kommst. Als Anfänger weist du möglicherweise nicht sofort, wie du dein Ziel erreichen kannst. Tutorials können dabei helfen. Jemand anderes übernimmt das Denken für dich und sagt dir Schritt für Schritt, was du brauchst und was du tun musst. Das ist großartig, um die Grundlagen zu lernen und die Programmiersprache kennenzulernen, aber es hilft dir nicht, wenn du ein eigenes Projekt mit ganz anderen Problemen und Zielsetzungen hast. Mein Vorschlag ist, sich Tutorials mit dem Ziel anzusehen darüber nachzudenken, wie man das verwenden würden, was man gerade gesehen hat. Danach probiere es selbst und fang an zu experimentieren. Probier neue Dinge aus. Verändere etwas oder kombiniere verschiedene Ideen zu etwas ganz neuem. Auf diesem Weg lernst du Schritt für Schritt neues und kommst an den Punkt, an dem du weist, wie du ein eigenes Projekt von Grund auf planen und umsetzen kannst.
Definiere eine Programmstruktur
Wenn du weist, wie du das Problem lösen kannst, kannst du im nächsten Schritt überlegen, wie du dein Programm strukturierst. Welche Schritte werden in welcher Reihenfolge ausgeführt? Was muss in jedem Schritt getan werden? Welche Teile benötigst du vielleicht mehrmals und was kannst du möglicherweise aus älteren Projekten wiederverwenden?
Du solltest das Projekt in kleine Bausteine aufteilen. Kleine Bausteine enthalten viel weniger Komplexität, was das Schreiben des eigentlichen Codes erheblich erleichtert.
An dieser Stelle werden oft ausgefallene Diagramme gezeichnet, um die Codestruktur darzustellen, nochmal darüber nachzudenken und im Team darüber zu diskutieren. Wenn du ein sehr einfaches Projekt hast, ist dies möglicherweise nicht erforderlich.
Schreibe den eigentlichen Code und probier ihn aus
Nun bist du an dem Punkt wo du beginnen kannst das eigentliche Programm zu schreiben. Schreibe deine Gedanken nun mithilfe der Programmiersprache nieder, so das eine Binärdatei daraus erstellt werden kann, die dann ausgeführt werden kann.
Wenn du ein größeres Projekt hast, kann es sinnvoll sein die einzelnen Bausteine deines Programms separat, auszuprobieren, um mögliche Fehler zu lokalisieren.
Ich habe bewusst ausprobieren geschrieben. In Hobbyprojekten ist das der normale Weg. In professionelleren Projekten wird ein umfangreicher Testplan mit vielen Testfälle erstellt, um systematisch zu überprüfen, ob auch wirklich alle Anforderungen erfüllt sind und alles wie erwartet funktioniert. Dieses Vorgehen ist für private Projekte wahrscheinlich übertrieben.
Jetzt weist du, wie ein Programm erstellt wird. Aber wie fängst du am besten mit dem Programmieren an?
Ich werde hier auf DevXplained weitere Tutorials und Projektideen für dich veröffentlichen. In dieser Serie kannst du die Grundlagen der Arduino-Programmierung kennenlernen. Das könnte also dein Ausgangspunkt sein, wenn du möchtest.
Eine häufig gestellte Frage lautet: "Brauche ich Mathe?". Die kurze Antwort lautet: "Ja, das tust du!". Du brauchst Mathe für die Programmierung aber auch im Bereich der Elektronik. Das sollte aber kein Hindernis für dich sein. Die meisten Dinge sind nicht wirklich schwer und der Computer kann die meiste Arbeit für dich erledigen. Für die meisten Tutorials hier auf DevXplained brauchst du wenig bis gar kein Mathe.
Die lange Antwort lautet, Mathe ist überall. Programmiersprachen werden in einer mathematisch exakten Form definiert, die auch als Grammatik bezeichnet wird. Auf diese Weise kann der Compiler deinen Code verstehen und in Maschinencode übersetzen. Wir verwenden auch Algorithmen bei der Programmierung. Diese wurden oft mithilfe von Mathematik bewiesen. So ist klar, dass sie korrekt funktionieren. Während diese Dinge für dich vermutlich von geringem Interesse sind, gibt es andere Gebiete wo auch du Mathe benötigen wirst. Zum Beispiel für geometrische Funktionen oder für das exakte Timing, bei der Kommunikation mit anderen Komponenten. Außerdem brauchst du es für Physik. Ja, du brauchst auch Physik und zwar dann, wenn du eigene Schaltkreise entwirfst. Aber keine Sorge, ich werde die wichtigsten Grundlagen in separaten Tutorials erklären, sobald wir sie brauchen.