Anmeldung Registrierung
Auto Hell Dunkel
Erweiterte Suche
  1. Startseite
  2. Podcasts
  3. IT-Berufe-Podcast Podcast
  4. Gregor Trefs über funktionale Programmierung, Konferenzen und Fachartikel – Anwendungsentwickler-Podcast #106
Gregor Trefs über funktionale Programmierung, Konferenzen und Fachartikel – Anwendungsentwickler-Podcast #106

Gregor Trefs über funktionale Programmierung, Konferenzen und Fachartikel – Anwendungsentwickler-Podcast #106

IT-Berufe-Podcast vor 9 Jahren
Zu Sammlung hinzufügen

Du hast noch keine Sammlungen.

Herunterladen (rechte Maustaste) Teilen Fundstellen Kommentare
0:00
1:41:45
Funktionale Programmierung, Konferenzvorträge und Fachartikel im
Gespräch mit Gregor Trefs sind das Thema der einhundertsechsten
Episode des Anwendungsentwickler-Podcasts. TL;DR Mit Gregor Trefs
bespreche ich, wie du als IT-Azubi funktionale Programmierung
lernen und in Java einsetzen kannst. Reine Funktionen machen das
Verhalten deines Codes nachvollziehbar, während unveränderliche
Werte und kombinierbare Funktionen helfen, Verantwortlichkeiten
aufzuteilen. Am Combinator-Pattern und an FizzBuzz wird deutlich,
wie sich diese Konzepte praktisch ausprobieren lassen. Ein eigenes
Blog und der Austausch in einer User Group helfen dir, dein Wissen
zu vertiefen und erste Fachartikel oder Vorträge vorzubereiten.
Kapitelmarken [00:00:01] Thema und Einführung [00:01:36] Gregor
Trefs und sein Weg zur Softwareentwicklung [00:05:35] Erfahrungen
mit Java, Scala, Kotlin und Haskell [00:10:42] Kotlin, Typsysteme
und IDE-Werkzeuge [00:14:17] Neue Konzepte in vertrauter
Java-Syntax lernen [00:15:40] Einstieg mit Onlinekursen, Büchern
und einer Lerngruppe [00:20:14] Reine Funktionen und das
Substitutionsmodell [00:23:52] Memoization und Effekte getrennt
ausführen [00:26:39] Funktionen höherer Ordnung und Composability
[00:31:08] Unveränderliche Werte und persistente Datenstrukturen
[00:36:03] Funktionale Werkzeuge mit Vavr [00:39:57] Funktionale
Konzepte im Entwicklungsteam [00:43:23] Monaden und Berechnungen in
einem Kontext [00:45:46] Gesetze, Lambda-Kalkül und Ein- und
Ausgabe [00:50:32] Praktisch anfangen und Fachbegriffe verstehen
[00:53:31] Das Combinator-Pattern am Beispiel von Prüfregeln
[00:58:41] JavaLand-Newcomer-Track und den Vortrag vorbereiten
[01:04:00] Java User Group Mannheim und erste eigene Vorträge
[01:08:14] Functional FizzBuzz und die Regeln der Aufgabe
[01:10:09] Funktionaler Kern und Pattern Matching [01:12:56]
FizzBuzz mit Strömen und Funktionen lösen [01:16:52] Wiederkehrende
Muster und FizzBuzz in Interviews [01:20:03] FizzBuzz in der
IT-Ausbildung [01:20:44] Feedback und Umgang mit harter Kritik
[01:24:09] Vom Blog zum Fachartikel und durch Schreiben lernen
[01:28:19] Als Einsteiger:in Wissen veröffentlichen [01:29:59]
Bücher zu funktionaler Programmierung und Softwaredesign [01:36:54]
Kontakt zu Gregor und Konzepte im Team ausprobieren [01:39:30]
Eigene Beiträge veröffentlichen und Feedback geben Inhalt Folgende
Fragen gehen wir im Verlaufe des Interviews durch. Allgemeines zur
Person Wie ist dein Name und wo arbeitest du? Gregor Trefs, 31
Jahre alt Momentan bin ich freiberuflich unterwegs Themen: Java und
Security Wie bist du zur Informatik bzw. Softwareentwicklung
gekommen? Computer fand ich interessant Erster Rechner: 486 Erstes
Programm mit 12 Jahren geschrieben: Text-Adventure in Basic Viel
Macromedia Flash: ActionScript 2 (ECMA Script Derivat) Mit 16 auf
ein technisches Gymnasium gegangen Software und Hardware Design
Hauptsächlich Java Welche Ausbildung bzw. Studium im Bereich der
Informatik hast du absolviert? Studium Wirtschaftsinformatik Viel
Abwechslung Nie das Interesse verloren Tutorentätigkeit in
Softwaretechnik Masterarbeit im Bereich künstliche Intelligenz
Semantic Web Technolgies Hadoop Mit welcher Programmiersprache
arbeitest du im Alltag? Hauptsächlich Java Nebenbei Kotlin und
Scala Lieblingsprogrammiersprache Klar man arbeitet mit manchen
Sprachen lieber als mit anderen. Jedoch ist das nicht einfach Immer
eine Frage wie vertraut man mit der Sprache ist Faszinierend finde
ich Scala Sehr viel dabei Stichwort: Typelevel Programming Jedoch:
Steile Lernkurve und manchmal eine Sytax zum Wegrennen Auch sehr
wissenschaftlich orientiert Forschungssprache etc. Compiler finde
ich toll Tolle Inferenz Hier möchte ich noch mehr lernen
Praktikabel finde ich Kotlin Kompatibel mit Java und der Compiler
hilft mehr Typinferenz val/var etc. Nulltypes ist interessant Kein
Fan der Lamdba-Syntax, da geschweifte Klammer für mich zu überladen
wirkt Geht schnell voran Coroutines sehen toll aus Bessere
Abstraktion für parallele Programmierung im Vergleich mit Java
JavaScript Ich möchte mal wirklich was Nettes mit machen Leider nie
wirklich die Zeit gefunden Ich finde Flow Types toll und auch
normale Linter JSON in Javascript fühlt sich einfach besser an
Haskell Verdreht einem den Kopf ;-) Gut zum Lernen von FP
Verständnis für Equational Reasoning steigt Angst vor Monaden wird
genommen, da Monaden einen klaren Zweck erfüllen Bspw. pure
functional IO -> IO Monade Nie produktiv eingesetzt Java Kenne
ich am besten Entdecke doch immer was Neues (z.B. java.nio)
Lambda-Syntax sehr angenehm Leider etwas komplexes Typsystem
Referenz- vs. primitive Typen Type Erasure Sehr große Community
Funktionale Programmierung Wie würdest du die funktionale
Programmierung (FP) einem Einsteiger erklären? FP ist ein
Programmierparadigma Eine bestimmte Ansicht wie ein
Computerprogramm gestaltet wird Grundlegendes Element: Funktion Es
basiert auf dem Lambda-Kalkül von Alonzo Church Formale Sprache zur
Untersuchung von Funktionen Formal: Grammatik und Alphabet
unwidersprüchlich durch Mathematik ausgedrückt Beschreibt
Umwandlungsregeln wie Funktionen bspw. auf Argumente angewendet
werden Verzicht auf die Änderung eines globalen Zustands
Unterschied zu imperativ: Zustandsänderung durch Imperative
Erleichtert semantische Analyse Bedeutung? Ersetze Funktionen
rekursiv durch ihren Rückgabewert Form der Auswertung:
Subsitutionsmodell Problem: I/O Im Lambda-Calculus geht es um die
Anwendung von Umformungsregeln auf Lambda-Ausdrücken bis keine
Regel mehr anwendbar ist Wenn wir aber nur Umformungsregeln haben,
wie modellieren wir dann Input und Output und bleiben dem
Lambda-Kalkül treu? Anders gefragt, wie bleibt eine funktionale
Sprache mit I/O pur? Verschiedene Lösungen Prozeduren kümmern sich
um Input und Output und "füttern" einen funktionelen Kern
Beschreibung des Effektes mit puren Funktionen welche dann mit
einem Interpreter ausgeführt werden (Stichwort: Monaden)
Seiteneffekte am Rand der Applikation und wohldefiniert Ohne Angst
an die Materie herangehen und Verständnisfehler akzeptieren Welche
wichtigen Konzepte zeichnen die FP aus? Einfaches Nachvollziehen
von Verhalten (Substitutionsmodell) Trennung von Beschreibung und
eigentlicher Ausführung Kein geteilter globaler Zustand Komposition
von Funktionen Funktionen höherer Ordnung Klare Trennung von
Verantwortlichkeiten Implizite Informationen können explizit
modelliert werden FP ist ja eigentlich schon uralt! Warum sollte
man sich heute (wieder) damit beschäftigen? Neues Paradigma: Neue
Lösungen für alte Probleme Mehrkern-Prozessoren: Funktionen auf je
einem Kern ausführen Vgl. John Carmack: "My pragmatic summary: A
large fraction of the flaws in software development are due to
programmers not fully understanding all the possible states their
code may execute in. In a multithreaded environment, the lack of
understanding and the resulting problems are greatly amplified,
almost to the point of panic if you are paying attention.
Programming in a functional style makes the state presented to your
code explicit, which makes it much easier to reason about, and, in
a completely pure system, makes thread race conditions impossible."
Spaß Welche Vorteile hat FP gegenüber der Objektorientierung (OO)?
Meine Meinung Keine Seiteneffekte, dadurch einfacheres
Nachvollziehen Funktionen sind per se kompositionierbar Keine
Seiteneffekte, dadurch bessere Testbarkeit Input -> Output
Funktionen in einem Kontext ausführen Beispiel: Transaktionen
Imperativ: begin -> code -> end Funktional: Transaction(f)
map(g) flatMap(Transaction(h)) run Man arbeitet mit Werten Einmal
erstellt ändern sich diese nicht Gegenargumente Mit OOP lassen sich
Klassen modellieren, die einer Funktion ähneln Specification
Pattern: Create Specification and run against Candidate
Veränderbare Strukturen dominant in Java Immutables keine
Alternative: Speicher Lösung: Purely functional data structures
(siehe vavr) Immutable: Keine Änderung -> neue Instanz, jedoch
Structural Sharing Persistent: Alte Struktur bleibt erhalten Wie
schwer fiel/fällt dir der Wechsel zwischen FP und OOP? Ökonomische
Sicht: Solange FP bis Kosten größer als anderes Paradigma Sprache?
FP Wissen? Am Anfang eine riesen Lernkurve Viele Konzepte, die erst
verstanden werden müssen und eingeordnet Historische Recherche hat
mir auch ein bisschen dabei geholfen Ich kann nicht alles in FP Das
FP gibt es auch nicht Bspw. sind LISP und Clojure untypisiert OCAML
und Haskell stark typisiert Ähnlicher Kampf wie bspw. JavaScript
vs. Java Aber auch Scala vs. Java Ziel: Produktiv arbeiten. Code
der unseren Ansprüchen genügt. Ich benutze FP da, wo es Sinn macht
und soweit mein Verständnis mich trägt Nutzt du im Alltag nur
Konzepte der FP in OO-Sprachen oder rein funktionale Sprachen?
Primäre Sprache: Java Java ist keine funktionale Sprache Die
Bedeutung eines Java-Programs ist definiert durch das Memory Model
Das Memory Model regelt, wie Threads durch Speicher miteinander
kommunizieren D.h. per se gibt es shared mutable state Jedoch
funktionale Konzepte Unveränderliche Werte Funktionen benutzen
Monaden Combinatoren Ich nutze Kotlin und Java Magst du persönlich
lieber FP, OO oder eine Kombination aus beiden und warum? Mir
gefällt die Idee von FP besser OOP hatte ein paar Versprechen die
nicht ganz eingehalten wurden siehe lambdafy Code Reuse: Compose
functions Wie können auch unerfahrene Entwickler mit FP beginnen?
Code-Katas: Probleme mit Funktionen lösen Online Kurse: Coursera,
EDX, etc. Bücher: Learn you a Haskell for a greater good (Miran
Lipovaca) Functional Programming in Scala (Paul Chiusano, Rúnar
Bjarnason) Vorträge auf Konferenzen Worum ging es in deinem Vortrag
auf der JavaLand? Es ging um das Combinator Pattern in Java 8 Wie
kam es zu deinem Vortag auf der Javaland? Ich war letztes Jahr auf
der Javaland und habe Leute auf dem Newcomer-T
Episode melden

„Gregor Trefs über funktionale Programmierung, Konferenzen und Fachartikel – Anwendungsentwickler-Podcast #106“

Worum geht es? Danach fragen wir noch nach dem Grund.

Teilen

Mein Archiv

Deine Privatkopie der Folgen, die du nicht verlieren willst.

Podcast-Folgen verschwinden. Feeds werden auf die letzten Episoden gekürzt, Hoster räumen alte Dateien ab, Formate wechseln den Anbieter und lassen ihr Archiv zurück. Mit „Mein Archiv“ sichert podcast.de die Folgen deiner Podcasts für dich — angefangen bei den ältesten, denn die sind zuerst weg.

  • Deine gesicherten Folgen bleiben hörbar, auch wenn das Original offline geht.
  • Auch Folgen, die im heutigen Feed gar nicht mehr stehen — podcast.de kennt sie noch.
  • Herunterladen bleibt möglich, solange die Folge beim Podcaster liegt. Der zählt seine Abrufe wie bisher.
Startet bald

Sei beim Start von Mein Archiv dabei

Mein Archiv ist fast fertig. Trag dich ein, dann bekommst du eine E-Mail, sobald es losgeht – und bist von Anfang an dabei. Wir schreiben dir nur zum Start, keine Werbung, keine Weitergabe deiner Daten.

Du bekommst zuerst eine Bestätigungsmail. Abmelden geht jederzeit. Datenschutz