Welche Programmiersprache du für dein Abschlussprojekt verwenden solltest

Bei der Wahl der Programmiersprache für das Abschlussprojekt kommt hin und wieder diese Frage bei Prüflingen auf:

Welche Programmiersprache soll ich für mein Abschlussprojekt wählen? Ist es [gut|schlecht], wenn ich eine [alte|bekannte|coole|hippe|moderne] Sprache benutze?

Die kurze Antwort: Es ist völlig egal, welche Programmiersprache du einsetzt. Es geht darum, einen Mehrwert für das Unternehmen zu schaffen. Und die Sprache ist dabei in den meisten Fällen sogar vorgegeben.

Mehrwert für das Unternehmen

Viele Prüflinge übersehen bei der Wahl ihres Projektthemas, dass es beim Abschlussprojekt nicht um eine Selbstdarstellung des Prüflings geht, sondern ein (wirtschaftlicher) Mehrwert für das Unternehmen geschaffen werden soll. Nicht umsonst steht in der Verordnung über die Berufsausbildung im Bereich der Informations- und Telekommunikationstechnik (§15, Abs. 2):

Durch die Projektarbeit und deren Dokumentation soll der Prüfling belegen, daß er Arbeitsabläufe und Teilaufgaben zielorientiert unter Beachtung wirtschaftlicher, technischer, organisatorischer und zeitlicher Vorgaben selbständig planen und kundengerecht umsetzen sowie Dokumentationen kundengerecht anfertigen, zusammenstellen und modifizieren kann.

Hier steht nicht:

Um den Prüfungsausschuss zu beeindrucken, muss der Prüfling eine möglichst moderne, in der betrieblichen Praxis allerdings kaum bekannte Programmiersprache verwenden. Es reicht aus, wenn der Prüfling einige bei der Programmierung verwendete Konzepte grob verstanden hat.

Und auch nicht:

Der Prüfungsausschuss setzt sich hauptsächlich aus älteren Menschen zusammen, die moderne Programmiersprachen nicht verstehen. Daher ist es sinnvoll, für das Abschlussprojekt eine seit mehreren Jahrzehnten bekannte Programmiersprache zu verwenden.

Weder moderne noch veraltete Programmiersprachen beeinflussen das Prüfungsergebnis. Es geht ausschließlich darum, ein Problem des Unternehmens bzw. des Kunden zu lösen. Und wenn die selbstentwickelte ERP-Software in COBOL läuft, wird COBOL für das Abschlussprojekt verwendet. Für die fancy Website des Berliner Startups ist aber vielleicht Rails oder Phoenix zu empfehlen. Es geht darum, die passende Sprache für das Problem auszuwählen. Das ist eine Fähigkeit, die einen guten Entwickler von einem Anfänger unterscheidet, der einfach nur das macht, was alle machen, oder ständig den neusten Trends hinterherläuft.

Wenn man als Prüfling vor der Wahl steht, erwarte ich in der Projektarbeit eine saubere Begründung, warum die konkrete Programmiersprache ausgewählt wurde. Das kann man z.B. mit einer Nutzwertanalyse auch systematisch und methodisch erarbeiten – gleich ein weiterer Pluspunkt für die Projektarbeit. Es gibt nicht die perfekte Programmiersprache, die alles kann und immer eingesetzt werden muss. Es gibt nur Programmiersprachen, die zu einem bestimmten Problem besser passen als andere. Wenn ich z.B. Excel*-Dateien verarbeiten muss, werde ich nicht zu Ruby greifen, sondern zu C#. Wenn ich eine leichtgewichtige Website erstellen muss, werde ich Ruby wählen oder PHP. Oder aber Java, weil die gesamte Infratruktur des Unternehmens auf Java aufsetzt. Es gilt hier also viele Faktoren zu berücksichtigen.

Veraltete Sprachen

Kommen wir nun einmal zu veralteten Programmiersprachen. Viele Prüflinge scheinen der Meinung zu sein, dass alles was älter ist als 1 Jahr nicht mehr eingesetzt werden darf. Stattdessen muss man doch in der Abschlussprüfung zeigen, dass man mit der Zeit geht und die allerneuste Technologie einsetzt. Das ist – wie bereits oben beschrieben – natürlich Quatsch. Programmiersprachen (und genauso Frameworks, Bibliotheken, Konzepte usw.) brauchen eine gewisse Zeit, um zu reifen. Neue Produkte haben immer Kinderkrankheiten oder es fehlen noch die benötigten Basiskomponenten, um wirklich produktiv zu arbeiten. Anstatt ein Praxisproblem des Kunden zu lösen, wird z.B. viel Zeit in die Entwicklung des eigenen ORMs gesteckt oder es muss zunächst eine Integration in den Webserver geschaffen werden. Das sind für einen Programmierer natürlich total spannende Aufgaben. Nur leider bezahlt der Kunde uns das nicht.

Alte – oder sagen wir besser etablierte – Programmiersprachen haben diese Probleme nicht (mehr). Ich kann als Softwareentwickler also ein Praxisproblem lösen und muss mich nicht mit der Infrastruktur rumplagen. Man könnte diese Arbeit nun auch als langweilig bezeichnen, aber damit verdienen die meisten Unternehmen nunmal ihr Geld. Es ist kaum vorstellbar, wie viele Zeilen COBOL- oder Natural-Code in den Banken und Versicherungen da draußen unseren Alltag bestimmen. Von den zahllosen Mini-ERP-Systemen in Delphi will ich gar nicht erst anfangen. Und natürlich soll auch SAPs ABAP nicht unerwähnt bleiben. Deutsche Universitäten bieten heute schon wieder COBOL-Kurse an, weil es unmöglich ist, die laufenden Systeme zeitnah auf eine hippe neue Plattform zu migrieren. Und es ist vor allem auch überhaupt nicht sinnvoll. Denn mehr Geld wird mit einer ERP-System in Elixir sicherlich nicht verdient. Solange es also diese Altsysteme noch gibt, ist es auch sinnvoll, Projekte mit ihren Programmiersprachen umzusetzen.

Veraltete Konzepte

Gerade in den letzten Jahren erlebt ein total veraltetes Konzept der Programmierung seinen zweiten Frühling: die funktionale Programmierung. Dieses Paradigma der Softwareentwicklung stammt bereits aus den 1950er-Jahren. Es geriet dann im Laufe der Zeit – dank der Objektorientierung – in Vergessenheit und galt als total veraltet. Aufgrund der perfekten Parallelisierbarkeit funktionaler Programme ist es heute aber wieder total hip und trendy und wird sicherlich die Zukunft der Programmierung stark beeinflussen.

Nehmen wir z.B. Prolog. Ok, wir reden dann zwar eher über logische Programmierug und weniger über funktionale, aber ich würde sagen, Prolog könnte man als veraltet bezeichnen (wenn überhaupt ein Prüfling die Sprache kennt). Erlang ist eine Sprache, die auf Prolog basiert, und fast die gesamte IT-Infrastruktur der Welt beherrscht. So ziemlich jeder Switch und jeder Router weltweit wird mit Erlang programmiert. Und Elixir – ein großer Hype aktuell* – basiert wiederum auf Erlang. Es wird hier also nicht aus dem Nichts eine komplett neue Programmiersprache geschaffen, sondern die etablierten und lang erprobten Lösungen werden auf einen neuen Unterbau gestellt. Und gerade die alten Konzepte der funktionalen Programmierung sind aktuell wieder total hip: siehe Clojure (eine Lisp-Variante), Scala oder F#. Wir sehen also: Totgeglaubte leben länger.

Ein kleiner Punkt fällt mir ein, der bei alten Sprachen evtl. nachteilig für Projektdokumentation und -präsentation ist. Die heute üblichen Dokumentations- und Entwurfsmethoden wie UML-Klassendiagramme können nämlich eventuell nicht verwendet werden (da sie nicht zum Konzept der Sprache passen). Aber selbst in diesem Fall kann man auf klassische Darstellungen wie Programmablaufpläne oder Struktogramme ausweichen.

Moderne Konzepte

Es ist also kein Problem, eine alte Programmiersprache für das Abschlussprojekt zu verwenden. Oder um es auf den Punkt zu bringen: Die Programmiersprache interessiert niemanden. Das heißt aber nicht, dass sich ein Prüfling damit rausreden kann, wenn er moderne Konzepte nicht erklären kann. Es interessiert nämlich leider auch niemanden, dass der Prüfling im Job nur mit Turbo Pascal und Basic programmiert, wenn er im Fachgespräch nichts zur Objektorientierung sagen kann. Umgekehrt muss man als objektorientierter Programmierer aber auch etwas zur prozeduralen Programmierung sagen können. Und heutzutage erwarte ich auch von Prüflingen, dass sie funktionale Konzepte erklären können. Lambdas, Closures und Map/Reduce finden wir doch heute fast in jedem Programm. Und den eigenen Code nicht zu verstehen ist ein KO-Kriterium.

Also: Weder der Einsatz einer alten, noch die Verwendung einer modernen Programmiersprache im Unternehmen ist eine Ausrede dafür, nur die jeweiligen Konzepte zu beherrschen. Als Softwareentwickler muss ich alle Bereiche kennen, um entscheiden zu können, welche Lösung die geeignetste ist.

Präferenz der Prüfer

Werfen wir zum Abschluss einen Blick auf die Vorlieben der Prüfer. Es hat doch sicherlich eine Auswirkung auf die Benotung, wenn man eine beliebte Programmiersprache verwendet, oder? Und mit hippen Programmiersprachen kann ich bestimmt den Prüfungsausschuss beeindrucken, nicht wahr?

Kurz gesagt: leider nein. Die Programmiersprache ist Mittel zum Zweck und kein Prüfer wird sich anmaßen, den Betrieben ihre Werkzeuge vorzuschreiben oder einen Prüfling auf- oder abzuwerten, weil er die falsche Programmiersprache verwendet. Wenn es danach ginge, müsste ich alle SAP-Projekte in ABAP oder Webanwendungen mit PHP gleich abwerten. 😉

Im Prüfungsausschuss sitzen erfahrene Entwickler, die in ihrem Berufsleben schon so einiges gesehen haben. Sie lassen sich eher weniger von ultramodernen Programmiersprachen beeindrucken, denn sie wissen um die Probleme, die diese mit sich bringen. Auf der anderen Seite ist es auch nicht angebracht, für die Prüfer bewusst eine alte Programmiersprache zu wählen. Es gibt leider immer noch das Vorurteil, dass alle Prüfer alte Hasen sind, die sich modernen Konzepten gegenüber unaufgeschlossen, ja sogar feindlich, verhalten. Denken wir aber nur kurz einmal daran, dass die Prüfer alle ehrenamtlich arbeiten. Daher kann man wohl ein über das normale Maß hinausgehende Engagement im Beruf voraussetzen. Und das geht meiner Meinung nach auch gerade mit einem starken Interesse an neuer Technologie einher. Ich kenne nicht wenige Prüfer, die den Job gerade deswegen machen, weil sie am Ball bleiben und neue Technologien kennenlernen wollen.

Eine Programmiersprache für das Abschlussprojekt auf Basis eventuell vorhandener Präferenzen der Prüfer auszuwählen, halte ich für völlig falsch. Es geht darum, einen Mehrwert für das Unternehmen zu schaffen. Und die Programmiersprache muss dafür vom Betrieb vorgegeben werden. Potentielle Vorlieben der Prüfer dürfen dabei keine Rolle spielen.

Fazit

Aus eigener Erfahrung werden die meisten Abschlussprojekte heute in modernen objektorientierten Sprachen wie Java, C# oder Ruby umgesetzt. Alle diese Sprachen haben mindestens Teile funktionaler Aspekte implementiert: LINQ in C#, die Stream-API in Java, Blöcke in Ruby. Für einen nicht unerheblichen Teil der Abschlussprojekte werden aber auch prozedurale Sprachen wie ABAP eingesetzt. Wichtig für die Prüfung ist, dass der Prüfling alle selbst verwendeten Konzepte beherrscht und sauber erklären kann. Darüber hinaus sind aber auch Kenntnisse in den anderen Gebieten erforderlich, wenn man eine gute Note bekommen möchte.

Die Wahl der Programmiersprache für das Abschlussprojekt hängt von vielen Faktoren ab. Und das Alter der Plattform kann einer davon sein (Stichworte: Reife, Zukunftsfähigkeit, Wartbarkeit, Kenntnisse der Entwickler, Unternehmensrichtlinien, Entwicklerproduktivität). Die Sprache muss das gestellte Problem bestmöglich lösen. Und diese Entscheidung muss ein ausgebildeter Anwendungsentwickler in seinem Projekt treffen. Dafür muss er jedoch auch die Alternativen kennen und bewerten können.

Literaturempfehlungen

  • Wenn wir schon über die aktuelle Hype-Sprache Elixir reden, dann kann ich zum Einstieg Programming Elixir* von Dave Thomas (ja, der Dave Thomas von den Pragmatic Programmers) empfehlen.
    Dave Thomas - Programming Elixir 1.2: Functional - Concurrent - Pragmatic - Fun (Affiliate)*
  • Eine gute allgemeine Einführung in das Thema Funktionale Programmierung bietet Becoming Functional*.
    Joshua Backfield - Becoming Functional (Affiliate)*
  • Und wer gerne zwei konkrete funktionale Sprachen lernen will, dem empfehle ich Functional Programming Patterns in Scala and Clojure*.
    Michael Bevilacqua-Linn - Functional Programming Patterns in Scala and Clojure: Write Lean Programs for the JVM (Affiliate)*
  • Zu guter Letzt noch ein Klassiker: Land of Lisp*. Lisp ist zwar schon alt, aber das Buch kann ich nur empfehlen. Es ist super interessant geschrieben und die Konzepte sind wie gesagt relevanter denn je.
    Conrad Barski - Land of Lisp: Learn to Program in Lisp, One Game at a Time! (Affiliate)*

Probeabo bei Audible (Affiliate)

Polyglot Clean Code Developer
About the Author
Ausbildungsleiter für Fachinformatiker Anwendungsentwicklung und Systemintegration, IHK-Prüfer und Hochschuldozent für Programmierung und Software-Engineering.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

To create code blocks or other preformatted text, indent by four spaces:

    This will be displayed in a monospaced font. The first four 
    spaces will be stripped off, but all other whitespace
    will be preserved.
    
    Markdown is turned off in code blocks:
     [This is not a link](http://example.com)

To create not a block, but an inline code span, use backticks:

Here is some inline `code`.

For more help see http://daringfireball.net/projects/markdown/syntax