Einführung in die Funktionale Programmierung (einfach und praxisnah!)

Поділитися
Вставка
  • Опубліковано 3 гру 2024

КОМЕНТАРІ • 176

  • @NiklasSteenfatt
    @NiklasSteenfatt  Рік тому +10

    Wer guckt das Video noch in 2023? Ich habe inzwischen übrigens mein komplettes Produktivitätssystem veröffentlicht: fokus.so

    • @jurgenrothenberg8428
      @jurgenrothenberg8428 11 місяців тому

      Ich, bin gerade dabei Dich kennen zu lernen. Einfach Supi wie Du den Kontent rüber zu bringen 🎆🎆🎆

    • @abdullahsarwar2549
      @abdullahsarwar2549 10 місяців тому +3

      2024 hier

  • @alinivan151
    @alinivan151 4 роки тому +45

    Sehr guter, qualitativ Hochwertiger Content. Vielen Dank!

  • @tracetv8115
    @tracetv8115 4 роки тому +19

    Endlich mal ein Channel der vernünftige Programmierung zeigt, anstatt das 500ste Pr9grammier Tutorial, das dort aufhört, wo die eig. Programmierung anfängt.
    Bitte bring weiter so coole Paradigmen und spannende Themen!

  • @fentonmsu
    @fentonmsu 4 роки тому +71

    Endlich jemand, der richtiges Deutsch spricht.

  • @NiklasSteenfatt
    @NiklasSteenfatt  4 роки тому +32

    Ich musste das Video heute zweimal hochladen, weil beim ersten mal ein Fehler passiert war und man an einer Stelle gar nicht den richtigen Teil des Bildschirms sehen konnte. Das ist glücklicherweise sofort jemandem aufgefallen. Sorry, falls das jemanden verwirrt hat!

  • @lukasschmahl147
    @lukasschmahl147 2 роки тому +1

    Ich bereue mein Abo keineswegs. Content vom aller feinsten. Jeder der das Glück haben darf von dir Unterrichtet zu werden kann sich glücklich schätzen!

  • @memorial2k8
    @memorial2k8 4 роки тому +3

    dein kanal ist großartig! ich bin eigentlich musiker aber habe schon mein leben lang ein großes interesse für informatik und dein kanal macht sehr viel freude zu verfolgen! großartiger content, da bekommt man lust auch irgendwann einmal informatik zu studieren :D

  • @heinrichschiller4673
    @heinrichschiller4673 4 роки тому +9

    Ich, als Python nicht Programmierer, habe dein Video tatsächlich verstanden. Also sehr gut erklärt!

  • @bendikarbogast1229
    @bendikarbogast1229 4 роки тому +3

    Finde das Video echt super und verstehe jetzt endlich, wie man funktional programmiert. Direkt an 2 Freunde weiterempfohlen und die Hausaufgaben hab ich natürlich auch gemacht:
    SPOILER!
    def anzahl_gerade_reduce(xs: list) -> int:
    return reduce(lambda y, x: y+1 if x % 2 == 0 else y, xs, 0)
    def anzahl_gerade_filter(xs: list) -> int:
    return len([x for x in xs if x % 2 == 0])
    def curry(foo, x) -> Callable[[list], int]:
    return lambda y, z: foo(x, y, z)
    def mein_filter(foo, my_list: list) -> list:
    return reduce(lambda new_list, l: new_list+[int(l)] if foo(l) else new_list, my_list, [])

  • @greenstargaming4745
    @greenstargaming4745 3 роки тому +1

    Könnte stundelang einfach nur zuhören, toll erklärt :)

  • @entropy1088
    @entropy1088 2 роки тому +1

    Echt gutes Video! Deine Stimmlage und Sprachweise --> super

  • @KarlMarx.et.FriedrichEngels
    @KarlMarx.et.FriedrichEngels 4 роки тому +3

    Ich finde das Anki- und Cambridgevideo am besten. Weiter so💪👍

  • @chikken007
    @chikken007 4 роки тому +5

    Sehr gutes Video. Klar strukturiert und formuliert. Gute Einführung in die Grundkonzepte. Danke ;)

  • @vizenzovin
    @vizenzovin 7 місяців тому

    beste Video über funktionale Programmierung

  • @businessparis9364
    @businessparis9364 4 роки тому +13

    Wow extrem qualitativ hochwertiger Content, weiter so! Ich bin Java Programmierer und im Prinzip gibt es dort genau die gleichen funktionalen Elemente, die du hier in Python demonstriert hast. (bis auf list comprehesions)

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 роки тому +7

      Freut mich! Ja, hab ja sogar ein paar Beispiele in Java kurz im Video gezeigt. Zu Java wollte ich übrigens irgendwann in den nächsten Wochen nochmal ein Video machen. :)

  • @ivanbal
    @ivanbal Рік тому

    Eines Deiner besten Videos Niklas!

  • @rp8133
    @rp8133 4 роки тому +5

    Tolles Video. Schön zu sehen, dass mit Python eine Sprache existiert, die komplizierte Aufgaben sehr elegant und einfach-zu-lesen lösen kann. Übrigens kann man statt Java auch C# als Parallelsprache hernehmen, denn C# bietet (in den letzten Jahren als Zuwachs gewonnen) manche Konzepte, die Python für C#-Umsteiger einfacher verständlich machen. Auch arbeitet sich C++ in die Welt von Closures (Lambdas), Coroutinen etc. pp. vor.
    Ein Trend in der Softwareentwicklung, den ich nach ca. 30 Jahren ausmachen kann: man versucht (in der Praxis) immer mehr, die objektorientierte und die funktionale Programmierung zu vereinen. Was durchauss Sinn macht. Objekte (Klassen) fassen die Daten und bestenfalls noch LowLevel-Methoden zusammen, Funktionen verarbeiten die Objekte in stringenter Art und Weise, ohne irgendwelche Nebenwirkungen. Das macht die ganze Geschichte natürlich auch sehr interessant für die (einfachere) Multithreading-Programmierung. Übrigens wird es nie wirklich eine 100%ige StateLess-Programmierung geben. Denn Software bildet die reale Welt ab, und diese ist nunmal statusbehaftet. Aber man kann das soweit wie möglich minimieren.

  • @maestro4704
    @maestro4704 3 роки тому

    Das Video ist echt klasse! Danke für das teilen deines Wissens.

  • @stefan_blohm
    @stefan_blohm 3 роки тому

    Ich habe mit Programmieren aufgehört, als Objektorientierung anfing, also etwa 1989 😅. Damals war es Cobol, PL/I, Pascal und Z80-Assembler. Danke, für die sehr verständliche Erklärung!

  • @pawel_guzewicz
    @pawel_guzewicz 4 роки тому +10

    Really cool stuff! I learnt function currying with Haskell. We used to call functions with missing parameters "unfed" functions.

  • @Himmelskastelan
    @Himmelskastelan 4 роки тому +1

    Ja so ein Video über Rekursionen wäre schon echt nett.
    Das bereitet mir so einiges Kopfzerbrechen.

  • @flo_xd8702
    @flo_xd8702 4 роки тому +1

    Respekt ! das hat mir sehr geholfen ich danke dir für das mega Video ich hoffe du machst weiter so 👍

  • @louispetrik7431
    @louispetrik7431 4 роки тому +5

    Großartig, weiter so!

  • @zoepietrzak6108
    @zoepietrzak6108 9 місяців тому

    Haha mein Kopf raucht von den ganzen neuen Begriffen aber du hast das gut erklärt! Hab die Prinzipien zumindest weitgehend verstanden als komplette Anfängerin 😊

  • @ayoko5161
    @ayoko5161 2 місяці тому

    Danke für das Video. Anbei ein Beispiel in der Programmiersprache C#:
    SPOILER
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    .
    public static class FunctionalProgrammingTasks
    {
    // Curry-Beispiel
    public static Func TimesX(int x) => y => x * y;
    // Aufgaben
    public static int CountEven(IEnumerable numbers) => numbers.Where(num => num % 2 == 0).Aggregate(0, (count, num) => count + 1);
    public static Func Curry(Func function, int x) => (y, z) => function(x, y, z);
    public static IEnumerable MyFilter(Func predicate, IEnumerable list) => list.Aggregate([], (a, b) => predicate(b) ? a.Concat([b]) : a).ToArray();
    // Testfunktion für die Curry-Funktion
    public static int Foo(int x, int y, int z) => x + y + z;
    public static void Test()
    {
    // Curry-Beispiel
    var TimesTwo = TimesX(2);
    var TimesThree = TimesX(3);
    Console.WriteLine(TimesTwo(10));
    Console.WriteLine(TimesThree(20));
    // Aufgaben
    Console.WriteLine(CountEven([4, 3, 6, 32, 2, 1, 23, 4]));
    var bar = Curry(Foo, 5);
    Console.WriteLine(bar(3, 20));
    Console.WriteLine("[" + string.Join(", ", MyFilter(x => x > 3, [1, 3, 2, 4, 5])) + "]");
    }
    }

  • @easypy
    @easypy 2 роки тому

    Wünsche mir gerne mehr von dir zum Thema Python :)

    • @tomdriver6733
      @tomdriver6733 Рік тому

      Python ist leider eine sehr lahme Programmiersprache.

  • @luccasangpur6527
    @luccasangpur6527 4 роки тому

    Cooles Video! Zum ersten mal verstehe ich was Map und Reduce so machen.
    Mir haben deine Aufgaben sehr gefallen. Die meisten Schwierigkeiten hatte ich aber mit der gewöhnungsbedürftigen Syntax von Python.
    In Typscript ist es auch so dass man nicht gezwungen wird die Typen seiner Parameter und Return-Werte zu definieren, es aber der Lesbarkeit wahnsinnig hilft.
    Mich würde interessieren ob ich dabei alles richtig gemacht habe.
    Viel Erfolg auf UA-cam.
    **Spoiler**
    def anzahl_gerade( xs : list ) -> int :
    return reduce(lambda a, b: a+1, [ x for x in xs if x % 2 == 0 ], 0)
    def curry( func : Callable , x ) -> Callable :
    return lambda *args : func( x , *args )
    def mein_filter( func : Callable[ [ int , int ] , bool ] , xs : list ) -> list :
    return reduce( lambda a , b : a + [ b ] if func( b ) else a , xs , [ ] )

  • @L4rsTrysToMakeTut
    @L4rsTrysToMakeTut 4 роки тому +1

    julia> anzahl_gerade(xs) = iseven.(xs) |> count
    anzahl_gerade (generic function with 1 method)
    julia> anzahl_gerade(i for i in 1:10)
    5
    julia> curry(f, x) = (xs...) -> f(x, xs...)
    curry (generic function with 1 method)
    julia> curry(*, 5)(10)
    50
    julia> filter(>(3), [1,2,3,4])
    1-element Array{Int64,1}:
    4
    julia> filter(==(3), [1,2,3,4])
    1-element Array{Int64,1}:
    3
    julia> filter(iseven, [1,2,3,4])
    2-element Array{Int64,1}:
    2
    4

  • @timefc
    @timefc 4 роки тому +15

    Sehr interessant, finde du machst die Videos echt gut, vor allem weil du gerade erst angefangen hast! Hattest du Vorerfahrung?

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 роки тому +5

      Na, das freut mich doch! Ich hatte keine Vorerfahrung, bevor ich den Kanal gestartet hab. Musste erst mal lernen, Videos zu schneiden und gut in die Kamera zu sprechen. :)

    • @timefc
      @timefc 4 роки тому +4

      @@NiklasSteenfatt dafür sieht das schon ganz schön professionell aus... Könntest auch schon 5kanäle davor gehabt haben hahaba

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 роки тому +4

      @@timefc Haha, das ist ja schön! Wie die Videos dann wohl 5 Kanäle später aussehen ...

  • @lukasschmitt3075
    @lukasschmitt3075 4 роки тому +1

    Sehr schönes Video. Schreibe zur Zeit meine Seminararbeit über F# und Multiparadigmensprachen und auch wenn ich die hier angesprochenen Themen bereits kannte war es doch schön sie nochmal zu hören.
    Hier meine Lösung in F#, wobei das mit der curry funktion irgendwie komisch aussieht - hab ich da was verpasst oder liegt das einfach daran das F# ja bereits eine functional-first programming language ist?
    let anzahlgerade li =
    li |> List.filter (fun x -> x%2 = 0) |> List.fold (fun s x -> s + 1) 0
    let meinFilter predicate list =
    list |> List.fold (fun s x -> if predicate x then s @ [x] else s ) []
    let curry func para =
    func para

  • @baris1513
    @baris1513 3 роки тому

    sehr interessant, ich bin nur leider noch nicht so weit in python. Aber hopefully bald dann komm ich hier nochmal her :)

  • @reaper6558
    @reaper6558 3 роки тому

    Danke für das Video, so konnte ich gut lernen, wie das ganze in Python funktioniert. Hab das ganze mal auch in Python programmiert inklusive reduce bei der letzten Funktion:
    import functools
    def my_equal(xs: list) -> int:
    return functools.reduce(lambda x1, x2: x1 + 1 , filter( lambda x: x % 2 == 0, xs), 0)
    def list_equal(xs: list) -> list:
    return len([x for x in xs if x % 2 == 0])
    def test(x: int, y: int, z: int) -> int:
    return x + y + z
    def curry(fun, *args):
    return lambda *inner: fun(*args, *inner)
    def my_filter(fun, xs: list) -> list:
    return list(functools.reduce(lambda acc, x2: acc + [x2] if fun(x2) else acc , xs, []))

  • @fabiqn269
    @fabiqn269 4 роки тому +4

    Wie hast du programmieren gelernt/wie hast du angefangen? Mich interessiert das Programmieren sehr, aber ich weiß nicht wie und wo ich starten soll.

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 роки тому +8

      Hey Fabi! Das ist eine sehr gute Frage. Persönlich hab ich ein bisschen was im Informatikunterricht an der Schule gelernt, das Wesentliche aber dann erst im Informatikstudium.
      Man kann aber natürlich auch ohne Schule oder Studium programmieren lernen, zum Beispiel mit einem Buch, mit UA-cam-Videos, Websites, ...
      Ich glaube, es ist wichtig, sich ein kleines Projekt als Ziel vorzunehmen, damit man nicht einfach nur stumpf irgendwelche Konzepte lernt. Zum Beispiel ein kleines Spiel zu programmieren oder so.
      Ich kann gerne mal ein Video mit etwas ausführlicheren Tipps zum Programmierstart machen!

    • @fabiqn269
      @fabiqn269 4 роки тому +2

      Niklas Steenfatt vielen Dank für deine Antwort, und ja ein Video wäre super 🙏🏼

    • @jeanpierremayer7557
      @jeanpierremayer7557 4 роки тому

      @@NiklasSteenfatt Bitte über ein kleines Spiel :)

  • @okdoomer620
    @okdoomer620 4 роки тому +1

    Gutes video. Dass None einfach nichts ist, kann aber zu Missverständen führen, und da du ja überall schon Typannotationen hingemacht hast, würde ich eher den Standpunkt vertreten, dass es eine Art Unit-Type ist, also ein Datentyp mit nur einem Wert, nämlich None. Damit lassen sich zwar keine Informationen transportieren, aber man kann ja den None-Wert trotzdem instanziieren, Listen erzeugen, die unterschiedlich viele Nones enthalten und so weiter. Hier noch meine Lösungen zu den Aufgaben (nicht ausführlich getestet):
    def anzahl_gerade(l):
    return reduce(lambda x,_: 1 + x, filter(lambda x: x%2==0, l), 0)
    def mein_filter(f, l):
    return reduce(lambda x,y: x + [y] if f(y) else x, l, [])
    def curry(f, *args):
    return lambda *urgs: f(*args+urgs)

  • @TheKeule33
    @TheKeule33 4 роки тому

    Du erklärst gut.

  • @kologitzi
    @kologitzi Рік тому

    Sehr hilfreich, danke.

  • @markuswagner7816
    @markuswagner7816 3 роки тому

    Richtiger guter Content!!

  • @xentox5016
    @xentox5016 3 роки тому

    Meega gut erklärt, danke!

  • @lucarudloff687
    @lucarudloff687 4 роки тому +2

    Welches Editoren-Programm nutzt du da am Anfang als du erklärst?😅 Bin noch komplett neu im Bereich Programmieren und komplett verwirrt irgendwie...

  • @anthonye2990
    @anthonye2990 3 роки тому

    Super Video. Ich würde mich über ein paar Büchertips freuen zum Thema.

  • @tacoletal
    @tacoletal 4 роки тому +5

    Hammer Video und starke Erklärungen! Ich studiere Physik und kann auch ohne Info-Background gut folgen. Gruß aus Hamburg!
    Spoiler Alert!!
    .
    .
    .
    def anzahl_gerade(xs: list) -> int:
    return reduce(lambda x1,x2: x1+1, filter(lambda x: x%2 == 0, xs), 0)
    def curry(f: Callable, k: int) -> Callable:
    return lambda *args: f(k, *args)
    def mein_filter(f: Callable, xs: list) -> list:
    return [x for x in xs if f(x) is True]
    (Die dritte Lösung leider ohne reduce)

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 роки тому +5

      Sehr cool! Und gute Lösungen! Um die dritte Aufgabe mit reduce zu lösen, muss man realisieren, dass reduce mit jeder beliebigen Funktion bzw. jedem Datentyp arbeiten kann, nicht nur mit Integer-Funktionen. Aber in der Praxis ist deine Lösung mit der List Comprehension ja sowieso besser!
      Ich habe viele Physikerfreunde und freue mich, dass die Videos auch dir als Nichtinformatiker einen Mehrwert bringen. Gruß aus London!

    • @clemens6440
      @clemens6440 4 роки тому +2

      Spoiler - Die dritte Aufgabe nochmal in Python und mithilfe von reduce:
      .
      .
      .
      def mein_filter(f: Callable, xs : list) -> list:
      return reduce( lambda a,b : a+[b] if f(b) else a, xs, [])
      Gruß aus Hamburg :)

  • @thorstenwidmer7275
    @thorstenwidmer7275 4 роки тому +1

    Sehr gut erklärt -> Lob

  • @the_master_of_cramp
    @the_master_of_cramp 3 роки тому

    Sehr interessantes Video. Niklas, dein etwas prominenter Unterkiefer sieht ein wenig aus wie meiner und ich hab Dysgnathie; ich finde es sieht bei dir auch ein wenig so aus als wäre der Unterkiefer im Vergleich zum Oberkiefer zu weit vorne, nur als Tipp. Vielleicht solltest du es mal bei einem Kieferorthopäden überprüfen lassen ob die Kiefern richtig aufeinander stehen, weil sonst kann es später zu frühem Zahnverlust und fortschreitender Asymmetrie etc. durch Fehlbelastung kommen.

  • @cgsman1
    @cgsman1 3 роки тому +1

    Super gut erklärt ! Habe selten so eine durchdachte, übersichtsreiche Zusammenstellung von funktionalen Zusammenhängen so plastisch erklärt gefunden - vielen Dank ! Wäre auch eine optimale Herangehensweise für Informatik-Schüler*innen am Gymnasium !

    • @tommy40629
      @tommy40629 Рік тому +1

      Habe selten so dumme Menschen gesehen, die an Dingen festhalten, die von der Mehrheit abgelehnt werden. Auch von Sprachwissenschaftlern. Sprich normal oder lass es sein‼

  • @bensteyn8420
    @bensteyn8420 Рік тому

    5 Kochmützen ... von jemdandem, der im MINT-Studium in den 80/90igern in Pacal/ Turboascal programmiert hat!!!
    Objektorientierte Programierung! Damals der Speicherknappheit vs Adressraum geschuldet.
    Overlay Programmierung, weil nicht alles in den Hauptspeicher gepaßt hat.
    Oh Mann, haben wir uns gequält ....
    Freut mich sehr, daß jemand auf solch nette Weise dbzgl. hier auftritt.
    Vielleicht sollte ich wieder anfangen ....

    • @WCiossek
      @WCiossek Рік тому

      Das hatten wir den sehr beschränkten Bill Gates zu verdanken, der immer sehr kleinlich gedacht hatte. Ich denke nur an das Extended Memory, wobei ein kleines Häppchen (64k) davon eingeblendet werden konnte, weil das msdos etwas anderes nicht zulies. So schaufelten wir mühsam im Speicherraum umher, um an den bereits vorhandenen Speicherplatz von ein Megabyte zu kommen. Mit Windows schmissen die Bill-Gates-Enthusiasten ihr Geld wirklich zum Windows hinaus und wer damit programmierte, hatte selbst schuld, wenn eine Pleitewelle dadurch verursacht wurde. Dank Linux wurde diese Speicherschinderei endlich aufgehoben.

  • @SkrtlIl
    @SkrtlIl 4 роки тому

    Erstmal tolles Video! Ich habe mich über den Wikipedia Artikel hinaus noch nicht mit funktionaler Programmierung beschäftigt benutze sie aber mit Python wie ich jetzt gelernt habe sehr oft :D. Ich wollte mal fragen ob du 10-Finger tippst, da es im Video so aussiehst als ob du dich, wenn du zu Sonderzeichen wechselst, oft kurz mit einem Blick auf das Keyboard umorientierst. Ich selbst benutze eine selbstgelernte, leicht merkwürdige Hybridform und ertappe mich auch oft dabei ab und zu auf meine Finger zu schauen wenn ich etwa von der Tilde zu Zahlen wechsel oder ähnliches.

  • @christiandietz7480
    @christiandietz7480 2 роки тому

    geiles Video...weiter so!

  • @mag8101
    @mag8101 3 роки тому

    Mega Video! Danke :)

  • @SirLasterOfDesaster
    @SirLasterOfDesaster 4 роки тому

    Hi Niklas,
    hab dein Video gerade erst endeckt :D Super Erklärung!
    Zu dem funktionalen habe ich aber noch Fragen:
    Am Anfang sagst du ja, dass der Funktionale Ansatz NICHT von Zuständen abhängt. Wenn ich jetzt aber (als Beispile) eine Funktion bauen will, was mir mit Eingabe von Kundennummer die Brief Anrede+Name (Sehr geehrter Herr/Sehr geehre Frau) zusammenhängen soll, dann bekommt meine Funktion als Input wie gesagt die Kundennummer und liest aus der Kunden DB die Anrede (Herr/Frau) und Name aus. Und anhand des Status (ob Frau oder Mann) muss entweder "geehrter" oder "geehrte" verwendet werden => ist als Statusabhängig. Wie würde man so ein Beispiel in funktional implementieren?
    Danke schon mal und Lg

  • @niklas4389
    @niklas4389 4 роки тому +1

    Deine Laufbahn ist echt beeindruckend. Respekt.
    Mal eine Frage.
    Ich habe diesen Monat meine Ausbildung zum Fachinformatiker für Systemintegration angefangen. Welche Programmiersprache sollte ich dafür lernen? Ist zwar Nebenbestandteil aber brauch man trotzdem. Phyton oder?
    Was sollte ich sonst noch lernen? Rund um Dinge wie Datenbanken und Netzwerkadministration.
    Wie sieht es mit Zertifizierungen aus? Gibt es da online "Schulen" die Zertifizierungen anbieten? Kenne nur die LPI. Würde aber gerne auch in Richtung Windows gehen, welche Dinge wären da sinnvoll?
    Vielen Dank schonmal!

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 роки тому +3

      Hey! Erst mal Glückwunsch zum Start in die Ausbildung!!
      Python ist in der Tat die perfekte Allround-Programmiersprache, damit kannst du nichts falsch machen. In der Systemintegration ist bestimmt shell scripting noch ziemlich wichtig. Da würde ich mich auf jeden Fall mal intensiv mit Programmierung in bash (für Linux) bzw. PowerShell (für Windows) auseinandersetzen. Lass Linux übrigens auf keinen Fall außen vor, selbst wenn du eher in die Windows-Richtung gehen willst.
      Grundlagen von Datenbanken sind sicher hilfreich (SQL vs noSQL-Datenbanken, heutzutage vor allem auch verteilte Datenbanken, Hadoop, Presto, Spark, ...). Bei Netzwerk würde ich vor allem erst mal an den Grundlagen arbeiten. Wie funktionieren IP, HTTP, TCP, UDP, DNS, was sind Proxies, wie genau arbeitet ein Router, usw ...
      Ich kenne mich nicht sonderlich mit Zertifizierungen aus. Im Zweifel würde ich denken, dass es am wichtigsten ist, die Themen gut zu beherrschen. Coursera hat aber gute Online-Kurse, zu denen man oft ein Abschlusszertifikat erwerben kann, das kannst du dann in den Lebenslauf packen. www.coursera.org/learn/windows-server-management-security sieht doch z.B. ganz nett aus.
      Viel Erfolg!

    • @MarkusBurrer
      @MarkusBurrer 4 роки тому

      Eine Sprache, die ich dir ans Herz legen würde ist Rust. Der Compiler zwingt dich mehr oder weniger zu einem sauberen Programmierstil und der Compiler hilft dir auch mit guten Fehlermeldungen. Rust in Kombination mit funktionaler Programmierung und du bist für andere Sprachen gut gerüstet.
      Ich gebe zu, dass die Lernkurve ziemlich steil ist, aber ich bin der Meinung, mit Sprachen wie Python oder Java gewöhnt man sich schlechten Programmierstil an.
      Eine andere Sprache, die ich empfehlen würde, ist Elm. Vollständig funktional und mit hilfreichem Compiler.

    • @MarkusBurrer
      @MarkusBurrer 4 роки тому

      Achso, generell möchte ich dir empfehlen, funktionale Programmierung zu lernen, egal welche Sprache du lernst. Das geht auch mit Python, aber weil Python sowas wie immutable variables kennt kommt man leicht in die Versuchung, das Mal zu vergessen.
      Funktionale Programmierung ist deshalb sinnvoll, weil dadurch viele Fehler vermieden werden. Wenn man das Konzept einmal drauf hat kann man immer noch mit OOP oder imperativer Programmierung ergänzen.
      Ich wünschte, ich hätte das vor 20 Jahren gewusst.

    • @thisismyalias
      @thisismyalias 4 роки тому

      @@MarkusBurrer +1 für Rust

    • @MarkusBurrer
      @MarkusBurrer 4 роки тому

      @@thisismyalias es gibt eine Reihe von Sprachen, die ich Python inzwischen vorziehen würde. Ein direkter Ersatz wäre für mich Julia oder F#. Mit F# und VScode kann man etwas ähnliches machen wie mit dem Jupyter Notebook.
      Aber auch wenn man Smartphone Apps mit Kotlin oder Swift programmieren möchte sollte man das Konzept der funktionalen Programmierung zumindest kennen.
      Deshalb halte ich Python immer weniger für die ideale Einsteigersprache, die sie einmal war. Ich würde mittlerweile Elm empfehlen, auch wenn sie "nur" für die Web Entwicklung gedacht ist.

  • @TheTimboo16
    @TheTimboo16 3 роки тому

    Super Video! Könntest du noch ein Video speziell zu Funktoren und Monaden machen bitte?

  • @michaelb7829
    @michaelb7829 10 днів тому

    Hi @Niklas, es gab doch mal ein Video von dir über Lambdas und funktionale Programmierung in ***Java***. Existiert das noch?

  • @cynocephalusw
    @cynocephalusw 3 роки тому

    Am interessantesten finde ich Idris. Durch das Konzept der Dependent Types stehen einem ungeahnte Möglichkeiten offen. Peter Caisse hat 2019 einen interessanten Aufsatz veröffentlicht: „The Power of Types“. Darin zeigt er, dass es nicht mehr notwendig ist, aufwendige Tests zu fahren, sondern dass der Typ selbst zur Demonstration der Fehlerlosigkeit ausreicht. Der Compiler kann einen sogar zur richtigen Implementierung führen.

  • @adrianf.5847
    @adrianf.5847 3 роки тому

    Jetzt mal ne blöde Frage: Sie haben ja in 8:34 die Funktion multipliziere_liste implementiert. Diese hat an sich aber doch keine Seiteneffekte und ist von daher selbst auch funktional, oder? Denn die Variable "ausgabe" ist ja auch an den Scopus von der Funktion gebunden, und wird also nach Beendigung der Funktion aufgelöst.

    • @adrianf.5847
      @adrianf.5847 3 роки тому

      Also Wikipedia verwendet den Begriff "funktionale Programmierung" eher für das Programmierparadigma, wo Funktionen als Variablen benutzt werden dürfen, wohingegen die Verkapselung von Methoden wie im Video beschrieben eher unter "prozedurales Programmieren" eingeordnet wird.

  • @TheCookieLPT
    @TheCookieLPT 4 роки тому +6

    Spoiler (evtl. Lösungen zu den Übungsaufgaben):
    Falls jemand Erfahrung mit Python hat (hab ich leider nicht): Bei mein_curry und mein_filter würde mich interessieren, welche Datentypen die Parameter haben sollen denn ich habe keine dazugeschrieben. Außerdem bräuchte mein_curry wahrscheinlich noch einen Rückgabewert, aber ich bin mir nicht sicher, welchen. Es funktioniert zwar, aber ganz sauber glaube ich ist das nicht, wenn ich die Datentypen auslasse.
    Außerdem habe ich die Einschränkungen nicht eingehalten wie im Video erwähnt, ich hätte das Video zuerst zu Ende schauen sollen.
    def anzahl_gerade(xs: list) -> int:
    return len([x for x in xs if x % 2 == 0])
    # Für die Curry Funktion
    def summe(x: int, y: int, z: int) -> int:
    return x + y + z
    def mein_curry(func, val):
    return lambda x, y: func(val, x, y)
    def mein_filter(y, xs: list) -> list:
    return [x for x in xs if y(x)]

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 роки тому +4

      Typisierung ist bei größeren Softwareprojekten echt wichtig. Bei kleineren Python scripts wird es oft weggelassen. Im Video schreibe ich die Typen hauptsächlich für die bessere Verständlichkeit dazu. Für Funktionen kannst du Callable nehmen, wie ich es auch im Video gemacht habe. Für ein beliebiges Argument geht z.B. Any.

  • @toasti2211
    @toasti2211 2 роки тому

    Toll Toll, Dankeschön

  • @VISION-IT
    @VISION-IT 2 роки тому

    Wie lange braucht man u. was muss man tun - um auf das bzw. dein Programmierlevel zu kommen ?
    Ohne Camebridge, Elite Uni u. Co., ist das machbar ... ?

  • @mephistosson
    @mephistosson 2 роки тому

    Vielen Dank!

  • @davidak_de
    @davidak_de 4 роки тому +1

    Gut erklärt, danke für das Video!
    Hier meine Lösungen für die Aufgaben:
    from typing import Callable
    from functools import reduce
    def anzahl_gerade(xs: list) -> int:
    return reduce(lambda x1, x2: x1 + 1, filter(lambda x: x % 2 == 0, xs), 0)
    print(anzahl_gerade([4, 3, 6, 32, 2, 1, 23, 4]))
    def curry(f: Callable, x: int) -> Callable[[int, int], int]:
    return lambda y, z: f(x, y, z)
    def foo(x: int, y: int, z: int) -> int:
    return x + y + z
    bar = curry(foo, 5)
    print(bar(3, 2))
    def mein_filter(f: Callable, xs: list) -> list:
    return reduce(lambda x1, x2: x1 + [x2] if f(x2) else x1, xs, [])
    print(mein_filter(lambda x: x > 3, [1, 3, 2, 4, 5]))
    Wie ist deine Lösung?

    • @academicalisthenics
      @academicalisthenics 3 роки тому

      danke, die Aufgabe 3 hatte ich mit reduce nicht hinbekommen, deine Lösung hat mir sehr geholfen!

  • @L4rsTrysToMakeTut
    @L4rsTrysToMakeTut 4 роки тому +1

    Hast Du schon Mal mit Julia Lang programmiert?
    Da kannst Du sowas wie
    for f in (
    +,
    *,
    /,
    -,
    ^,
    function(a,b) a*b+b^a end
    )
    println(f(10,5))
    end
    machen.

  • @YouKnowWhoIAm118
    @YouKnowWhoIAm118 2 роки тому +1

    Bitte mal wieder irgendein Video zu Informatik. Ich würde zum Beispiel Typisierung interessant finden

  • @simxschl
    @simxschl 4 роки тому +5

    um zu lernen, wie man funktional programmiert, gibt es 2 Methoden ... gewieft ;)

  • @luigi.8868
    @luigi.8868 2 роки тому

    Hi, mich würde interessieren, wenn das Gegenteil zur funktionalen, die imperative ist, wo ordnet man dann deklarativ und prozedural ein?

  • @jenniferclock9384
    @jenniferclock9384 3 роки тому

    nice. ich wollte bssl lernen was eine funktionale sprache ist, da ich mir clojure aneignen will. Danke!

  • @S.Quandt_Filme
    @S.Quandt_Filme 3 роки тому

    Funktioniert das bei Lua scripts auch so ähnlich ?

  • @Cutrexxx
    @Cutrexxx 3 роки тому

    spoiler für erste Aufgabe mit reduce:
    reduce(lambda a,b: a+1 if b%2==0 else a, numbers, 0)

  • @davidak_de
    @davidak_de 4 роки тому

    Könntest du ein Video zu Racket machen?

  • @khyroz9519
    @khyroz9519 4 роки тому +19

    Programmierst du immer im Light Mode?
    Davon bekomme ich immer sehr schnell Kopfschmerzen. 😂

  • @orca9469
    @orca9469 3 роки тому

    Kannst du vielleicht dann auch mal ein Video über C#, C, C++ etc machen (objektorientierte Programmierung)

  • @Anon48657
    @Anon48657 4 роки тому

    Weiter so!

  • @MarkusBurrer
    @MarkusBurrer 4 роки тому +1

    OOP verliert allerdings immer mehr an Bedeutung weil immer mehr Programmierer merken, dass es eigentlich ziemlicher Käse ist. Speziell Spiele haben mit OOP ein echtes Problem.
    Ich dachte am Anfang auch "boah toll, alles irgendwie logisch", bin aber schnell auf die typischen Probleme gestoßen (zB Diamond Problem).
    Seit einer Weile lerne ich Rust. Insbesondere interessant für den Embedded Bereich

    • @Erik_Fa
      @Erik_Fa 3 роки тому +1

      Ich denke nicht das OOP an Bedeutung verliert. Andere Paradigmen gewinnen nur mehr an Bedeutung, weil sie bestimmte Probleme besser lösen können als die OOP.

    • @valentin6824
      @valentin6824 2 роки тому

      Also ich stimme dir zwar eigentlich zu, bin aber nicht der Ansicht dass sich die 2 Paradigmen gegenseitig ausschließen...
      Generell hast du aber Recht, in quasi jedem Unternehmen was den Anspruch an sich hat, "qualitativ hochwertigen Code" zu schreiben, wird funktional programmiert.
      Trotzdem sollte man nicht vergessen, man kann auch mit funktionaler Programmierung Code schreiben den keiner mehr lesen / verstehen kann...
      Ich finde sogar dass man "schlechten" Code welcher objektorientiert ist sogar besser lesen kann.

    • @WCiossek
      @WCiossek Рік тому

      OOP ist im Prinzip nur eine Bündelung von Funktionen, und entspricht einer Funktionsbibliothek, sofern Variablen und Konstanten innerhalb des Bündels nicht zugreifbar d. h. privat sind. Eine Klasse beschreibt dieses Bündel und faßt Funktionen zu einer Kategorie zusammen. Da die Funktionen (auch Methoden oder Nachrichten genannt, wobei die Bezeichnungen wie Schall und Rauch sind) im mathematischen Sinne pur sein können, wird OOP bezüglich dieser Methoden funktional. Nur wird das funktionale Paradigma nicht wie bei Haskell erzwungen.
      Funktionale Programmierung ist bei einer Betriebssystementwicklung wieder hinderlich, da Speicherverwaltungen (Nebeneffekte) und Zustände hier von Bedeutung und auch erforderlich sind. Z.B Fehlerzustand, Wartezustand und Ausführungszustand bei den Prozessen usw..

    • @MarkusBurrer
      @MarkusBurrer Рік тому

      @@WCiossek OOP wie es heute meistens gelehrt wird hat wenig mit dem zu tun, wie es ursprünglich gedacht war. Wer sich echtes OOP anschauen will muss Smalltalk lernen.
      Das Haskell in der Systemprogrammierung nichts verloren hat ist klar. Aber da kommt jetzt halt Rust ins Spiel und viele der Ideen in Rust haben einen funktionalen Ursprung, auch der Borrow Checker.
      Rust ist zwar eine imperative Sprache, aber es gibt wie gesagt viel Einfluss aus der funktionalen Programmierung und es wurde einiges an OOP Ballast weggelassen.
      Rust ist IMHO ein gutes Beispiel, wohin der Trend bei den Programmiersprachen geht
      Ach ja, wenn man sich die Stackoverflow Umfrage nach den beliebtesten Programmiersprachen anschaut fällt auf, dass die ersten vier oder fünf mehr oder weniger funktionale Sprachen sind

  • @metox3388
    @metox3388 4 роки тому

    Gibt es die Beispiele auch als C?

  • @WCiossek
    @WCiossek Рік тому

    Ich habe eine Programmiersprache entwickelt, die funktional ist. Allerdings soll es damit auch möglich sein, ein Betriebssystem zu programmieren, wobei eine Speicherverwaltung nötig wird. Das lambda-Kalkül kennt keine arithmetischen Funktionen und keine Zahlen! Es beschreibt nur den Reduktionsvorgang eines Ausdrucks, was passiert, wenn ein Parameter in das Kalkül geschleust wird. Zur Erzeugung von Funktionen ist es unbrauchbar. Die lambda-Ausdrücke in einigen Programmiersprachen wie Python oder Haskell entsprechen nicht dem lambda-Kalkül, sondern sind Erweiterung derselben und müßten als my-Kalkül bezeichnet werden, wenn das lambda-Kalkül um Zahlen und Grundrechenarten erweitert wird. Eine Closure (Einschluß) ist im reinen lambda-Kalkül nicht möglich. Das my-Kalkül basiert auf dem lambda-Kalkül und entspricht dem lambda von Python und Haskell. Beim lambda-Kalkül werden Variablen durch Werte ersetzt. Beim my-Kalkül wird der Wert einer Variable verwendet und eine Ersetzung findet nicht statt. Nur unter diesen Voraussetzungen sind Closure möglich. Allerdings ist eine Zuweisung einer Variable mit einen Wert nicht pur funktional, da es ein Seiteneffekt ist. In funktionalen Programmiersprachen wie Haskell, die nicht rein funktional ist, wie oft behauptet wird, kennt Zuweisungen in Form von Konstanten, d.h. es ist nur eine einmalige Zuweisung möglich. Nun habe ich festgestellt, daß inpure Funktionen (Funktionen ohne Parameter oder Funktionen ohne Ergebnis) funktional verwendet werden können, sofern Seiteneffekte eingekapselt werden, durch Einführung eines weiteren Kalküls (ny-Kalkül), das inpure Funktionen aufnimmt und sich an das my-Kalkül orientiert, das wiederum das lambda-Kalkül zur Grundlage hat. Meine Programmiersprache basiert auf dem lambda-Kalkül und orientiert sich von der Syntax her an die Mengenalgebra. Der Befehlssatz ist in der Voreinstellung lateinisch und kann durch die synonymus-Anweisung in jede beliebige Sprache wie Englisch oder Chinesisch umgewandelt werden. Z.B. {synonymus synonymus:代名词} oder {synonymus scribere:{print, drucke, 打印}}, so daß
    die Anweisung {scribere "Hallo"} als auch {打印 "Hallo"} oder {print "Hallo"} auf der Konsole das Wort Hallo ausgibt. Um diesen Seiteneffekt funktional einzukapseln, muß es das ny-Kalkül verwenden:
    {{ny {x} {scribere x}} "Hallo"}
    daß die inpure Anweisung scribere in eine funktionale Umgebung packt. Analog für funktionale Anweisungen gibt es das my-Kalkül für pure Operatoren z.B.
    {{my {x} {+ x,4}} 3}
    was das Ergebnis 7 liefert. Da die Grundrechenarten eh schon pure Funktionen sind, genügt
    {+ 3,4}

  • @dominikscheuer7010
    @dominikscheuer7010 3 роки тому

    SPOILER!
    def anzahl_gerade(xs: list) -> int:
    return (sum(x % 2 == 0 for x in xs if True))
    def foo(x: int,y:int,z:int) -> int:
    return x * y + z
    def curry(f : function,z: int) -> int:
    return lambda x,y: f(x,y,z)
    def mein_filter(x ,xs: list) -> list[int]:
    return list(filter(x,xs))
    #oder soll es als Ersatz für filter benutzbar sein? xD

  • @vine2875
    @vine2875 4 роки тому

    An welcher Uni (in Hamburg) hast du studiert oder hast du garnicht in Hamburg studiert?

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 роки тому +1

      Uni Hamburg

    • @vine2875
      @vine2875 4 роки тому

      @@NiklasSteenfatt da will ich ab nächstes Jahr auch studieren kannst du diese vom Ruf und dem Studium an sich empfehlen? (Ich frage weil sie in keinem Ranking vorkommt oder dort nirgendwo besonders abschneidet) PS: Vielen Dank für deine tollen Videos😊

  • @fakecrafter7448
    @fakecrafter7448 3 роки тому

    was für fonts sind das?

  • @denisg1208
    @denisg1208 4 роки тому

    Welche Tastatur benutzt du?

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 роки тому +2

      Eine Razer BlackWidow Ultimate, die mir seit 2014 treue Dienste leistet!

    • @TottiBln
      @TottiBln 4 роки тому

      Ist das wirklich dein Problem: "Welche Tastatur..." ... das ist eine Tastatur, mit der man gut C++ und Python programmieren kann... aber nicht HTML und JavaScript ;)))

  • @conrade.4110
    @conrade.4110 4 роки тому

    Hi Niklas, danke für das tolle Video. Könntest du Mal was machen, dass im Video das Tastatur tippen nicht so laut ist? Dann wäre wirklich perfekt.

  • @timi-mc1xt
    @timi-mc1xt 4 роки тому

    Hi,
    mit welchem Tastaturlayout arbeitest du lieber, qwertz oder qwerty (aktuell benutzt du qwerty aber bist qwertz gewohnt :D sieht man bei 12:44)

    • @schlingelgen
      @schlingelgen 4 роки тому

      Und warum kann es nicht genau andersherum sein? 🤔

  • @daniels.6534
    @daniels.6534 4 роки тому +2

    Nach PEP8 ist anzahl_gerade() zwar kein Einzeiler, aber was solls :D
    SPOILER
    def anzahl_gerade(xs: list) -> int:
    return reduce(lambda x1, x2: 1 + x1, filter(lambda x: x % 2 == 0, xs), 0)
    def curry(func: Callable[[int], int], k: int):
    return lambda x1, x2: func(k, x1, x2)
    def mein_filter(func: Callable[[int], int], xs: list):
    return list(reduce(lambda x1, x2: x1 + [x2] * func(x2), xs, []))

    • @valentindoring5105
      @valentindoring5105 3 роки тому

      Wow, die mein_filter Funktion hat es in sich

    • @MoneyPink
      @MoneyPink 3 роки тому

      Die list ganz hinten kann sogar raus, reduce übergibt list :)

  • @NeuroEverything
    @NeuroEverything 4 роки тому +17

    I think for the first time in my life I wish I understood German

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 роки тому +2

      Haha, I know, it's a shame for all my English-speaking friends! As Oscar Wilde said, life is too short to learn German, so I'm going to make content in English some day, promise.

    • @fentonmsu
      @fentonmsu 4 роки тому

      Deutsch ist sehr einfach zu lernen.

    • @fentonmsu
      @fentonmsu 4 роки тому

      Ich mache Videos auf Deutsch, Russisch sehr schwerer.

  • @MrKeKsst
    @MrKeKsst 2 роки тому

    Ich würde sowas in einer besser lesbaren Sprache bevorzugen in der Zukunft, Python ist zwar simpel, aber oft zu simpel und reduziert im gut lesbar zu sein, Go hat das viel besser gelöst.

  • @MinecraftWikiDE
    @MinecraftWikiDE 4 роки тому

    Eine Prozedur, Funktion oder Methode unterscheidet sich sehr wohl voneinander und sie drei haben folgende Bedeutung:
    Prozedur: Hat keinen Rückgabewert.
    Funktion: Hat einen Rückgabewert.
    Methode: Ist eine Prozedur oder Funktion innerhalb eines Objektes.
    Mich hat es es ehrlich gesagt etwas gewundert, wieso das nicht aufgeklärt wurde, da das doch ein nicht zu vernachlässigender Unterschied ist!
    Trotz dieser Richtigstellung muss ich auch ein Lob aussprechen, die Qualität, dieses und aller anderen bisher geschauten Videos von dir, ist sehr hoch! Man lernt bei jedem einzelnen Video immer sehr viel tiefgründiges.

    • @ratzepalltuff9617
      @ratzepalltuff9617 4 роки тому

      nur aus Interesse:
      gelten static methoden dann nicht als methoden, da sie ja innerhalb einer klasse, aber nicht innerhalb eines Objekts sind?

    • @MinecraftWikiDE
      @MinecraftWikiDE 4 роки тому

      @@ratzepalltuff9617 Meines Wissens nach ist ein static für genau den Fall gedacht, damit man wieder von Prozeduren und Funktionen sprechen kann.

    • @WCiossek
      @WCiossek Рік тому

      Strukturell gesehen ist eine Methode oder auch Nachricht genannt eine Funktion oder Prozedur und somit existiert kein Unterschied! Eine Funktionsbibliothek ist ein Bündel von Funktionen und Prozeduren. Das Gleiche tut eine Klasse unter einen kategorischen Namen, woraus sich Instanzen oder Objekte bilden lassen. In einer Funktionsbibliothek werden ja aus Funktionen oder Prozeduren plötzlich auch nicht Methoden oder Nachrichten! Funktionsbibliotheken und Objekte sind nichts weiteres als Funktionsbündel von zugreifbaren Funktionen! Aus struktureller Sicht sind diese Bezeichnungen wie Schall und Rauch, ähnlich den Variablen im lambda-Kalkül, wobei lambda x.x identisch ist mit lambda y.y.

  • @axelscheiber9499
    @axelscheiber9499 4 роки тому

    Meine Lösung für anzahl_gerade: allerdings ohne reduce(), ist mir leider nicht eingefallen =D:
    .
    .
    .
    .
    .
    .
    def anzahl_gerade(xs: list) -> list:
    return list(filter(lambda x: x/2==round(x/2), xs))
    Hat jemand die lösung?

    • @juliak5813
      @juliak5813 3 роки тому

      Ich habe eine ähnliche Lösung:
      def anzahl_gerade(ls: list):
      return len(list(filter(lambda x: x % 2 == 0, ls)))

  • @LS-cb7lg
    @LS-cb7lg 3 роки тому

    def anzahl_gerade(lst: list) -> int:
    return reduce(lambda x, y: x+y, list(map(lambda x: 1 - x % 2, lst)), 0)
    def curry(fkt, x):
    return lambda y, z: fkt(x, y, z)
    def mein_filter(fkt, lst: list) -> list:
    return list(filter(fkt, lst))
    hab leider nicht geschafft, die anzahl_gerade funktion mit filter zu programmieren, wäre bestimmt sogar einfacher als meine lösung aber naja :D

  • @religionOFnature
    @religionOFnature 2 місяці тому

    Meine Projektidee wäre ein selbst ausgedachtes Brettspiel mit möglichst einfache Grafik zu programmieren.

  • @KarlMarx.et.FriedrichEngels
    @KarlMarx.et.FriedrichEngels 4 роки тому +1

    Fast 50 k.
    ;)

  • @deadpoolgamer4824
    @deadpoolgamer4824 3 роки тому

    Ich glaube mein Kopf ist geplatzt 😎✌😅

  • @winstomsmith7121
    @winstomsmith7121 Місяць тому

    Ist ja eigentlich gut das Video, aber das Klackern der Tastatur ist grauenhaft. Wenn ich das mit Kopfhörer höre, erzeugt jeder Tastenanschlag Schmerzen im Ohr. Ansonsten aber toll.

  • @christianforler1476
    @christianforler1476 Рік тому

    # SPOILER!
    def anzahl_gerade(xs : list) -> int:
    return reduce(lambda a,b : a+1 , filter(lambda x: x&1 == 0, xs) , 0)
    def curry(fn, x, *y):
    return lambda *y: fn(x, *y)
    def mein_filter(fn, xs):
    return list(reduce(lambda a, x: a + [x] if fn(x) else a , xs, []))

  • @alicethegrinsecatz1611
    @alicethegrinsecatz1611 4 роки тому

    Heute klingst du ähnlich wie der UA-camr TheJoCraft

  • @clownjunge2942
    @clownjunge2942 2 роки тому

    Niklas arbeitet mit Windows :D

  • @ZuvielDrama
    @ZuvielDrama 4 роки тому +1

    Funktionale Programmierung ist nah am Low Level während Objekt Orientierte Programmierung die Kapselung dessen ist was benötigt wird um eine flüssige Abstraktion mittels generischen Templates in C++ zu erreichen. In anderen Worten mit Funktionaler Programmierung schreibe ich mir mein Verhalten, dass ich bei Bedarf ganz schnell mutiere um mir meine Abstraktionsschicht auf der OOP Ebene. So dass ich mittels K.I. irgendwann den Funktionalen Bereich dynamisch anpasse und die abstraktion erstmal generisch lasse um trotz evolutionärer Annäherung durch nicht deterministische Intelligente Algorithmen trotzdem ein garantiertes Maß an Ergebnissicherheit zu erhalten.

    • @rolandm.2276
      @rolandm.2276 4 роки тому

      Nope.. Schon das Statement im ersten Satz ist komplett falsch.. FP ist auf Top Level abstrahiert.. Konzepte wie map (Funktoren) flatMap (Monaden) bzw filter und reduce (Katamorphismen) kommen aus der Kategorietheorie.. Du kannst diese höheren Funktionen in jeder Sprache gleich nutzen, wie sie dann Low Lvl implementiert sind, ist dann meist egal.. wenn das Ganze ein Low Lvl wäre, dann würden wir diese Konzepte von einer Sprache in die nächste kaum portieren können. 🤔

  • @fritzbauer5043
    @fritzbauer5043 3 роки тому

    Ich hätte Informatik studieren sollen :(((

  • @mymacaintwag
    @mymacaintwag 4 роки тому +3

    Irgendwie hat sich mein letztes Kommentar verflüchtigt:
    1. “Methoden” werden meist im kontext von Klassen benutzt
    2. Es gibt in Python keine Pointer
    3. Funktional in python ist wegen nicht vorhandener tail call optimization nicht wirklich optimal
    4. Eine while Schleife ist sicherlich konzeptuell kein “Äquivalent” für map.

  • @ZuvielDrama
    @ZuvielDrama 4 роки тому

    Ich war schon immer ein ganz schrecklicher programmierer.

    • @TottiBln
      @TottiBln 4 роки тому +1

      Nach diesem Video wir's auch nicht besser;)... Viele hier glauben, weil sie nach anschauen des Videos nur "Bahnhof" verstanden haben, dass es ein sooo hochwertiger Content ist, aber da ich selbst Kurse gebe, kann ich Dir sagen: lass Dich nicht entmutigen! Dieses Video ist für Anfänger nur verwirrend und ungeeignet Es dient in erster Linie der narzisstischen Befriedigung des Machers nach Klugscheisserei und Anerkennung!

  • @vast634
    @vast634 3 роки тому

    Da bleib ich lieber bei der klassischen Java Syntax, als diesem unübersichtlichen Lamda Quatsch.

  • @nameunknown3272
    @nameunknown3272 4 роки тому +2

    Viel zu viel auf einmal, wenn man dieses Video ohne Vorwissen schaut, versteht man gar nichts

    • @NiklasSteenfatt
      @NiklasSteenfatt  4 роки тому +7

      Hey, danke für das wertvolle Feedback! Du hast recht, das Video ist eine Einführung in die funktionale Programmierung, aber man muss schon etwas programmieren können, um es zu verstehen. Die meisten meiner Zuschauer beschäftigen sich ja schon etwas mit Informatik. Aber ich kann gerne auch mal eine Einführung in die Programmierung machen, für absolute Anfänger! :)

    • @valentinn3507
      @valentinn3507 4 роки тому

      @@NiklasSteenfatt ja das wäre toll! Obwohl es da schon einige Videos auf YT gibt. Vielleicht mit eigenem Twist

  • @hgdesign3674
    @hgdesign3674 2 роки тому

    Sehr geiles Video!
    Habe mit dem Thema funktionale Programmierung noch nicht viel zu tun gehabt aber habe mich mal an der ersten Aufgabe versucht
    !!SPOILER!!
    def anzahl_grade(xs: list) -> list:
    return reduce(lambda x1, x2: x1 + x2/x2, list(filter ( lambda x: x % 2, xs)), 0)
    Feedback wäre echt klasse :)

  • @BUE687
    @BUE687 3 роки тому

    Da
    def anzahl_gerade(l):
    return reduce(lambda x, y: x + 1, filter(lambda x: x % 2 == 0, l), 0)
    def curry(f, x):
    return (lambda *args: f(x, *args))
    def mein_filter(f, l):
    return reduce(lambda x, y: x + [y] if f(y) else x, l, list())