„Geht wählen!“ …

otter_voting… schallt es mal wieder aus den Medien und sogar auch aus den Facebook-Stati einiger meiner dortigen Freunde. Bald ist ja Bundestagswahl.

Warum aber ist man kein „guter Bürger“ oder ähnliche spektakuläres wenn man nicht wählt? Wenn ich von einem Thema, über das abgestimmt werden soll, keine Ahnung habe, oder einfach nicht mit abstimmen will, enthalte ich mich. So einfach ist das. Und dass es im Fall der Bundestagswahl toll ist, einfach die Partei zu wählen, deren Plakate mit den gephotoshoppten (oder gegimpten) Fratzen und den super-gehaltvollen Sprüchen wie „Gemeinsam erfolgreich.“ „Das wir entscheided.“ einen am wenigstens anekeln, bezweifel ich.

Falls ihr aber doch wählen geht und eine Partei wollt, die (zumindest angeblich) eure Meinungen möglichst gut vertritt, ihr aber keine langweiligen Parteiprogramme lesen wollt, macht wenigstens eben den Wahl-O-Mat. 😉

Dinge, die wir eventuell gar nicht verstehen können

Perplexed-gorilla-is-perpleDurch die Evolution sind unsere Gehirne und die Veranlagung für unser Denken so geformt worden, dass wir in kleinen Gruppen möglichst gute Chancen zum Überleben und Fortpflanzen hatten und die verursachenden Gene weiterbestehen konnten. Dafür, dass Selektionsdruck, der der Fähigkeit zur Erkenntnis von absoluter Wahrheit einen Vorteil gegeben hätte, geherrscht hat, ist mir kein Hinweis bekannt.

Was können wir, diese haarlose Affenbande, die auf ihrem grünen Planeten um irgendeinen einen Stern düst, überhaupt begreifen, das über unsere normale Alltagserfahrung hinausgeht? Eine besonders gute angeborene Intuition haben wir weder für Zufälle mit sehr geringer Wahrscheinlichkeit, noch für Entfernungen größer als ein Tagesmarsch oder kleiner als das, was wir mit bloßem Auge sehen können. Ebenso sind Geschwindigkeiten größer als sagen wir mal dem Sprint eines sehr schnellen Tieres oder kleiner als die einer Schnecke genauso schlecht vorstellbar wie extrem lange oder extrem kurze Zeitspannen.

AffenerdeDank der Kultur, die wir entwickeln, haben wir aber nun doch ein paar Techniken, die uns dabei helfen, etwas mehr herauszufinden. Dabei gibt es allerdings verschiede Arten der Erkenntnis.

Wenn wir uns innerhalb eines formalen Systems bewegen, können wir tatsächlich beweisen, dass Dinge dort wahr sind, wie beispielsweise dass es unendlich viele Primzahlen gibt, oder dass im Euklidschen Raum die Summe der Quadrate über den Katheten eines rechtwinkligen Dreiecks gleich dem Quadrat über der Hypothenuse ist.

MatheBei Aussagen über die physikalische Wirklichkeit wird es allerdings schon etwas schwieriger. Hier kann man lediglich Theorien aufstellen, die viele Möglichkeiten zur experimentellen Widerlegung anbieten, und dann überprüfen, ob sich empirisch herausstellt, dass die besagte Theorie tatsächlich ein gutes (trotz vielen Versuchen nicht widerlegtes) Model der Realität mit starken Vorhersagen darstellt. Man kann allerdings nicht nur rein grundphysikalische Aussagen, beispielsweise der Relativitätstheorie, testen, sondern auch Behauptungen wie „Ich kann von der Freiwurflinie Dunken.“, „Man kann durch Tarot-Kartenlegen Fußballergebnisse vorhersagen.“, „Akkupunktur heilt Kopfweh.“ oder „Wenn man für jemanden betet, verbessert das den Verlauf seiner Krankheit.“. Man geht mit dem Behauptenden in die Sporthalle und lässt es sich zeigen, bzw. lässt ihn viele Spielstände prognostizieren und guckt dann, ob seine Trefferquote signifikant besser ist als eine, die man vom Zufall erwarten würde. Die Nadelpiekserei überprüft man, indem man die Ergebnisse dieser Therapie in einer Doppelblindstudie mit gleichartigen Placebobehandlungen vergleicht, und die Beter lässt man für Leute beten und schaut, ob es den Bebeteten danach besser geht als der Vergleichsgruppe. Bei noch nicht überprüften Fragen dieser Art kann man natürlich spekulieren, was denn nun vermutlich stimmt. Aber bei welchen, die bereits ausgiebig überprüft wurden, geht es nicht um Glauben, sondern mehr darum, ob man die Beweislage kennt und akzeptiert oder ob man sie ignoriert.

huge_churchAndere Behauptungen wären überprüfbar, allerdings führt man die nötigen Experimente aus ethischen Gründen nicht durch. Beispielsweise müsste man um zu überprüfen, ob es für Kinder im Schnitt förderlich (was auch immer man sich gerade darunter vorstellt) ist, wenn man ihnen das Fernsehen kompeltt verbietet, Kinder (und damit ihre Familien) zufällig einer Fernsehgruppe und einer Nicht-Fernsehgruppe zuteilen. Da da aber kaum jemand mitmachen will, hat man in solchen Fällen nur Statistiken, die jedoch nur Korrelation und keine Kausalität anzeigen.

Die nächste Kategorie sind nun Behauptungen, die sich überhaupt nicht überprüfen lassen. Wenn zum Beispiel jemand sagt, dass er ein Einhorn hat, dass aber nur er sehen/anfassen kann, oder dass das Universum von einer riesigen Schildkröte ausgepupst wurde, kann man das entweder glauben oder nicht, oder man sagt, dass man Theorien, die sich jeglicher Empirie entziehen, albern und sinnlos findet, weil sie ja per Definition keinen Einfluss auf unsere erlebbare Welt haben.

andromedaHier ist dann auch der Übergang zu Fragen, die wir mit eventuell nie beantworten können, gekommen. Die Frage nach dem Ursprung von Allem beispielsweise endet entweder darin, dass man immer unendlich weiterfragt „Und was war davor?“ oder dass man irgendwo ein Dogma setzt („Gott wars.“) dessen Ursprung man dann nicht weiter hinterfragt, oder dass man sich mit seinen Begründungen immer wieder im Kreis dreht. Die Frage wie unser Bewusstsein entsteht könnte ähnlicher Natur sein (siehe Neuronale Netze und das Leib-Seele-„Problem“).

neuralNetworkVon den Dingen, die wir verstehen können, gibt es verschiedene Arten des Verstehens. Manche Sachen leuchten intuitiv ein und man kann sie sich bildlich vorstellen. Bei anderen geht das nicht (mehr als drei Raumdimensionen, unterschiedlich schnell laufende Zeiten usw.), dafür sind sie jedoch mathematisch erfasstbar, und das jeweilige Model liefert (vielleicht) zuverlässig präzise Ergebnisse. Emergente Phänomene lassen sich eventuell in einer Simulation nachstellen und so vorhersagen, allerdings lässt sich die Komplexität nicht wegreduzieren, auch wenn sie eigentlich aus simplen Grundregeln entsteht.

muesliUnd dann gibt es noch die Themen, bei denen es keine Wahrheit sondern nur verschiedene Geschmäcker gibt, wie beispielsweise welche Frühstücksflocken leckerer sind, oder welches Verhalten „gut“ und welches „böse“ ist. 😉

Der Tod

deathSo, heute wird es nochmal ein klein wenig existentieller als in den letzten Posts. 😉
Ob nun aus irgendeinem aktuellen Anlass oder einfach generellem Interesse – die meisten von uns haben sich vermutlich irgendwann mal mit dem Thema der Sterblichkeit (auch der eigenen) beschäftigt. Und vermutlich sind nur recht wenige dabei zu dem Schluss gekommen, dass sie sich dich drauf freuen, endlich ins Gras zu beißen.
Märchen, die versuchen diesbezüglich Trost zu schenken, gibt es genug. Von ewigem Leben im Paradies über Widergeburt bis hin zu Rumgegammel als Gespenst oder chilligem Abhägen im Nirvana ist da vieles dabei. Was tut man aber nun wenn einen sowas nicht überzeugt?

question_mark_gravestoneTot zu sein sollte für den Betroffenen eigentlich nicht sonderlich schlimm sein, denn das Bewusstseinsphänomen „Schlimmizität“ existiert dann überhaupt nicht mehr, da die Prozesse, aus denen das hervorgeht, einfach nicht mehr stattfinden. Diejenigen, die wirklich leiden, sind also die Hinterbliebenen, die den Verstorbenen eventuell sehr vermissen.
Falls dich das noch nicht überzeugt, dass es nicht unangenehm ist, nicht mehr zu leben, frag dich mal, wie es für dich war als du noch nicht gelebt hast. Die mehreren Milliarden Jahre, die die Erde schon ohne dich existiert hat, fandest du ja auch nicht sonderlich dramatisch.

earth„Aber das Sterben an sich könnte total schrecklich oder schmerzhaft sein.“ – Ja, das könnte es, und ist es in einigen Fällen vermutlich auch. Die moderne Medizin bietet aber auch selbst für die Körperlich übelsten Zustände Mittel, mit denen das gefühlte Unwohlsein wohl sehr stark reduziert wird; gerade wenn eventuell ungesunde Nebenwirkungen kein Problem mehr darstellen. 😀
Na gut, aber angenommen man hat nicht die Chance, (möglicherweise schön vollgedröht) einfach einzuschlafen. Ja, dann könnten diese Momente ziemlich scheiße sein. Gegen das Problem hilft mir persönlich allerdings folgende kleine Anekdote aus dem eigenen Leben überraschend gut. 🙂

krankenwagenAls ich mir vor nun fast einem Jahrzehnt beim Basketballspielen mal das Bein gebrochen hatte, wurde vor meinem Abtransport vom Court gesagt, dass ich nun ein Mittel bekäme, dass mich den Schmerz zwar spüren lässt, aber bewirkt, dass ich mich danach nicht mehr an ihn erinnern werde. Es wurde impliziert, dass das fast genauso gut sei wie nichts zu spüren.
Das bringt mich zu folgender Definition von Schmerzen/Leid: Der Moment (wenn er denn nicht übertrieben lang ist), in dem man aktiv leidet, ist gar nicht so sehr das Üble, sondern die vielen Jahre danach, in denen man sich noch traumatisiert an diesen Moment erinnert oder sonstwie mit den Folgen zu kämpfen hat, sind das Fiese.
Wenn ich also beim Sterben starke Schmerzen habe, ist das demnach wesentlich harmloser als wenn ich die gleichen Schmerzen früher in meinem Leben durchmachen müsste.
Das geht natürlich gegen den Konsens, dass es besonders wichtig sei, die letzten Momente eines Sterbenden möglichst nett zu gestalten. Ich behaupte ja, dass Schmerzen beim Sterben wesentlich schwächer zu bewerten sind als andere ihrer Art, aber was solls. 😀

sterbebettOK, Totsein an sich ist dann also eher harmlos und Sterben gar nicht so schlimm. „Aber ein Bischen ewig leben wäre trotzdem nicht verkehrt.“ mag der ein oder andere denken.
Na gut, mit (grob) 72 Jungfrauen oder Ähnlichem kann ich leider nicht dienen, sondern nur mit folgendem:
In seiner Lebzeit hat man zwangsläufig mit seiner Umgebung interagiert und durch seine Worte und Handlungen Spuren hinterlassen. Andere Leute haben von/durch/mit einem gelernt, und zur Gesamtkultur der Gesellschaft hat man auch ohne zig Nobelpreise geholt zu haben einen (wenn auch kleien Teil) beigetragen. Das gilt nicht nur für diejenigen unter uns, die sich fortgepflanzt haben. Und auch eine kleine Handlung jetzt kann eine der Ursachen für eine größere Veränderung in der Zukunft sein. 🙂

Von Trainern und Athleten

VonTrainernUndAthletenBannerWenn es um Krafttraining/Ernährung/Fitness geht fällt mir folgendes Schema öfters auf: Es gibt verschiedene Möglichkeiten zu trainieren und sich zu ernähren (die auch zum Großteil bei verschiedenen Leuten irgendwie funktionieren), und um zukünftig bei sich selbt Erfolge zu sehen, will man möglich viel richtig machen. An Tipps, die man aus Büchern, Blogs, Youtube-Videos oder von Trainern und Trainingspartern bekommen kann, mangelt es kaum. Es ist allerdings schwer, sich zu entscheiden, auf wen man denn nun hört, denn es sind sich nicht immer alle (eigentlich fast nie :D) einig.

Wem glaubt man nun wenn man selbst noch nicht so viel Ahnung vom Thema hat? – Aus Reflex erstmal auf den, der selbst irgendwie krass ist. Leute, die selbst körperlich nur mittelmäßig sind, werden dabei nicht unbedingt so ernst genommen. Einem Poser-Proleten wie auf dem Foto ein paar Zeilen weiter unten glaubt man eher wenn er von einem Trainings-/Ernährungskonzept abrät als anderen.

58210_483011221786928_1385672713_nAber dass der Typ da selbst einigermaßen fit aussieht (Ist eh alles nur gute Beleuchtung und Pump. ;-)), bedeutet noch lange nicht, dass er auch Ahnung von irgendwas haben muss, bzw. man auf seine Ratschläge hören sollte. Vielleicht hat er diese Form nur erreicht, weil er besonders hart trainiert und eine gute Veranlagung hat. Die Art wie er trainiert und sich ernährt kann trotzdem eigentlich sehr suboptimal sein, und er wäre mit besseren Entscheidungen diesbezüglich dann sogar schon viel weiter. Vielleicht stofft er auch oder hat nen guten Trainer, der ihm einfach nur sagt, was er machen soll. Oder er hat für sich selbst nur zufällig eine Methode gefunden, die bei ihm einigermaßen funktioniert. Nun meint er vielleicht, dass seine Art die beste für alle sei, und rät anderen dazu, alles genauso zu machen wie er. Das kann zufällig mal stimmen, kann aber auch Bullshit sein.

Jemand, der die Zeit, die das Exemplar oben in Training gesteckt hat, ins Lernen, Lesen von Studien und Betreuen von anderen Athleten investiert hat, ist möglicherweise ein viel viel besserer Trainer, auch wenn er selbst gar nicht so super viel trainiert.

advice_full_Sports-Science_BrightonDiese Überlegungen machen es zwar leider schwerer, sich zu entscheiden, wer denn nun Unfug redet, aber wenn man einfach nur mal schaut, ob der potentielle Ratgeber sich bei diesem Thema grundsätzlich an wissenschaftliche Methoden hält, oder nur ausschließlich an seiner persönliche Trainingserfahrung oder irgendwelchen Anekdötchen orientiert, hat man oft schon einen guten Hinweis. Wenn jemand beispielsweise von einem Supplement total überzeugt ist, kann man einfach mal eben selbst auf pubmed nachschauen, ob was dran ist. Denn viele (selbst Profisportler) machen manche Dinge nur, weil sie es halt so vorgemacht bekommen haben bzw. dran gewohnt sind, oder es ihnen persönlich Spaß macht. Klar, gerade bei Gesundheitstipps oder in der Jugendarbeit ist es hilfreich, auch zu praktizieren, was man predigt. Als Erzieher wird man es noch schwerer haben, Kinder bzw. deren Eltern von mehr Gemüse zu überzeugen wenn man selbst nur Schokolade futtert. Jedoch würde selbst das den eigentlichen Wahrheitsgehalt der Aussage nicht verändern.

Great-Nutritional-Tips-And-Advice-For-EveryoneGrundsätzlich ist ein zufällig ausgewählter Ex-NBA-Star zwar schon sehr wahrscheinlich ein besserer Basketballtrainer als ein zufällig ausgewählter Mensch von der Straße, aber er ist nicht zwangsläufig der Beste. Phil Jackson z.B. war ein wesentlich besserer Trainer als ein Spieler, und bei Lothar Matthäus ist es möglicherweise umgekehrt. Ein großartiger Komponist muss auch nicht selbst ein Virtuose an allen Instrumenten im Orchester sein, um für diese meisterlich gute Stimmen zu schreiben.

Phil JacksonAlso, gebt auch mal den selbst nicht so ganz krassen Leute eine Chance. Eventuell lohnt es sich ja, ihnen zuzuhören. 🙂

Autonome Landfahrzeuge

Googles_Lexus_RX_450h_Self-Driving_CarEs wird zwar schon länger versucht, Autos, die selbstständig fahren können, zu entwickeln, realistisch wurde das Ganze aber erst durch den Fortschritt in der Leistungsfähigkeit von Computerhardware und der Künstlichen-Intelligenz-Forschung in den letzten Jahren. Google hatte daran einen besonders großen Anteil. Folgendes bekanntes Video zeigt, wie gut das schon funktioniert: https://www.youtube.com/watch?v=cdgQpa1pUUE

In den Testfahrten war die Unfallquote deutlich besser (also niedriger) als die von menschlichen Fahrern, und die Unfälle, die passiert sind, waren wohl jeweils nicht die Schuld der Steuerung des autonomen Fahrzeugs sondern von anderen menschlichen Verkehrsteilnehmern, die beispielsweise einfach an der Ampel von hinten auf das stehende Fahrzeug aufgefahren sind. ^_^

Zugelassen sind diese Autos in einigen USBundesstaten und England sogar schon. Große Fahrzeughersteller wie beispielsweise Mercedes arbeiten auch schon daran, soetwas bald in Serien produzieren zu können.

Abgesehen davon, dass die Technik (gerade für mich als Softwareentwickler) ziemlich interessant ist, finde ich die Frage, inwiefern das Ganze unser Leben und die Gesellschaft verändern könnte, mindestens genauso spannend. Klar, als erstes fällt einem vielleicht ein, dass man dann bald auf dem Weg zur Arbeit ein Buch lesen oder schlafen kann. Es würde aber auch bedeuten, dass Menschen, die z.B. auf Grund von Behinderungen eigentlich nicht mehr in der Lage sind, Auto zu fahren, so doch wieder ein gutes Stück Selbstständigkeit zurückgewinnen würden.

Aber auch logistisch könnte sich einiges ändern. Wenn Autos selbst fahren können, warum sollte meins 8 Stunden auf dem Parkplatz vor der Firma stehen während ich arbeite? Es könnte doch etwas Sinnvolles tun anstatt dort vor sich hin zu rosten und an Wert zu verlieren. 🙂 Andere Leute, die kein Auto haben, könnten sich davon (kostenpflichtig *g*) durch die Gegend fahren lassen. Yeah, Doppelverdienst für mich. 😀 Verallgemeinert bedeutet das aber auch, dass man eventuell gar kein eigenes Auto mehr benötigt, sondern einfach über sein Smartphone oder sonstwie eins einer gewissen Klasse anfordert, und das kommt dann angefahren, einen abzuholen.

kitt-watchDas würde auch bedeuten, dass die Menge an Personentransporten, die momentan auf den Strassen stattfinden, mit insgesamt viel weniger individuellen Fahrzeugen stattfinden könnte. Man bräuchte also auch viel weniger Parkplätze, was die Städteplanung ziemlich verändern würde, und hoffentlich einen für die meisten beteiligten entspannteren Alltag ermöglichen würde.

Selbst von den offensichtlichen Vorteilen im Energiebedarf durch nun möglich gewordenes unfallfreies enges Windschattenfahren und der verringerten Zahl von Unfallopfern (Jährlich sterben momentan ca. 1/2 Millionen Menschen weltweit im Verkehr.) mal abgesehen, sehe ich das Ganze also grundsätzlich recht positiv, und freue mich drauf mitzuerleben, wie diese Zukunftsvision Wirklichkeit wird.

Kritisch könnten allerdings Situationen werden, in denen die automatische Steuerung moralische Entscheidungen treffen muss. Gerade wenn noch Mischverkehr (automatischer und manueller) vorherrscht, könnten Situationen entstehen, in denen ein Fahrer (und somit auch ein Computer) sich entscheiden muss, ob er sich selbst (bzw. seine Insassen) oder den Schulbus auf der Gegenfahrbahn rettet/opfert. Im Idealfall (vorausgesetzt, die Steuerung klappt wirklich so super, wie die Tests versprechen) könnte sich jedoch schnell eine Kultur entwickeln, in der manuelles Fahren nicht nur als nostalgisch/niedlich sondern als rücksichts- und verantwortungslos empfunden wird, und der komplette Umstieg deshalb nicht all zu lange dauert, auch wenn ich mir das teilweise nicht ganz so einfach vorstellen kann, denn der „Auto=Rasen=Freiheit“-Kram wirkt auf mich doch kulturell recht tief verankert. Aber wenn es sich auch wirtschaftlich lohnt (und man den Hobby-Rasern genug Möglichkeiten zum Austoben außerhalb des regulären Straßenverkehrs bietet), bin ich guter Dinge, dass meine Enkelkinder mich mal fragen werden: „Du Opa, wie war das eigentlich damals, als ihr die Autos noch selbst steuern musstet?“ 🙂

Ein paar Tipps zur Softwareentwicklung

Im Artikel „Was machen Informatiker (bzw. Softwareentwickler im Speziellen) eigentlich so?“ habe ich abstrakt-grob beschrieben, was wir Softwareentwickler so machen. Dabei habe ich angedeutet, dass es sich dabei nicht nur um eine mathematisch-theoretische Wissenschaft handelt, sondern es auch eine Art Ingenieurdisziplin mit handwerklichen, (manche sagen auch künstlerischen) Komponenten, die man ganz praktisch erlernen muss, ist. In diesem Artikel geht es nun um Vorgehensweisen und Werkzeuge, die man nutzen kann, um sich und anderen (also Kunden, Kollegen, Nachfolgern usw.) bei größeren Projekten das Leben langfristig leichter und spaßiger zu machen, und in weniger Zeit ein besseres (fehlerfreier, wartbarer, benutzbarer, erweiterbarer, sauberer, schöner, erfolgreicher) Endprodukt hervorbringen kann, unter das man dann auch gerne seinen Namen schreibt. Das Folgende ist vermutlich also nur für Leute, die selbst programmieren, interessant, aber ich habe Lust, das mal alles irgendwo hinzuschreiben.

software_developmentDie Nützlichkeit der Ratschläge in diesem Artikel sind größtenteils nicht empirisch belegt sondern mehr Gefühl, subjektive Erfahrung und von anderen gelernt. Trotzdem haben sie sich natürlich meines unheimlich kritischen persönlichen Urteils zu unterziehen gehabt. 😉
Ebenfalls sind sie weder vollständig noch allgemeingültig oder ausführlich (dafür aber oft weiterführend verlinkt). Es sind nur Hinweise, die man im Informatik-Studium nicht unbedingt mitbekommt, und Dinge, die man sich mal genauer angucken kann, und die einem dann unter Umständen helfen könnten. Mir tun sie es zumindest oft, auch wenn ich mich selbst noch zu häufig nicht daran halte. Aber ich lerne ja auch noch dazu; hoffe ich zumindest. 😀

Ich habe den Eindruck, dass man normalerweise in Tätigkeiten (Beruf, Hobby, was auch immer) nur wirklich gut werden kann, wenn man sie auch gerne macht. Vielleicht funktioniert es aber auch umgekehrt, also dass man sie lieber macht wenn man merkt, dass man sich stetig verbessert und dadurch Schönheit in den Ergebnissen seiner Arbeit sieht. Also, benutz deine Metakognition und erkenne deine Stärken und Schwächen und arbeite an beidem. Werde dabei zum Hansdampf in allen Gassen. Dabei hilft nicht nur reines Nachdenken, sondern auch (Hör-)Bücher, Vorlesungen, Diskussionen etc., denn obwohl man zwar viele gute Ideen selbst haben kann, kann man doch nicht alle alleine haben. Man muss keine haushohen Zeitschriftenstapel haben, die man alle gelesen hat. Oft ist ein Buch über Grundlagen (die bleiben nämlich) wirklich verstanden zu haben eh viel besser als von tausend verschiedenen Trends oberflächlich gehört zu haben.

Wizards-of-SICPAber auch hier sollte man beim Lesen kritisch bleiben. Manche Bücher (und auch Blogs ^_-) sind einfach Mist, und es gibt keinen Grund, sich dann zu zwingen, die trotzdem zuende zu lesen.
Wenn man sich aber jahrelang regelmäßig mit unterschiedlichen Themen beschäftigt, kann da schon einiges zusammen kommen. Die Regelmäßigkeit kann man unter anderem gut hinbekommen, wenn man beispielsweise die Zeit im Auto/Zug für Hörbücher oder Tonspuren von Vorlesungen nutzt. Ansonsten kann man aber auch einfach mal herumprobieren, welche Lernform einem liegt (Vorlesungen beim Crosstrainern gucken anyone? :-))

Zusätzlich ist es aber gut, auch etwas von der aktiven Kultur mitzubekommen. Dafür gibt es sicher viele gute Anlaufstellen. Ich persönlich mag momentan /r/programming gerne. Auch finde ich es nett, aktiv in einer Community mitzumachen, also auch selbst Fragen zu beantworten wenn man etwas weiß. Hier bietet sich beispielsweise stackoverflow an. Aus den sich ergebenden Diskussionen kann man ebenfalls lernen. Achja, falls es dich abschreckt, dass die Links auf englischsprachige Webseiten zeigen, ändere das, also nicht die Links sondern die Tatsache, dass sie dich gruseln. Um Englisch (zumindest lesen können) kommt man eigentlich eh nicht wirklich herum.

communication-skillsOK, also erstmal ein paar allgemeine, teilweise banale, und nicht nur für Softwareentwickler relevante Tipps:

Wenn du eine Frage hast, google sie; auch wenn du denkst, dass das Problem eigentlich t zu den andezu spezifisch ist. Man ist manchmal überrascht wieviele Leute, doch schon das gleiche Problem hatten. Und ich bin überrascht, wie oft trotzdem nicht einfach mal im Netz gesucht wird.

Ebenfalls gucke ich manchmal vermutlich ziemlich doof wenn ich sehe, was für ein Chaos Entwickler auf ihrem Rechner haben. Ich bin alles andere als ein Ordnungsfanatiker, aber wenn die Produktivität (und man selbst, und irgendwann bestimmt auch ein anderer) leidet, nur weil man zu faul ist, mal eben ein Bischen aufzuräumen, finde ich das schon schade. (Ja, man kann Emails tatsächlich automatisch filtern und sortieren lassen. Achja, und schalte die Thread-Ansicht deines Clients an! ;-))

Wenn sich eine Aufgabe ergibt, die du irgendwann erledigen willst, schreib sie (elektronisch) auf. (Für Bugs usw. bietet sich Issue-Tracking an.) Egal ob sie dir gerade in einem Meeting zugekommen ist oder bei irgendwas anderem selbst eingefallen ist. Halte dir den Kopf für das Suchen nach innovativen Lösungen frei, und müll ihn nicht mit dem Auswendiglernen irgendwelcher temporären Daten zu. Und denk beim Sortieren deiner Todo-Liste daran, dass Dringlichkeit und Wichtigkeit zwei verschiedene Dinge sind.

to-do-list-nothingFalls man Teil eines Prozesses ist, der sich irgendwie ineffizient anfühlt, kann man auch ruhig mal nachfragen, warum das so ist. Dabei sollte man aber nicht das Gefühl vermitteln, dass alle anderen doof sind, und man selbst der große Erlöser ist, sondern erstmal wirklich nur verstehen wollen, wie das ganze zu Stande kommt. Über Möglichkeiten, wie man soetwas geschickter formulieren kann, gibt es ebenfalls viel Literatur.
Wenn man dann irgendwann mit einem Verbesserungsvorschlag (oder sonstigem) daherkommt, gilt es auch immer zu beachten, welche Aspekte für die jeweilige Zielperson wichtig sind. Ein BWLer interessiert sich vermutlich mehr für finanzielle Zahlen, der Techniker für gute Wartbarkeit und der Theoretiker für abstrakte Schönheit, wobei es aber nicht nur auf die firmeninterne Position sondern auch auf die Persönlichkeit usw. ankommt.

In jedem Fall gilt es, den richtigen Moment abzuwarten. Im Zweifelsfall kann man auch einfach fragen, ob der andere gerade Zeit hat oder lieber ein anderes Mal (Termin ausmachen) darüber reden möchte.
Wer möchte, dass ihm zugehört wird, sollte aber ebenfalls mal seine Kollegen (gerne auch aus anderen Bereichen) die Chance geben, zu erzählen, was sie beschäftigt, und dabei aktiv zuhören.
Wenn es im (Großraum-) Büro allerdings mal zu laut wird, kann man sich zwischendurch immernoch mit (gut isolierenden) Kopfhörern und netter (eventuell instrumentaler) Musik vor zu vielen Unterbrechungen schützen; aber auch nicht 24/7, weil man ja schon manchmal noch mitbekommen sollte, was so um einen rum abgeht.
Oh, und nicht zu viel multitasken (also im Kopf, nicht im Computer), und auch mal ein kreatives Päuschen einlegen.

330px-Pair_programming_1Man ist ja erwachsen und für sich selbst verantwortlich (wie eventuell für das Backup seiner Daten). Und wenn man mal etwas falsch gemacht hat kann man das normalerweise ruhig eingestehen. Die Hauptsache ist, dass man es korrigiert und etwas daraus lernt und das möglicherweise auch nach außen hin signalisiert. Oft kommt das nämlich sogar gut an. „Hey Chef, müsste ich jetzt nicht mehr Geld bekommen, nachdem ich hierdrin besser geworden bin? ;-)“

Ein unbeliebtes Thema bei vielen Entwicklern sind Aufwandsschätzungen. Softwareentwicklung ist ein kreativer Prozess, dessen Verlauf sich nicht einfach vorhersagen lässt. Es sollte auch zwischen zwei verschiedenen Arten der Schätzung unterschieden werden. Wenn festgelegt werden muss, wann ein Projekt spätestens abgeschlossen ist (Deadline), muss man natürlich so Planen, dass das auch sicher klappt. Wenn aber nur eine Entscheidung getroffen werden muss, ob es sich lohnt, ein Projekt überhaupt anzugehen, sollte man seine Ehre beiseite lassen können, und sich nicht bemühen, immer länger zu schätzen als man vermutlich tatsächlich braucht, sondern im Durchschnitt richtig zu liegen. Ja, das bedeutet, dass man dann auch mal länger braucht als gedacht. Das lässt sich bei kleinen Projekten (auch wenn es da nicht gefordert ist) gut üben. Zusätzliche Unsicherheitsfaktoren können ruhig mit angegeben werden, und wenn man nach einer Schätzung gefragt wird, braucht man sich nicht genötigt fühlen, sofort eine Zahl in Manntagen/wochen/monaten anzugeben, sondern sollte darum bitten, etwas Zeit zum Analysieren zu bekommen, um dann nachher besser antworten zu können.

Binary codeSo, nun zu den spezifischeren Punkten. Zunächst einmal sollte man sich damit abfinden, dass man keine perfekte/fehlerfreie Software schreibt. Fehler sind zwar ärgerlich, aber bei größeren Projekten zwangsläufig vorhanden. Je nach Aufgabe sind die Anforderungen auch unterschiedlich. Schreibe ich Software, mit der Astronauten ins All befördert werden sollen, oder geht es um ein Weltraumballerspiel, oder nur um einen Einmal-Wegwerf-Parser für irgendwelche speziellen Logs? Risiko, Nutzen und Aufwand müssen abgewogen werden. Wenn du dazu neigst, eher zu viel vorm Handeln nachzudenken, sieh zu, dass dich das nicht davon abhält, überhaupt irgendwann loszulegen. Wenn du eher einfach wild drauflos (und dann gegen Wände) rennst, denk zunächst etwas mehr nach. Hierfür muss man lernen, sich selbst einzuschätzen. Als grobe Richtlinie kann man sich merken: Mache dir Gedanken, aus welchen Subsystemen der Prozess, den du darstellen willst, besteht, und welche Daten von zwischen ihnen fließen, aber häng dich nicht an den Funktionssignaturen einzelner Methoden und ähnlichem auf. Die tatsächliche Implementierung macht man im Zweifelsfall dann aber meistens besser direkt ordentlich, denn oft ist man überrascht, wie oft man den Code dann später doch tatsächlich nochmal benutzen oder verändern will, und dann beißt die Frickelei einen schnell man in den Hintern.

Die IT-Welt entwickelt sich schnell weiter, und manche Dinge/Software benutzt man nur, weil man zufällig als erstes mit dieser in Kontakt kam. Deshalb sollte man ruhig zwischendurch neue Sachen (zb. Betriebssysteme) ausprobieren. Damit man seinen Arbeitsrechner damit nicht zumüllt bietet sich zb. Virtualbox an. Falls Windows dir auf den Nerv geht, probier ruhig mal Linux aus. 😉

Leistungsfähige Hardware zu haben ist wichtig. Es muss kein wassergekühlter high-end-gaming-PC sein, aber wenn man ständig darauf wartet, dass irgendwelche Programme starten oder der Compiler ewig braucht, nervt das nicht nur, sondern kostet auch Zeit, und für viele von uns somit auch Geld. Ebenfalls kann ein zweiter Monitor hilfreich sein.

homeoffice03-450x300Das praktischte Datenformat ist immernoch plain text. Einige der Vorteile davon sind, dass man die Unix-Tools (gibt es auch für Windoof) benutzen, und beliebig mit regulären Ausdrücken (lernen!) drauf herumwuseln kann, gerne auch mit batch/bash-scipts. Oft ist man in der Konsole mit sowas wesentlich schneller als mit GUI-Rumgeklicke.Ein wichtiges Werkzeug ist natürlich ein guter Texteditor (Nein, das normale Windows-Notepad zählt nicht dazu. ;)). Also probiere verschiedene Editoren aus, such dir einen aus, und lerne ihn gut zu bedienen. Für mich ist das momentan Sublime, aber auch Notepad++ (Windows only) und viele andere sind gut. Leute, deren Bärte lang genug sind, kommen vielleicht sogar mit Vim oder Emacs super klar. 😉

480px-Richard-stallmanAber auch für die „normalen“ Editoren gilt: Lern die Tastenkombinationen (und generell Tippen ohne Hingucken, sowie Text nur mit Tastenkombinationen umzuformen). Jedes mal wenn du die Maus anfasst, verschenkst du Zeit, machst Fehler, nimmst eine schlechte Körperhaltung an und siehst uncool aus. Aber auch außerhalb deines Editor / deiner IDE solltest du mit möglichst wenig Mauskontakt klarkommen. Das zu lernen ist zwar anfangs anstregend, aber es lohnt sich, denn nicht nur die Geschwindigkeit deiner Arbeit, sondern sogar die Qualität kann dadurch steigen, weil du durch „kürzere Wege“ andere/bessere Mikroentscheidungen triffst.

Wenn man an einem Projekt arbeitet, sollte man sich einen Style (Einrückung, Namenskonventionen usw.) innerhalb dieses Projekts beibehalten.

Superhilfreich sind Versionsverwaltungssysteme wie zB. Git. Etwas in dieser Art sollte man in jedem Fall benutzen, nicht nur weil man beliebig „undo“ sagen kann, sondern auch weil man Code nicht auskommentieren muss sondern einfach rauswerfen kann (alte Versionen sind ja weiterhin verfügbar), und weil man aber gute Tutorials im Netz, einfach googeln. Man kann alles undo-en, muss keinen auskommentierten Code mitrumschleppen, und kann immer gucken, in welcher Version was (und was fürn Bug) reingekommen ist, und bei Teams wers war und warum.

Es gibt seehr viele verschiedene Programmiersprachen. Man muss aber nichtmal alle sprechen können, die auf LangPop oder TIOBE auftauchen. Allerdings ist es meistens eine gute Idee, über den Tellerrand hinauszuschauen. Wenn man aber beispielsweise schon Ruby kann, muss man sich nicht noch (außer natürlich ein Projekt verlangt es) mit Python, Lua oder anderen interpretierten, dynamisch typisierten garbadge-collectenden Sprachen beschäftigen, sondern lieber mit Sprachen, die andere Paradigmen benutzen oder auf anderen Abstraktionsebenen arbeiten. Für den erwähnten Ruby-Fall wäre vielleicht etwas statisch typisiertes, compiliertes wie C oder C++ und etwas möglichst rein funktionales wie Haskell oder Scheme toll. Gerade letzte Kategorie kann Programmierern, die es gewöhnt sind imperativ zu denken, zunächst sehr schwer fallen. Das Umdenken lohnt sich aber, auch wenn man die Sprache nie produktiv einsetzt, da es das generelle Verständnis für Algorithmen verbessert und auch den Programmierstil in imperativen Sprachen positiv beeinflussen kann. Statt Spaghetti produziert man dann vielleicht wirklich mal Ravioli. 😉 Wenn man normalerweise eher low-level programmiert, kann es eine gute Erfahrung sein, sich mal mit Webzeugs zu beschäftigen. Je größer das persönliche Repertoire ist, desto geringer ist die Chance, dass man eine Sprache wählt, die für das jeweilige Projekt vielleicht eigentlich eher ungeeignet ist. Eventuell kombiniert man auch mehrere Sprachen miteinander und implementiert die wenigen performancekritischen Ecken eines Python-Programms dann in C. Sprachen sind Werkzeuge und je nach Problemstellung unterschiedlich geeignet. Es sollte einem also nicht passieren, dass alles wie ein Nagel aussieht, nur weil man nichts als einen Hammer zur Verfügung hat. 🙂

ist2_5443998-hammer-and-screwPrograms must be written for people to read, and only incidentally for machines to execute.
– Structure and Interpretation of Computer Programs

Etwas, dass es grundsätzlich zu beachten gibt, ist, dass man sich nicht wiederholen (DRY) sollte. Wenn eine eigentlich einfache Systemänderung nämlich fordert, dass man direkt an mehreren Stellen etwas tun muss, ist die Frage nicht, ob man das jemals vergisst, sondern wann man das vergisst. Bei Backups ist Redundanz toll, in der Softwareentwicklung hingegen tötlich. Falls Duplikation sich gar nicht vermeiden lässt, sollte man diesen Vorgang im Build-Prozess automatisieren. Nur in ganz seltenen Fällen, wie zb. in C++ bei den Funktionssignaturen in den Deklararionen einer .hpp-Datei und den Definitionen in der zugehören .cpp-Datei lässt es sich nicht vermeiden. Aber hier macht einen der Compiler glücklicherweise auf die meisten Fehler aufmerksam.

Dass falsche bzw. veraltete Informationen schlimmer sind als gar keine, gilt selbstverständlich auch für Kommentare. Da man meistens mehr Zeit damit verbringt, Code zu lesen, zu verstehen und zu verbessern, als damit, neuen zu schreiben, können Kommentare wichtig sein. Jedoch sollten sie nicht so sehr erklären was oder wie der Code etwas tut, sondern mehr warum er etwas tut. Wenn er so klar geschrieben werden kann, dass Kommentare überflüssig sind, ist das aber natürlich noch besser. Für Interfaces-Dokus bieten sich Doxygen, Docstring usw. an. Wenn die Klasse oder das Modul oder was auch immer man gerade kommentiert, nicht thread-safe ist (warum eigentlich), sollte man das auch irgendwo angeben, ebenso wie eventuell geworfene Exceptions. Generell sollte sie den Benutzer, also den Entwickler einer aufrufenden Funktion, oft auch man selbst, mit ihrem Verhalten nicht überraschen. Falls die gewählte Programmiersprache Design by contract unterstützt (oder es sich wie in Python mit decorators umsetzen lässt), kann es auch helfen, das zu nutzen. Ansonsten sollte man preconditions einer Funktion zumindest mit Assertions absichern, um eventuelles undefiniertes Verhalten auf jeden Fall zu verhindern. Wenn die Funktion nicht gerade performancekritisch ist (was nur die wenigsten sind), kann man die Assertions auch ruhig im Release aktiviert lassen (crash ist besser als trash).

orthogonalityOrthogonalität ist ein wichtiges Konzept. Eine Komponente sollte nur eine Sache ordentlich machen (unix philosophy), sodass man bei einer veränderten Anforderung auch möglichst nur diese eine Komponente verändern und nicht an tausend Ecken dran muss. Wenn man Angst hat, etwas zu ändern, weil das System dadurch irgendwo ganz anders scheppern könnte, ist etwas faul. Daraus ergibt sich, dass man Gemeinsamkeiten von Klassen/Funktionen heraus-refactoren sollte. Wenn man die Chance hat, eine Funktion pure functional zu schreiben, also dass ihr Ergebnis nur von den übergebenen Parametern und nicht von irgendwelchem externen state abhängt, sollte man das ebenso tun. Das vermeidet Fehler und macht das Testen einfacher.

Arbeitskollegen sollten zwar voneinander wissen, was der andere tut. Für Software-Komponenten gilt das aber nicht. Jedes Teil sollte nur mit seinen direkten Nachbarn reden, und da auch nur so viel wie nötig, wobei immer nur die abstrakte Schnittstelle interessiert und Implementationsdetails egal sind. So macht man sich seine Abstraktionslayer auch nicht kaputt und hält die Kopplung lose.. Manchmal bekommt man auf der höchsten Ebene dann fast automatisch soetwas wie eine DSL geschenkt, was den Vorteil hat, dass man business errors schnell von Fehlern „weiter unten“ unterscheiden kann. Speziell bei der objektorientierten Programmierung sollte man dann noch mit soetwas wie Kapselung, „Tell, don’t ask.“ und das Liskov substitution principle kennen. So bleibt die Software einfach und offen für Erweiterungen ohne dass man schon von Anfang an Sachen schreiben muss, die man vermutlich eh nie brauchen wird. Manche Dinge sind nämlich nicht perfekt wenn man nichts mehr hinzufügen kann, sondern wenn man nichts mehr weglassen kann. 🙂

Design patterns, MVC usw. sollte man kennen und anwenden können, aber nicht darauf beharren wenn sie unpraktisch sind. Ähnlich wie UML sind sie Möglichkeiten, seinen Code besser Kommunizieren zu können, aber nicht dafür, ihn vollkommen zu bestimmen, denn die Implementierung ist einfach kein komplett im Voraus planbarer mechanischer Prozess, sondern ein Vorgang, bei dem man fast minütlich kleine Entscheidungen treffen muss. Einige Methoden berücksichtigen das auch.

Mit der Zeit entwickelt man ein Gefühl dafür, ob an einem Code irgendetwas faul ist und man nochmal kritisch drübergucken sollte. Ein Beispiel für solche code smells sind hardcodierte Werte. Sowas sollte man stattdessen vernünftig benennen und von außen konfigurierbar machen. Und wenn man gerade schonmal da ist, kann man versuchen, ganz in alter Pfadfindermanier, den Code sauberer zu hinterlassen als man ihn vorgefunden hat. Denn wenn man Mist hinterlässt, stellt sich schnell der Broken-window-Effekt ein.

cheese460Eine gewisse Art Faulheit ist allerdings gut, denn wenn man stupide Tätigkeiten dadurch lieber automatisiert, spart man sich viel Zeit. Tests sind hierfür ein gutes Beispiel. Diese kann man oft gut mit make, bash, oder Scriptsprachen wie Perl oder Python automatisieren und eventuell sogar schon welche schreiben, bevor man anfängt, das eigentliche Produkt, dass man testen möchte, zu entwickeln. Aber auch wenn dann alle Tests bestanden werden, bedeutet, das nicht, dass die Software fehlerfrei ist, denn man deckt fast nie alle Fälle ab. Wenn dann ein Bug gemeldet wird, und man ihn reproduzieren konnte, muss man halt klassisch Debuggen. Dafür sollte man lernen, einen Debugger zu benutzen. Damit kommt man besser voran als durch wildes Einstreuen vieler Print-Statements. Wenn der Bug dann behoben ist, kann ein entsprechender Testfall direkt zu den anderen aufgenommen werden.

Gnu_meditate_levitateFalls man selbst (incl. rubber duck debugging) bei der Fehlersuche nicht weiterkommt, kann man noch in einer entsprechenden Community nachfragen. Das Formulieren der Frage und vorallem das Reduzieren des Codes auf den problematischen Teil reicht manchmal dann schon, damit man doch selbst drauf kommt. Grundsätzlich gilt es dabei zu bedenken, dass der Fehler meistens im eigenen Code liegt und eher selten in viel benutzen Libraries und noch seltener im Compiler/Interpreter. Bei der Auswahl der Bibliotheken und sonstiger Tools ist es vorteilhaft, sich im Zweifelsfall aus bekannten Gründen auf freie Software zu konzentrieren, und möglichst schlanke Libs zu wählen. Das Rad hingegen selbst neu erfinden sollte man nur zu Übungszwecken, denn oft wird es zunächst nämlich eher quadratisch. 😉

LME_ww_031_webWenn irgendeine Funktionalität noch nicht vorhanden ist, oder man unabhängig von ihr testen können will, kann ein Mock dafür hilfreich sein. Auch für Präsentationen, zum Umgehen von blocking points und für Prototypen sind diese nützlich. Mit letzten kann man den Kunden schon in die Entwicklung einbinden und schnelles Feedback bekommen. Wenn es eh Wegwerfcode wird, kann man ihn auch in einer anderen Sprache als Endprodukt entwickeln, und muss nicht so viel error checking wie sonst machen. Apropos errors, Exceptions sollten wie der Name schon sagt nur für außergewöhnliche Fälle benutzt werden. Ansonsten kann eine Funktion auch einfach mal false zurückgeben und den Fehler loggen. Das erleichtert dann auch die Fehlersuche im Vergleich zum wortlosen abkacheln. Aber nochmal zurück zur User-Einbindung: Wenn die Benutzer schon im Voraus etwas testen können, erhöht sich die Chance, dass sie am Ende das bekommen, was sie wollen, und sie fühlen sich mit dem Produkt auch mehr verbunden, weil sie das Gefühl haben, dass sie daran beteiligt waren. Manchmal hilft es auch, sich einfach mal eine Zeit lang neben den Benutzer zu setzen, und zu gucken, wie er die Software bedient, denn hierbei erlebt man manchmal die ein oder andere Überraschung.

Zuletzt möchte ich noch gerne Donald Knuth zitieren:

Premature optimization is the root of all evil.

Also Performanceprobleme erst beheben wenn man sie mittels Profiler auch als solche identifiziert hat. Ansonsten kann man ruhig auch erstmal ein klein wenig mehr CPU-Zeit verbrauchen wenn man dafür sehr viel Entwicklungszeit einspart.

Und trotz all dieser Fähigkeiten und Hilfmittel sollte man ruhig mal out of the box denken. Manchmal ist die wirklich gute Lösung für ein vermeindliches Programmierproblem nämlich gar nicht in Software zu suchen, sondern viel eher in Hardwareänderungen oder sogar sozialen Dingen zu finden. 🙂

Was machen Informatiker (bzw. Softwareentwickler im Speziellen) eigentlich so?

InformatikerBannerFalls du die Frage in der Überschrift mit sowas wie „Öh, WLANs einrichten, Viren entfernen und Office-Kram machen, glaub ich.“ beantworten würdest und dich schonmal gewundert hast, warum manch Informatiker keine Lust hat, genau diese Sachen für dich zu tun, obwohl du ihn doch mit „Das ist doch das, was du gelernt hast und dir Spaß macht.“ motivieren wolltest, ist dieser Artikel wie für dich geschrieben. 😉

Informatiker haben von Computern nur so viel Ahnung wie Astrophysiker von Teleskopen, Tischler von Stichsägen, Köche von Backöfen, Biologen von Mikroskopen oder Mathematiker von Tafeln, Zirkeln, Papier und Bleistift. Es sind jeweils nur Werkzeuge, die zwar als Mittel zum Zweck dienen, mit denen man sich aber nicht notwendigerweise darüber hinaus beschäftigt.

Ursprünglich geht es in der Informatik nämlich um die Automatisierung der Verarbeitungen von Informationen und Berechnungen, und die Grundlagen dafür wurden schon lange bevor es elektronische Computer gab entwickelt.

Informatik ist zunächst wie die Mathematik eine Strukturwissenschaft. In der Praxis angewandt hilft sie oft dabei, langweilige Arbeit anzunehmen. Im mechanischem Umherschieben und Verrechnen von Daten sind Computer extrem schnell und zuverlässig, sodass viele Dinge in der Praxis ohne sie nicht möglich wären. Die Tatsache, dass Computer immer schneller werden, ist also Voraussetzung für die Umsetzung vieler Ideen.

ComputerhistoryEin Bit ist die kleinste Informationseinheit. Es kann nur die Werte 0 und 1 annehmen. Aus 8 Bits wird ein Byte zusammengesetzt, das eine Zahl repräsentiert. Buchstaben (und somit auch Wörter, Sätze, ganze Romane) werden ebenfalls intern als Zahlen dargestellt. Jedes Byte, dass beispielsweise beim Surfen über das Internet verschickt wird, könnte auch manuell per Brieftaubeneule auf Zetteln herumgeschickt werden, und alle weiteren Vorgänge könnten ebenfalls manuell durchgeführt werden. Man kann eine Turingmaschine auf diese Art bauen, es würde aber ziemlich lange dauern bis der hauseigene Zeichner einem die Website, die man sehen will, zusammengepinselt hätte. 😉

owl_internetAußerhalb der Forschung, also in der Anwendung, ist die Informatik nicht mehr so wissenschaftlich mathematisch rein. Als Softwareentwickler baut man Dinge, die irgendeinen Zweck erfüllen sollen. Unreinheit kann dabei durch abstruse Kundenwünsche, Deadlines, der Forderung nach Effizienz (Nutzen mit wenig Aufwand (auf Seite des Entwicklers und der Hardware!)) usw. entstehen. Manchmal weiß man gewisse Dinge auch einfach nicht sicher. Bei Schnittstellen zu closed source software muss man sich darauf verlassen, dass das Spezifizierte genau erfüllt wird. Man kann nicht alles selbst nachvollziehen, und wenn etwas fremdes fehlerhaft läuft, kann man nicht einfach reingucken, woran es liegt, und den Fehler beheben.

BlackboxAber unabhängig davon, ob die Software oder die Funktion, die man implementiert, mit fremder (freier oder unfreier) oder eigenen Software-Modulen zusammenarbeitet, hat man trotzdem meistens immer verschiedene Abstraktions-ebenen. Erst das macht es möglich, sehr komplexe Vorgänge zu überblicken. Wenn man gerade in einer dieser Ebenen denkt, muss man sich nicht darum kümmern, wie die Ebenen darunter, die man benutzt, funktionieren, solange sie das tun, was sie sollen. Teilweise werden die verschiedenen Ebenen sogar in unterschiedlichen Programmiersprachen realisiert.

Computerspiel_AbstraktionsebenenZusammen mit anderen Aspekten des zu lösenden Problems ergibt sich daraus übrigens, dass es nicht „die beste Programmiersprache“ gibt, sondern die Eignung einer solchen immer davon abhängt, was man mit ihr vor hat.

Doch unabhängig von Sprache und Ebene, in der man gerade denkt, lernt man schnell, dass wenn man etwas nur irgendwie ans Laufen bekommt ohne es verstanden zu haben, es einem meistens früher oder später um die Ohren fliegt. Auch wenn man Fehler versteht und drin lässt, weil man denkt, dass die entsprechende Situation eh nicht eintreten wird; also lieber direkt elegant (d.h. simpel) zuendedenken. 😉 Manchmal war etwas auch mal ordentlich, wurde dann oft geändert und braucht nun ein Redesign, da die Chance, dass es bei weiteren Änderungen in sich zusammenfällt, immer weiter steigt. Technologische Schulden zu machen muss nicht jeden mal die falsche Entscheidung sein. Man sollte sich ihrer aber zumindest bewusst sein.

jenga_fallingKlar ist Programmierung nicht jedermanns Sache, aber manchmal versteht man etwas erst wirklich wenn man es mal selbst gemacht hat. Falls du also wissen möchtest, wie soetwas praktisch ansatzweise aussieht, ist der folgende Abschnitt hoffentlich das Richtige für dich. Wir entwickeln zusammen ein Programm, dass das klassische Kinderspiel „Fizzbuzz„, anhand dessen Kinder Division üben können/sollen, (imperativ) umsetzt.
Es soll von 1 bis 100 hochgezählt werden, wobei alle Zahlen, die durch 3 teilbar sind, durch das Wort „Fizz“, alle durch 5 teilbare Zahlen durch „Buzz“ und Zahlen, die durch 3 und 5 teilbar sind, durch „FizzBuzz“ ersetzt werden:

1, 2, Fizz, 4, Buzz, Fizz, 7, 8, Fizz, Buzz, 11, Fizz, 13, 14, FizzBuzz, 16, 17, Fizz, 19, Buzz, Fizz, 22, 23, Fizz, Buzz, 26, Fizz, 28, 29, FizzBuzz, 31, 32, Fizz, 34, Buzz, Fizz, ...

Es gibt verschiedene Möglichkeiten, einen Algorithmus zu entwickeln, der solch eine Ausgabe erzeugt, einer davon sieht im Pseudo-Code wie folgt aus:

Zähler = 1
Solange der Zähler nicht größer als 100 ist, mache folgendes:
    Wenn der Zähler durch 3 und durch 5 teilbar ist:
        Schreibe "FizzBuzz".
    ansonsten:
        Wenn der Zähler durch 3 teilbar ist:
            Schreibe "Fizz".
        Wenn der Zähler durch 5 teilbar ist:
            Schreibe "Buzz".
        Wenn der Zähler weder durch 3 noch durch 5 teilbar ist:
            Schreibe den Wert des Zählers
    Schreibe ", "
    erhöhe Zähler um 1

Hier sieht man auch gut, wie wir nur auf unserer speziellen Abstraktions-Ebene bleiben.
Wie der Computer Zahlen intern repräsentiert, wie er feststellt, ob eine Zahl durch eine andere teilbar ist, und wie er Dinge auf dem Bildschirm ausgibt, interessiert uns momentan gar nicht. Wir benutzen diese Funktionen einfach.

Zur Veranschaulichung hier das ganze nochmal als Programmablaufplan (Den Zähler habe ich „Z“ genannt, der senkrechte Strich „|“ steht für „ist Teiler von“, das auf dem Kopf gelandete U „∩“ bedeutet „und“ und die rosa Rauten sind verzweigende „wenn->dann“-Abfragen.):
Fizzbuzz_ProgrammablaufplanIn einer echten Programmiersprache (hier Python) könnte das ganze dann so aussehen:

import sys
for i in range(1, 101):
    if i % 15 == 0:
        sys.stdout.write('FizzBuzz')
    elif i % 3 == 0:
        sys.stdout.write('Fizz')
    elif i % 5 == 0:
        sys.stdout.write('Buzz')
    else:
        sys.stdout.write(str(i))
    sys.stdout.write(', ')

In Echt würde man das Ganze eventuell allgemeingültiger machen (andere Teiler, andere Ersetzungswörter usw.), aber vom Grundprinzip her funktionieren auch größere Projekte ähnlich. Ein Teil der Kunst dabei ist es, komplexe Aufgaben in kleine einfachere Teilprobleme zu zerlegen. Um das gut zu können, lernt man verschiedene design patterns, Idiome usw.

Interessant an dieser Tätigkeit finde ich persönlich unter anderem, dass man trotz Wiederverwendung bereits bestehender Algorithmen doch immer wieder auf Probleme stößt, für die es so noch keine fertige Lösung gibt, und über die man erstmal wieder nachdenken muss, bis einem dann (manchmal aus heiterem Himmel, z.B. unter der Dusche) plötzlich eine Idee kommt.

Und auch wenn die Suche nach Fehlern manchmal frustrierend sein kann, kann das Gefühl, in Quellcode durch Logik eine komplexe Welt erschaffen zu haben, die sich genau so verhält, wie man sich das vorgestellt hatte, schon recht erfreulich sein. 🙂

hannibal_planZusätzlich mag ich, dass die Arbeit als Entwickler Kreativität bei der Lösungssuche erfordert, und viel Abwechslung bieten kann. Man programmiert ja nicht nur, sondern hat auch noch genug andere Dinge zu tun (siehe Softwaretechnik). Und selbst sehr gute, erfahrene und vielseitige (Software-)Entwickler können bei Weitem nicht alles schon kennen und sind in vielen Bereichen immer noch Anfänger. Außerdem besteht der Alltag in diesem Beruf aus weitaus mehr als der eigentlichen Programmierung, die ich hier hauptsächlich beschrieben habe. Ebenfalls viel Zeit verbringt man mit Planung, Analyse, Kommunikation und anderem Management-Kram.

Ebenso wie andere Wissenschaften und Ingenieursdisziplienen, durchdringt auch die Informatik sehr viele Bereiche, in denen sie nicht direkt offensichtlich ist. Du kannst ja einfach mal über den Artikel „Computer science“ aus der englischen Wikipedia drüberscrollen und nur die Bildchen angucken. Schon allein das sollte eine Vorstellung der Vielfalt vermitteln. Die einzelnen Zweige sind wechselseitig voneinander abhängig und entwickeln sich gemeinsam.

Unser Umgang mit Informationen, die Art der Fähigkeiten, die gefragt sind, und die generellen Möglichkeiten, die wir haben, haben sich unter anderem durch die Informatik in den letzten Jahrzehnten sehr stark verändert. Ich freue mich darauf, zu sehen, was in der nächsten Zeit für weitere neue Ideen entstehen, denn kaum eine Branche entwickelt sich so rasant, wie die IT. Und ich hoffe auch, dass ich weiterhin Spaß daran haben werde als Softwareentwickler meinen (wenn auch infinitesimal kleinen) Teil dazu beizutragen. 🙂

Glücklichsein und andere Lebenssinne

The_Answer_to_Life_the_Universe_and_EverythingLeben als solches (Stoffwechsel, Homöostase, Fortpflanzung usw.) hat an sich wohl eher keinen inhärenten Sinn, sondern läuft als emergenter Prozess einfach im Rahmen der Naturgesetze (physikalisch, chemisch, biologisch) ab. Sinn ist ja eh etwas, das erst wir denkenden Lebewesen in Handlungen und Existenzen hineininterpretieren. Auch wenn wir der Evolution gern ein Ziel wie die Hervorbringung immer „höherer/besserer“ (Obacht, hochgradig subjektiv) Lebensformen zusprechen möchten, passiert auch sie einfach so. Alles hat eine Ursache, aber diese muss kein Grund im teleologischen Sinn sein oder haben. Frösche sind beispielsweise nicht dafür da, um Spinnen zu fressen, damit wir Menschen nicht so sehr von ihnen belagert werden, es geschah einfach so, dass sie es tun. Den Sinn sprechen erst wir ihnen zu, da sie jemandem (in dem Fall uns) nutzen.

frog-wideDa wir aber manchmal darauf (be)stehen, dass auch wir nicht sinnlos sind, suchen wir uns manchmal (wenn auch unbewusst) einen Zweck (und andere Grundsätze, ethisch oder sonstwie) für uns aus. Die Angebote sind ja zahlreich. Ich vermische hier gleich sicherlich kurzfristiges Glücklichsein öfters mal mit langfristiger Erfüllung, da mir die Grenzen dazwischen fließend vorkommen, denn oft ist es ein Abwägen (oder eher Tauziehen?) ähnlich wie beim Marshmallow-Test.

Na gut, was sucht man sich denn nun zur Erfüllung so aus? Für verschiedene Leute sind es wahrscheinlich unterschiedliche (auch stark kulturell geprägte) Mischungen aus teilweise diesen (oft auch wieder überlappenden) Sachen:

surfing-teahupoo-tahiti

  • Hedonismus in vielen Formen, also Genuss von Sex, Essen, Unterhaltung, Berieselung, Nervenkitzel, Musik, mit Freunden abhängen usw.
  • Selbstverwirklichung, sei sie sportlicher, beruflicher, intellektueller, finanzieller oder sonstiger Art. Man kann einfach auf einen hohen sozialen Status hinarbeiten oder fleissig trainieren, um irgendwann so gut Surfen zu können, dass Teahupoo einen nicht zerlegen würde, oder um andere krasse Sachen drauf zu haben.
  • Spiritualität. Diese muss nicht religiös sein. Das naturalistische Verstehen der Welt könnte man in diese Kategorie einorden sowie Mitgefühl und Hilfe (bis hin zur Aufopferung) für andere (z.B. ihnen in Foren beim Erwerb der Grammatik zur Seite stehen ;-)) oder was auch immer.

Je nach Persönlichkeit sagen einem diesbezüglich dann wahrscheinlich auch andere Philosophen zu. Für den *S*J könnten gesellschaftliche Pflichterfüllung und Tugenden ähnlich wie bei Aristoteles und Konfizius passen. Als *S*P mag man eventuell Aristipp lieber, liest ihn aber nicht, weil man lieber Party machen geht, als *NF* sagt einem möglicherweise Budda mit seinem Altruismus eher zu und als *NT* gefällt Platon und seinen Wunsch, die Struktur der Welt zu verstehen, vielleicht besser.

Verschiedene_Arten_Glueck_zu_empfindenNaja, tun wir mal einfach so, als würde man gerne glücklich sein. Wenn man es nicht ist, stolpert man eventuell über irgendwelche beratenden Bücher, die (überspitzt gesagt) mit „Du musst einfach nur …“ anfangen und mit sowas wie „… jeden Tag leben als wäre es dein letzter.“ weitermachen. Mal abgesehen davon, dass mein Morgen vermutlich ziemlich übel wäre wenn ich mein Heute nach dieser Devise gestalten würde (Wingsuit Basejumping anyone? :)), kommt dazu, dass solche Tipps gerne von Leuten gegeben werden, die selbst eh einfach schon ziemliche Dauergrinser sind. Damit will ich nicht ausschliessen, dass es nicht auch tatsächlich hilfreiche Techniken geben kann, sondern nur darauf hinaus, dass Glücklichsein genau wie viele andere Charakterzüge auch, unter anderem eine genetische Komponente hat. (Man kann nicht einfach abhaken, welche Punkte/Ebenen der Bedürfnispyramide bei einem Menschen erfüllt sind, und dadurch wissen, wie glücklich er sich fühlt.)

HerzSelbst so ein netter Ratschlag wie „Entscheide dich so, dass du es im Alter rückblickend nicht bereuen wirst.“, der meistens darauf abzielt, Chancen nicht zu verpassen sondern zu ergreifen, hat Schwächen, denn selbst innerhalb von 10 Jahren kann sich unser persönliches Wertesystem stark verändern, sodass wir dann praktisch wieder ein anderer Mensch sind, auch wenn wir in fast jedem Alter gerne meinen, dass unser jetziger Charakter schon vollendet sei.

Deshalb trage ich jetzt einfach ein paar Dinge, die mir bei meiner Recherche so über den Weg gelaufen sind, zusammen.

BaumUnser erlebendes Selbst und unser erinnerendes Selbst müssen sich nicht immer einig sein. Man erinnert sich manchmal nur an den besten oder den schlimmsten Teil einer Erfahrung bzw. das Ende, nicht aber an die Gesamtheit (vgl. Peak–end rule und Duration neglect). Die erinnerte Vergangenheit ist also nicht unbedingt ein perfekter Indikator dafür, was man mögen wird. Ebenso kann einen die vorausschauende Überlegung, was nun glücklich machen würde, in die Irre führen. Man überschätzt systematisch die Freude, die man aus neuem materiellem Besitz ziehen wird im Vergleich zu anderen Optionen, die sich für den gleichen Preis bieten würden. Einfachere Dinge, die man dafür mehr bewusst erlebt (Theaterbesuche, Musikunterricht, Zeit zum Spazieren) sind auf Dauer oft größere Glücksspender als teure Autos, die man sich in die Garage des teuren Hauses oder in den Stau stellt. Andersherum ist es jedoch genauso. Wir überschätzen auch die dauerhaften negativen Folgen, die eine dramatische Änderung auf unseren Gemütszustand haben könnte. Überraschenderweise sind Lottogewinner oft nach einigen Jahren wieder ähnlich zufrieden/unzufrieden wie zuvor (auch wenn sie ihr Geld nicht verplempert haben), und auch Menschen, die eine Querschnittslähnung erlitten, scheinen sich daran zu gewöhnen. Es sieht also so aus, als würden wir weniger vom absoluten Zustand, sondern eher von seinen Änderungen (erste zeitliche Ableitung) abhängen.

Abgesehen von den offensichtlichen Schwierigkeiten Glück zu messen, scheint es zumindest hilfreich zu sein, wenn der sozioökonomischen Unterschiede im persönlichen Umfeld nicht allzu groß ist, man das Gefühl von Kontrolle über sein Leben hat und sich für irgendwas nützlich vorkommt.

Necker_cube.svgAnsonsten sind viele Erlebnisse auch einfach sehr mehrdeutig interpretierbar, und ähnlich wie beim Necker cube liegt es am Betrachter, ob er das ganze nun positiv oder negativ sieht. Wir sind gar nicht mal so schlecht darin, im Nachhinein Glück in Erlebnisse reinzusynthetisieren.

Mal abgesehen von alle dem (um den Bogen zum Anfang wieder zu schliessen), hat die Natur nicht vorgesehen (sowas kann sie ja grundsätzlich nicht), dass wir zwangsläufig glücklich sein müssen, sein werden oder werden können. Auch gibt es schwerwiegendere Selektionskriterien als dieses. (Allerdings kann man es üben). Also: YOLO! ^_^

Happiness_Flussdiagramm

Talent oder Training, Nature or Nurture, Veranlagung oder Umwelteinflüsse?

michael_jordan_free_throw_dunkGerade wenn Leute in irgendwas besonders gut sind, sei es irgendeine spezielle Sportart, eine allgemeine athletische Fähigkeit (wie bspw. Explosivkraft), das Spielen eines Musikintruments oder einfach nur im logischen Denken, fragt man sich manchmal ganz gerne, wieviel von dieser Leistung wohl angeboren ist (Talent, Nature, Veranlagung) und wieviel erst im Laufe des Lebens (Training, Nurture, Umwelteinflüsse) dazugekommen ist. („This is ten percent luck, twenty percent skill, fifteen percent concentrated power of will…“)

Auf den ersten Blick scheint die Frage auch vernünftig zu sein, da das Ergebnis sich ja schon aus diesen zwei Komponenten zusammensetzt.

TalentTrainingAdditivBei genauerem Nachdenken, merkt man aber schnell, dass an dieser mathematischen Analogie etwas nicht stimmt, denn ohne die richtigen genetischen Voraussetzungen (Körpergröße, Hebel, Anteil an schnellzuckenden Fasern in der Skelettmuskulatur, Anzahl der Beine Oo) wird man auch mit dem besten Training kaum von der Freiwurflinie Dunken können. Wenn Michael Jordan allerdings niemals etwas mit Basketball (oder Sport allgemein) zu tun gehabt hätte, würden seine jump shots vielleicht ähnlich weit am Korb vorbeisegeln wie die deiner Oma. 😉

Es scheint also eher das Zusammenspiel (nicht die Summe) beider Faktoren zu sein, von dem das Ergebnis abhängt. Eine multiplikative Analogie beschreibt es für meinen Geschmack besser:

TalentTrainingMultiplikativEin gleichseitiges Rechteck kann noch so lang sein, die Fläche ist trotzdem Null wenn die Höhe Null ist.

Oder anders: Beim Vortrieb eines Schiffs kann man auch nicht sagen, ob die Schiffssraube oder die Stärke des angeschlossenen Motors wichtiger ist. Wenn eins kaputt ist, kann das andere noch so gut sein, es geht nix.

Falls man sich tatsächlich trauen würde, diese beiden facettenreichen Größen auf jeweils eine eindimensionale Skala, die dazu wohl noch recht willkürlich gewählt wäre, zu projizieren, könnte man beide trotzdem nicht (zumindest nicht ohne wie auch immer herbeiphantasierte Umwandlungsfunktion) miteinander vergleichen. Es wären nunmal unterschiedliche Einheiten. Zusätzlich ist es auch noch definitionsabhängig, was denn nun alles zur Veranlagung gezählt wird. Prinzipiell ist es auch veranlagt, dass man nicht unter Anenzephalie leidet und dass man keine Amöbe ist.

SchiffsschraubeBeim Hochleistungssport ist die Frage noch ziemlich harmlos und oft eher für Talentscouts interessant, wobei natürlich noch mehr an Komplexität dazukommt, da Lernkurven unterschiedlich verlaufen, und sich auch bei quasi gleichem Training verschieden überholen können. Talent ist halt doch keine eindimensionale Größe. Da viele Hochleistungssportler unter Umständen schon recht lange (incl. Frühförderung usw.) sehr optimiert trainieren, kann in solchen Fällen die Veranlagung dann aber den entscheidenen Unterschied machen. Wie sehr es sich dabei optisch Bemerkbar macht, dass man es teilweise mit ziemlich krassen Mutanten zu tun hat, hängt von der Sportart ab. 😉

Wenn es jedoch um alltägliche Dinge geht, kann es schon sein, dass auch wir wissen möchten, ob etwas eher angeboren oder eher nachträglich von Außen zugefügt (Erziehung, Lebensstil usw.) ist. Denken wir nur beispielsweise an Hyperaktivität bei Kindern, Herzinfarktrisiko, IQ, Gesundheit im Alter, Noten im Mathe-Unterricht, psychische Störungen usw. Auch bei all diesen Dingen lässt sich nicht wirklich sagen, was „mehr“ ausmacht, Veranlagung oder Umwelteinflüsse.

Klar, durch Analyse von Statistiken kann man beispielsweise herausfinden, um welchen Faktor das Risiko, bspw. an Multiple Sklerose zu erkranken, höher ist wenn ein Elternteil daran leidet, aber auch dann weiß man nichts genaues, denn Kinder teilen sich mit ihren Eltern meistens nicht nur die Gene, sondern auch die Umwelteinflüsse. Es gibt natürlich Kinder, die nicht bei ihren Eltern aufwachsen. Wenn man über genug solcher Fälle Zahlen bzgl. des zu untersuchenden Phänomens hat, kann man nur diese Auswerten, aber schon während der Zeit im Mutterleib werden sich auch Umwelteinflüsse, die sich viel später immernoch auffällig auswirken können, geteilt, weswegen auch hier eine kleine Restunsicherheit bleibt.

562px-Tubal_Pregnancy_with_embryoWenn dir demnächst also jemand erzählen will, irgendetwas sei „nur Veranlagung“ oder „nur Erziehung“ oder sonstwas, weißt du, dass die Zusammenhänge nicht so einfach sind.

Faustregel (nicht belegt, nur ein persönliches Gefühl): Wenn etwas sehr gut läuft, beispielsweise wenn Bodybuilderer/Pianisten/Physiker ziemlich krass gut sind, sagen sie über sich selbst gerne mal, dass sie gar keine „guten Gene“ hätten, sondern sich alles nur hart erarbeitet hätten. Wenn etwas schlecht läuft, beispielsweise wenn jemand Typ-2b-Diabetes hat, sagt er ganz gerne mal, dass er da nichts dafür kann, und alles angeboren sei. Beides scheint mir aber eine Form des self-serving bias zu sein. (Mehr über solche kognitiven Verzerrungen kann im Artikel „Zwei Systeme und nur ein Kopf“ nachgelesen werden.) Klar hat David Garrett auch extrem viel und gut geübt, und viele Leute, denen es gesundheitlich schlecht geht, haben auch einfach nur Pech gehabt, aber wenn man wirklich über Ursachen nachdenken will, kann es praktisch sein, solche „Schuld-Fragen“ wegzulassen.

krasser_RueckenIm Zweifelsfall kann man dem Anderen leicht vorführen, dass z.B. die Anzahl der Nasenlöcher auch durch Umwelteinflüsse verändert werden kann. Ähm, nein, lieber doch nicht. 😉

Dooooooooooooooooooof.

Früher hatte ich manchmal das Gefühl, dass die ganze Welt irgendwie Verarsche sein muss, so dämlich wie die Gesellschaft sich als Ganzes oft verhält. Mit etwas Spieltheorie kann die Entstehung einiger Muster jedoch ansatzweise erklärt werden.

Damit dieser Artikel Sinn ergibt, ist es nötig, dass du das prisoner’s dilemma, dass ich im Artikel „Rache ist ja soo selbstlos… 😉“ beschrieben habe, verstanden hast. Also, falls das gerade nicht präsent ist, kannst du eben nochmal kurz nachlesen. Ich warte hier auf dich. 🙂

Aus dem Artikel „Zwei Systeme und nur ein Kopf“ wissen wir ja, dass Menschen oft nicht rational entscheiden. Zusammen mit der Vorstellung der Linsensuppe im Kopf stellt sich die Frage, ob humanes Verhalten sich überhaupt spieltheoretisch (also mathematisch) sinnvoll und alltagsrelevant untersuchen lässt. Antwort: Ja, das tut es. Denn auch wenn Gefühlentscheidungen in vielen Kontexten unlogisch erscheinen, hat sich der genetisch kodierte Teil unseres Verhaltens über Millionen von Jahren durch Selektion, deren Funktionsweise sehr gut logisch zu ergründen ist, herausgebildet. Ein paar Beispiele dafür gibt es im Artikel „Evolution und Folgen des parental investments„. Dazu kommt, dass Selektion nicht nur auf genetischer Ebene stattfindet, sondern auch beispielsweise zwischen Unternehmen. Es sind natürlich alles nur genäherte Modelle, die jedoch nützlich sein können. So, aber nun genug des Vorgeplänkels; auf geht’s! 🙂

Adam Smith hat uns ja beigebracht, dass in einem freien Markt alle profitieren wenn jeder zu seinem eigenen Besten handelt. Ein Anbieter einer Ware will Profit machen, und gibt sich deshalb Mühe, mit einem guten Preis-/Leistungsverhältnis zu glänzen, denn nur dann kaufen die Kunden, die für sich selbst ja auch nur gutes wollen, auch bei ihm. Durch diese Konkurrenz zwischen den Anbietern haben die Kunden, also die Gesellschaft, es maximal schön. Der erwähnte Schottische Ökonom nannte diese Kraft, die Allen zu Gute kommt, die „unsichtbare Hand“ des Marktes.

Diese Hand langt manchmal aber auch voll daneben; besonders in Märkten mit asymetrischer Information, also in diesem Fall wenn der potentielle Kunde die Qualität der Produkte nicht so gut wie der Anbieter kennen kann. Ein klassisches Beispiel dafür ist der Gebrauchtwagenmarkt, aber viele andere Bereiche sind ebenso passend. Beispielsweise beim Schnitzelkauf im Supermarkt weiß man auch nicht unbedingt, wie es um die Qualität bestellt ist. Und schon haben wir ein prisoner’s dilemma! Ja wo das denn? Zwischen den Anbietern! Wenn alle gute Produkte auf den Markt werfen, reguliert sich der Preis auf ein bestimmtes Niveau ein (Marktgleichgewicht). Die PD-Spieler kooperieren. (Keiner der Anbieter schummelt, indem er getarnten Müll einbringt.) Wenn einer jetzt jedoch Schrott (wertloses Auto, extrem billig produziertes Fleisch usw.) hervorzaubert, kann er damit zunächst mehr Gewinn machen, da er es zum gleichen Preis verkaufen kann, jedoch weniger Herstellungskosten hatte. Im PD-Jargon defektiert er also. Den Kunden wird die sinkende Durchschnittsqualität (erhöhte Chance, Mist zu erwischen) bewusst, weswegen er nicht mehr bereit ist, so viel zu bezahlen. Der Gesamtpreis auf dem Markt (auch der, der qualitativ hochwertigen Produkte) sinkt. Die Defektion hat also ganz klassisch allen PD-Spielern geschadet. Um Kooperation zur evolutionär stabilen Strategie zu machen, ist Rache gut. Das ist hier aber nicht so einfach. Damit das ganze nicht total eskaliert, hilft leider nur Kontrolle und informierte Kunden, die irgendwie herausfinden, welche Anbieter ihnen die Montagsautos und das Gammelfleisch andrehen wollen (Screening). Die Spieler, die auf Qualität setzen, können das zwar durch Gütesiegel zeigen (Signaling), aber das klappt auch nicht immer. Self-Selection in Form von hochwertigen Verträgen (z.B. zwei-Jahres-Garantie für Gebrauchtwagen) bietet sich auch nicht immer an. Da „beschissen“ zunächst kurzfristig die dominante Strategie (die durch auf reinem Preisvergleich basierenden Kaufentscheidungen der Kunden auch noch gefördert wird) sein kann, lässt sich nicht vermeiden, dass sie auch gespielt wird. Eventuell pendelt sich das Nash-Gleichgewicht irgendwo bei „ein Bischen Mist, aber nicht zu viel“ ein. Je nach aktueller Phase im Kondratjew-Zyklus (falls es sowas tatsächlich geben sollte) könnte es auch schwanken. Ich stelle mir vor, dass während eines Aufschwungs mehr kooperiert wird als während eines Abschwungs.

Themensprung -> Presse/Medien. – Es wäre ja toll wenn alle gewissenhaft und wahrheitsgetreu berichten würden, jedoch wäre auch das kein evolutionär stabilder Zustand. Der Selektionsdruck kommt hier von den Konsumenten. Anbieter, die das drucken/zeigen, was am meisten gekauft wird, verdienen mehr als die, die drucken/zeigen, was wahr/nützlich/sinnvoll ist. Wenn die Leute nützliche Wahrheit lesen/sehen wollen, wird es die (oder etwas, das auch auf den zweiten Blick noch danach aussieht) auch geben; wenn nicht, dann aber auch nicht (zumindest nicht so viel.) Damit die schönen Geschichten nicht zu absurd wirken, ist der Ursprung machmal authentisch, jedoch die Tatschen sind so verzerrt, dass nur noch wenig wiederzuerkennen ist. Ein Beispiel dafür ist, wie bei gefundener Korrelation oft von angeblicher Kausalität berichtet wird. Es verkauft sich einfach besser.

Dieses Muster jetzt auf die Politik zu übertragen ist einfach: Welcher Politiker wird sich mehr durchsetzen (gewählt werden)? Kandidat A, der alle seine Energie da rein steckt, sinnvolles zu sagen und zu tun, oder Kandidat B, der seine Energie mehr darein steckt, die Wähler dazu zu bringen, ihn zu wählen, indem er ihnen erzählt, was sie hören wollen? Auch hier ist die Strategie von A wieder keine evolutionär stabile, weil sie von der von B flott invadiert wird. Merkst du, dass das nicht das Gleiche ist wie „Politiker… Alle an die Wand stellen…“, das mein Schwiegeronkel gerne mal sagt? Es geht stattdessen darum, dass auch wenn nur 600 von 30000 Politikern so sind, es sein kann, dass genau diese in einer Demokratie nach oben gespült werden. Den Auftrieb dafür liefern wir selbst.

Ein weiteres „schönes“ ist das Beitragsdilemma. Angenommen, es gibt ein Ziel, dass (fast) alle eigentlich gerne erreichen wollen, wie beispielsweise saubere Luft (Klimaschutz) oder Meere, in denen langfristig noch genug Fische sind. Jeder hätte einen Vorteil daraus. Wenn man als Staat aber selbst nicht so sehr mitmacht bei der Klimasache, spart man viel Geld und profitiert ja trotzdem davon, dass die anderen schützen. Die Erhöhung des globalen Gesamtschadens, die man dadurch verursacht, wiegt den lokalen wirtschaftlichen Vorteil nicht auf, genau wie bei der Fischindustriefirma, die dann doch alles rausholt, was geht. Lokale „Schlauheit“ bedeutet oft globale Dummheit. Das Ganze nennt sich dann Tragik_der_Allmende.

Hilft es, das zu wissen? Naja, muss nicht, aber zumindest ich ich fühle mich etwas besser wenn ich verstehe, warum das, was doof ist, doof ist. Und wenn das auch nichts mehr nützt, dann vielleicht nocht das Bewusstmachen, dass Willensfreiheit eine Mär ist. 😉

„Ich glaube nicht an die Freiheit des Willens. Schopenhauers Wort: ‚Der Mensch kann wohl tun, was er will, aber er kann nicht wollen, was er will‘, begleitet mich in allen Lebenslagen und versöhnt mich mit den Handlungen der Menschen, auch wenn sie mir recht schmerzlich sind. Diese Erkenntnis von der Unfreiheit des Willens schützt mich davor, mich selbst und die Mitmenschen als handelnde und urteilende Individuen allzu ernst zu nehmen und den guten Humor zu verlieren.“ – der schlaue Albert

Zu guter Letzt sei nochmal am Beispiel der nicht nachhaltigen Fischerei gezeigt, dass man nicht einfach nur im Stau steht, sondern selbst der Stau ist: Wenn wir mit unseren Kaufentscheidungen bewusst darauf einwirken würden, zu fördern, was wir eigentlich für gut befinden („Geld ist Stimmzettel.“ und so), würden sich einige Probleme lösen. Aber wer hat schon tatsächlich den Greenpeace-Einkaufsratgeber im Supermarkt dabei…