Wie Multi-User Dungeons mir das Programmieren beigebracht haben

„Mama, was soll ich schreiben? Sag es mir einfach und ich schreibe ein Programm für dich. “ Das war ich mit 9 und zog dringend am Hosenbein meiner Mutter.

Ich erinnere mich nicht, was ich, wenn überhaupt, in BASIC auf unserem Timex Sinclair-Computer geschrieben habe, aber ich erinnere mich, dass ich ernst genommen werden wollte - etwas machen wollte, das für jemanden nützlich wäre. Ich glaube, mein Vater hat diesen Computer aus einer Laune heraus aus einem Versandhandelskatalog gekauft, was überraschend war, da er kein großer Gadget-Typ ist. Wir haben es an einen alten tragbaren 8-Zoll-Schwarzweißfernseher angeschlossen, den wir hatten. Meine Mutter hat ein Programm geschrieben, das meinen Namen in einer Endlosschleife über den Bildschirm druckte.

Der Computer rief mich an. Mein Bruder und ich haben einige Dinge in BASIC auf diesem Computer geschrieben, und wir konnten unsere Programme sogar mit einem Kassettenrekorder laden und speichern, der an die Audiobuchse des Computers angeschlossen war. Wir haben versucht, die Softwarekassette auf einem normalen Kassettenrekorder abzuspielen, und es klang wie kreischende Zikaden.

Erst später, mit 14 Jahren, war ich wirklich begeistert vom Programmieren. Ich wurde süchtig nach einem Online-Abenteuerspiel - einem kostenlosen Multi-User-Dungeon (MUD) namens HexOnyx. Hex war eine beliebte virtuelle Welt, in der zu jeder Zeit mindestens hundert Menschen spielten. Obwohl die heutigen MMPORGs Millionen gleichzeitig beherbergen, schienen damals ein paar hundert Menschen in einem virtuellen Raum viel zu sein. Ich habe dort gute Freunde gefunden, und jede Nacht haben wir in den Kerkern und dunklen Wäldern gemeinsam gegen bösartige Knurren und Dämonen des Verfalls gekämpft. Das Spiel war vollständig textbasiert, daher war Vorstellungskraft obligatorisch. Fast 20 Jahre später habe ich immer noch Bilder in meinem Kopf von einigen der alten Stampfplätze im Spiel.

Jeder Tag nach der Schule war ein neues Abenteuer im MUD, bis mich die Glocke des Familienessens zurück in die physische Welt zog. "Ich bin gleich da!" Ich würde schreien, nur um viel später, mitten im Essen, ins Esszimmer zu schleichen. Es gibt nie einen einfachen Haltepunkt, wenn Sie einem vierbeinigen Lamia-Tier gegenüberstehen, das Ihren Kopf für ihre nächste Mahlzeit haben möchte .

Monatelang kämpften ich und meine Online-Freunde besessen gegen diese computergenerierten Kreaturen. Schließlich habe ich meinen Charakter bis zur Unsterblichkeit weiterentwickelt, die der effektive Endpunkt des Spiels ist. * Unsterbliche können nicht mehr kämpfen - ihre Rolle war für neue Spieler hilfreich, um Streitigkeiten beizulegen, Fehler zu beheben und so weiter.

Als ich mich mit den Administratoren und Entwicklern von Hex anfreundete, begann ich mich mit dem Design des MUD zu beschäftigen, versuchte zu verstehen, wie es eine so tiefgreifende Erfahrung auslösen konnte, und fragte mich, wie wir es noch besser machen könnten.

Zu dieser Zeit gab es Hunderte von MUDS, und jeder versuchte, sich zu differenzieren. Um Hex zu unterscheiden, hatten die Entwickler einen benutzerdefinierten World Builder im Spiel erstellt. Während andere MUDs eine flache Textdatei mit einem verwirrenden proprietären Format bearbeiten mussten, machte der Builder im Spiel das Schreiben von Welten zum Vergnügen und ermöglichte es den Spielern, sich leicht einzubringen. Yaz, Hexs Hausmeister, hatte folgendes zu sagen:

„Das Ziel des damaligen POV war es, eine Umgebung zu schaffen, die von der ganzen Welt aus gepflegt werden kann. dh: niemand müsste das Spiel wirklich von außen laufen lassen. Wir sind dem Weltbauer nahe gekommen. “

Mit dem World Builder könnten Sie eine neue Tür und einen neuen Raum im Spiel schreiben, dann durch die Tür in den Raum treten und sehen, wie es sich anfühlt. Dies löste einen Entwicklungsboom aus, bei dem viele neue Welten im Bau waren und darauf warteten, fertiggestellt und mit der Hauptkarte des Spiels verbunden zu werden. Diese unvollendeten Welten waren unheimliche Orte, die nur Administratoren zugänglich waren und voller blutrünstiger Monster, die Tag und Nacht allein herumwanderten.

Ich hatte kein Interesse daran, Welten zu bauen. Selbst mit dem Weltbauer schien es zu viel Arbeit zu sein. Stattdessen wollte ich die Mechanik der Software verstehen und strukturelle Änderungen vornehmen.

Im Gegensatz zu modernen MMPORGs waren die meisten MUDs, einschließlich HexOnyx, effektiv Open Source. Ich habe HexOnyx 'Vorfahren CircleMUD, geschrieben von Jeremy Elson, heruntergeladen und auf meinem Heimcomputer ausgeführt. Ich hatte schon einige Dinge in BASIC programmiert, aber CircleMUD wurde in C geschrieben - eine ganz neue Welt für mich. Nur zum Kompilieren zu bringen, war ein Projekt. Aber nach und nach fand ich heraus, wie man kleine Änderungen vornimmt, und es war spannend für makedas MUD, die Auswirkungen meiner Änderungen vor Ort zu sehen.

Typischerweise werden CS-Konzepte in einem erfundenen, langweiligen Geschäftsszenario vermittelt: Kunden, Bestellungen, Produkte, Lehrer, Kurse usw. Aber CircleMUD war eine echte, funktionierende und ziemlich komplexe Software, die im Kontext einer großen mythischen Welt lebte. Ich lernte die Grundlagen der Informatik anhand eines Beispiels und optimierte Funktionen wie diese:

/* * Function: find_guard * * Returns the pointer to a guard on duty. * Used by Peter, the Captain of the Royal Guard */struct char_data *find_guard(struct char_data *chAtChar){ struct char_data *ch; for (ch = world[IN_ROOM(chAtChar)].people; ch; ch = ch->next_in_room) if (!FIGHTING(ch) && member_of_royal_guard(ch)) return (ch); return (NULL);}

In einer kurzen Funktion haben wir Schleifen, Bedingungen, Zeiger, eine verknüpfte Liste, ein Array, Präprozessor-Makros und Strukturen. Und wir haben Peter, den Kapitän der Royal Guard.

Nach heutigen Maßstäben würden Teile des Codes von Circle als stinkend und unelegant eingestuft. Es gab keine Tests, da sich präventionsorientierte Softwaretests noch nicht durchgesetzt hatten. Aber für mich war Circle ziemlich schön. Es war ein Beispiel für etwas Größeres, als ich jemals zuvor geschrieben oder gar gedacht hatte. Circle war selbst eine Abzweigung des MUD-Projekts DikuMUD, das 1990 von einigen Leuten an der Universität von Kopenhagen geschrieben wurde. Er hatte den rauen Reiz eines großartigen C-Programms: Es war eng mit den Systemaufrufen des Betriebssystems verbunden, hochoptimiert und ereignisgesteuert und es hat viel schweres Heben getan, das heutzutage in Bibliotheken versteckt ist. Es verwaltete seine eigenen TCP-Sockets und E / A-Puffer von Grund auf, definierte seine eigenen Spieledateiformate und so weiter.

Was heute als Bare Metal galt, war damals die Spitze des Stapels. Die Macher von Circle beklagten nicht den Mangel an dynamischer Typisierung oder anderem Luxus auf höherer Ebene - sie schwelgten in den Annehmlichkeiten, über Assemblersprache zu fliegen und sich für alle Arten wichtiger Aufgaben in das Betriebssystem zu lehnen.

Infolgedessen ist Circle ein Arbeitstier, und in der Produktion könnte Hex mit mehr als 200 gleichzeitigen Benutzern in weniger als 20 MB RAM auf einem 486 reibungslos laufen. Das Spiel läuft in einer großen 100-ms-Ereignisschleife, die niemals blockiert. Es bedient nur alle derzeit verbundenen Benutzer, bringt die Welt um einen Tick voran und schläft dann für den Rest des Zyklus. Ich erinnere mich, dass ich in dieser Schleife etwas Langfristiges getan habe und gelernt habe, wie schwer es ist, das Spiel für alle anzuhalten. Eine frühe Lektion in Optimierung.

Nach wochenlangem Durchstöbern des Codes und nach langem Ausprobieren freute ich mich, einen kleinen Patch einzusenden, der den Stil der Eingabeaufforderung im Spiel änderte. Bei einer Pull-Anfrage im Stil der Mitte der 90er Jahre habe ich mit meinem Patch eine E-Mail an die Hex-Administratoren gesendet und mit Spannung auf eine Antwort gewartet.

Sie haben meinen Patch akzeptiert. Sie haben es angewendet. Und es war magisch zu sehen, wie meine kleine Veränderung in ein Spiel integriert wurde, das so viele Menschen jeden Tag spielten. Die Entwickler - hauptsächlich Informatikstudenten im College-Alter - gaben mir Feedback zu meinem Patch, ebenso wie die Spieler.

Ich arbeitete weiter und schickte weitere kleine Patches. Schließlich hatte Yaz es satt, Mittelsmann zu spielen und sagte: "Warum haben Sie nicht einfach Änderungen an unserem Code vorgenommen?" und er hat ein Konto auf dem Server für mich erstellt.

Der Implementierungsstatus bei Hex war bei weitem die persönlichste Verantwortung, die ich jemals gefühlt hatte. Fast jede Nacht veröffentlichte ich neue Änderungen und erhielt sofortiges Feedback von anderen Spielern. Ich entwarf und baute nicht nur Funktionen, die ich als erfahrener Spieler im Spiel sehen wollte - was noch wichtiger ist, ich iterierte in einer engen Rückkopplungsschleife mit anderen Benutzern.

Die Rückkopplungsschleife hat meine Arbeit vorangetrieben. Es hielt mich durch Fehler, die nicht behoben werden konnten, und Probleme, die unlösbar schienen. Es gab keinen Zeitplan - nur endlose kleine Schritte jeden Tag in Richtung eines besseren Spiels. Ich war begeistert von der tiefen Zufriedenheit, die mit der Verbesserung von etwas einherging, das die Leute gerne benutzten, und ich hatte einen unglaublichen Fließzustand erreicht.

Ich denke, dies ist eine großartige Möglichkeit, das Programmieren zu lernen: Anstatt zu sagen, dass ich das Programmieren lernen möchte, beginnen Sie mit dem Wunsch, etwas zu verbessern, das bereits existiert. Etwas, das die Leute benutzen. Erwarten Sie, dass Sie auf Hindernisse und Herausforderungen stoßen, und lassen Sie das Feedback von Benutzern und Mitarbeitern Ihre Ermutigung sein, diese durchzuhalten. Viele Open-Source-Projekte bieten diese Möglichkeit, aber ich denke, die Spielumgebung hat etwas Besonderes.

In den folgenden Monaten lernte ich Datenstrukturen und Speicherzuordnung. Ich habe gelernt, wie man prozedurale Software vernünftig strukturiert. Ich habe etwas über Sockets, Datenserialisierung (bevor JSON oder sogar XML existierte), Timer und Interrupts gelernt. Ich kannte das Vokabular für diese Dinge nicht über das hinaus, was ich in den Kommentaren des Codes und auf den Handbuchseiten für Systemaufrufe lesen konnte. Aber ich war süchtig. Das Codieren für das MUD war alles, woran ich jeden Tag in der Schule dachte, und alles, was ich jeden Abend zu Hause tat.

Ich habe in den nächsten ein oder zwei Jahren eine Reihe neuer Funktionen hinzugefügt. Ich habe die interne Wirtschaft der MUDs erweitert und ein Wohnungssystem (eigentlich virtuelle Schließfächer) und einen Immobilienmarkt für sie aufgebaut. Ich habe die Warenknappheit in die Wirtschaft des Spiels eingeführt und einen Algorithmus geschrieben, der die Geschwindigkeit begrenzt, mit der die beste Ausrüstung in die Welt eingeführt wird. Ich habe als unsichtbare Hand gehandelt, was das Spiel für die Leute lustiger und herausfordernder gemacht hat, und es war eine tolle Zeit.

Der Spaß, Entwickler zu sein, hat mich dazu gebracht, mehr zu lernen und mehr Dinge zu bauen, die die Leute wollten. Aufgrund dieser Erfahrung bin ich heute Ingenieur. Ich bin dankbar, dass CircleMUD formbarer Open-Source-Code war und dass Yaz mit nur 14 Jahren einen Vertrauenssprung in die Übergabe der Schlüssel an mich gemacht hat.

Ich liebe ein Medium, in dem man sich als Verbraucher nähern und reibungslos in einen Produzenten übergehen kann. Heute ermöglicht Minecraft einige Änderungen in einer einfachen, eingeschränkten Umgebung und könnte ein gutes Gateway für angehende Programmierer sein. Die Kunst des Programmierens hat jedoch noch einen langen Weg vor sich, bevor sie allgemein zugänglich ist. Die beliebtesten Multiplayer-Spiele von heute sind für Spieler weitgehend unveränderlich. Da beliebte Spiele wie WoW nicht Open Source sind, scheint es schwieriger zu sein, die Rolle des Hauptverantwortlichen für ein reales, lebendiges Atmungssystem zu übernehmen.

Ich würde es lieben, wenn die nächste Generation von Programmierern genauso viel Spaß am Programmieren hat wie ich. Das Spiel zu ändern ist viel interessanter als es zu spielen.

Ursprünglich auf meiner persönlichen Website veröffentlicht. Vielen Dank an Siobhán K Cronin für das Korrekturlesen.

Wenn Sie es bis hierher geschafft haben, sollten Sie sich meiner Mailingliste über Technologie und Menschlichkeit anschließen.