Montag, 28. April 2014

Über Software und Programmieren – Opas Insider-Tipps

Immer wieder stellen mir Freunde, Kollegen oder Verwandte Fragen zum Thema Software. Viele der Fragen habe ich längst vergessen. Manche gaben Veranlassung einen Blog-Eintrag zu verfassen. Eine kleine Auswahl von Fragen, die mir in den letzten Wochen gestellt wurden, und meine dazu gehörigen Antworten habe ich im Folgenden aufgeschrieben. Manche Antworten sind vielleicht nicht so konkret wie erwartet. Sie stellen dann nur eine Orientierungshilfe dar. Die Fragesteller sind nur durch Angabe ihres Berufes oder ihrer Altersgruppe angedeutet, also anonymisiert.

A. Der Physiker

Wie stellt man Prozesse und Abläufe am besten dar?

Will man den zeitlichen Verlauf eines Prozesses genau beschreiben, benutzt man eine prozedurale Sprache. Dasselbe gilt für Algorithmen. Ein wichtiges Hilfsmittel sind visuelle Darstellungen, z.B. Flussdiagramme. Interessiert nur die Beziehung zwischen den Werten am Anfang und den Werten am Schluss, so reicht eine funktionale Darstellung. Eine Funktion stellt man sich am besten als Tabelle mit zwei Spalten vor, wobei die Werte in der ersten Spalte alle von einander verschieden sind (oder eindeutig). Sollen nur gewisse Beziehungen zwischen Eingabewerten und Ausgabewerten ausgedrückt werden, verwendet man Zusicherungen. Das sind relationale oder logische Ausdrücke. Welche Werte in Beziehung gesetzt werden, ist in jeder Situation verschieden. Vollständigkeit wird nicht angestrebt. Mit Werten sind beliebige Zeichen oder Zeichenketten (z. B. Texte, Töne, Bilder) gemeint und nicht nur Ziffern.

NB: Eine verwandte Frage wurde in einem Blog-Eintrag vom Februar 2012 behandelt. Dort hieß es. ‚Wie spezifiziert und abstrahiert man Prozesse?‘

Was ist der Unterschied zwischen Daten und Information?

Daten sind Signale oder Zeichen, die Menschen oder Maschinen vom Hintergrund eines Trägermediums unterscheiden können, und zwar visuell, akustisch oder haptisch (taktil). Manche Maschinen haben ‚Sinne‘, die beim Menschen nicht vorkommen, z.B. um Magnetfelder oder radioaktive Strahlung zu erkennen. Information sind Daten, die sich gezielt umformen oder mit anderen Begriffen in Verbindung bringen lassen. Daten werden dann von jemandem benutzt, um etwas ganz anderes darzustellen oder erfahrbar zu machen, etwa Finger für Zahlen oder Muscheln für Geld. Diese Fähigkeit haben nur Lebewesen. Dazu gehören Einzeller genauso wie Pflanzen, Tiere und Menschen. Wenn von ‚Big data‘ gesprochen wird, dann ist nicht nur Information gemeint. Man hofft, in den großen Geröll- oder Abfallhaufen, welche die Natur oder wir Menschen schaffen, noch etwas Verwertbares zu finden.

Was versteht man unter einer Zufallsverteilung?

Eine Zufallsverteilung ist eine Folge von Zeichen, für die keine kürzere, aber gleichwertige Darstellung oder Beschreibung bekannt ist als die vorliegende Folge selbst. Insbesondere ist kein Programm bekannt, das eine kürzere Folge erzeugen könnte. Immer, wenn eine Sache dadurch definiert wird, was sie nicht ist, hilft das Praktikern nicht sehr. Echte Zufallszahlen können nur mittels eines physikalischen Prozesses erzeugt werden, etwa Münzwurf oder Würfeln. Computer können nur Pseudo-Zufallszahlen generieren. Diese sind im Grunde vorhersehbar, aber dennoch nützlich.

NB: Die obige Definition geht auf Greg Chaintin zurück, dessen Algorithmische Informationstheorie große Beachtung fand.

B. Der Ökonom

Wie erhalte ich eine stabile Software-Umgebung?

Will man ein stabiles Software-System haben, muss man alle Funktionen, die man benötigt, vorab prüfen und dann nichts mehr ändern. Wenn die Hardware keinen Ärger macht, läuft die Software dann bis ans Ende der Tage einwandfrei. Das Problem besteht nur darin, abzuschätzen, was ich zwischen heute und dem Tag der Verschrottung der Hardware an zurzeit noch unbekannten Anwendungen brauche. Wenn etwas Neues kommt, darf ich nicht sagen, dass kann das alte System bestimmt auch noch, und lasse es drauf ankommen, dass es kracht. Richtig wäre es, für neue, nicht vorher geplante Anwendungen immer ein neues Software-System zu kaufen und zu installieren. Da man für die unbekannte Zukunft gerüstet sein will, aktualisiert man sein System. Jede Veränderung macht ein System instabil, vor allem wenn sie völlig unnötig war. Man muss nicht jede Änderung sofort installieren. Wartet man zu lange, akkumulieren sich die Änderungen und ihr Einspielen wird riskant.

Warum passt sich Software nicht besser an meine Gewohnheiten an?

Die Personalisierung von Software ist eine typische Falle, wo Nachteile die Vorteile fast immer überwiegen. Der weitverbreitete, uralte Denkfehler wird durch das Wort ,software‘ verursacht. In Wirklichkeit ist Software weniger nachgiebig als Hardware. Hardware kann verbogen werden. Bei Software muss jede Anpassung geplant und eingebaut werden. Ein Mensch kann sich aufgrund von Übung anpassen, Software nicht. Würde sie sich anpassen, würde dies den Nutzer nach jeder Änderung mit einer neuen Schnittstelle konfrontieren und irritieren. Software, die sich den Nutzern anpasst, ist bei mehreren gleichzeitigen Nutzern nicht mehr wartbar. Das Erfolgsgeheimnis guter Software ist, dass man sich auf das konzentriert, was vielen Nutzern gemeinsam ist. Um das herauszufinden, muss man viele einzelne Nutzer beobachten. Von sich auf andere zu schließen, reicht nicht immer.

NB: Wird das gesamte Wissen, das die Unterschiede zwischen Nutzern beschreibt, in Tabellen erfasst, also parameterisiert, ist der eigentliche Code scheinbar stabil. Das Problem ist quasi verschoben und – weil systematisierende Vorarbeit investiert wurde – auch leichter handhabbar.

Warum erscheinen Software-Systeme so verwirrend und komplex?

Da jedes Software-System aus vielen Teilkomponenten besteht, müssen diese wie ein Uhrwerk zusammenarbeiten. Diese Kooperation erfolgt, je nach Anwendung, in unterschiedlicher Weise. Ihre Kommunikation geschieht mittels der Daten, die sie austauschen oder hinterlassen. Mal wird die eine Komponente vor der andern aufgerufen, mal ist es umgekehrt. Alle zu erwartenden Nutzungen müssen überprüft werden. Wie bei einem Uhrwerk muss der Nutzer das Zusammenspielen aller Teile nicht (immer) sehen. Es kann ihn sogar stören, wenn er den Teilen bei ihrer Arbeit zuschaut. Es ist entweder ein Zeichen von Anmaßung bzw. Selbstüberschätzung oder aber blanke Not, wenn Nutzer die Teile separat bestellen, installieren und warten. Es wird vielfach als sportliche Übung gepriesen, große Systeme selbst aus Bausteinen verschiedener Hersteller zu bauen. Weder die frühere IBM noch Steve Jobs glaubten an dieses Ideal. Keine andere bedeutende Industrie hat das Ideal der Software-Industrie bisher übernommen. Auch Automobil- und Flugzeugbau benutzt viele  Komponenten von Zulieferern. Sie werden jedoch vom Systemintegrator unter einer einheitlichen Nutzer-Schnittstelle versteckt.

Warum kostet Software soviel?

Die Erstellung von Software ist teuer. Das gilt insbesondere für qualitativ gute und funktional nützliche Software. Sobald ein Software-Produkt sich gut, d.h. besser als erwartet, verkauft, kann man die Preise senken (ein echtes Paradox). Software nur für die eigene Nutzung zu entwickeln, ist ökonomisch meist unvertretbar. Hat man die Entwicklungskosten abgedeckt, sind zusätzliche Kopien bei jedem Preis größer Null profitabel. Wer viele Kopien verkaufen kann, wird daher sehr reich. Kostenlose Software stammt von jemandem, der Software zum Zeitvertreib und Vergnügen entwickelt oder der von jemandem bezahlt wird, der etwas von mir will. Sehr viel Software entsteht, um damit Werbung für andere Produkte oder Dienste zu machen. Dass man direkt für Software bezahlt, ist ein Geschäftsmodell, das sich auf dem Rückzug befindet. Software dient immer mehr als Türöffner für andere Geschäfte. Sie wird daher versteckt, verschenkt oder subventioniert.

C. Der Rentner

Muss ich mich noch im Ruhestand mit Computern abgeben?

Computer sind noch weniger Pflicht für Senioren als es das Fernsehen ist. Wer es sich leisten kann, kann Vergnügen und Vorteile haben. Ein Computer kann den Ruhestand erträglicher und abwechslungsreicher machen. Mein Kollege Rul Gunzenhäuser und ich haben einmal 18 Tätigkeiten beschrieben, bei denen Senioren von Computern profitieren können. Das war vor drei Jahren. Heute würden wir noch einige Dinge mehr erwähnen. Sollten diese Anwendungen alle für Sie uninteressant sein, macht es keinen Sinn, sich Computer aufschwätzen zu lassen. Ich ließ mir im Alter auch nicht alles aufschwätzen, von dem andere Leute große Stücke hielten, wie z. B. Wandern und Radfahren.

NB. Die erwähnte Broschüre ist zu beziehen über das Netzwerk baden-württembergischer Senioren-Internet-Initiativen. Sie finden das 25-seitige PDF-Dokument auf der Seite Materialien unter Informationsmaterial. Es kann kostenlos heruntergeladen werden.

Welcher Trick hilft mir in Fehlersituationen?

Ohne ein offensichtliches Fehlverhalten zu analysieren, hat sich folgende Methode der Software-Fehlerentfernung seit über 50 Jahren bewährt: Man schalte den Rechner aus. Je nach Situation kann es nötig sein, vorher die Daten zu retten. Danach startet man zuerst das Betriebssystem neu und dann die Anwendung. Hilft das noch nicht, sollte man die Anwendung neu installieren. Der nächste Schritt ist die Neuinstallation des Betriebssystems. Begründung: Nach dem Neustart kann die geänderte Umgebung den Ablauf des Programms verändern. Der Fehler wird möglicherweise umgangen. (Im Bekanntenkreis gilt hierfür der Bezeichnung Kruse-Methode, nach einem längst verstorbenen Kollegen benannt, der diese Methode bereits bei Hardware-Problemen anwandte)

D. Der Abiturient

Ist programmieren anstrengend?

Für Karl den Großen (747-814) war Schreiben eine sehr anstrengende Tätigkeit. Seine Finger seien dafür nicht geschaffen, meinte er. Dagegen machte es Einhard, seinem späteren Biografen, richtiggehend Spaß. Er schrieb sogar die Frotzeleien seiner Tischgenossen am Aachener Hof auf. Ganz ähnlich ist es mit dem Programmieren. Ich kannte einen promovierten Physiker, der war nicht in der Lage, ein einfaches Programm zu schreiben. Einige Kollegen, die ich hatte, programmierten lieber, als dass sie einen einfachen Text schrieben. Texte, ob in Prosa oder in Lyrik, sind passiv. Sie klotzen einen an, es sei denn man deklamiert sie. Programme dagegen fangen an zu Wirbeln, sobald man sie auf einen Rechner tut. Das Wirbeln kann einem unangenehm werden, hat man einen Fehler gemacht. Manche Leute finden es ernüchternd und hilfreich, wenn ihnen Denkfehler sofort vor die Nase gehalten werden, und zwar von einer verschwiegenen Maschine und nicht von geschwätzigen Kollegen. Andere vertragen das partout nicht. ‚Ich soll einen Fehler gemacht haben, das gibt es nicht‘. So hört man sie argumentieren. Zusammengefasst: Es ist eine den Geist anstrengende Tätigkeit und nicht für jeden gleichermaßen befriedigend.

NB: Die Pointe des obigen Vergleichs wird umso klarer, je mehr historische Details man kennt. Die Wissenschaftler am Aachener Hof waren meist Theologen und stammten aus ganz Europa. Am bekanntesten sind Alchwin von York, Petrus von Pisa und Theodulf von Orléans. Sie unterhielten sich in fränkischem Spätlatein, einer Sprache, aus der das Französische hervorging. Zur selben Zeit begann man damit, Latein in Kleinbuchstaben aufzuschreiben, der so genannten karolingischen Minuskel. Die vier unverheirateten Töchter Karls durften an Tischgesprächen teilnehmen. Sie galten als attraktiv, aber etwas liederlich.

Muss ein Informatiker sein Leben lang programmieren?

Ein Informatiker kümmert sich um Daten, Informationen und um komplexe Abläufe oder Prozesse, die sie erzeugen oder benutzen. Sie sind für ihn, was für einen Elektro-Ingenieur der elektrische Strom oder für einen Chemiker das Periodensystem der Elemente ist. Er kennt sich aus und versucht das Beste für andere Menschen herauszuholen. Was er tut, soll den Menschen helfen, wirtschaftlich, beruflich oder sozial, oder aber dem Freizeitspaß und der Unterhaltung dienen. Programmieren ist die für Informatiker typische Tätigkeit. Sie ist bestimmend für sein Berufsbild. Wenigstens 10-15 Jahre muss ein Informatiker willens sein, seine Sporen als Programmierer zu verdienen. Danach bieten sich viele darauf aufbauende Tätigkeiten an, die sehr wichtig, interessant und lukrativ sind. Dazu gehören der Entwurf und die Bewertung von Systemen (bestehend aus Hardware und Software), die Beratung und Weiterbildung von Nutzern, die Ausbildung des Berufsnachwuchs und dergleichen. Diese Tätigkeiten stehen (im Prinzip) nur für jemanden offen, der die Grundfähigkeit des Programmierens beherrscht. Ein Informatiker, der nicht programmieren kann oder will, ist wie ein Arzt, der kein Blut sehen kann. Der sollte lieber einen anderen Beruf ergreifen.

Muss man verstehen, was Rekursivität ist?

Das Prinzip der Rekursivität zu verstehen ist sehr wichtig. Viele Prozesse in der Natur lassen sich damit besser verstehen und einfacher darstellen. In der Praxis ist es nicht erforderlich, rekursive Programme zu schreiben. Dieselben Funktionen lassen sich immer auch iterativ berechnen. In Fahrzeug- und Flugzeugbau, in Medizintechnik und in der Raumfahrt ist es verboten, rekursive Programme zu verwenden. Sie gelten als unsicher. Es ist gut die Natur zu verstehen. Ein Ingenieur kann und muss jedoch nicht alles so machen wie die Natur.

Kommentare:

  1. Am 28.4.2014 schrieb Klaus Küspert aus Jena:

    Im Zeitalter der Web-Services hat es sich natürlich schon besser entwickelt, dass auch Bausteine/Systeme verschiedener Hersteller zusammenarbeiten können. Jedenfalls besser als früher, als es solche Schnittstellen noch nicht gab und damit Heterogenität eine noch größere Herausforderung und Gefahr dargestellt hat. Und es wird auch immer populärer, Open-Source-Komponenten zu benutzen. Ich kenne massig kommerzielle Unternehmen, die die Suchmaschine Solr ̶ oder früher Lucene ̶ einbinden. usw. Ich bin eigentlich auch kein Open-Source-Fan, aber die Realitäten sind eben teils so und die Leute kommen damit klar. Ich kenne auch große Systeme, wo etwa ein kommerzielles DBMS durch MySQL oder PostgreSQL ersetzt wurde. Hätte ich vor 5-6 Jahren kaum glauben wollen.

    NB (Bertal Dresen): Etwas nochmals selbst zu entwickeln, was mir andere Leute als Geschenk anbieten, auf die Idee käme ich wirklich nur ganz im Extremfall. Dessen ungeachtet, warte ich weiter auf Autos und Flugzeuge aus nicht-kommerziell erworbenen Komponenten.

    AntwortenLöschen
  2. Prozesse und Abläufe jeder Art beschreibe ich am ehesten in Form sog. Collaboration Cards.

    Ich will damit nicht sagen, dass Diagramme graphischer Form nutzlos sind: Sie werden aber nie genug Information enthalten können und können daher nur erster Orientierung dienen.

    Mich würde interessieren, was Sie (oder andere Leser dieses Kommentars) zu meinem auf jener Seite genannten Beispiel 2 sagen.

    AntwortenLöschen
    Antworten
    1. Zum Thema 'Prozess-Beschreibung' lässt sich sehr viel mehr sagen, als in meinem Tipp geschehen. Flussdiagramme für die Visualisierung des Prozessflusses ist nur ein Beispiel, dazu ein uraltes.

      Löschen
  3. Muss ein Informatiker sein Leben lang programmieren?

    Meine Antwort: Hauptamtlich programmieren wird auch er oft nur wenige Jahre. Viele also verlernen wirklich, dann noch selbst ein nicht-triviales Programm zu schreiben. Das aber ist schlecht, denn sie haben dadurch ja auch verlernt, die eigene Arbeit gelegentlich durch selbst erzeugtes Hilfswerkzeug zu unterstützen.

    Nebenbei: Ich habe nie verstanden, warum die meisten SAP-Berater NICHT programmieren können (und es offensichtlich auch nie wirklich konnten). Wie können sie denn da auf Dauer wirklich nützlich sein? Hat jemand darauf eine überzeugende Antwort?

    Konkreter: Kann es Sinn machen, eine 12 Mann starke SAP-Abteilung zu haben, in der nur ganze zwei Personen programmieren können?

    AntwortenLöschen
  4. Am 1.5.2014 schrieb Peter Mertens aus Nürnberg:

    Der Satz [mit dem Paradox] ist im Auge jedes Kaufmannes/Betriebswirtes eine Banalität, kein echtes Paradoxon. Bei Software-Produkten mit dem hohen Anteil an Fixkosten und dem in aller Regel geringen Anteil an variablen Kosten bzw. hohen Fixkosten-Deckungsbeiträgen (verkürzt: Nur Kosten des Kopierens und Übertragens) gilt das erst recht. Daraus resultieren überdurchschnittlich hohe Anreize, möglichst rasch möglichst viele Kunden zu gewinnen. Zu den absatzpolitischen Instrumenten gehören dann auch massive Preissenkungen, die man sich ja wegen der niedrigen Grenzkosten leisten kann, und bei Erfolg im Markt enorme Gewinne und Unternehmenswerte des Softwareproduzenten.

    NB (Bertal Dresen): Was da geschieht, läuft dem intuitiven Verhalten von Marktteilnehmern zuwider. Das Wort Paradox ist wohl zu stark. Die Situation verleitet dazu, durch niedrige Preise einen hohen Marktanteil zu sichern.

    AntwortenLöschen