Interview
16.08.2017, 15:51 Uhr
"Es ist viel einfacher, in C# hässlichen Code zu schreiben als in F#."
Nach 60 Minuten haben Sie die Grundbegriffe von F# verstanden. Das behauptet Manuel Meyer und tritt in der .NET Developer Conference 2017 den Beweis an. Ein Stunde dauert seine Session "Von C# nach F# in 60 Minuten". dotnetpro sprach mit ihm über diese Herausforderung.
Manuel Meyer arbeitet als Senior Consultant und Trainer für .NET bei der Trivadis AG in Zürich. Er befasst sich gerne mit dem Microsoft .NET-Stack, vom Client über den Server bis hinauf in die Cloud und mit interdisziplinären Themen wie Troubleshooting oder Performance-Management.
dotnetpro: Gehässig könnte man sagen, dass du mit einer Stunde ganz schön lange brauchst, um von C# nach F# zu kommen. Schließlich ist das F doch nur drei Buchstaben weiter im Alphabet. Aber im Ernst: Warum glaubst du, dass das realistisch ist, in einer Stunde die Grundlagen von F# verstanden zu haben?
Manuel Meyer: Klar, 60 Minuten ist nicht viel Zeit um die Grundlagen einer gänzlich unbekannten Programmiersprache zu erlernen. Trotzdem bin ich sicher, dass wir in der Session einiges reinkriegen. Es geht mir aber viel mehr darum, zu zeigen, warum wir C#-Entwickler uns überhaupt mit dem Thema F# befassen sollen und wie der Einstieg gelingen kann.
dotnetpro: Was ist so anders an F#?
Meyer: Wie das Adjektiv funktional bereits andeutet, basiert die Sprache F# auf Funktionen. Das heisst, anstatt Objekten, welche wir hin- und herschieben und in Methoden verändern, arbeiten wir in F# primär mit Funktionen. Alleine dieser Unterschied bewirkt, dass gewisse Paradigmen guter Programmierung wie zum Beispiel „Separation of Concern“ oder „Single Responsibility“ implizit gegeben sind.
Ein typisches Problem von C#-Code ist, dass der Zustand eines Objekts über verschiedene Scopes (Code-Block, Methode, Klasse) verteilt ist. Eine Änderung an der Stelle A kann zu einem Fehler an der Stelle Z führen.
Durch die starke Kapselung von F#-Code sind auch Bugs und Probleme sehr stark lokalisiert und damit wird die Wartung erheblich erleichtert. Durch die Strukturierung von F#-Code muss ich als Entwickler zudem das Problem, welches ich lösen will, zuerst logisch zerlegen. Dies führt zu viel eleganterem Code. Oder anders gesagt: Es ist viel einfacher, in C# hässlichen Code zu schreiben als in F#. Zusätzlich zur starken Kapselung kommt noch die Tatsache, dass Objekte in F# standardmässig immutable, also nicht veränderbar, sind. So vermeiden wir die in C# typische Verkettung von Referenzen, was erhebliche Vorteile hat, wenn wir multi-threaded Code schreiben müssen. Die Liste an Themen ist noch viel, viel länger. Mehr dazu in der Session an der DDC.
dotnetpro: Warum sollte ich F# überhaupt lernen? Mit C# als General Purpose Language bin ich doch gut beraten, oder?
Meyer: Sicher ist man mit C# gut beraten. Trotzdem bietet die funktionale Programmierung Konzepte und Paradigmen, mit denen Problemstellung direkter gelöst werden können. Der Code wird dadurch sauberer und die Wartbarkeit deutlich erhöht. Der Grundgedanke hinter dem .NET Framework, welcher vielen Entwicklern gar nicht bekannt ist, ist die Idee, dass verschiedene Programmiersprachen auf der gleichen Spezifikation und Laufzeitumgebung aufbauen. Darum heisst die CLR ja auch common language runtime. Somit bietet uns das .NET-Framework die ideale Basis um mit den Konzepten von F# zu spielen. Alles was neben der Sprache sonst noch zur Softwareentwicklung gehört wie Tooling, Deployment und so weiter, kennen wir bereits. Wenn wir wissen, was die Stärken von F# sind, dann öffnet sich für uns die Tür zur funktionalen Welt, ohne dass wir komplett umsteigen müssen. Wir können von beiden Welten profitieren.
dotnetpro: Du bist doch selbst C#-Entwickler. Was hat dich denn dazu gebracht, F# zu lernern?
Meyer: Ich habe die Entwicklung von F# mit Interesse verfolgt und festgestellt, dass es eine nahezu fanatische Community gibt, die F# so weit in den Himmel lobt, dass es zu Aussagen kommt wie „Wenn Du mal F# gemacht hast, dann willst du nie mehr C# schreiben“. Das hat mich fasziniert. Außerdem befinden wir uns in der Ära des polyglotten Programmierers, in welcher ein Entwickler aus einem Arsenal von Sprachen diejenige wählt, mit welcher das Problem am effizientesten gelöst werden kann. Zu guter Letzt schreibt ein Entwickler, der F# und die funktionalen Konzepte versteht, auch bessern C#-Code! Viele Konzepte, die wir in C# täglich nutzen haben ihren Ursprung in der funktionalen Welt. Beispiele dafür sind Typinferenz, anonyme Methoden, Delegates, Lambda-Expressions, Extension Methoden und LINQ.
Die .NET Developer Conference findet vom 28. bis 30. November 2017 in Köln statt. Hier erfahren .NET-Entwickler alles zu Praxis und Anwendung von .NET, C# und Visual Basic sowie zu künftigen Entwicklungen.