Less Code and Less Bugs : with Functional Programming languages

With a FP language many problems can
be solved with elegantly less code and
less-code leads to less-bugs.

Functional Programming (FP) insider know that, because they have personally experienced it. This can be tweeted and blogged many times, but how can others believe this? How do you prove it?

That problem inspired me to do some investigation. We need facts. What I’ve found so far are two studies that show this from a data analysis side. There is some evidence that both is true, according to these newer papers from 2014, based on data analysis of source code and its history from Github and from Rosetta Code :

Functional languages have a smaller relationship to defects than other language classes where as procedural languages”
– [1] A Large Scale Study of Programming Languages and Code Quality in Github
Functional and scripting languages provide significantly more concise code than procedural and object-oriented languages.”
– [2] A Comparative Study of Programming Languages in Rosetta Code


In [2] the data analysis covers 8 widely used languages representing the major programming paradigms
- procedural: C and Go;
- object-oriented: C# and Java;
- functionalF#  and  Haskell;  
- scripting:  Python  and  Ruby


I think the “less code” property is underestimated, because the too easy Lines of Code (LOC) counting is ridiculed. Looking beyond the LOC of the code base to the more important depending consequences :

less code  ->  less to read (more often than write!) and understand   -> 
less to review ->  less to communicate ->  less to refactor -> 
less to test  ->  less bugs  -> 
less to maintain  ->  less cost!!!

Btw. less code -> more time to think -> better solution -> more fun!


References

Other related analysis about software quality metrics, especially circular dependencies can be found here:
- “Comparing F# and C# with dependency networks
- “Cycles and modularity in the wild – Comparing some real-world metrics of C# and F# projects”

[1] A Large Scale Study of Programming Languages and Code Quality in Github
Baishakhi Ray, Daryl Posnett, Vladimir Filkov, Premkumar T Devanbu, Department of Computer Science, University of California, Davis, CA, 95616, USA
2014 http://dl.acm.org/citation.cfm?id=2635922

[ Update 4.10.2017 ]

[1] A Large-Scale Study of Programming Languages and Code Quality in GitHub
By Baishakhi Ray, Daryl Posnett, Premkumar Devanbu, and Vladimir Filkov

2017 https://cacm.acm.org/magazines/2017/10/221326-a-large-scale-study-of-programming-languages-and-code-quality-in-github/fulltext


[2] A Comparative Study of Programming Languages in Rosetta Code
Sebastian Nanz, Carlo A. Furia, Department of Computer Science, ETH Zurich, Switzerland
2014 http://arxiv.org/abs/1409.0252

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