F# Videos 2016

This are carefully selected best-of F# videos about the “Real World Usage of FSharp” / “F# in der Praxis

The 3D Geometry of Louvre Abu Dhabi

Speakers: Goswin Rothenthal
Topics: CAD, architecture, construction
https://channel9.msdn.com/Events/FSharp-Events/fsharpConf-2016/The-3D-Geometry-of-Louvre-Abu-Dhabi
The 3D Geometry of Louvre Abu Dhabi _ fsharpConf 2016 _ Channel 9  



Note: for the following you need to register for a free account to view videos from https://skillsmatter.com


Building scientific experiments with F#

Speakers: Anton Tcholakov
Topics: NMR Spectrometer, Confocal Microscope, instrument control software
https://skillsmatter.com/skillscasts/7733-building-scientific-experiments-with-f-sharp
Building scientific experiments with F# SkillsCast 15th April 2016 - Confocal Microscope  Building scientific experiments with F# SkillsCast 15th April 2016 - NMR Spectrometer

In conclusion:
F# is a really really great fit for instrument control software,
thanks to the powerful async and reactive programming features.
The Functional Programming paradigm and the scripting really aids the kind of prototyping work and the Units of Measure they are really welcome on the top of the type system.”
— Anton Tcholakov

Enterprise F#

Speakers: Bull Colin
Topics: compare C# and F# project, contract management system
https://skillsmatter.com/skillscasts/7430-enterprise-f-sharp
Enterprise F# SkillsCast 15th April 2016.mp4 - A case study - contract management system



An F# rewrite of a fully refactored C# Clean Code example

Today I stumbled over a C# clean code refactoring example, where I could not resist to do a full rewrite in F# during my break.

The reason for doing this was mainly to present a comparison how does a piece of deeply refactored C# code can look in F#, to motivate others to learn F#, because it makes things (software: thinking, design, coding, review and tests) much simpler and leads to robust solutions.

And the other reason was to show the nice F# syntax coloring that is possible with the Visual F# Power Tools (VFPT) that is an excellent and must have add-on in VS-2015. This screenshot is taken with my customized coloring scheme.

The F# code
F#-Rewrite-of-refactored-c#

The C# code

“C# BAD PRACTICES: Learn how to make a good code by bad example” http://www.codeproject.com/Articles/1083348/Csharp-BAD-PRACTICES-Learn-how-to-make-a-good-code

If you like to have deep detailed F# training please see our F# 2-day course information (German language).

Ok that’s it, I hope you got some new ideas by comparing the F# and C# code.


Update
??.03.2016 : Some more C# refactoring of this example by Ralf Westphahl here http://ralfw.de/2016/03/dont-let-cleaning-up-go-overboard/

Update 26.01.2017 : More C# refactoring by Pete Smith here https://gist.github.com/beyond-code-github/8711794c4d516cb6941d47274884b248

Update 26.01.2017 : Even more C# refactoring of this example by David Arno with C# 7 and Succinc<T> here http://www.davidarno.org/2017/01/26/using-c-7-and-succinct-to-give-f-a-run-for-its-money/

Update 27.01.2017 : An explanation of the F# code by Richard Dalton  http://www.devjoy.com/2017/01/reading-f/

Update 27.01.2017 : Much more C# refactoring by Kenneth Truyers https://www.kenneth-truyers.net/2017/01/27/refactoring-taken-too-far/

Update 28.01.2017 : An similar F# refactoring , with a merged discout logic (do the domain owner like that?) by Jon Harrop https://gist.github.com/jdh30/b01279a6be91467c5887b72a7c2f303e

Update ??.??.2018 : await C# 8 refactoring // ToDo: check if this F# code was also possible with F# 1.9 (2007)





Yet Another Fizz Buzz (YAFB) in F#

Fizz Buzz kennt sicher jeder der auch Hello World kennt.
Meinst wird Fizz Buzz mit der Modulo Funktion gelöst.

Hier wird eine Lösung in F# gezeigt, die endlose Sequenzen verwendet und das Problem sehr beschreibend (deklarativ) löst, ohne dass man die mathematische Bedeutung der Modulo Funktion kennen muss.

Es werden zwei einfache Hilfsfunktionen verwendet die man eigentlich wiederverwendbar in einer Funktions-Bibliothek hinterlegen kann.
Mit der Funktion cycle werden unendlich lange Sequenzen der übergebenen Muster erzeugt.

   let cycle x = Seq.initInfinite (fun _ -> x) |> Seq.concat

Und zipWith verknüpft die Elemente zweier endlosen Sequenzen mittels der übergebenen Funktion f.

   let zipWith f xs ys = Seq.zip xs ys |> Seq.map (fun (x,y) -> f x y)

Nun zum eigentlichen Fizz Buzz, das sehr beschreibend gelöst ist, wie wenn man das Problem jemandem zum ersten mal erklärt.

Die Nummerierung von 1 bis 100 als String.

   let numbers  = seq [1 .. 100] |> Seq.map string

Zwei-mal nichts (“”) dann “fizz” und wiederholend (cycle).
Vier-mal nichts (“”) dann “buzz “und wiederholend (cycle).

   let fizz = seq [“”;””;”fizz”]       |> cycle
   let buzz = seq [“”;””;””;””;”buzz”] |> cycle

Dann die Logik wie alles zusammen agiert:

   let fizzBuzz = zipWith (+) fizz buzz |> zipWith max numbers

Mit zipWith (+) werden die zwei endlosen Sequenzen fizz und buzz elementweise zusammengefügt.
Aus zwei Leer-Strings ergibt sich so wieder ein Leer-String und “fizzbuzz” kommt so zustande “fizz” + “buzz”.

Etwas trickreich oder ungewohnt ist das zipWith max numbers, die Maximum Funktion max ist generisch und in diesem Anwendungsfall wird das Maximum von strings bestimmt. Man kennt das vom Sortieren von strings, diese werden anhand des ASCII codes sortiert.
So gibt auch max den String aus der weiter hinten im Alphabet respektive der ASCII Tabelle befindet.
Und da der Leer-String “” kleiner ist als “1”, “2” und “1” und “2” kleiner sind als “fizz” und “buzz” werden alle “” mit Inhalt also den numbers bestückt und “fizz” und “buzz” sind den Zahlen überlegen.

Und zu guter Letzt erfolgt die Ausgabe des Ergebnis der ersten 20 Elemente

   fizzBuzz |> Seq.take 20 |> Seq.toList

was folgendes anzeigt:

val it : string list =
  [“1″; “2”; “fizz”; “4”; “buzz”; “fizz”; “7”; “8”; “fizz”; “buzz”; “11”;
   “fizz”; “13”; “14”; “fizzbuzz”; “16”; “17”; “fizz”; “19”; “buzz”]


Und der vollständige F# Code:

 
let cycle x         = Seq.initInfinite (fun _ -> x) |> Seq.concat
let zipWith f xs ys = Seq.zip xs ys |> Seq.map (fun (x,y) -> f x y)
let numbers         = seq [1 .. 100]           |> Seq.map string
let fizz            = seq [“”;””;”fizz”]       |> cycle
let buzz            = seq [“”;””;””;””;”buzz”] |> cycle
let fizzBuzz        = zipWith (+) fizz buzz |> zipWith max numbers

fizzBuzz |> Seq.take 20 |> Seq.toList


Ausführbar auf http://tryfs.net/snippets/snippet-tl
Aufgenommen in http://fssnip.net/tl 

Keywords: FizzBuzz without modulo, FizzBuzz ohne Modulo

Warum Unternehmen noch zögern mit F#

Ich denke die wesentlichen 3 Gründe (“als grob zitierte Aussagen”) warum sich ein Unternehmen noch nicht getraut F# einzusetzen, nebst all den bekannten Vorteilen, sind:
  • 1. “Eine andere Sprache bringt nichts” “Das Problem das wir haben ist nicht das Programmieren, wozu dann eine andere Programmiersprache?” Das “Funktionale” an einer Funktionalen Programmiersprache ist weit mehr als Lambda-Funktionen und LINQ-Expressions. Es ist nicht nur die Sprache die bei F# anders ist, es ist die Funktionale DENKWEISE! Lernen anders zu Denken, um Probleme einfacher zu lösen, hat noch niemandem geschadet, im Gegenteil! Die Funktionale Denkweise birgt jede Menge neuer Konzepte, Techniken und Tricks, die Objekt-Orientierten-Praktikern meist unbekannt sind. Und die Denkweise wirkt sich auf die Software Entwicklung aus und das auch in anderen Programmiersprachen.
“Without exception, everybody I know who learned F# would say that it made them a better C# programmer. That’s the kind of thing that actually will make a difference during the week.” — Eric Sink (@eric_sink)  [1]   “becoming a better programmer” Warum das so ist? Es ist die Denkweise die sich erweitert hat und die Möglichkeiten diese Umzusetzen.
  • 2. “Es gibt zur Zeit zu wenig F# Entwickler” “Diese einfach vom Markt einzukaufen ist ja z.Z. nicht so einfach möglich.” Dann bildet doch einige aus, am besten ein Team! Ihr werdet sicher Freiwillige finden. Es sind diejenigen Entwickler die schon ein Auge auf Funktionale Programmierung (FP) oder F# geworfen haben und sich privat damit auseinandersetzen. Es sind meist die Talentiertesten der Entwickler die das tun und diese sehen sich auch um am Markt. Lasst sie nicht zu einer anderen Firma abwandern, weil man dort FP oder F# einsetzt und bei euch nicht!
“Startups are beginning to realize the potential for leveraging F# as a way to attract talented developers away from their otherwise satisfactory jobs to try something different just so they can finally turn their F# hobby into a full-time job.” [1]   “F# made me a far better C# developer. I’m delighted I can write F# a lot in my day job now, and I left an otherwise great position to do so.” — Ryan Riley (@panesofglass) [1]
  • 3. “Schulungskosten” “C# 6 hat auch ganz viel Neues, da haben wir erst mal zu tun.” Was auch Schulungsaufwand bedeutet! Und diejenigen die Neues Lernen möchten, sollte man im Unternehmen halten. Ja man muss investieren in die eigenen Entwickler! Und in andere Denkansätze zu Investieren, die Probleme einfacher lösen können, ist ein grundsätzlicher Wettbewerbsvorteil. Und weil noch nicht alle dies erkannt haben, packen Sie die Chance vor den anderen!
 

Wir bieten Hilfe für einen fundierten Einstieg in FP mit F#

Unser F# Kurs vermittelt die Denkweise des Funktionalen Programmierens (FP) von Grund auf, ohne zu sehr akademisch oder mathematisch zu werden. Die F# Programmiersprache wird praxisorientiert gelernt, immer aufbauend auf den Funktionalen Prinzipien, Schritt für Schritt. So lernt man von Kleinen der Funktionen bis ins Grosse der Module wie man per Komposition die Software Lösung entwickelt. Ich habe die Erfahrung in meinen F# Kursen gemacht, dass Senior Software Architekten und CTOs, bei einigen FP-Prinzipien die Köpfe geraucht haben (das ist stark positiv, denn das ist die Reaktion des Gehirns auf die neuen Denkweisen!) und dann gestaunt haben wie elegant man komplexe Dinge lösen kann, und nicht mehr warten konnten es gleich auszuprobieren. Zum Kurs Angebot      [1] “Why are C# programmers afraid of F# or functional languages in general?” 150115 https://dotnetkicks.com/stories/105569

Wettbewerbsvorteil F#

Sie wissen dass Funktionale Programmierung ein relevantes Thema in der Software Entwicklung ist, aber Sie haben bisher gewartet es auszuprobieren?

Ja C# bietet Funktionale Ansätze, wird aber niemals das bieten können, was eine vom Kern her echte Funktionale Sprache bietet.

Und genau dies macht den Unterschied, denn Werkzeuge prägen die Denkweise und Herangehensweise beim Lösen von Problemen. Ja genau, es geht um Problemlösungen, die F# Syntax ist nebensächlich und übrigens viel einfacher als C#. Die Denkweise beeinflusst die Architektur, den Design und vieles wird einfacher!

F# ist voll kompatibel mit der .NET Umgebung, sie müssen also nichts über Bord werfen, kein Risiko, ja Sie haben F# bereits seit 2010 auf Ihren Computern installiert im Visual-Studio. F# ist voll von Microsoft unterstützt, ist Open Source und Multiplatform!

Ich kenne F# seit 2009 und wende es seit 2011 fulltime für alles an. Davor C# seit .NET 1.1 und C++, PASCAL, ADA, LISP, C, Assembler. Ich habe Informatik studiert und mir mit 12 Jahren das Programmieren selbst beigebracht. Ich weiss wovon ich rede. Ich biete eine erfahrene sauber aufgebaute Einführung in die praxisnahe Funktionale Programmierung mit F# für .NET an.

Da ich selber von C# auf F# umgestiegen bin, kenne ich die Stolpersteine und räume diese aus dem Weg für einen glatten Einstieg. Ich denke nach meinem Kurs werden Sie nicht mehr zögern F# einzusetzen. Und ich denke, falls bei Ihnen schon jemand F# ausprobiert hat und zur Seite gelegt hat, weil man “das alles in C# auch machen kann“, dann liefere ich genau die nötigen fehlenden Facts. Das Zentrale ist nicht die Sprach Syntax von F# die offensichtlich anders ist, es ist die Denkweise und die Konzepte der Funktionalen Programmierung.

Und nein, es ist kein Hype, keine Bubble die bald platzen könnte, die Grundlagen der Funktionalen Programmierung wurden schon in den 30-er Jahren gelegt und mathematisch bewiesen! Und warum ist es dann heute so neu, dass man das jetzt lernen soll? Die Zeiten sind vorbei, wo ein Computer nur einen Prozessor hatte und Speicher ist heute massig vorhanden. Und um diese neuen Gegebenheiten bestens in Ihren Software Produkten nutzen zu können, ist die Funktionale Programmierung (FP) die ideale Methodik. Und an den Schulen und Universitäten wird es bisher leider nur kurz überflogen. Denn bisher wollte man auf dem Arbeitsmarkt ausschließlich Software Entwickler mit Kenntnissen in Objektorientierter Programmierung (OOP). Und F# kann übrigens auch OOP, wie gesagt voll kompatibel zu .NET. Also wird OOP nicht über Bord geworfen, sondern echtes FP kommt hinzu!

Und wie immer ist man zu beschäftigt, um Neues anzuwenden?

Are you too busy to improve?

Bild Referenz: https://hakanforss.wordpress.com/2014/03/10/are-you-too-busy-to-improve/

Ich sage es Ihnen, das ist es Wert! Wenn Sie Ihrer Firma einen Wettbewerbsvorteil verschaffen wollen und produktiver und effektiver, robuste Software Entwickeln wollen in der .NET Welt, dann ist das der beste Weg.

Und sollte ich Sie noch nicht ganz überzeugt haben, dann lesen Sie bitte was andere Anwender von namhaften Firmen zu F# sagen http://fsharp.org/testimonials/

Mehr zu den Vorzügen von F# können Sie auf meinem Deutschsprachigen Blog lesen http://FunctionalSoftware.NET/warum-fsharp/

Kompakte F# Schulungskurse

Vorsprung durch Wissen!
Es ist nicht genug zu wissen – man muss auch anwenden.
Es ist nicht genug zu wollen – man muss auch tun.
— Johann Wolfgang von Goethe