10jahre Talk: Profpatsch – Haskell in Production
Haskell in Production
Hallo, ich bin Profpatsch.
Ich arbeite bei einer kleinen Firma in Augsburg und wir haben im letzten Jahr mehrere hundert tausend Euro Umsatz mit einem Produkt gemacht, was in nicht unerheblichen Teilen in Haskell geschrieben ist. Momentan haben wir ca. 25.000 Zeilen Haskell Code.
Ich möchte ein wenig von meinen Erfahrungen berichten.
Erste Anwendung
- $Großindustriemaschinen, zentrale Übersicht über Maschinendaten, Performance und Fehleranzeige
- Der Webserver ist in Haskell, das Frontend in Typescript, verschiedene Datenquellen in Java.
- Das Frontend war ursprünglich in Purescript, wurde dann schnell nach Typescript/Angular umgestellt.
- Die Entscheidung, Haskell zu benutzen, wurde von einem
experimentierfreudigen Entwickler getroffen
- Andere Entwickler haben die Herausforderung angenommen, und damit Code umgesetzt
Einsicht 1
- Es braucht einen Pionier, der den Schritt wagt
- Man muss mehrere Leute für seine Idee gewinnen, sonst bleibt man Einzelkämpfer
Einsicht 2
- Purescript sprengte die Menge an Innovation Tokens
https://boringtechnology.club/
Ist Haskell boring technology?
- It depends
- 1991 gestartet, aber erst ~2005 herum tools wie Paketmanager und effiziente Textlibrary
- Schon immer als Research Language konzipiert
- Sehr fortschrittliche Konzepte
Aber: man kann “Boring Haskell” schreiben!
https://www.snoyman.com/blog/2019/11/boring-haskell-manifesto/
Die Gefahr ist, dass es sehr einfach ist, das nicht zu tun.
Schritt zurück: Wofür ist Haskell geeignet?
Gabriella Gonzalez: State of the Haskell Ecosystem
Schlecht:
- Spezialisierte Tasks (Excel parsing z.B.)
- Low-Level-Programmierung, Systems-programming
- Optimale Algorithmen schreiben (kein manuelles Memory-Management) -> keine Games
- Desktopanwendungen (GUI-Frameworks sind Objektorientiert)
- Systeme mit wenig Speicher
Super:
- Web Server mit Datenbank (Websockets??)
- Parsing (CSV, JSON, etc)
- Datenverarbeitung (Streaming)
- Postgres
- Datenmodelling, Business-Logik
- Refactoring ist ein Traum
- Gute Algorithmen für High-level Tasks
- GHC Runtime ist fantastisch, Green Threads, Async Exceptions, STM
- Der Language Server ist super, die Typinferenz macht Programmierung sehr viel einfacher
Web Framework: https://ihp.digitallyinduced.com/
Wie fängt man an?
- So simpel wie möglich, erstmal keine Abstraktionen bauen
stack
odercabal
benutzen, beides ok (Beides unterstützt auch Windows)- Entwicklungsumgebung einrichten (hoogle demo)
- Das REPL benutzen
webServer = do
Warp.run 1234 $ \_req respond -> do
respond (Wai.responseLBS Http.ok200 [] "hello haskell")
- Deployment: Einfach als Docker-Image deployen
Zweite Anwendung
- Routing von $Transportern
- Relativ konventionelle Single-Page App (Mobil & Browser für Backoffice)
- CSV Import von Daten
- Stammdaten
- Ladeevents & GPS events
Einsicht 3
- Zu spät & wenig mit OpenAPI Routen dokumentiert
- Mongodb verwendet statt postgresql → sprengte wieder die Menge an Innovation tokens
- Wieder nach Postgres migriert -> Du brauchst nichts anderes als Postgres, hör nicht auf Leute, die etwas anderes behaupten
Aussicht
- Wir sind momentan 2 Vollzeit Haskell-Devs, mit sporadischer Unterstützung von Teilzeitkräften
- Die Frage ist, wie man andere einlernt
https://curry-club-augsburg.de/
- Interne Weiterbildungen & Externe einladen, um Kurse zu geben
→ Simple code!
- Nächste Herausforderungen/Projekte:
- Bessere API-Integrationen mit dem Frontend (Code aus Openapi generieren?)
- SSO-Einbindung in Authentifizierungslogik
Zusammenfassung
- Haskell kann in Produktion eingesetzt werden
- “Choose your battles” → Begrenzte Anzahl an Innovation Tokens!
- Simpel anfangen, danach konstant iterieren -> Refactoring! Agile Entwicklung!
- Dank dem Haskell Language Server moderne IDE-Fähigkeiten
Ende
https://www.possehl-analytics.com/
Danke!