Seitdem in der WEWO stand, dass Bill Gates die Software revolutioniert hatte, ich las das und dachte sofort, da muss mal einer darüber schreiben, der die EDV mit der Muttermilch bekommen hat und über fast 50 Jahre dabei war, immer als Programmierer und Anwender. Da ich niemanden kenne, der so lange und intensiv immer zuvorderst dabei war fühle ich mich bemüssigt zu obiger Lobhuddelei ein wenig Gegensteuer zu geben.
Damit Sie mich überhaupt verstehen können und das können nur wenige, die dies können teilen meine Meinung mehrheitlich, aber ich warne Sie, manchmal muss ich in technische Details gehen und immer wieder mal ein paar Begriffe einführen, die es eben braucht. Wer da nicht mitmachen will, dem vergebe ich gerne er kann aufhören zu lesen und diesen einen Satz lesen: seit den ersten vernünftigen Rechnern, so Ende 60er Jahren, gibts nichts revolutionäres in der EDV, gar nichts, denn all dieses Geschwafel ist reine Reklame. Ich würde eine Wette eingehen, dass Bill Gates nicht viel von Computern verstand, umso mehr vom intelligenten Verhandeln, minimale Produkte schnüren und das perfekt zu verkaufen und noch einiges mehr! Er muss auch ein untrügliches Gefühl für Mitarbeiter gehabt haben. Sein Kontrahent aber, der Apple-Gründer, war mit Sicherheit ein hochbegabter Softi, verstand auch was von Hardeware und war zusätzlich ein Top-Verkäufer, von sich und seinen Produkten. Wirklich innovativ, Nein. Die notwendigen «Beweise» werde ich führen und ich verneine 2 Dinge sicher nicht. Die Entwicklung der Geschwindigkeiten der Rechner und Peripherien (e.g. Disks) sind auch im Nachhinein betrachtet atemberaubend, wurden aber lange so nicht vorausgesehen. Dasselbe gilt auch für Speichergrössen aller Art. Da gab es tatsächlich Revolutionen noch und nöcher. Zur Zeit ist da der Ofen eher aus, es sei denn, der Quantencomputer kommt bald. Wenn der kommt wirds echt spannend, weil die ganze Security (Schlüssel) wird damit zum Non-Valeur, aber er hat das Zeug das besser zu machen! Heute werden schon Quantencomputer simmuliert auf normalen Computern und da gibt es interessante Aspekte (ist zu googeln).
Nun beginnen wir in meiner Jugend, so etwa 1971 wurde mir der Programmiervirus eingeimpft von einem Lehrer und einem Mitschüler. Der Lehrer hat in der Mittelschule einen Anschluss an einen IBM-Grossrechner beantragt und bekommen und mein Mitschüler hat mich in diesen Raum mitgenommen und mir das ganze rudimentär erklärt, so dass ich schnell die Erlaubnis des Lehrers bekam, ein eigenes Programm zu schreiben (brauchte Schlüssel, ein Passwort), wobei das Programm, vom Lehrer vorgeschlagen, eine mathematisches war, was denn sonst! Der Lehrer (Mathe) hat in die schriftliche Maturarbeit eine Aufgabe zur Programmierung eher geschmuggelt, eine didaktische Meisterleistung, mit ein paar Befehlen kann man ein einfaches Programm schreiben in einer virtuellen Programmiersprache, kann jeder leicht selber erfinden, ich komme da noch genauer hin. Es ging grob um Primzahlsuche (kann man heute googeln, gibt mehrere Verfahren und ich habe einige programmiert und optimiert), Aufwand grob ein Monat total. Verwendet haben wir APL, a programing language, da gabs nix deutsch, da musste man durch :-), oder aufgeben, was ich schlecht konnte. Dann gabs schnell einen HP-Tischrechner (umgekehrt polnische Notation) und bei der Programmierung war ich mit meinen Programmierkenntnissen schnell dabei, der war zum Programmieren zu klein und wir haben uns auf Light-Shows eingeschossen, der hatte einen drei Zeilen Monitor. Spass pur. APL konnte Vektorrechnung, sehr praktisch, habe keine Programmiersprache mehr gesehen, die das kann, Fremdsoftware (offen) in z. B. Java gibts natürlich!
Das wäre wohl mein Karriere-Ende in Programmierung gewesen, wenn nicht schon wieder der pure Zufall zugeschlagen hätte. Ich traf jemanden, der für eine Schweizer Firma, die Commodore Computer verkauft, solche Computer programmierte und zufällig einen kleinen Computer (grösse Fernseher) zu Hause hatte, den er nicht mehr brauchen wollte, weil speichermässig gab es grössere und die Firma ihn augenscheinlich auch nicht mehr wollte. Das war der Anfang vom Ende. Und jetzt begann die Liebe, die nie mehr endete. Ich begann die Sache wirklich ernst zu nehmen und das erzähl ich gerne.
Da hatte ich jetzt einen eigenen Computer, auf Zusehen, ein englisches Manual zum Gerät und ein Basic Manual beides in Englisch! Zum Gerät gab es ein Kassettengerät mit europäischen Kassetten, man konnte da was speichern, sehr langsam. Das Gerät hatte 8 KB Memory und einen Basic Interpreter von etwa 16 KB und hätte 32 KB adressieren können. Das muss ich erklären. Wenn Sie mir folgen, dann verstehen Sie jeden Computer! Mehr Details: Röhrenbildschirm mit grottenschlechter Auflösung, 16 KB Rom (Basic Interpreter + «Betriebssystem), 8 KB Ram (flüchtiger Speicher, Rom (read only memory) ist nicht flüchtig), eine Tastatur, eben das Kassettenlaufwerk. Alles in einem und kompakt verbaut, unter der Tastatur hatte es ziemlich viel ungenützter Platz, schon fast eine Mogelpackung ;-). Der Basic Interpreter hatte einen einfachen Editor (das ist so was wie Word Pad, man konnte wohlgeformt Text eingeben, eben Programme. So schreiben wir mal ein Basic Programm, es soll die Zahlen 0-9 ausgeben und am Schluss die Summe dieser ausgegebenen Zahlen.
10 i=-1
20 s=0
25 i=i+1
30 print i
40 s=s+i
50 if i <9 goto 25
60 print s
Vorne sehen Sie auf jeder Zeile eine Zeilennummer, die ist frei wählbar, aber es darf sie nur einmal geben! Lassen wir das Programm laufen, dann wird ein Variable i gebildet (man kann das eine Laufvariable nennen) mit Startwert -1, damit wird die spätere die Summe gebildet. Dann wird i um eins vergrössert (Zeile 25), dann wird i ausgegeben und dann wird s um i vergrössert (40, das erste mal bleibt s beim Wert 0) und dann wird gefragt ob i < 9 ist, wenn ja, dann beginnt es wieder mit der Zeile 25, andernfalls wird s ausgegeben. Alle Ausgaben (? i oder ? s) sind auf dem Bildschirm. Der Bildschirm hatte 25 Zeilen à 80 Zeichen, das hat was mit Lochkarten zu tun, aber was man gleich versteht, niemand hat mit Textverarbeitung gerechnet! Das Programm ist grottenschlecht geschrieben, aber es tut wohl seine Pflicht.
Nun, zum Verständnis noch ein paar Erklärungen. Eine Variable, jede Variable ist prinzpiell ein Zeiger (englisch Pointer) auf einen Speicherplatz im Ram. Print ist ein Programmier Befehl und ist auch bei ein Zeiger. Das geht so: Print wird vom Interpreter als eben Print erkannt (der Editor hat das schon quasi unsichtbar in ein ?-Zeichen umgewandelt (sie dürfen auch ? i schreiben), denn jeder Basic-Befehl ist eine Zahl zwischen 0 und 255. Nun gibt man dem print wohlgeformt eine Variable mit, die geprintet werden soll. Der Interpreter, sozusagen hinter Ihrem Rücken nimmt das i mit und startet die vorhandene print-Routine im Rom des Computers, macht seinen Job und kommt quasi zurück zur nächsten Zeile. So, nun wissen Sie was eine Subroutine ist, eben print. Diese Print-routine ist in Maschinensprache geschrieben, also die Sprache die der Prozessor direkt ausführen kann und ist ziemlich komplex, weil da im Basic alles übergeben werden kann, auch Text (das nennt sich String). Folglich gibt es auch Stringvariablen (Pointer nicht vergessen), die erkennt der Interpreter gleich, weil die irgendwas$ heissen, der $ zeigt dies an. goto ist auch ein Befehl und wird ebenfalls interpretiert, ist der Zielpointer (Zeilennummer) grösser, so sucht der Interpreter diese Zeilennummer hinter der aktuellen Zeile, sonst beginnt er am Anfang des Programmes mit der Suche. Schauen wir kurz i=i+1 aus der Sicht des Interpreters an. Hole den Wert von i (i ist ein Pointer!) in den Prozessor, addiere 1 dazu und schreib es an den alten Speicherplatz zurück. Das ist noch viel trickiger, was sie nicht sehen zur Zeit, aber so läuft das prinzipiell in jedem Computer heute, wirklich jedem. Lassen Sie das Programm in Ihrem Kopf ablaufen, nehmen sie sich Zeit um zu verstehen, es ist so brutal simpel, man kann es fast nicht glauben 😉
Lesen Sie nur weiter, wenn Sie Pointer, Routine, print, goto verstanden haben, das ist ein Wissensaufbau, fehlt ein Stück, sie sind verloren. Zum Befehl if (auf Stufe Prozessor heisst der Befehl meist branch (verzweigtes if, wenn man will)). Das ist boolsche Algebra und die Antwort auf einen if heisst zuerst einmal true oder false (richtig oder falsch). Was in welchem Falle zu geschehen hat, steht hinter dem if und kann eigentlich beliebig komplex sein. Möglich zum Beispiel: if i=7 then i=i+1 else goto Zeilennummer. Wenn Sie wirklich programmieren wollen müssen Sie das a fond verstehen, da gibt es noch and, or, exclusiv or (xor) und not, also z.B. if (not (a>0 or b>0) and i=7) da wird gruselig. Meist versuche ich diese Ausdrücke mit mehr verschachtelten ifs zu machen, das ist aber Programmierstil, kein muss es gibt auf dem Internet viel java-code zum kopieren, da lese ich Dinge, die sind so verzwickt geschrieben, ich verstehe es nicht, Programmierfreaks finden das ultimativ gut, weil so wenig Text. Nicht mein Geschmack, denn ich muss meine Programme unterhalten und da wirds meist gruselig. Rein strukturell braucht es weder then und else, sie können alles ohne machen, also einfach if(….) goto…, verschachtelt. Aus meiner Sicht gibt es keinen Prozessor der einen else hat, aber ich traue den Programmierern von Prozessoren jeden Schabernack zu, also auch den. Soviel ich weiss, hat sogar jemand einen Basic Interpreter in die Hardware eines Prozessors einprogrammiert!?
Gehen wir zurück zum Commodore Pet und schauen uns die Hardware etwas genauer an. Der besass einen Prozessor namens 6502. Dieser Prozessor war ein Risc Prozesser und hier können wir gleich eine oft erzählte Lüge entlarven, denn Jahre später wurde der Risc-Prozessor neu erfunden und gefeiert. Risc heisst reduced instruction set computer, also ein Prozessor der mit wenigen schnellen Befehlen auskam. Folgendes müssen Sie nur wissen:
- die Geschwindigkeit eines Prozessor ist abhängig von der Taktfrequenz, aber nicht nur!
- Je mehr Hardware-Befehle (Maschinensprache) sie einbauen, desto länger braucht der Prozessor um einen Befehl abzuarbeiten. Ich habe das mal mit einem Contraves-Ingenieur besprochen (sehr lange her), der hat Prozessoren für zielsuchende Raketen gebaut, also musste die Hardware nur das können und nichts anderes, aber so schnell wie möglich. Also permanent Flugbahn rechnen und Korrekturen berechnen um die Triebwerke zu steuern. Damit wird das ganze zur Optimierungsübung.
- ich habe zum Spass damals vergleiche mit dem Zilog Z80er Prozessor gemacht in Maschinensprache. Der 6502 taktete deutlich tiefer und je nach Aufgabe (sprich Programm), war er dennoch schneller.
Die Idee der Hersteller war einen möglichst günstigen Mikroprozessor zu bauen und haben damit den Risc-Prozessor eigentlich erfunden. Wir waren ja schon bei Pointern, darum sollte es mir gelingen Ihnen die Adressierungsmöglichkeiten, die Prozessoren haben sollten zu erklären. 6502 war vorbildlich, hatte alles, der Z80 nicht. Alles heisst, hier können sie beruhigt abschalten, er konnte um zwei Ecken adressieren (indexierte Adressierung), je nachdem ob sie das sogenannte x-Register oder das y-Register brauchten. Register sind Speicher im Prozessor, die verschiedene Befehle im 6502 gebrauchen konnten. Diese indexierte Adressierungen sind das mächtigste, was ein Prozessor haben kann. Intel ist eher der Linie vom z80 gefolgt und hat letzlich über Jahrzehnte Scheissprozessoren gebaut, aber gewaltig an der Taktfrequenz geschraubt. Der erste Prozessor in IBM-PC’s war der 8088, eine veritable Katastrophe, die Endtäuschung aller, die was verstanden und Intel hat sich gefeiert. Dabei gab es zur selben Zeit den Motorola 68000, das war die Weiterführung des 6502. Der war echt 16Bit (das ist die interne Schaufelgrösse und jedes Kind weiss, dass es mit doppelter Löffelgrösse viel schneller essen kann, nur die Schaufelgrösse war Preis relevant, denn braucht grössere Hardware). Der 68000er hatte alles Mehrzweck Register, das war Fortschritt zum 6502, der Intel war ein Murks, gewisse Register konnte man hier brauchen, andere da. Das hatte üble Konsequenzen, auch gute Compilerbauer haben die verschiedenen Register bei Intel schlecht genutzt, weil zu kompliziert zum optimieren und damit lief die Software zwar, aber eben langsamer als erwartet. Dank meiner Diss, habe ich das direkt sehen und messen können, das war auf einem 80286 Maschinensprache vs Turbo Pascal Differenz grösser als Faktor 10. Das war ein kleines Software-Teil, das Grafiken raffiniert verrechnet hat (mit boolscher Algebra) und die Grafikkarte direkt geladen hat…
Der 68000er hatte eine Adressbreite von 32 Bit und einen komplett linearen Adressraum, auch hier war der Intel einfach ein Murks (ohne auf Details einzugehen). Nun entlarven wir eine der grössten Lügen. IBM hat den IBM-PC so schlecht wie möglich gebaut und Microsoft hat, gegen Geld die maximal schlechteste Software geliefert (Dos). Warum das alles? Ganz einfach, IBM wollte seine Midrange Computer (Serie 36 und Vorläufer) nicht konkurrenzieren und wenn man IBM’s Geschichte verfolgt, war das der Beginn ihres schnellen Abstieges, mit einem Zwischenhoch). Wenn man genau hinschaut, waren IBM-Computer (Mainframe) eigentlich schlecht, UNYSYS z.b. war immer besser aus Sicht der Prozessoren, aber in einem waren sie unschlagbar, und das war die Geschwindigkeit, mit der IBM-Rechner mit grossen Datenmengen umging. Ihr Filesystem, war oberlausig, so musste man als Programmierer wissen wie gross ein File ungefähr werden wird, aber IBM hat als einzige Computerfirma verhindert, dass ein File zum schreiben, über eine Harddisk verteilt werden konnte. Wenn Sie als Programmierer programmierten, dann bekamen sie mit dem Boot (hiess bei IBM IPL) Speicherplatz, wieviel bestimmte ein sogenannter Systemingenieur (nicht Angestellter von IBM), ein wahrer Herrgot und von IBM gut gepflegt. Wenn immer sie das Programm zwischenspeicherten, wurde einfach eine neue Kopie gemacht und der Speicherplatz des alten Files war nicht verfügbar bis zum nächsten boot oder IPL. Es gab zwar einen Compress, aber der war nicht korrekt programmiert.
Nun, der langen Rede kurzer Sinn, Microsoft und IBM waren Behinderer von Fortschritt und nicht das Gegenteil. Nur um es kurz zu streifen, IBM ist der Erfinder von SQL und des relationalen Datenmodells, laut google. So lasse ich das nicht stehen, weil das relationelle Datenmodell ist viel älter (nur nie so genannt), selbst mein 2 Pet gab mir eine Software, die das verstand (KRAM, keyed random access methode). Ohne das relationale Datenmodell in Prinzip zu verstehen, hätte niemand KRAM programmieren können. VSAM (grausam) lief auf IBM weit vor SQL-DB’s und SQL war für IBM eine Sprache, mit der Mann nach einfachen Regeln Zugriffe auf die DB machen konnte. Soweit mir bekannt, basieren die SQL-DB’s quasi physisch auf VSAM. In die Praxis brachte nicht IBM SQL-DB’s als erster, das war Honeywell. VSAM war übrigens sehr gut optimiert, aber grausam, weil, und jetzt kommt es wieder, man den Speicherbedarf voraus kennen musst, insbesondere auch für alle Indexdateien und das war in der Praxis eben grausam fehleranfällig, es gab halt nur Faustregeln! VSAM gabs nur mit fester Rekordlänge (=Datensatz, heute feste Spalten und Spaltenlängen), da ist eine schnelle Adressierung kinderleicht. Kennen Sie den start eine Datei (Pointer natürlich) und sie wissen die Länge eines Datensatzes, dann können Sie den Ort leicht errechnen. Startpointer + (n-1) * Rekordlänge ist der Startpunkt des n-ten Rekords.
Gehen wir nochmals zurück zu den Anfängen. Die Ursprache ist die Maschinensprache (Prozessorsprache). Sie konnten im Pet auf echt primitive Art, die benötigen Zahlen eingeben und das so erstellte Programm laufen lassen, komplett unabhängig von der Basic Geschichte, wobei sie zum start eines Maschinenprogrammes den Interpreter brauchten. Das war dann mit der Zeit ätzend, man konnte so ja nichts wiederverwenden, das Programm lief nur korrekt, wenn es immer auf derselben physischen Adresse stand. Logo erfand man darum den Assembler. Assembler ist eine erste Hochsprache und auch gleich ein Compiler. Haben Sie eine Bibliothek von Assembler-Code, eigentlich Subroutinen, dann können sie ihre eigenen Programme wiederverwenden und einigermassen verständlich schreiben. Sie können den Assembler dazu verdammen, goto’s relativ zu berechnen und damit können Sie so ein Programm beliebig im Speicher verschieben. Das ist auch die Basis für Multitasking (mehre Programme im Speicher halten und geschickt Rechenzeit verteilen) und Multi-user Betrieb (mehre Benutzer dürfen quasi gleichzeitig am Computer arbeiten).
Relativ schnell kam der Wunsch der Kunden, dass sich Programmierung vereinfachen müsse und der Programmierer eigentlich nichts verstehen muss, ausser was er programmieren soll. So entstanden sogenannte Hochsprachen (Basic, Cobol, Fortran, PLI, B, C, Pascal, Java u.v.a.m). Jede Sprache hatte so seine Einsatzgebiete und als Programmierer hatte man gewisse Freiheiten. Plötzlich aber begann man aber von Softwareengineering zu reden. Ich war in meinem einzigen Programmierkurs Ende 70er Jahre. Hier sollte ich Cobol lernen, eine geschwätzige Hochsprache, statt i=j oder i:=j schrieb man dann move j to i, was dahingehend falsch ist, dass es copy j to i heissten müsste, weil faktisch der Inhalt von j kopiert wird! Zusätzlich gab es 2 Precompiler, einer hiess Jackson und der andere hiess Delta. Es gab damit für den Programmierer 3 Sprachen, Jackson, Delta und Cobol, wobei Cobol nur rudimentär gebraucht werden konnte. Jackson war zuerst einmal eine Philosophie (strukturiertes Programmieren), d.h. alle Loops und alle if waren in Jackson geschrieben und der goto wurde schlicht verboten (und auch kontrolliert!). Das spezielle an Jackson war, dass man mit dieser Philosophie (von den Datenstrukturen (Input und Output) zur Programmstruktur!) am Schluss bei einer Programmstruktur landete und die war dann die alleinig richtige. Das beleidigte mich, habe das meinen Lehrern auch gesagt und damit wurde ich mal eine Zeit lang unbeliebt ;-). Meine Mitschüler und das war tragisch wussten tatsächlich nicht, was sie taten. Sie machten also diese schönen Datenstrukturen (das war schon künstlerisch anzusehen), dann den Übergang zur Programmstruktur (das war eher Magie, ich konnte das, aber so richtig verstanden habe ich wohl nie). Dann precompilieren, compilieren, linken (lauffähig machen) und dann das Programm testen. Nun begannen die Probleme, denn es lief ja ein Cobol-Programm, Sie aber hatten Jackson, Delta programmiert und das Cobollisting (man konnte es ausdrucken) sah sensationell hässlich aus, so völlig anders wie der schöne Jackson und perfekt unübersichtlich. Viel meiner Schulzeit verbrachte ich mit Hilfe an meine Mitschüler, weil die extrem Mühe hatten ihre Fehler selber zu finden obwohl das alles sehr einfache Programme waren. Später habe ich dann noch die Jackson-Jünger persönlich kennen gelernt, die waren wie Chef-Ideologen, unantastbar und komplett selbstverliebt. Eine Begegnung war mir geblieben, ich wollte in einem mir völlig fremden Programm einen Produktionsfehler finden, das Programm war von einem dieser Jünger erstellt. Ich fand den Fehler im Programm nicht, obwohl ich die produktiven Daten hatte, also auch den Fehler im Output sah. Ich war schwer enttäuscht, meine Chefin, die beste EDV-Chefin, die ich je hatte, lächelte und sagte gut, holen wir diesen Jünger. Nach 2 Wochen kam der wieder und sagte, ich finde den Fehler auch nicht, was auf Deutsch heisst, er verstand sein Programm auch nicht. Man kann mit Recht sagen, dass dieser Versuch einer Softwarerevolution zwar viel Geld verschlang, aber nichts brachte. Schon der Ansatz eines Precompilers zum programmieren ist meines Erachtens grund falsch. Delta hingegen war ein Fortschritt. Mann konnte mit Delta Programmcode (e.g. Cobol) zentral programmieren und mittels Aufrufen in andere Programme reinnehmen. Wenn Sie so wollen kann man von Delta-Objekten reden und mit einem solchen Objekt konnte man übersichtlichen Code programmieren und natürlich alle Datenstrukturen einfügen, die benötigt werden. Für eine grosse EDV-Organisation hat es Vorteile, denn ändert man eine Delta-Datenstruktur, dann muss man alle Programme neu umwandeln und dann ist gut.
Seit dieser Zeit, bin ich sofort kritisch, wenn jemand erzählt er hätte die Softwareentwicklung revolutioniert und da gab es einige! Mit grob 30 habe ich meine Diss geschrieben und das war eine Softwareentwicklung primär. Es gab zu jener Zeit schon den Larry Laffer und meine Aufgabe war es, jedem Programmierdepp es zu ermöglichen einen Larry Laffer zu programmieren. Nun was hiess das? Ich musste eine Bibliothek von Software erstellen, die es einem Spieler ermöglicht Figuren dreidimensional über den Bildschirm zu bewegen. Da unsere Spiele auch Daten sammeln, einen möglichst dichten Teppich, also viel Daten, habe ich das auch in der Bibliothek integriert, entscheidend war auch, dass der Spieler das nicht merken sollte. Zusätzlich machte ich auch eine grafische Oberfläche, also etwa Windows, man konnte Pulldowns und Popups machen, eben, das was es so braucht. Windows selber konnte ich nicht brauchen, viel zu langsam und schon damals ein Speicherfresser. Damit war dos gesetzt und ich suchte Software. Schnell wurde mir klar, das kann nur Turbo Pascal sein und da versteckte sich eine Softwarerevolution, die nie als solche wahrgenommen wurde. Ich suchte auch Software für das verschieben von Figuren und fand nichts, es gab tonnenweise Material zu Vektorgrafik, aber nichts zu Pixel-Grafiken. Larry Laffer gab es ja, also musste es gehen. Nur, ich musste das quasi neu erfinden!
Dann bekam ich einen Computer vom Institut, die benötigte Software und los gings. So lernte ich Turbo-Pascal kennen, konnte das Manual bald fast auswendig und begann Hilfssoftware zu schreiben. Turbo Pascal (Version 4) war selber mehr als Pascal (eine Schweizer Erfindung) eher eine Bibliothek, es gab eine Einstellung die Rigidität von Pascal auf ein ertragbares Mass zu reduzieren, und man konnte direkt ins Ram schreiben (Heap), damit direkt in die Grafikkarte, und man konnte Assembler-Code integrieren und man konnte, das war die Revolution, eigene Bibliotheken machen, sogenannte Units. Für jede Variable in der Unit konnte man entscheiden, nur lokal in der Sub-Routine, lokal in der Unit oder auch von ausserhalb sichtbar. Ähnlich die Subroutinen, nur sichtbar in der Unit oder sichtbar im eigenen Programm. Man musste sich einfach die Unit anschnallen und dann konnte man sie brauchen. Die Unit musste man separat Compilieren. Das Hauptprogramm musste natürlich auch compiliert werden, das ging dann blitzschnell, denn die compilierte Unit wurde quasi nur eingebunden. Auf etwas musste man achten, gleiche sichtbare Variablennamen in zwei Units können zu Verwirrungen führen, man muss sie dann länger schreiben <unitname> . >variablennamen>, es gab kein Warning. Es ist interessant, der Pascal Erfinder wurde weltberühmt, ein Software Papst, aber die wirklichen Software-Helden von Borland nicht. Die Borlandsoftware war fehlerfrei und auch meine Software war das, jedenfalls wurde sie nach mir mehrfach von Studis verwendet, ich habe nie was negatives gehört. Ein Jahr nach der Diss, bekam ich den Auftrag noch eine externe Soundkarte anzuhängen, diese Soundkarte hat ein El-Ing HTL selber gebastelt.
Ein weitere scheinbare Softwarerevolution habe ich bei der damaligen AGI erlebt. Die AGI wurde gegründet um die modernste und beste Bankensoftware zu schreiben zum Nutzen der AGI-Banken. Das konnte nicht gut gehen, weil die eingekauften Software-Profis waren alle irgendwie studierte EDVler mit den tollsten Ideen. Alle waren sich einig, sie sind die Besten. Also, es war wie in der SBG, es ging nicht vorwärts, warum? Beginnen wir mit dem Schlimmsten, diese Leute verstanden absolut nichts vom Bankengeschäft und waren allesamt der Meinung, so ein tolles Ding muss auf der grünen Wiese begonnen werden. Intern hatten Sie nonstop Knatsch, da konnten Schlägereien nur knapp verhindert werden. Auch sprachlich gab es wunderliches, der Kunde wurde zum Partner alles wurde zu Objekten erklärt. Für die Datenstruktur des Partners auf der Datenbank brauchten die mehrere Monate, denn sie konnten sich nicht darauf einigen. Erst mit Hilfe externer Moderatoren gelang das Husarenstück und war meines Erachtens falsch! Jede Tabelle einer modernen Datenbank braucht meines Erachtens einen eindeutigen Schlüssel der bedeutungsfrei sein sollte, also nummeriert man von 1 aufwärts und die Partnernummer, die der Kunde sieht, kann man mit Bedeutung versehen, z.B. die Filiale integrieren. Nein, die begannen die Partnernummer bei 100’000 und machten daraus den primären Schlüssel.
Zur Entwicklung verwendeten die AGI-Jünger natürlich die teuerste verfügbare Software auf dem PC, die damals nur unter OS/2 lief und jeden normalen PC in die Knie zwang. Was konnte diese Software, eigentlich nichts, wurde aber von allerlei Experten als Non-Plus-Ultra gefeiert)! Verwundert? Ich kam zur alten AGI, als quasi letzter, denn nach meinem unrühmlichen Abschied wurde die Entwicklung dezentralisiert und in die existierenden Softwareorganisationen der Banken verteilt. Mein Thema war die Nostro-Konnten Bewirtschaftung, die ich so konzipierte, dass die notwenigen Zahlungen am Tagesende automatisch passiert wären (das ist ein Optimierungsprozess), verantwortliches Personal aber von Hand noch eingreifen konnten. Ich wurde auch sehr lange nicht fertig, weil die Behinderung geschah AGI-intern. Mein Chef war ein klassischer Jünger und er hat mich formal überwacht und gepiesackt, letzteres hat er selber nie so gesehen. Das Erstellen der Programme in dieser ultrateuren Software musste nach Vorschriften der Jünger geschehen, dazu hatten sie eine eigene virtuelle Sprache entwickelt, die dann in Zukunft (Ihre Überzeugung) mal durch ein Programm gelesen wird, das dann das finale Programm erstellt, also eine Art von Precompiler (schon wieder 😉 ). Das könnte ja theoretisch gelingen (sehr schwierig), aber was mich die meiste Zeit kostete, sie haben während meiner Entwicklungszeit permanent an der virtuellen Sprache geschraubt und ich musste dann wieder umschreiben. Als ich dann mein Programmkonzept den Bankmitarbeitern vorstellte, wurde das mit Freuden abgenickt und ich dache, was bekomme ich als Nächstes. Weit gefehlt, es gab wieder «wichtige» Änderungen an der virtuellen Sprache, darauf habe ich ein paar wahre, aber unschöne Worte gesagt (für meinen Chef unschön, ich habe ihm den Spiegel hingehalten). Ich sagte: Ihr werdet nie fertig werden, verliess den Laden kurze Zeit später und ein halbes Jahr später war die AGI-Enwicklung in der Zentrale Geschichte.
Ich war ja gut 30 Jahre in der Bankenwelt tätig und habe mich immer gewundert, dass man überall immer bei 0 begann in einem Projekt. Nie ist jemand auf die Idee gekommen, das Bankgeschäft echt zu beschreiben, denn das Kerngeschäft selber hat sich praktisch seit Beginn der Bankenwelt nicht verändert. Buchhaltung, Konti, Kredite das ist sehr stabil. Nur das Umfeld hat sich verändert, es kam der Bancomat, SIC, Swift, die virtuelle Aktie u.s.w. Hätte man Unterlagen des Bankgeschäftes, die man auch neuen Mitarbeitern in die Hand drücken könnte, so ein dünnes Heft pro Tätigkeit, das müsste natürlich immer nachgeführt werden, dann müsste die EDV nie ein Grobkonzept und Feinkonzept schreiben. Ich habe mal für die LUKB einen vollständigen neuen Zahlungsverkehr geschrieben, so quasi als externer Teilprojektleiter. Der Projektleiter, ein kleverer Mensch, hat begriffen, das ich das besser kann als er und er hat mir quasi ziemlich freie Hand gelassen, ich musste ihm nur die Grundidee erläutern und da hatte ich teuflisches vor. Ich sagte ein Zahlung ist eine Zahlung, es gibt zwei Richtunge, raus und rein und es gibt verschiedene Zahlungswege, aber eben Zahlung ist Zahlung. Diesem Gedanken habe ich alles untergeordnet und das hatte starke Konsequenzen für die zentralen Datenstrukturen. Ich hatte ziemlich gute Beziehung zum Zahlungsverkehrsleiter dank meinem Projektleiter, der hat mir geholfen, weil ich hatte auch die Idee, dass es mit der neuen Software weniger Personal braucht, das aber schien ihm hinderlich für seine Karriere! Gut letztendlich haben wir eingeführt, nach zwei aufwändigen Tests mit der fast gesamten Fachabteilung und Pretests zur Performance auf den zentralen Datenstrukturen. Die Performanceübung machte ein Programmierer in Ausbildung, ich musste ihm einfach ein kleines Teil schreiben, das Zufallszahlen produziert (weil das gab es nicht in Cobol!), den Rest verstand er sofort. Übrigens diese Performancetests mussten sein, weil der Systemprogrammierer sagte, dass das was ich vorhätte nicht funktionieren könne, weil 5 Schlüssel für ein VSAM File, das schien ihm denn doch zu viel. Als ich ihm sagte, dass man den neuen Zahlungsverkehr kübeln könnte, wenn ich meine 5 Schlüssel nicht bekomme, war der Test seine Bedingung. Ich aber habe vorher einen mir bekannten, ausgezeichneten Programmierer in der Zürich-Versicherung gefragt und der sagte: kein Problem. Ich hätte ja DB2 genommen, aber das war dem sagen wir Oberprojektleiter nicht geheuer, abwohl die AGI quasi parallel auf DB2 setzte. Witzig ist nur, dass Jahre später, als die AGI einen Zahlungsverkehr brauchte, gezwungen wurde auch «meinen» anzuschauen, sie diesen ablehnten, weil kein DB2, obwohl alle Fachabteilungen genau «meinen» Zahlungsverkehr wollten. Besonders witzig fand ich, dass die Jünger aus der AGI wohl übersehen hatten (eher gewollt, die wollten neu schreiben), dass alle Zugriffe auf die zentralen Daten mit Delta von mir geschrieben waren, man also nur hätte den Deltacode auswechseln müssen. Zusätzlich hatte ich die bei Zahlungen notwendigen Buchungen auch ausgekapselt, also die Anbindung an die kommende neue Buchhaltung einfach gewesen wäre. Na ja, am Geld hats damals nicht gefehlt. Für die Fachabteilung der LUKB wurde es dann zum Rückschritt, weil der neue Zahlungsverkehr betriebstechnisch schlechter war, als mein Alter!
Warum so ausführlich, klar ich will mich loben! Zusätzlich, exemplarisch sehen Sie hier wie ein grösserer Programmkomplex entstehen sollte. Es braucht einen Wurf, eine Idee, eine Vision und erst wenn man die Umsetzung in die Praxis beweisen kann, dann sollte man Realisieren und dafür muss man an gewissen Orten in die Tiefe gehen. Folgendes gabs mal in der SBG. Ein tolles Projekt zur quasi online-Bank. Alle Konto-Bewegungen zum Beispiel sofort zu Ende buchen. Was keiner gemacht hat, ist auszurechnen, wie gross der Speicherbedarf wäre. Technisch waren zu jener Zeit soviel Hard-Disks angehängt physisch gar nicht möglich und selbst dann, ich bezweifle übrigens das sie den nötigen Durchsatz hingekriegt hätten, aber sie haben mit der Realisation begonnen bis es klar war, dass das nicht geht. Das hat nicht nur hunderte Mannjahre verschleudert, es wurde dann auch die EDV-Leitung ersetzt. Die Neuen begannen wieder bei null, aber voller Angst. Das hatte zur Folge, dass technisch nichts neues Einzug hielt, im Gegenteil, im neuen Projekt Abakus waren zum Beispiel Index-Files (so wie KRAM oder VSAM) zuerst komplett verboten. Das Verbot wurde später ein wenig gelockert, ich habe für ein paar Dinge Index-Files benutzen dürfen. Das hat aber dazu geführt, dass die SBG-Lösung immer leicht technisch im Rückstand war. Wenn Sie also zum Beispiel die Entwicklung von Hypotheken in einem Zeitfenster (e.g. jetzt und 12 Monate zurück) im Blick haben wollten, mussten die Operateure viele Bänder manuell nachschieben und da konnten Sie auch Fehler machen und das musste meist ich, Ihnen nachweisen, nach Reklamation der Fachabteilung. Im übrigen waren die führenden Köpfe in Abakus externe Mitarbeiter, die ein eigenes Geschäft hatten. Die waren echt gut, zwei habe ich kennengelernt. Diese Firma hat dann quasi im Nebengeschäft dauernd externe Mitarbeiter an die SBG verdingt, das war dann ein ziemlich bestimmender Machtfaktor innerhalb der EDV der SBG und ich habe gestaunt wie das quasi widerstandslos funktioniert hat.
Als eine weitere Softwarerevolution wurden die Objekt-orientierten Sprachen gepriesen. Ich habe schon darauf hingewiesen, Turbo Pascal war nahe dran, also Revolution mit nichten. Gut, ich habe java erst vor kurzem gelernt (etwa 10 Jahre) und habe das selber gemacht, ich nahm das Manual und schrieb ein Primzahl Programm zum Start. Ich brauche zum Beispiel die ganze Vererbung in meinen Core-Jass Programmen nicht, wenn da eine Klasse eine Erweiterung braucht, dann programmiere ich das in meiner Klasse direkt, warum quasi einen Umweg nehmen. Ich habe mit einer Klasse Konstanten.java begonnen, da stehen so Dinge drin, wie der innere Wert (hat mit dem Zählen nichts zu tun), der Wert einer Karte (Bauer 20 oder 2 je nach Spielart und Trumpf), Farbnahmen, etc. Dinge eben, die sich nicht verändern. Dies Klasse wir im Hauptprogramm initiiert und ist damit für alle Klassen verfügbar. Dann folgte InitJass.java, da steht alles drin, was es braucht, bis ein Jass beginnt. Im Wesentlichen ist das Mischeln, Verteilen, Trumpfmachen inkl. Schieben. Das gilt für alle Jassarten ausser Sidi und Samschtig jass, da hier geboten wird, das sind eigene Klassen. Das eigentlich Spielen ist in einer Klasse Spielen.java, welche die InitJass Klasse einbindet (extends…). Ob das die beste Lösung ist, keine Ahnung, aber es funktioniert tadellos, wie mir java, wie Turbo Pascal und das alte Basic des Pet fehlerlos dünken. Spielen.java hat mehr als 30’000 Zeilen, aufgeteilt in eine Unsumme von kleinsten und grösseren Methoden (das sind die Subroutinen von früher!). Da ich sehr grosse Methodennamen verwende, finde ich meist eine gesuchte Methode sehr schnell. Also ich bin zufrieden mit java, keine Frage, eine Revolution war das nicht. Weil eben java selber schon eine Bibliothek ist (wie Turbo Pascal) und es unzählige Mengen von Zusatzbibliotheken gibt, die man gratis dazuschnallen kann und für etwas kniffliges findest Du immer irgend wen auf dem web, der da ein wenig Code abgelegt hat und oft benutze ich solche, als Copy/Paste. Denke das geht OK, aus rechtlicher Sicht und ist sehr, sehr praktisch, weil da gibt es Leute die damit filigran umgehen. Interessant ist das man z.B. eine ganzzahlige Variable als echte Klasse und als Primitive Klasse definieren kann und sie werden nicht überrascht sein, dass ich fast ausschliesslich die primitive Variante verwende. Die echten java-Jünger verwenden wahrscheinlich die primitive Variante nicht, weil primitiv! Im ersten Moment habe ich gar nicht verstanden wo da ein Unterschied ist. Nun, eine echte Klasse hat einen gewaltigen Überbau, das braucht die auch ;-), aber wenn ich schreibe: for (int i =0;i<4;i++), wozu sollte da der Überbau nützlich sein, faktisch bremst er, verschleudert Speicherplatz. Faktisch gibts beim jassen viel zu rechnen, zu vergleichen und Geschwindigkeit ist für mich dahingehend extrem wichtig, dass ich zum Testen oft zwischen 10’000 und 100’000 Partien spiele, jede Partie grob 12 Runden und das geht ins Tuch (so zwischen 70 Sekunden und 700 Sekunden).
Für das Jassen auf dem Internet verwende ich die üblichen Verdächtigen (Apache Thomcat) und eine Google-Entwicklungsumgebung (smart gwt, nicht ganz praktisch), welche dahingehend viele Klassen zur Verfügung stellt, und da vererb ich manchmal, weil ich über viele Klassen nicht im Sourcecode verfüge. Mittlerweile habe ich die google-Software ziemlich im Griff, kaufe keine Updates mehr, mache nützliche Erweiterungen/Objekte selber. Programmieren tut man mit java, wobei wenn ich browserseitig programmiere, dann programmiere ich auch in java und nicht in java script. Am Schluss gibts dann sowas wie Ajax, mit dem gwt-compile, glaube ich, dieses Wissen tue ich mir nicht an! Ohne Hilfe wäre ich wohl kaum in diese Welt eingestiegen, aber ich habe einen alten Weggefährten (nicht er ist alt!, danke ihm hier), der mir da Anschubhilfe gegeben hat, ich habe eine verdammt gute Fragebogensoftware gemacht (Fragebogenerstellung und Fragebogen durchführen), ziemlich gut, aber als ich fertig war, waren die ursprünglich interessierten Verlage auch fertig, resp. mussten drastisch sparen. Man kann mit der Fragebogensoftware nicht nur Fragebogen erstellen, sondern auch Panels führen, d.h. die registrierten Benutzer müssen ihre persönlichen Daten nur einmal erfassen (so wie Geschlecht, Ausbildung, Alter) und können sie dann selber pflegen. Daneben kann man kommunizieren, d.h. Mails an alle, oder Mails an die die den Fragebogen gemacht haben resp. nicht gemacht haben. Alles äusserst flexibel. Fragen, ja ganze Fragebogen können sie in neue Fragebogen integrieren via grafische Oberfläche. Mehrsprachigkeit ist drin, wie auch die Abbildung einer Konzernstruktur. Es gibt ein recht raffinierte Auswertung mit Filtern, auch grafisch als pdf und es gibt Standardschnittstellen (SPSS und CSV). Sie können einen laufenden Fragebogen dauernd auswerten, also den zeitlichen Erfolg überwachen… Genug der Werbung, zur Zeit interessiert das scheinbar niemanden mehr…
Nun ich kann nicht alles erzählen, aber zwei, auch ziemlich revolutionäre Ideen und kleine Softwarerevolutionen habe ich sicher unterschlagen. Software Container verschmiert über die Rechnergrenzen hinweg, sie haben ein wirklich skalierbares System, das einfach wachsen kann, nur mit mehr Hardware. Das war eigentlich das Objektorientierte über die Rechnergrenze hinweg. Das war in den Anfängen kein Zuckerschlecken, hat aber auch heute noch Relevanz. Google gäb es wahrscheinlich nicht ohne diese Inovation, weil dauernd am Anschlag, bis darüber. Heute ist man aus Kostengründen und wegen der sehr schnellen Computer erstmals nicht bereit diesen teureren, aber sicheren Weg zu beschreiten und ich habe ihn für jass.e-act.ch auch nicht beschritten, zu Recht! Machen Sie so etwas wie Obamacare, sie müssten es tun. Machen sie eine Reklamationssite, aus gutem Grund, sie müssten es tun.
Neu Programmier sprachen, wie php, open source, genial, die die dahinter stehen echte Nobelpreisträger, gratis. Sie befeuern den Fortschritt, gratis. Warum sie das tun, vermutlich Lange Weile und Geltungssucht, verkannte Genialität, für die Menschheit ein Quantensprung, unbezahlbar. Tja, so will ich schliessen 😉 .
Wer das fertig gelesen hat, auch genial oder verrückt, Danke, sowieso!