Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis

Ähnliche Dokumente
Kommerzielle Softwareentwicklung mit Haskell

Programmieren in Haskell Einführung

Funktionale Programmierung (in Clojure)

CGI Programmierung mit Ha. Markus Schwarz

THEMA: "SAS STORED PROCESSES - SCHNELL GEZAUBERT" HELENE SCHMITZ

Freie Software: Was bringt s mir? Peter Bubestinger, David Ayers. 17. Mai 2008

s zu Hause lesen

Informatik Java-Programmierkurs im Rahmen der Berufs- u. Studienorientierung für Schüler. Joliot-Curie-Gymnasium GR 2010 Nico Steinbach

EXASOL Anwendertreffen 2012

Algorithmen mit Python

Albert HAYR Linux, IT and Open Source Expert and Solution Architect. Open Source professionell einsetzen

Die Wirtschaftskrise aus Sicht der Kinder

Haskell im harten Alltag

6. November 2013 Maik Bruns, Bloofusion Germany Schnell nach oben mit SEO Mythos vs. Realität

Vermeiden Sie es sich bei einer deutlich erfahreneren Person "dranzuhängen", Sie sind persönlich verantwortlich für Ihren Lernerfolg.

Technik Was geht in der Zukunft, was sollte besser nicht

Oracle 9i Real Application Clusters

Session Beans & Servlet Integration. Ralf Gitzel ralf_gitzel@hotmail.de

Mobile Payment Einführung Definition Szenarien Technologien Fazit

AppOcalypse now! Die Zukunft des Intranets ist Mobile Jussi Mori

Die freie Programmiersprache Python mit Beispielen für ihren praktischen Einsatz. Python User Group Köln

Klassenentwurf. Wie schreiben wir Klassen, die leicht zu verstehen, wartbar und wiederverwendbar sind? Objektorientierte Programmierung mit Java

Programmiervorkurs. Organisation: Steffen Gebert, Alexander Wolff. Tutoren: Jürgen Zöller, Jonathan Stoll. Wintersemester 2012/2013

Kundengewinnung mit Internet-Videos. Falk Kähny

Beispiel vor dem Beweis:

Zeitstempel für digitale Dokumente. Ein neuer Dienst in der DFN-PKI

Jeunesse Autopiloten

Woche 1: Was ist NLP? Die Geschichte des NLP.

Senioren helfen Junioren

Erklärung zu den Internet-Seiten von

Übungen zur Softwaretechnik

Web-basierte Benutzerschnittstellen für Embedded Systeme: Eine Benutzerschnittstelle drei Sichtweisen

TYPO3 Tipps und Tricks

Der schnelle Weg zu Ihrer eigenen App

Die Vielfalt der Apps. Wohin geht die Reise?

Travel is the only thing you buy, that makes you richer. Bereise die Welt - Mediakit

Die Zukunft ist digital. Chancen für Fachbuchhandlungen im Social Web. Jan Manz wbpr Public Relations

Einrichten einer mehrsprachigen Webseite mit Joomla (3.3.6)

Seminar Programmierung und Reaktive Systeme

Adressen. Praktikum Funktionale Programmierung Organisation und Überblick. Termine. Studienleistung

Leitfaden für den Zugriff auf die SEB-Webseite. Anmelden, Kennwort ändern, mit- arbeiten und gestalten ;-)

Pragmatik von Programmiersprachen

Kontrollstrukturen - Universität Köln

Installation und Inbetriebnahme von Microsoft Visual C Express

QS solutions GmbH. präsentiert das Zusammenspiel von. Ihr Partner im Relationship Management

Grundlagen von Python

#twittwoch #leipzig #220910

1 Was ist das Mediencenter?

Onlinebanking mit PHP

Business Intelligence Data Warehouse. Jan Weinschenker

Kommunikation als kreativer Prozess: Im Dialog mit dem Kunden

s zu Hause lesen

Das Leitbild vom Verein WIR

Seminar für Führungskräfte

Das Typsystem von Scala. L. Piepmeyer: Funktionale Programmierung - Das Typsystem von Scala

Entwicklung des Dentalmarktes in 2010 und Papier versus Plastik.

Reporting Services und SharePoint 2010 Teil 1

Flucht der Bank-Azubis? Zusammenfassung Schulabgänger Feb 2015

ÖFFENTLICHKEITSARBEIT IM EHRENAMT. Frankfurt am Main 20. September 2014

Anleitung Microsoft Select-Plus Registrierung

Effektiver Einsatz von Code-Reviews

Programmierung in C. Grundlagen. Stefan Kallerhoff

Social Media und Public Relations Befragung von österreichischen PR-Entscheidern

Social Media bei der Kreissparkasse Ludwigsburg

Glaube an die Existenz von Regeln für Vergleiche und Kenntnis der Regeln

Vorarlberger Standardschulinstallation Anbindung von Android Mobile Devices

Access und die andern (Office) Programme. Armin Hess

Programmierkurs: Delphi: Einstieg

SEMINAR Modifikation für die Nutzung des Community Builders

Informationswirtschaft II Rational Unified Process (RUP)

Machen Sie Ihre Kunden zu Botschaftern Ihrer Marke! Real Bau

Informationswirtschaft II

Toolbeschreibung: EVERNOTE

FDAX mit Zertifikaten gehandelt

ALP I. Funktionale Programmierung

DAVID: und David vom Deutschlandlabor. Wir beantworten Fragen zu Deutschland und den Deutschen.

Aktualisierung des Internet-Browsers

Auswertung JAM! Fragebogen: Deine Meinung ist uns wichtig!

Checkliste zur Planung einer Webseite

Zend Server Cluster Manager

Ein Blick voraus. des Autors von C++: Bjarne Stroustrup Conrad Kobsch

SMART Newsletter Education Solutions April 2015

Google Analytics einrichten

bestens ENDLICH: DIE PRAXISSOFTWARE, DIE BESTENS FUNKTIONIERT klar aktuell mobil einfach alles alles WIE SIE ES SICH WÜNSCHEN!

RESTful Web. Representational State Transfer

Theoretische Grundlagen des Software Engineering

! " # $ " % & Nicki Wruck worldwidewruck

Was man mit dem Computer alles machen kann

amball ECM business day

Web Analytics Kontrolle von Online Aktivitäten

Dow Jones am im 1-min Chat

Werbebriefe erfolgreicher machen

CONTINUOUS LEARNING. Agile Anforderungsanalyse mit Impact Mapping

Eingabe einer E-Learning Fortbildung im DFP-Kalender

SJ OFFICE - Update 3.0

Social Media für Gründer. BPW Business Juni 2012

Was ich als Bürgermeister für Lübbecke tun möchte

ebay Mode Fokus ebay Partner Network

E-Services mit der Web-Service-Architektur

Alle gehören dazu. Vorwort

Transkript:

Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis Stefan Wehr (wehr@factisresearch.com) factis research GmbH, Freiburg im Breisgau 17. Juli 2013 Developer MeetUp Freiburg Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 1 / 20

Wer bin ich? Was machen wir? factis research GmbH, Freiburg im Breisgau Vier feste, etwas sechs freie Mitarbeiter Softwareprodukte für den Medizin- und Pflegebereich Komplexe mobile Anwendungen Serverseitige Software fast ausschließlich in funktionalen Sprachen geschrieben Projekte und Schulungen im Bereich funktionale Programmierung und mobile Anwendungen Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 2 / 20

Checkpad MED Elektronische Patientenakte auf dem ipad Bringt alle Patientendaten zusammen Unterstützt Krankenhausärzte bei Arbeitsabläufen Unabhängig vom KIS (Krankenhausinformationssystem) Demo Lines of Code: 100.000 Zeilen Haskell 35.000 Zeilen Scala 56.000 Zeilen Objective-C Entwicklung seit 2010 Heute: erster zahlender Kunde, Pilotbetrieb in mehreren Krankenhäusern Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 3 / 20

Architektur von Checkpad Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 4 / 20

Was ist funktionale Programmierung? Der nächste Hype? Akademischer Blödsinn? Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 5 / 20

Was ist funktionale Programmierung? Der nächste Hype? Akademischer Blödsinn? Die Wahrheit liegt irgendwo in der Mitte! Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 5 / 20

Was also ist funktionale Programmierung? Kontrolle über Seiteneffekte Unveränderliche Datenstrukturen APIs sind oft zustandslos Seiteneffekte durch Typen kontrolliert Einfaches Abstrahieren Funktionen als Werte Eigene Kontrollstrukturen Einfache Datenmodellierung Records Fallunterscheidung Oftmals: Typprüfung beim Kompilieren Vermeidet Fehler ohne das Programm auszuführen Typen werden oft automatisch inferiert Viele Invarianten als Typen kodierbar Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 6 / 20

Warum funktionale Programmierung? Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 7 / 20

Kann ich mal ein paar Beispiele sehen? Kontrolle über Seiteneffekte insert :: Ord k => k -> a -> Map k a -> Map k a Abstraktionsmöglichkeiten -- Eine *Bibliotheks*funktion withfile :: FilePath -> IOMode -> (Handle -> IO a) -> IO a -- Verwendung withfile "foo.txt" WriteMode $ \handle -> hputstrln handle "Hello World!" Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 8 / 20

Mehr Beispiele Einfache Datenmodellierung data Person = Person { name :: String, contactinfo :: Maybe ContactInfo } deriving (Show, Eq) data ContactInfo = PhoneNumber String EmailAddress String deriving (Show, Eq) Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 9 / 20

Und noch mehr Beispiele Typen displayperson :: Person -> String displayperson person = name person ++ (case contactinfo person of Just (PhoneNumber phone) -> ", phone: " ++ phone Just (EmailAddress adrr) -> ", email: " ++ addr Nothing -> "no contact info") Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 10 / 20

Was machen wir mit funktionaler Programmierung? XML-Verarbeitung Datenbankzugriffe Webprogrammierung Serialisierung (binär, JSON, Google Protocol Buffers) Buildsystem Netzwerkserver... Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 11 / 20

Beispiel: Webprogrammierung mit Haskell Mapping zwischen Datentyp und Datenbanktabelle $(share [mkpersist sqlsettings, mkmigrate "migrateall"] [persistuppercase NewsItem title T.Text content T.Text tags [T.Text] author T.Text deriving Show Eq ] ) Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 12 / 20

Beispiel: Webprogrammierung mit Haskell JSON Serialisierung/Deserialisierung instance ToJSON (Entity NewsItem) where tojson (Entity nid (NewsItem title content tags author)) object ["id".= nid, "title".= title,"content".= content, "tags".= tags,"author".= author] instance FromJSON NewsItem where parsejson (Object v) = do title <- v.: "title" content <- v.: "content" tags <- v.: "tags" author <- v.: "author" return $ NewsItem title content tags author parsejson _ = mzero Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 13 / 20

Beispiel: Webprogrammierung mit Haskell JSON vs. Haskell-Datentype { } "title": "Hallo Blog", "content": "Das hier ist mein erster Beitrag", "author": "Stefan Wehr", "tags": ["blog", "haskell", "toll"] NewsItem { title = "Hallo Blog", content = "Das hier ist mein erster Beitrag", author = "Stefan Wehr" tags = ["blog", "haskell", "toll"] } Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 14 / 20

Beispiel: Webprogrammierung mit Haskell scotty port $ do definestatic "/" "static/index.html" CtHtml definestatic "/jquery.min.js" "static/jquery.min.js" CtJavaScript get "/news" $ do response <- rundb query json response where query = SQL.selectList [] [SQL.Desc NewsItemId] Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 15 / 20

Wer arbeitet mit funktionalen Programmiersprachen? Twitter: Large-scale Internet Services in Scala Microsoft: F# Banken wie Standard Chartered, Credit Suisse, Deutsche Bank Ericsson: Erlang Intel Facebook Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 16 / 20

Beispiele für funktionale Sprachen Haskell Scala Clojure Erlang Mächtiges Typsystem JVM-basiert statisch getypt JVM-basiert dynamisch getypt für hochverfügbare Telekommunikationssysteme Scheme, Lisp OCaml F#.NET Sprache Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 17 / 20

Funktionale Programmierung in nicht-funktionalen Sprachen Unveränderliche Datentypen Bewusster Umgang mit Seiteneffekten Funktionen als Werte, anonyme Funktionen Java 8 C# Objective-C C++ Python Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 18 / 20

Resourcen School of Haskell: https://www.fpcomplete.com/ Learn You a Haskell for Great Good, Miran Lipovača, No Starch Press, 2011 http://learnyouahaskell.com/ Real World Haskell, Bryan O Sullivan, Don Stewart und John Goerzen, O Reilly 2008 http://book.realworldhaskell.org/ Functional Programming Principles in Scala, Martin Odersky: https://www.coursera.org/course/progfun Vortrag von Tim Sweeney, Epic Games: In a concurrent world, imperative is the wrong default! http://www.st.cs.uni-saarland.de/edu/seminare/ 2005/advanced-fp/docs/sweeny.pdf Blog über Funktionale Programmierung: http://funktionale-programmierung.de/ Folien zum Vortrag: http://factisresearch.com/ resources/wehr_fr-2013-07.pdf Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 19 / 20

Fazit & Zusammenfassung Mit funktionaler Programmierung wird kommerzielle Software entwickelt! Funktionale Programmierung punktet auch in der Industrie: Hohe Produktivität Korrektheit Sicherheit Hohe Wiederverwendbarkeit Wichtigste Erkenntnis beim Arbeiten mit funktionalen Sprachen: Seiteneffekte nur kontrolliert einsetzen Funktionale Programmierung bringt s! Ein Ausflug mit Haskell in die Praxis 20 / 20