BASTA! Spring 2014 Countdown

Funktional ist oft die elegantere Art zu programmieren
Kommentare

C# ist in den vergangenen Jahren um einige funktionale Aspekte gewachsen, die Rainer Stropek (software architects gmbh) auf der BASTA! Spring 2014 vorstellt. Wir haben ihn bereits im Vorfeld gefragt, was es mit der funktionalen Programmierung auf sich hat und wie diese zu besserem C#-Code führen kann.

Windows Developer: Auf der BASTA! Spring 2014 hältst du eine Session mit dem Titel „Besserer C#-Code durch funktionale Programmierung“. Wodurch zeichnet sich deiner Meinung nach „besserer“ Code aus?

Rainer Stropek: Der erste Gedanke ist bei vielen Entwicklern, dass nur effizienter Code guter Code ist. Effizienz ist wichtig, aber nicht das einzig Wichtige. Es gibt eine ganze Reihe an Kriterien, die zusätzlich erfüllt sein müssen, damit man von gutem Code sprechen kann. Ist er vom Stil her gut zu lesen und dadurch leicht zu warten? Wie sieht es mit Dokumentation aus? Ist er so geschrieben, dass man automatisierte Unit-Tests einsetzen kann? Enthält er ausreichende Fehlerbehandlung und ist robust gegenüber Ausnahmesituationen? Microsoft nennt eine Vielzahl an Best- und Worst-Practices für C#, an denen man sich orientieren kann, um zu gutem Code zu kommen.

Windows Developer: Inwiefern können funktionale Aspekte nun den eigenen Code verbessern?

Rainer Stropek: Hat man als C#-Entwickler die funktionalen Aspekte der Programmiersprache verinnerlicht, findet man in der Regel laufend Anwendungsfälle. Da die funktionale Programmierung ihre Wurzeln in der Mathematik hat, liegt es in der Natur der Sache, dass rechenintensive Algorithmen sich besonders für funktionale Sprachkonstrukte eignen. Aber auch Datenbankentwickler lernen die funktionalen Konzepte von Lambda-Ausdrücken und Linq schnell zu schätzen. In vielen Fällen sind Funktionen die elegantere Art zu programmieren. Man kann seine Idee prägnanter ausdrücken und leichter lesbar machen. Wer jedoch glaubt, dass funktionale Programmierung in C# automatisch zu effizienterem Code führt, der irrt. Die Verantwortung dafür liegt weiterhin bei uns als Entwickler.

Windows Developer: Mit welchen Aspekten der funktionalen Programmierung sollten sich C#-Entwickler besonders vertraut machen?

Rainer Stropek: Lambdafunktionen sind das A und O. Jeder C#-Entwickler sollte heute mit der Lambda-Syntax perfekt vertraut sein. Ist man das nicht, hat man mittlerweile an allen Ecken und Enden Schwierigkeiten mit dem Verständnis moderner SDKs. Task Parallel Library, Linq, Entity Framework, etc. wurden alle von Microsoft so entwickelt, dass sie perfekt mit Lambdafunktionen zusammenspielen. Man könnte meinen, dass Lambdas, die mit C# 3 Einzug gehalten haben, mittlerweile allen Entwicklern vertraut sind. Bei meinen Vorträgen, Coachings und Trainings zum Thema C# sehe ich jedoch oft, dass viele Teams aufgrund organisatorischer oder technischer Restriktionen in alten .NET- und damit auch alten C#-Versionen feststecken. Wenn dann bei neuen Projekten der Schwenk zu den aktuellen Versionen gemacht wird, haben sie nicht die Zeit, sich mit den Sprachneuerungen von C# vertraut zu machen. Genau dieses Problem möchte ich in der BASTA!-Session und im BASTA!-C#-Workshop angehen.

Windows Developer: Welche Schwierigkeiten ergeben sich aus der funktionalen Programmierung für C#-Entwickler? Immerhin liegen die Wurzeln von C# ja in der objektorientierten Programmierung…

Rainer Stropek: Die Syntax ist, wenn man das erste Mal damit arbeitet, gewöhnungsbedürftig. Speziell Lambdas in Verbindung mit Linq können in einer Zeile Code Logik ausdrücken, die bei objektorientierter und imperativer Programmierung über viele Bildschirmseiten verteilt ist. Die erste Reaktion, die ich diesbezüglich oft höre ist: „Das wollen wir nicht, weil dieser Code nicht mehr lesbar ist“. Diese Aussage ist auch richtig – solange man mit Linq und Lambdas noch nicht auf Du und Du ist. Die Verwendung der funktionalen Sprachelemente in C# erfordert ein Umdenken. Nicht nur die Syntax ändert sich ein wenig. Man gestaltet APIs anders, man geht an Algorithmen ganz anders heran. Das erfordert Übung und Erfahrung und dafür muss man sich etwas Zeit nehmen. Mittel- und langfristig macht es einen auf jeden Fall zu einem effizienteren C#-Entwickler.

Windows Developer: Hat die Bedeutung von funktionaler Programmierung in letzter Zeit eher zu- oder abgenommen und worauf ist das zurückzuführen?

Rainer Stropek: Wenn wir über C# sprechen, ganz klar zugenommen. Besonders die erhöhte Wichtigkeit von paralleler und asynchroner Programmierung treibt diese Entwicklung. In Zeiten, in denen ein Mobiltelefon schon vier, in naher Zukunft acht Prozessorkerne hat, ist Parallelisierung kein „Nice to Have“ mehr. Funktionale Programmierung führt tendenziell zu Programmen, die leichter zu parallelisieren sind. Das darf man nicht falsch verstehen. So etwas wie einen „Free Lunch“ gibt es bei Parallelisierung nicht. Für ein Programm, dass eine Vielzahl von Prozessoren effizient nutzt, muss man immer noch eine Menge Denkbarbeit investieren. Trotzdem, die funktionalen Aspekte von C# richtig eingesetzt helfen, Algorithmen leichter parallelisierbar zu machen.

Windows Developer: Vielen Dank für das Gespräch, Rainer. Wir sehen uns auf der BASTA!

© Rainer Stropek

Rainer Stropek ist seit sechzehn Jahren als Unternehmer in der IT-Industrie tätig. Er gründete und führte in dieser Zeit mehrere IT-Dienstleistungsunternehmen und entwickelt im Augenblick in seiner Firma „software architects“ mit seinem Team die preisgekrönte Software „time cockpit“. Rainer hat Abschlüsse an der Höheren Technischen Schule für MIS, Leonding (AT) sowie der University of Derby (UK). Er ist Autor mehrerer Fachbücher und Artikel in Magazinen im Umfeld von Microsoft .NET und C#. Seine technischen Schwerpunkte sind C# und das .NET Framework, XAML/WinRT/WPF/Silverlight, die Windows-Azure-Plattform sowie SQL Server. Seit 2010 ist Rainer MVP für Windows Azure. Rainer tritt regelmäßig als Speaker und Trainer auf namhaften Konferenzen in Deutschland, Österreich und der Schweiz auf (z.B. BASTA!, SAPPHIRE, MS BigDays, MS Architecture Conference, MS TechEd, OOP, ADC, DEVCamp etc.).

Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -