Ich beziehe mich darauf, dem Nicht-Programmierer zu erklären, was Programmierung ist. Ich habe vor der Erstellung dieser Frage nach ähnlichen Fragen gesucht, aber die wenigen, die ich gefunden habe, schienen der Frage auszuweichen, und ich würde gerne einige Metaphern oder Analogien sehen. Ich persönlich finde es einfacher, jemandem etwas Technisches mit Hilfe von Metaphern oder Analogien zu erklären.
Der Grund, warum ich daran interessiert bin, ist, dass viele Menschen täglich auf die Arbeit eines Programmierers stoßen, aber wenn Sie die durchschnittliche Person fragen, was ein Programmierer ist oder tut, wissen sie es nicht wirklich. Dies führt zu bestimmten Missverständnissen (zB "[...] aber ich dachte, Sie können gut mit Computern umgehen!")
Ich würde wirklich gerne die beste finden. Ich möchte jemandem leicht erklären können, worum es bei meiner Berufswahl geht. Natürlich zumindest die allgemeine Idee.
Ich persönlich habe keine solide Sprache, aber ich habe lange darüber nachgedacht und mich normalerweise für die „Sprach“ -Metapher interessiert, bei der wir zufällig eine Sprache kennen, die Computer verstehen, und daher können wir Computern sagen, was zu tun ist tue oder "unterrichte" sie, um unsere Probleme zu lösen.
Beispielsweise:
Stellen Sie sich vor, dass es in einer alternativen Realität humanoide Roboter mit künstlicher Intelligenz gibt und einige Menschen in der Lage sind, über eine gemeinsame Sprache, die eine Variation des Englischen darstellt, mit ihnen zu kommunizieren. Diese Leute, die mit den Robotern kommunizieren können, können ihnen beibringen, bestimmte Probleme zu lösen oder bestimmte Aufgaben zu erledigen, wie zum Beispiel unsere Hausarbeiten.
Nun, obwohl es solche Roboter noch nicht gibt, sind Programmierer unserer Zeit wie diese Leute, aber anstatt mit den Robotern zu kommunizieren, kommunizieren sie mit Computern. Programmierer "lehren" die Computer, wie sie bestimmte Aufgaben ausführen oder bestimmte Probleme mit Hilfe von Software lösen, die sie unter Verwendung dieser "gemeinsamen Sprache" erstellen.
Programmierer und diese "gemeinsame Sprache" geben uns Dinge wie E-Mail, Websites, Videospiele, Textverarbeitungsprogramme, Smartphones ( um es einfach auszudrücken ) und viele andere Dinge, die wir täglich benutzen.
Ich will nicht die Programmierung auf den Thron setzen oder so, es ist einfach die beste Metapher, die ich mir einfallen lassen könnte.
Ich bin mir sicher, dass jemand ein Problem mit diesem finden wird, es ist wahrscheinlich ein bisschen erfunden, aber das ist auch der Grund, warum ich diese Frage stelle.
quelle
Antworten:
Es ist, als müsste man Schritt für Schritt detaillierte Anweisungen schreiben, wie man irgendwohin fährt. Normalerweise müssen Sie jedoch Notfallpläne für Dinge wie "Was ist, wenn es einen Stau gibt?" Oder "Was ist, wenn ein LKW in der Abbiegespur ausfällt?"
Und manchmal muss man noch tiefer tauchen und die Regeln der Straße erklären, wie man auf welcher Seite fährt oder was man an einer roten Ampel macht. Und manchmal muss man sogar genau erklären, wie das Lenkrad oder das Gaspedal funktionieren.
Und in der Regel sagt der Kunde, sobald alles genau beschrieben ist: "Das ist perfekt, außer es muss für jemanden funktionieren, der ein Luftkissenfahrzeug fährt."
quelle
Ich schreibe sehr, sehr detaillierte Anweisungen für eine sehr, sehr dumme Maschine.
quelle
Ich benutze die Metapher "Wir schreiben Strickrezepte ", die großmutterfreundlich ist.
Begründung:
if
-Anweisungen und Mathematik und Schleifen.quelle
Keine sehr gute Analogie, aber wenn die Leute mir sagen, dass ich ihre Maschine reparieren soll, sage ich: "Ich bin der Typ, der die Autos entwirft. Ich bin nicht der Mechaniker!"
quelle
Als Kind las ich eine wirklich gute Beschreibung des Programmierens: Es ist, als würde man einem Roboter erklären, wie man eine alltägliche Aufgabe erledigt, wie zur Schule zu gehen. Also kann man sagen "Geh zur Schule!", Aber es weiß nicht wie. Also sagst du ihm, er solle "nach draußen gehen, links abbiegen, weitergehen, bis du zur Schule kommst, links abbiegen, hineingehen und dich setzen". Aber es gibt eine Straße im Weg! Sie müssen ihn also anweisen, irgendwo in der Mitte "an der Straße anzuhalten, zu überprüfen, ob kein Verkehr herrscht, die Straße zu überqueren und weiterzulaufen". Und was ist mit Türen? Sie fügen also hinzu: "Überprüfen Sie, ob die Schultür geöffnet ist. Wenn nicht, öffnen Sie sie." da drin. Schließlich haben Sie ein Programm, das Ihrem Roboter sagt, wie er selbst zur Schule kommt.
Dies passt sehr gut zu Logo, wo Sie die Schildkröte auf genau diese Weise anweisen, komplexe Formen zu erstellen.
quelle
Das Programmieren ist wie eine Schachtel Pralinen . Manchmal finden Sie sofort das, wonach Sie suchen, aber die meiste Zeit ist viel Ausprobieren erforderlich. Manchmal bekommt man Kokos.
Ampeln . Autos fahren oder halten an. Eine Ampel ist leicht vorstellbar, aber was passiert, wenn Sie eine weitere hinzufügen? Wie wäre es mit einem Drittel? Was ist mit einer ganzen Stadt? Ein Transitsystem besteht aus Tausenden von Ampeln, von denen jede für sich genommen einfach ist. Insgesamt wird es jedoch zu einem komplexen System. Wenn eine dieser Ampeln ausfällt oder nur wenige Sekunden ausfällt, stürzt sie das gesamte System ins Chaos. Wenn alles synchron ist, genießt du einfach die Fahrt.
Ein Motivationsredner findet Schlüssel, um das Rätsel der Motivation, Träume und Ideen der Menschen zu lösen. Jede Situation, jede Person ist anders. Was in der Vergangenheit funktioniert hat, ist jetzt möglicherweise nicht mehr angemessen. Manchmal kann ein Schlüssel wiederverwendet werden, muss aber an die Person angepasst werden. In anderen Fällen muss der Schlüssel neu gestaltet werden. Am lohnendsten ist es, wenn die Person freigeschaltet wurde und Sie sehen, wie sie die Welt erobert. Am verheerendsten ist es, wenn Sie sich nahe fühlen, aber nicht in der Lage sind, das Potenzial auszuschöpfen.
Eine Detektivgeschichte , in der der Detektiv seinen Fall langsam aufbaut, indem er nach Hinweisen sucht und Beweise sammelt. Methodisch, intelligent und genau wird der Tag gewinnen. Schlampig, unwissend und faul wird der Fall zum Scheitern verurteilt. Letztendlich wird die Arbeit vor einer Jury von Kollegen stehen oder fallen.
Ein Spielautomat . Sie setzen alle Ihre Münzen ein und ziehen den Hebel. Manchmal gewinnt man groß, manchmal sitzt man stundenlang da und es passiert nichts. Manchmal kommt ganz nebenbei jemand anders vorbei, zieht einmal den Hebel und gewinnt den Jackpot.
Musik . Eine Note ist einfach genug, aber ein Takt ist komplexer. Ein komplettes Lied hat viele Takte mit vielen Noten. Wenn eine Note aus ist, kann dies die gesamte Performance ruinieren. Wenn jede Note perfekt geliefert wird, tritt die Performance in den Hintergrund und nur die Musik existiert.
quelle
Die beste Metapher für alles ist sich. Alles andere wird an Genauigkeit verlieren. Aus diesem Grund hängt die Auswahl der besten Metapher davon ab, was genau Sie über die Programmierung erfassen möchten. Da hier viele Antworten zu Codierungsmetaphern gegeben werden, antworte ich mit der klassischen Metapher für den gesamten Entwicklungsprozess:
Hochbau
Der häufigste Aspekt dieser Metapher ist, dass ein physischer Architekt einem Softwarearchitekten in gewisser Weise entspricht. Hier einige weitere Parallelen:
Natürlich hat es wie jede Metapher seine Grenzen. Einige Mängel daran:
Wie bei jeder Analogie kommt es also darauf an, was Sie zu erklären versuchen. Seien Sie vorsichtig, wenn Sie sich zu sehr auf eine Metapher verlassen, oder Ihr Kunde wird sich fragen, wie hoch die Grundsteuern für sein neues Gehaltssystem sein werden.
quelle
Ich mag Chris McMahons Analogie zur Softwareentwicklung, die der Schaffung von Musik, insbesondere Jazzmusik, gleicht.
Hier ist der Link zu dem Blogbeitrag, in dem er darüber spricht : http://chrismcmahonsblog.blogspot.com/2007/05/example-of-analogy-monks-vs-music.html
quelle
Manchmal beziehe ich mich auf das Programmieren, um sinnlose Zombies zu kontrollieren . Fasse meinen Blog-Beitrag dazu zusammen:
quelle
Programmieren ist wie mit Lego bauen :
quelle
Einen Computer zu programmieren ist wie ein Kind großzuziehen ...
Der Hauptunterschied ist, dass wir uns aufregen, wenn jemand unseren Quellcode stiehlt, aber wir sind oft froh, dass jemand unsere Kinder aus unseren Händen nimmt.
quelle
Das Programmieren ist wie das Bauen einer Fabrik oder einer Fertigungsstraße.
Stellen Sie sich Software als Maschine oder Fließband vor, das im Computer vorhanden ist. Einige Rohstoffe und Komponenten werden der Maschine zugeführt, und es werden eine Reihe von Verfahren befolgt, um sie zu einem Endprodukt zu verarbeiten. Die Verfahren sind eingerichtet, um eine bestimmte Operation an einem Rohmaterial oder einer bestimmten Komponente mit einem bestimmten Parametersatz (z. B. Zeit, Temperatur, Entfernung usw.) in einer bestimmten Reihenfolge durchzuführen. Wenn die Details der auszuführenden Operation nicht korrekt waren oder die Sensoren der Maschine nicht korrekt kalibriert waren oder wenn ein Rohstoff oder eine Komponente nicht den erwarteten Qualitätsstandards entsprach, konnte dies das Ergebnis der Operation verändern und das Produkt würde nicht ausfallen wie erwartet.
Eine solche Maschine ist in ihrem Betrieb sehr steif und in ihren Eingaben akzeptabel. Maschinen stellen weder die Intelligenz der Konstrukteure noch ihre aktuelle Betriebsumgebung in Frage. Es wird weiterhin Verfahren folgen, solange es gerichtet ist. Selbst wenn sich eine Änderung der Rohstoffe oder Komponenten drastisch auf die späteren Arbeitsabläufe auswirken könnte, würde die Maschine dennoch ihre Arbeitsabläufe ausführen. Der Prozess müsste überprüft werden, um festzustellen, welche Änderungen an den Verfahren erforderlich sind, um das gewünschte Ergebnis zu kompensieren und zu erzielen. Eine Änderung des Designs oder der Konfiguration des Produkts kann auch eine erhebliche Änderung der durchgeführten Vorgänge oder ihrer Reihenfolge erforderlich machen. Obwohl die für die Produktion Verantwortlichen schnell die Wichtigkeit der größtmöglichen Isolierung von Vorgängen erkannten, um unerwünschte Auswirkungen zwischen ihnen zu verringern, Es werden viele Annahmen darüber getroffen, in welchem Zustand sich die Komponenten befinden, während sie verarbeitet werden. Annahmen, die möglicherweise erst erkannt werden, wenn sich das Endprodukt in einer anderen Betriebsumgebung in den Händen des Benutzers befindet.
quelle
Einem schnellen Idioten helfen, eine Matheklasse zu bestehen, die einen schriftlichen Aufsatz erfordert.
quelle
Computerprogrammierung ist wie ein Schachspiel, bei dem die Größe des Spielbretts, die Anzahl der Steine und die Regeln, die diese Steine regeln, im Laufe des Spiels an Größe und Komplexität zunehmen.
quelle
Schreiben von Software ist wie ... Schreiben! ^^
quelle
Anfänger in CS- / Programmierklassen sind praktisch wie Benutzer ohne Programmierkenntnisse. Das Roboterbeispiel ist gut.
In den 80er Jahren hat es viel geholfen, Logo, Karel (oder ähnliche Programmierumgebungen) zu verwenden, bei denen der Benutzer das Programmieren lernt und den Computer wie einen Roboter anstatt eines Fernsehgeräts mit Schreibmaschine betrachtet. Diese Tools wurden üblicherweise in der Junior High School und der High School verwendet.
Diese praktische Programmierung half den Schülern, Problemlösungsfähigkeiten zu erlernen, auch wenn sie nicht mit dem Computer verwandt waren !!!
Oder selbst wenn die Schüler keine Programmierer geworden wären.
Einige Kollegen und Universitäten setzten diese Tools auch in Kursen des ersten Jahres ein.
Ich frage mich, warum viele Gymnasien das Unterrichten von Logo und Karel aufgeben ...
quelle
Ich mag Fred Brooks Analogie von Mythical Man-Month, dass das Programmieren wie das Durchführen von Magie ist.
quelle
Dies ist normalerweise ein Versuch, einen Geek dazu zu bringen, einen Computer zu reparieren. Meine Standardantwort:
Ich bin Programmierer. Das ist wie bei einem Automobilingenieur - er wird wahrscheinlich nicht wissen, wie man die Bremsen Ihres 72er Trabant repariert, und würde es mit Sicherheit nicht tun, wenn er es wüsste. Ein Mechaniker würde das tun!
quelle
Ich mag das Konzept eines Kochrezepts.
quelle
Programmieren ist wie gewaltiges Ausüben von Macht. Sie können den Computer dazu bringen, alles zu tun, was Sie wollen. Sie sind nur begrenzt durch Ihre Vorstellungskraft und die Zeit, die Sie investieren möchten.
Programmierer sind wie die Macher eines Hauses. Wir können Ihnen alles über die Häuser erzählen, die wir gebaut haben. Wenn Sie uns jedoch bitten, ein zufälliges Haus zu fragen, an dem wir gerade vorbeifahren, werden wir wahrscheinlich nicht viel darüber wissen. Wenn Sie jedoch etwas an diesem Haus hinzufügen oder ändern müssen, können wir dies durchführen, sofern der Eigentümer dies zulässt.
quelle
In einem der alten Artikel von Chris Crawford über das Programmieren verglich er ein komplexes Programm mit einer Bürokratie, in der mehrere Agenturen miteinander kommunizieren, indem sie Memos hin und her geben. Ich habe festgestellt, dass dies eine sehr nützliche Metapher für die Erklärung der Softwareentwicklung ist.
quelle
Ich vergleiche das Programmieren im Allgemeinen mit einem Puzzle.
Um ein neues Projekt zu erstellen, haben Sie Tonnen von Teilen, von denen einige nicht zu diesem Bild gehören, und Sie haben keine Vorschau darauf, wie das Puzzle aussieht, wenn es fertig ist. Da Sie jedoch die Größe und die allgemeinen Farben kennen, sind Schätzungen möglich, jedoch nicht unbedingt genau.
Um ein bereits bestehendes Projekt zu modifizieren, kam eine Katze vorbei und schlug einen Teil des fertigen Puzzles ab. Es wird einige Zeit dauern, aber das Framework ist bereits vorhanden, daher sollte es nicht zu schlecht sein (je nachdem, wie viel geändert werden muss).
Es hilft auch bei der Beschreibung des Fortschritts. Bei einem meiner letzten Projekte habe ich mich gefragt, wie ich es beschreiben soll, damit eine nicht-technische Person versteht, warum ich nicht weiß, wie lange es noch dauert Randstücke sind fertig, ebenso etwas mehr als die Hälfte der inneren Stücke. Die verbleibenden sind alle voneinander getrennt, was ich jetzt tun muss, ist die Lücken zu füllen.
quelle
Es ist traurig, aber Programmieren ist eine Arbeit, die nur verstanden werden kann, wenn man lernt, wie man es macht.
Die Programmierung hat verschiedene Wahrnehmungsebenen und unterscheidet sich von verschiedenen Seiten.
Auf niedrigem Niveau heißt es "sehr, sehr ausführliche Anleitung für eine sehr, sehr blöde Maschine schreiben"
Auf der nächsten Ebene geht es um Komplexität. Aufbau einer neuen Metapher zur Vereinfachung der Arbeit. Wie höhere Mathematik.
Von anderer Seite ist die Verwendung von Hilfstechnologien wie Versionskontrolle, selbst dokumentiertem Code, Projekterstellung und Testen.
Von der anderen Seite baut es eine "Benutzeroberfläche" auf (nicht wörtlich, ich meine API auch UI), sagt mögliche Fehler voraus (von Benutzer, Daten oder sogar von sich selbst) und korrigiert das Reagieren auf Fehler.
Und schlussendlich.
Metapher für die Programmierung ist Literatur. Zuerst muss man das Alphabet lernen. Aber einen Roman dazu zu schreiben fängt ja gar nicht an.
quelle