SQL lernen mit dem Schachcomputer
Datenbanksprache kreativ vermittelt: Der Erfahrungsbericht einer Nachwuchs-IT-Kraft im Umfeld der Datenbankprogrammierung
Von: Torsten Ahlemeyer
Aller Anfang ist schwer
Anna hat in ihrem jungen Berufsleben erste Erfahrungen mit datengestützten Anwendungen gemacht und möchte nun ihre Kenntnisse als Datenbankentwicklerin erweitern. Als Anfängerin steht sie jedoch vor einem sehr unübersichtlichen Funktionsumfang moderner Abfragesprachen in Datenbanken. Auch interessiert sie sich zusätzlich zur „DQL“ (Data Query Language) für die Bereiche „DDL” (Data Definition Language), „DML” (Data Manipulation Language), „DCL” (Data Control Language) und „TCL” (Transaction Control Language). Sie möchte also nicht nur bestehende Datenbanken abfragen lernen, sondern etwa auch selber Datenbankobjekte und Rechte verwalten. Auch weiß sie noch nicht, wie sich ein Programmablaufplan mit Schleifen und Entscheidungsbäumen in T-SQ abbilden lässt.
Anna beherzt daher den Tipp eines Freundes, sich auf Videoplattformen kurze Schnipsel mit Tutorials anzuschauen, etwa zur Erstellung von Tabellen. Über Blogeinträge oder Foren kann Anna sich dann auch noch selbst beibringen, wie die neue Tabelle sinnvoll indiziert wird. Doch oft verwirren unterschiedliche Autoren oder sogar Sprachen die Hilfesuchende mehr, als dass sie ihr nützen. Die fehlende Wiederverwertbarkeit von Übungsdatensätzen stellt Anna selbst bei kommerziellen Angeboten vor Probleme – die Beispiele unterschiedlicher Kursersteller passen für sie einfach nicht zueinander. Abschreckend wirkt darüber hinaus die imposante Größe der Übungsdatenbanken der Hersteller. Anna scheut den Download von teilweise bis zu einem Gigabyte fremder Daten, deren Struktur sie nicht kennt. Sie wünscht sich eher ein Projekt von der grünen Wiese, an dem sie nicht nur die benötigten Befehle, sondern gleich auch noch die Grundlagen der System- und Datenarchitektur von Grund auf lernen kann.
Die Idee: Alle Befehle beziehen sich auf denselben Datenbestand
Hier setzt mein Schachworkshop an. Er nutzt „Gamification“ in seiner ursprünglichen Bedeutung, um Anna nicht nur die Grundlagen der Abfragesprache T-SQL, sondern auch die Tricks und Kniffe aus über 20 Jahren Erfahrung als Datenbankentwickler beizubringen. Bei der knobelbegeisterten Lernwilligen fällt die Idee, selber einem Computer das Schachspielen beizubringen, auf fruchtbaren Boden. Dabei lernt sie spielerisch Befehl um Befehl. Zuerst kann sie sich kaum vorstellen, wie man ein derart komplexes Spiel wie Schach überhaupt in Code ausdrücken kann. Die junge IT-Fachkraft spricht zwar rudimentär einige Programmiersprachen wie C#, stellt sich aber einen Algorithmus für das Spiel der Könige auf Datenbankebene mehr als herausfordernd vor.
Der Workshop der arelium GmbH, bei der ich als Datenbankspezialist tätig bin, führt Schritt für Schritt von dem Aufbau einer Datenbank über die Hinterlegung der Spielregeln bis zur Erschaffung eines Computergegners auf Großmeisterniveau zum Ziel. Dabei wird sogar ein Spielbrett mit grafischen Figuren gezeichnet. Anna lernt diverse Statistikauswertungen und perfektioniert ihren Umgang mit Prozeduren und Funktionen… und all das mit reinem T-SQL!
Hohe Motivation dank schneller Ergebnisse
Anna lernt schnell, weil sie mit jedem Stoffblock sofort Ergebnisse sieht und stets weiß, welches Ziel gerade verfolgt wird. Die einzelnen Module sind problemlos zu bewältigen, weil stets nur an einer Schraube des Schachprogramms zur selben Zeit gedreht wird. Das Projekt wächst immer weiter und der Spieltrieb der Berufsanfängerin ist geweckt. Schon nach ungefähr acht Stunden des betreuten Programmierens kann Anna mit nur einem SQL-Befehl ein Spielbrett in der Grundstellung auf den Schirm zaubern und erste Züge unter dem wachsamen Computerauge machen, welches streng über die Regeleinhaltung wacht.
Annas erste Partie: Das Narrenmatt, die kürzeste Schachpartie der Welt .
Sie erzeugt Massendaten, indem sie die Maschine gegen sich selbst spielen lässt. Diese verfüttert sie an eine Künstliche Intelligenz, um daraus Rückschlüsse zu gewinnen und das Spiel ihres Algorithmus immer weiter zu verbessern. Außerdem baut sie im Laufe des Lehrgangs den Schachcomputer um weitere Module aus. Zuerst bildet sie das gesamte Regelwerk (auch „en passant“, Rochade, Bauernumwandlung…) ab. Dann ergänzt Anna verschiedene Computerspielstufen und eine Eröffnungsbibliothek mit 400.000 Großmeisterpartien sowie eine Endspieldatenbank. Auch ein Aufgabeneditor für „matt in n-Zügen“-Aufgaben darf nicht fehlen.
Vorteile der Datenbank nutzen
Einer der ersten Schritte auf ihrem Weg zum Computerschachprogramm führt Anna zu einer Tabelle mit allen in diesem Spiel theoretisch denkbaren Zügen. Diese Tabelle nutze ich als SQL-Experte, um daran zu zeigen, wie mächtig Werkzeuge aus der Datenbankprogrammierung wie zum Beispiel JOINS sind. Mit ihrer Hilfe sind schnell alle Züge ermittelt, die laut Regeln theoretisch vorkommen können. Hierzu sind pro Figurenart nur wenige Zeilen Code notwendig, die explizit erklärt werden. Die Beispiele sind sauber strukturiert und Anna kann schon nach dem Turm als einfachste Figurenart den Quellcode für Läufer, Dame, Springer und König eigenständig notieren. Nur mit dem Bauern tut sie sich noch etwas schwer, da die Regeln für diese Figur (bspw. mit dem Doppelschritt, der Umwandlung oder dem „en passant“) doch etwas umfangreicher sind.
Die theoretischen Bewegungsmöglichkeiten des Turms (zieht und schlägt nur waagerecht oder senkrecht) sind einfach in Code zu formulieren:
In meiner Musterlösung stellt man einen einzelnen Turm auf ein beliebiges Feld eines leeren Spielbrettes [SB]. Dann zieht man diesen Turm auf ein neues Feld, welches sich entweder – aber ausschließlich – in der Spalte (waagerechte Aktion) oder der Zeile (senkrechte Aktion) vom Startfeld unterscheidet. Da es Aktionen einmal als Zug und einmal als Schlag gibt, müssen anschließend noch per CROSS JOIN beide Varianten ins Ergebnis aufgenommen werden. Auch kann der Turm weiß oder schwarz sein, was durch einen weiteren CROSS JOIN abgebildet wird.
Der Code für den Läufer ähnelt dem Code für den Turm.
Anna begreift schnell, dass die Aktionsvermittlung für einen Läufer nach demselben Schema geschieht. Nur muss sie hier die Bewegungsbedingung verändern: Eine Dame ist einfach eine Kombination aus Turm und Läufer, hier muss die Lernende keine eigenen Kriterien mehr formulieren. Auch der König ist schnell notiert: Er bewegt sich wie die Dame, allerdings stets nur ein Feld weit. Der Springer ist etwas komplizierter, er zieht und schlägt in „L“-Form, was Anna aber über die Veränderung der X- und Y-Koordinaten abgebildet bekommt. Eine der beiden muss sich um den Wert 1 absolut verändern, die jeweils andere dann um den absoluten Wert von 2.
Verschiedene Spielstufen implementieren
Ebenfalls sehr früh im Lehrgang vermittele ich die Idee, die hinter den Schwierigkeitsgraden für den Computergegner steckt. Die Grundfrage ist hier: Wie bewertet man eine Stellung? Woran macht man fest, ob man „gut“ oder „schlecht“ steht? Je besser die Bewertungsfunktion ausgearbeitet ist und je mehr Zeit der Rechner bekommt, um einige Züge im Voraus zu planen und zu bewerten, desto besser wird sein Spiel werden. Ich wähle hier den Ansatz, den ich auch verfolgte, um meinen Kindern das königliche Spiel beizubringen.
Kinder lernen zuerst die Grundregeln des Schachspiels, beginnend mit den einfachen Zügen des Turms über die komplexen Bewegungsmuster des Springers bis hin zu den Sonderregeln wie „en passant“. Jetzt sind sie in der Lage, ein Schachspiel zu absolvieren. Das Spielniveau ist allerdings noch deutlich ausbaufähig, da die Züge zwar regelkonform, aber mehr oder weniger zufällig geschehen. Daher lernen Kinder nun „Räuberschach“. Sie zählen einfach die Figuren jeder Farbe und versuchen dem Gegner beliebige Figuren zu stibitzen. Das nächste Level ist erreicht: zu dem regelkonformen Zufallszug gesellt sich eine Optimierung nach Figurenanzahl. Noch besser schneidet ein Kind ab, welches begriffen hat, dass Figuren unterschiedliche Wertigkeiten haben. So ist eine Dame viel universeller einsetzbar als ein Turm. Wird dieses zusätzliche Kriterium ebenfalls berücksichtigt, steigt das Niveau erneut.
Die Spielstärken basieren auf der Kombination von durchgeführten Berechnungen.
Diese Methode lässt sich beliebig ausbauen: Weitere Kriterien wie die restliche Bedenkzeit, die noch zur Verfügung stehenden Rochaden, evtl. vorhandene Bauernketten und vor allem die Aktivität der Figuren werden im Laufe des Workshops durch Anna ergänzt. So entstehen immer mehr Computerlevel. Dabei merkt sie schnell, dass zusätzliche Prüfungen zur Spielstärkesteigerung auch zusätzliche Bedenkzeit bedingen. Die Laufzeitoptimierung wird aber erst im späteren Kursverlauf behandelt.
Projekt ist frei verfügbar – jeder kann mitentwickeln
Die beiden besprochenen Module („theoretische Aktionen“ und „Spielstufen“) sind hier nur exemplarisch aufgeführt, um das Projekt und seinen riesigen Umfang vorzustellen. Der komplette T-SQL-Schachcomputer in seiner aktuellen Ausbaustufe kann deutlich mehr. In Zukunft liefere ich weitere Einblicke und erkläre die Architektur und die Idee hinter den fachlichen Herausforderungen.
Interessierte Leser werden einmal quer durch die wichtigsten Befehle und Programmiertechniken geleitet. Wer Lust hat selbst ein PIVOT zu formulieren, um ein Schachbrett auf den Schirm zu zaubern, oder lernen möchte mit parametrisierten Funktionen und Prozeduren zu entwickeln, kann sich kostenfrei den Quellcode zum Eigenstudium bei GitHub herunterladen.
Wer an einem richtig tiefen Einstieg, einer Nutzung des Schachprojektes als Hackathon oder an einer außergewöhnliche SQL-Schulung unter IT-Kollegen interessiert ist, kann sich auch gerne direkt bei mir als Autor melden.
Über den Autor: Torsten Ahlemeyer
Torsten Ahlemeyer realisiert seit 2003 Abrechnungs- und Stammdatenapplikationen in Großprojekten. Der Diplom-Wirtschaftsinformatiker und Professional Scrum Master hat sich international als Projektleiter in Softwareentwicklungsprojekten einen Namen gemacht. Als IT-Consultant hilft Torsten Ahlemeyer Kunden der arelium GmbH hauptsächlich in der Rolle als Projektleiter, aber auch als Architekt, DB-Berater oder T-SQL-Spezialist bei der Umsetzung komplexer Datenbankprojekte.