von phorkyas

– Du wolltest heute ein paar dieser Hacker-Begriffe klären..
– Hacker.. Damit fängt es ja schon an. Das könnte oder sollte ein ernsthafter Programmierer eigentlich als Beleidigung nehmen.
– Wie? Für uns Nicht-Nerds ist das doch alles das Gleiche.
– Nicht wirklich. Ich war auch verwirrt, was ich da auf meine Visitenkarte schreiben sollte: Programmierer nicht, vielleicht Software-Entwickler oder Software-Ingenieur, ein Begriff, der im Deutschen leider wohl nicht üblich ist.
– Ja, aber nun erklär doch mal warum Hacker so despektierlich sein soll. Eigentlich versteht man doch darunter jemanden, der sich bis ins kleinste Detail mit irgendeiner Sache auskennt und dann irgendwas Abgefahrendes daraus bastelt und fummelt.
– Genau, aber dieses Basteln und Fummeln, sollte ein richtiger Programmierer von Anfang an vermeiden. Seine Software sollte klar konzeptioniert sein, wartbar und wohl dokumentiert. Ein Hacker nutzt womöglich sogar eine Besonderheit des Compilers oder eine Schwachstelle einer bestimmten Version, um seine Lösung zusammenzuschrauben, aber das hält dann nur dieses eine Mal.
– Der Programmierer sollte das also etwas professioneller zu Werke gehen? Dass seine Software vielleicht auch noch von dem übernächsten Mitarbeiter verstanden und weiterverwendet werden kann?
– Exacto. Was die Weiterentwicklung und den Umgang mit Software so unglaublich schmerzhaft macht, ist ja meist nicht die Schnittstelle zwischen Programmcode und Rechner, sondern die zwischen den Menschen. Den Code auf die Maschine bringen, kompilieren und den Code zum Leben zu erwecken, das lässt sich meist schon bewerkstelligen,.. aber dass er dann das richtige Macht, dass die Spezifikation richtig interpretiert wurde, und der Anwender später wirklich mit deiner GUI umgehen kann, dass steht dann noch auf einem anderen Blatt.
– Und legacy code, das wäre dann die nächste Sache.
– Ja, genau. Das ist vielleicht noch der viel größere Punkt: Die meisten Unternehmen haben diese Alt-Systeme. Code der über Generationen gewuchert ist, wie Efeu-Gestrüpp und den man partout nicht mehr loswerden wird. Da türmen sich dann 500.000 Zeilen aus C, C++ oder Java von unterschiedlichsten Leuten schon wie prähistorische Gesteinsschichten.
– Und jeder Neu-Einsteiger darf sich erst einmal mehrere Monate, unproduktiv da hindurchwühlen?
– Genau. Aber diese Teile hängen meist zu tief drin, es wäre noch aufwändiger oder ist im Budget nicht drin, oder wurde gar schon versucht, dieses Altsystem oder zumindest Teile zu ersetzen.
– Da hätte dann das Design von Anfang an stimmen müssen, die Vision des großen Ganzen, schon umfänglich und variabel genug? Aber da es wächst und sich entwickelt, ist es dann irgendwann nicht groß genug, oder plötzlich muss die Software auf Dinge erweitert werden, für die sie gar nicht gedacht war.
– Das passiert wohl häufig. Geht vielleicht schon Richtung Featuritis, Bloatware (oder aka eierlegende Wollmilchsau).
– Aber wobei es beim Programmieren ja eigentlich geht ist das Problemlösen.
– Wobei man sich unentwegt neue einhandelt?
– Das bestimmt. Damit bleibt man ja auch im Geschäft und macht sich nicht gänzlich überflüssig. Nun, wie geht aber die Wissenschaft beim Problemlösen üblicherweise vor?
– Reduktionistisch? Sie zerlegt die großen Probleme in kleine Unterprobleme, welche für sich irgendwann hoffentlich handhabbar sind.
– Und das macht eigentlich genau ein Programmierer. Früher wurden beim Strukturierten Programmieren solche Unteraufgaben in Prozeduren oder Funktionen zusammengefasst. Heute hat man vielleicht die Objekte dafür.
– OK. Objektorientiertes Programmieren, hmm.. Ich kenn‘ das nur aus Jurassic Park.. Aber du benutztest da eben einen etwas irritierenden Ausdruck; dass ein Programm oder auch Objekt zum Leben erweckt werde.
– Ja, man spricht sogar von der Lebenszeit einer Variable.
– Aber ist das jetzt nur eine Metapher – Anthropomorphisierung kann man in diesem Fall ja nicht ganz sagen, aber für ein Computerdings, etwas aus 0en und 1en ist das da nicht etwas hochgegriffen?
– Na, zum Leben erwecken heißt ja schon, dass es dann auf einer Maschine ausgeführt werden kann, und diese dann instruiert, es wird also Dinge tun, zu denen es instruiert worden ist.
– ..und manchmal werden diese Anweisungsteile so kompliziert, dass man gar nicht mehr weiß, warum das Programm in diesem oder jenen Fall so merkwürdig reagiert hat.
– Das ist natürlich kein wirklicher Skynet-Moment.. und dass ich noch erleben werde, dass die Künstliche Intelligenz so weit kommen wird, wie wir das in der Literatur mit Golems, Frankensteins, Ophelias und electronic sheep schon immer sind.
– Aber das mit dem Leben bringt mich gerade auf eine ganz abwegige Sache: Du kennst doch Plessner mit dem Lebewesen als grenzrealisierende Entitäten.
– Durchaus. Man könnte Ähnliches sogar in der Systemtheorie ausmachen, wo das System sich daraus ergibt, dass es eine Grenze zu seiner Umwelt habe.
– Et voilà, das ist eine Schnittstelle!
– Jaix.
– Du stimmst nicht überein? Ich fand diesen Geistesblitz gerade durchaus.. inspiriert. Haben Objekte nicht sogar ein Innen und ein Außen; Methoden und Variablen die privat und mithin nicht nach außen sichtbar sind?
– Hmm.. ja. Aber weißt du. Schnittstelle ist wieder so ein schillernder Begriff. So ein wolkiger. Für ein Programm C oder C++, da hat es eine feste Bedeutung. Da ist es wirklich was du in deine Quelldatei reinschreibst: Dieses Objekt hat genau diese und jene Methoden und Variablen. Punkt… Aber sobald du diesen Rahmen verlässt. Wenn es dann Schnittstellen zwischen Modulen, Programmteilen, Datenbanken, Prozessen, Firmen wird.. Kann es alles sein.
… (to be continued?)