Interview mit Bernd Marquardt

Bernd Marquardt ist selbstständiger Consultant und programmiert seit 1975 in den unterschiedlichsten Programmiersprachen so wohl auf Großrechnern wie auch auf PCs. Er schreibt Artikel für Fachzeitschriften, hat das Buch "WPF Crashkurs" geschrieben und hält Vorträge auf Konferenzen wie den DevDays oder der ADC. Er war für zehn Jahre Microsoft Regional Director und weitere fünf Jahre MVP für C++. Seine Schwerpunkte liegen in den Bereichen der Programmierung mathematischer und grafischer Algorithmen, Parallelprogrammierung, Windows NT-Architektur, Entwicklung mehrschichtiger Applikationen, MFC und natürlich .NET. Sie erreichen ihn über seine Webseite.

Golo Roden: Bernd, wie bist Du zur Softwareentwicklung gekommen? Wie und wann hast Du angefangen?

Bernd Marquardt: Oh je, das ist schon sehr, sehr lange her. Mein erster Kontakt mit einem Computer fand im Jahr 1975 oder 1976 statt - ich kann mich nicht mehr genau erinnern. Aber ich hatte an der Uni eine Vorlesung zum Thema Röntgenspektroskopie belegt, und da musste man bei den Übungen viel rechnen. Das durften die Kursteilnehmer dann mit dem Großrechner der Universität Köln durchführen.

Das war damals eine Control Data CDC Cyber 76. Die Maschine hatte eine Wortlänge von 60 Bit, 64 Kiloworte schnellen und 200 Kiloworte langsamen Arbeitsspeicher. Natürlich waren auch ein paar "Waschmaschinen" angeschlossen, also Festplattenlaufwerke. Die Programmiersprache war Assembler oder Fortran 66. Ein kleines Beispiel:

    PROGRAM TEST
    READ(1,100) N
100 FORMAT(I8)
    X=0.0D0
    DO 200 I=1,N
    X=X+DSQRT(DBLE(I))
200 CONTINUE
    WRITE(6,300) X
300 FORMAT(3X,9HRESULT = ,F15.5,/)
    STOP
    END

Schön, nicht wahr? Keine Strukturierung, keine Objektorientierung und natürlich keine mehrschichtige Architektur! Aber Spaß hat das Programmieren trotzdem gemacht. Aber es war auch noch alles sehr mühsam. Alles wurde auf Lochkarten gehackt und musste dann in die Maschine eingelesen werden. Danach konnte es längere Zeit - eventuell auch mehrere Tage - dauern, bis man ein Ergebnis in Form eines Listings erhielt. Und dann bekam man vielleicht nur eine lapidare Fehlermeldung des Compilers zurück.

Damals waren Computer noch richtig groß, machten viel Krach, brauchten tiefe Temperaturen und viel Strom. Aber man konnte damit Dinge ausrechnen, die man auf einem Taschenrechner - ja, die gab es schon! - nicht ausrechnen konnte. Mein erster eigener Mikrocomputer war übrigens ein TRS-80 Level II von Radio Shack, mit Microsoft Basic, 16 KByte RAM, einem 80 KByte-Diskettenlaufwerk und einer Taktfrequenz von satten 900 KHz. Die Grafikkarte in diesem Rechner konnte nur schwarz/weiß-Grafik und hatte eine Auflösung von 128 x 48 Klötzern. Aber die Faszination war in mir geweckt - und sie hat mich bis heute noch nicht losgelassen. Ja, es ist tatsächlich wahr und es gilt auch heute noch für mich: Wenn ich mir einen neuen Rechner bestellt habe, dann kann ich spätestens in der Nacht vor der Lieferung nicht mehr richtig schlafen!

Also am Anfang habe ich dann naturwissenschaftliche Software geschrieben, in erster Linie Programme, mit denen man die Eigenschaften von chemischen Molekülen berechnen konnte. Da braucht man so richtig viel Rechenzeit, manchmal sogar mehrere Tage!

Nach der Universität habe ich mich dann selbstständig gemacht und Anwendungen für andere Firmen entwickelt. Einer der interessantesten Aufträge in dieser Zeit war die Entwicklung eines Programms, welches Fässer, Kartons, Paletten und so weiter automatisch in einen beliebigen Container stauen konnte.

Später stellte sich dann heraus, dass es mir auch sehr viel Spaß macht, das Wissen an andere Softwareentwickler weiter zu geben. Seitdem bin ich sehr oft auf Konferenzen präsent und halte viele Schulungen zu den Themen der Softwareentwicklung.

Golo Roden: Wenn Du einen Schritt zurücktrittst, Dir die aktuellen Entwicklungen in der IT anschaust - wie beispielsweise Cloud Computing oder die Fokussierung auf RIA-Technologien - und diese mit dem Hintergrund Deiner langjährigen Erfahrung beurteilst: Wie stehst Du zu diesen Entwicklungen?

Bernd Marquardt: Ja, eines ist eigentlich klar: Wir lösen mit unseren Computern heute natürlich ganz andere Probleme als vor 30 Jahren. Das bedeutet auch, dass wir eine andere Hardware und andere Softwarekomponenten benötigen. Das fängt beim Betriebssystem an, hört bei den Anwendungsprogrammen auf und schließt natürlich auch die eingesetzte Hardware mit ein. Trotzdem sind alle neuen Strömungen in der IT-Branche für mich sehr interessant.

Nehmen wir zum Beispiel die Parallelprogrammierung. Bis vor Kurzem war dieses Thema einfach uninteressant, weil unsere Prozessoren einfach immer schneller geworden sind. Das ist nun vorbei. Wir haben Prozessoren mit mehreren Kernen, und wenn wir diese voll ausnutzen wollen, müssen wir unsere Software entsprechend entwickeln. Die Parallelität bekommen wir leider nicht umsonst - im Moment jedenfalls.

Aber genau vor diesem Hintergrund ist es höchst interessant, was sich nun auf dem Parallelmarkt tut, das heißt, welche neuen Lösungsansätze es gibt, welche Bibliotheken entwickelt und welche Technologien angewendet werden, um die Parallelprogrammierung so zu vereinfachen, dass sie leicht und fehlerfrei anzuwenden ist. Ganz ähnlich ist das mit dem Cloud Computing. Hier bekommt man beliebige Rechenleistungen, alles hochskalierbar und so wie man es gerade braucht. Ich will damit nicht sagen, dass Cloud Computing die einzig richtige und für alle Szenarien nutzbare Vorgehensweise ist, aber für viele Anwendungen stellt es doch ein gute Lösung dar.

Die IT-Umgebungen werden wohl auch in Zukunft sehr vielfältig bleiben, um eben alle möglichen Anwendungsszenarien abzudecken. Aber das macht es gerade so interessant.

Golo Roden: Inzwischen existieren zahlreiche Frameworks, die auf .NET basieren, und dieses um neue Fähigkeiten erweitern. Dennoch beschäftigst Du Dich auch sehr viel mit den Grundlagen - wie beispielsweise Parallelprogrammierung. Warum?

Bernd Marquardt: Mit der Parallelprogrammierung beschäftige ich mich eigentlich schon von Anfang an. Früher ging es in erster Linie aber darum, die zum Teil sehr langen Rechenzeiten zu verkürzen. Heute in modernen Business-Anwendungen möchte man die Rechenergebnisse natürlich auch möglichst schnell haben, aber es kommt noch ein anderer Aspekt hinzu: Die Benutzerschnittstelle soll möglichst nicht blockiert werden. Das heißt, der Anwender kann einfach immer weiter tippen und klicken. Und das ist schon eine Herausforderung ersten Ranges.

Eine wichtige Aufgabe in dieser Zeit ist es, Verfahren in der Parallelprogrammierung zu entwickeln, die so einfach anwendbar sind, dass wir sie sofort möglichst fehlerfrei für die zu lösenden Aufgabenstellungen nutzen können. Das ist nicht einfach. Und was so alles dabei herauskommt, ist in höchstem Maße spannend. In den letzten Jahren hat es viele neue Möglichkeiten in der Parallelprogrammierung gegeben: OpenMP, Unified Parallel C (UPC), Multithreading, Message Passing Interface (MPI). Und es kommen dauernd neue Ansätze hinzu: Cilk, Tasks Parallel Library (TPL), Parallel Pattern Library (PPL), AXUM, CUDA, OpenCL, ... Die Liste ist natürlich nicht vollständig, aber sie zeigt, welche Dynamik im Moment in diesem Bereich herrscht. Und das macht gerade diesen Bereich der Softwareentwicklung so interessant.

Golo Roden: Ein wesentliches Merkmal der IT ist, dass man beständig mit neuen Entwicklungen konfrontriert wird, und diesen folgen muss. Woher nimmst Du die Motivation, Dich quasi jeden Tag weiterzubilden und mit Neuem zu beschäftigen?

Bernd Marquardt: Ich glaube, das habe ich im Blut! Wenn ich nicht ein Buch mit irgendwelchen neuen Themen neben mir liegen habe, dann werde ich unruhig. Das müssen nicht unbedingt Bücher aus der IT-Welt sein, das können auch Themen aus Physik, Chemie und Astronomie sein. Aber eins ist natürlich klar: Wenn man in der IT-Branche erfolgreich sein will, dann muss man gerne lernen und auch bereit sein, sich ständig mit neuen Themen zu beschäftigen. So ist das eben schon seit vielen Jahren: Man hat gerade C# 2.0 richtig gelernt und alles verstanden, dann kommt ganz schnell C# 3.0 auf einen zu und das Ganze geht wieder von vorne los! Ich habe mir vor kurzem ein Buch über Silverlight 3 gekauft - während ich das gelesen habe, kann mal eben Silverlight 4 raus. Ein langweiliges Leben hat man in der IT-Branche also auf keinen Fall. Und genau daher hole ich mir auch meine Motivation, denn Langeweile mag ich nun mal gar nicht!

Golo Roden: Wenn sich ein Anfänger heute mit dem Thema Softwareentwicklung befassen will - welche Voraussetzungen sollte er Deiner Meinung nach dafür mitbringen, und was siehst Du als No-Go an?

Bernd Marquardt: Also eins ist klar: Man muss sich unbedingt für neue Dinge interessieren. Jede neue Version einer Soft- oder Hardware muss eine spannende Angelegenheit sein. Das Ausprobieren eines neuen Verfahrens, einer neuen Technologie und einer neuen Bibliothek sollte auf jeden Fall Spaß machen und niemals als lästige Pflicht empfunden werden.

Außerdem sollte man unbedingt Freude am Tüfteln haben. Es ist nun mal so, dass eine Software nicht einfach eingetippt wird und dann funktioniert sie fehlerfrei, sondern es muss eine Menge Geduld aufgebracht werden, eine Software wirklich komplett zu entwanzen. So kommt es natürlich auch schon mal vor, dass man trotz Debugger und vieler anderer moderner Hilfsmittel längere Zeit nach einem Fehler suchen muss. Aufgeben ist hier nicht angesagt.

Als ein weiteres wichtiges Mitbringsel wurde ich sagen, dass ein Softwareentwickler Spaß an abstraktem Denken haben muss. Man muss sich in eine Maschine hineinversetzen und ein bestimmtes Problem durch Beschreibung mit einem Programmalgorithmus lösen. Ein bisschen Mathematik kann dabei übrigens oft helfen - auch wenn viele Programme heute vollständig ohne höhere Mathematik auskommen.

Na ja, die No-Gos sind dann eigentlich klar. Ich schreib es mal in C# hin:

if(!bNeueDingeInteressant || !bSpassAmTüfteln || (bAbstractDenken == false))
{
    goto exit;
}

Oh, oh, und dann noch mit einem goto-Befehl! Also ich mache aus den No-Gos einfach No-Gotos!

Golo Roden: Bei der Vielzahl an Technologien, die es heute gibt: Womit sollte ein Anfänger heutzutage anzufangen?

Bernd Marquardt: Die wichtigste Grundlage für einen Anfänger ist eigentlich eine gute Programmiersprache. Aber da geht der Streit dann auch schon los, denn was ist eigentlich eine gute Programmiersprache? Das kann ganz davon abhängen, in welchem Bereich man programmieren möchte. So können die Präferenzen im naturwissenschaftlichen Bereich durchaus andere sein, als die, die man in Business-orientierten Anwendungen vorfindet.

Ich bin aber der Meinung, dass die erste Programmiersprache, die man lernt - wenn man interessiert ist, dann werden im Laufe der IT-Karriere noch einige Sprachen mehr dazu kommen - einige wichtige Eigenschaften haben sollte. Zunächst einmal sollte die erste Sprache relativ einfach sein. Außerdem sollte sie die heutigen wichtigen Programmierparadigmen unterstützen. Dazu gehören die strukturierte Programmierung ebenso wie die Objektorientierung. Natürlich sollte für die Programmiersprache eine gute, also möglichst vollständige Bibliothek zur Verfügung stehen, die es letztendlich erlaubt, interessante Anwendungen zu entwickeln.

Und natürlich sollte einem die Programmiersprache gefallen, die man nun lernen möchte. Genauso, wie einem eine Sprech-Sprache gut gefallen kann und man diese dann lernen möchte, geht es mit der Programmiersprache.

Ich würde also empfehlen, eine Sprache zu lernen, die auf das .NET-Framework aufsetzt. Alle Punkte, die ich oben aufgezählt habe, treffen eigentlich auf die .NET-Sprachen zu. Sie sind objektorientiert und strukturiert, und es existiert ein nahezu komplettes Framework für die Windows-Programmierung. C++ ist ziemlich kompliziert und ist als Erstsprache nicht so gut geeignet. Andere .NET-Sprachen wie beispielsweise F# oder AXUM sind eher spezielle Sprachen oder Forschungsprojekte. Ich würde als Anfänger den Blick auf eine Standardsprache wenden: Also entweder C# oder Visual Basic. Hier kommt es dann darauf an, welche Sprache besser gefällt.

Und dann kann es auch schon losgehen. Übrigens ein kleiner Tipp: Für die Standard-Programmiersprachen gibt es häufig kostenlose Webcasts im Internet, mit denen man sehr schön in die Welt des Programmierens einsteigen kann. Diese Webcasts helfen auch, wenn man sich noch nicht so im Klaren ist, welche Sprache es denn nun sein soll.

Golo Roden: Welchen Rat würdest Du einem Anfänger abschließend mit auf den Weg geben?

Bernd Marquardt: Wenn es mal nicht so klappt mit dem Programmieren, dann sollte man nicht so schnell aufgeben. Denn dazu ist der Beruf des Softwareentwicklers viel zu interessant und spannend.

Veröffentlicht am 15. Mai 2010