-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy path10jahre Talk: Profpatsch – Haskell in Production.page
134 lines (86 loc) · 4.06 KB
/
10jahre Talk: Profpatsch – Haskell in Production.page
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
# Haskell in Production
Hallo, ich bin Profpatsch.
[https://profpatsch.de/]()
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?
[https://www.haskell.org/]()
* 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](https://github.com/Gabriella439/post-rfc/blob/main/sotu.md)
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` oder `cabal` 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")
```
[http://localhost:1234/]()
* 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/]()
[https://profpatsch.de/]()
Danke!