2 months into Functional Programming: my Story & Thoughts

แชร์
ฝัง
  • เผยแพร่เมื่อ 2 มิ.ย. 2024
  • 0:00 Intro
    0:53 How React relates to FP
    1:58 契機:面試被問到答不出來!?
    4:22 started learning with JavaScript
    6:10 the limitations of JavaScript
    8:25 decided to learn haskell
    9:18 studying haskell during CNY
    9:41 Does haskell teaches you FP?
    10:52 Future plans & goals
    11:19 1. doing exercise problems
    11:51 2. start using fp-ts
    12:43 3. books
    13:59 4. side projects
    15:07 5. reading open source code
    15:38 Should a beginner learn FP?
    18:23 How I recommend learning FP
    影片中使用的Icons: www.flaticon.com
    插圖來源:www.irasutoya.com/
    B roll來源:envato elements

ความคิดเห็น • 66

  • @vincentcheng9591
    @vincentcheng9591 ปีที่แล้ว

    謝謝James無私的分享~ 對入門還有經驗分享都非常有幫助!!

  • @Nono-hc1qx
    @Nono-hc1qx ปีที่แล้ว

    感謝分享!!!
    收藏影片

  • @chengyang1380
    @chengyang1380 ปีที่แล้ว +1

    感謝分享 🎉

  • @zedhewel
    @zedhewel ปีที่แล้ว +1

    如果之前是懂 JavaScript 想入门 FP,可以学习 ReScript 。他是一个像 OCaml 的 JS 方言,纯函数式语言,可以直接编译到 JS,适合集成到已有的 JS 项目里;而且官方支持 React,也就是说可以直接在前端项目里运用,而不用依赖其他像 fp-ts 之类的库。

  • @cheng-enho4055
    @cheng-enho4055 ปีที่แล้ว +6

    等到多線程, 分散式系統, 高並發, 就會知道fp多好用。寫一個pure function再用channel回傳,根本不用擔心side effect.

  • @yirenong5583
    @yirenong5583 ปีที่แล้ว

    强推PureScript 写起来和Haskell一样 又可以避免Haskell的technical debt 还可以用FFI无缝衔接JavaScript

  • @joeysywang
    @joeysywang ปีที่แล้ว +2

    如果要直接學fp語言推薦可以學clojure 寫前後端可以用Clojurescript,跟javascript可以輕鬆interop(沒學過fp到寫cljs的公司工作就入了坑

  • @HuangRay2213
    @HuangRay2213 6 หลายเดือนก่อน

    感謝分享 雖然還是新手, 但感覺開啟一扇窗
    覺得一開始往這邊打好硬基礎, 之後可以省事很多

  • @shinli8718
    @shinli8718 ปีที่แล้ว

    我個人其實不喜歡fpts這種函式庫。我認為每個語言都有它的慣例寫法。為了達成某些語言範式而去使用函式庫模擬,除了不必要的複雜度外,也會造成團隊溝通上的成本。
    FPTS模擬Haskell的代數型態系統,但事實上,Haskell 的型態系統造成了一些問題,必須用特定的pattern 解決,同樣的問題在is/ts world 是不會發生的,這時用fpts 對我來說就是額外的成本。寫什麼語言我的想法是還是盡量貼近該語言的慣例
    當然只是個人想法。大大製作的入門淺顯易懂,我覺得超厲害,期待大大可以繼續製作相關影片

  • @LoveAria
    @LoveAria ปีที่แล้ว +3

    感謝您的分享,上一部FP的影片對完全不認識 FP 的我來說簡單明瞭,能很快抓到重點。
    提個影片觀賞上的小建議,我自己如果是看知識分享型的影片會用至少1.5倍速播放(視講者語速而定)
    您的影片中的背景音樂在倍速的情況下會變成很擾人的雜音
    特別是在段落切換時播放的音樂最嚴重,但這部影片後段的鋼琴音樂就沒有這個問題
    以往在看其他影片時並沒有感受到這件事,可能其他人是音樂很短或是沒播到會發生這種問題的音樂
    我知道有些人也是一樣在看知識分享型影片會倍速,但比例多不多就不清楚了,只是提一下個人觀感讓您參考

    • @james-kool
      @james-kool  ปีที่แล้ว +1

      謝謝建議,我自己倍速看也發現了

  • @tl7955
    @tl7955 ปีที่แล้ว +5

    你有提到那時候還沒碰過FP 那現在的你來說你會怎麼回答loop跟recursion 呢?

  • @user-om7tc1dy1p
    @user-om7tc1dy1p ปีที่แล้ว +1

    覺得錄音品質跟語速可以再調整 除此之外內容很有趣

  • @have-bear
    @have-bear ปีที่แล้ว +37

    我不建議一開始就從 Haskell 學,它 *太* FP 了
    有很多概念都不是必要的,例如: currying, lazy evaluation, declarative, recursion instead of loop
    我認為 FP 的核心概念只有三個: algebraic data type, pattern match, immutability and purity
    如果想學 FP,我建議可以從 Elm 入門
    另外與其說 FP 跟集合論有關,它跟範疇論 (Category theory) 有更深的關係
    有興趣可以看 "Category Theory for Programmers" 這本書

    • @saamenerve1869
      @saamenerve1869 ปีที่แล้ว

      OCaml 也还挺适合入门的

    • @vesdhiteas5378
      @vesdhiteas5378 ปีที่แล้ว

      弱弱問下,那FP跟type theory有關西嗎?

    • @8pm
      @8pm ปีที่แล้ว

      你說的三個核心概念準確說是 Hindley-Milner type system 的,standard ml, haskell, ocaml ...,對於 lisp 家族的來說就不是核心概念。我認爲 FP 最核心的概念是 referential transparency。另外,我也喜歡用 ocaml。

    • @have-bear
      @have-bear ปีที่แล้ว

      @@8pm
      referential transparency 應該和 pure function 的概念是相通的吧
      這的確是 FP 最核心的概念
      只是我認為 pattern matching 和 algebraic data type 也是 FP 裡必學的概念
      用學術一點的說法就是你指的 Hindley-Milner type system
      就算是沒有 type 的程式語言,只要有 referential transparency 就能實現 algebraic data type 和 pattern matching
      (lambda calculus 的 Scott encoding 就是把資料編碼成 pattern matching 的函式來實現的)
      對於資料結構的理解也是 FP 和 OOP 的第二大差別

    • @8pm
      @8pm ปีที่แล้ว

      @@have-bear "referential transparency 應該和 pure function 的概念是相通的吧",我覺得是,也不是。referential transparency 在 function 的表現形式就是 pure function,但在更大範圍比如 module 的設計,也可以套用,那個時候,內部也可能是 imperative 的,當然你也可以從邊界來看,說這是更大範圍的 pure function,畢竟 output 只依賴 input。看我喜歡 ocaml 就知道我也是支持 pattern matching 和 algebraic data type 的,我也認爲非常值得學習使用,HM 是比 c++/java 系更好的設計。我還認爲 ocaml 的 OOP 部分的設計(structural subtyping)也比 c++/java 的優秀。

  • @starsmeteorIAN
    @starsmeteorIAN ปีที่แล้ว +4

    學到新詞彙 Tail Recursion 👍

    • @yojaychang
      @yojaychang ปีที่แล้ว

      高考有出

    • @AllenKuoCode4Fun
      @AllenKuoCode4Fun ปีที่แล้ว

      有人翻成尾遞歸

    • @yojaychang
      @yojaychang ปีที่แล้ว

      @@AllenKuoCode4Fun 或是尾部遞迴

  • @charlottehong1276
    @charlottehong1276 ปีที่แล้ว +2

    我上次看到你的上一個影片的時候就已經驚覺,沒想到自己的直覺是對的。
    主要原因是因為大量使用powershell語言之後開始對自己編程習慣產生質疑
    明明以前寫Cpp的時候能盡量物件就物件,但是工作上一直需要短期快跑造出小ps1就發現
    1. 物件在絕大多數的時候真的是必要的嗎?
    2. 搞了一個通用物件出來之後最大的問題是,我還得回去看物件的"定義"是什麼
    3. ps1跟py一樣對於類型太過於不敏感了,以至於我經常忘記這函式出來是啥鬼
    4. ps1內建支援平行處理。但是有限制,跟選用遞迴而不要用for迴圈,我覺得有點說不出來的熟悉感
    當時為了弄成平行處理所做的處理,超像的阿。反過來說如果嚴格遵照用FP的方式寫八成可以直接套進的概率很大
    抱持著這些零零總總的疑問,忽然接觸到你說的FP忽然瞬間都懂了。WTF現成的答案阿!!!!!
    透過事先約定的限制(可能是多寫可能是寫得更複雜的小劣化),來最大程度優化整體代碼的速度、閱讀、統一性。
    感覺這個概念是一種湧現對編程有了深度了解之後才湧現出來的東西,
    一種道不明說不透的湧現,他並不適用在所有地方不能無腦照搬,但是對於需要的地方而言絕對是突破性的解法。

    • @treezhang13
      @treezhang13 10 หลายเดือนก่อน

      FP诞生的没那么晚,FP的第一个里程碑是lambda演算,第二个是组合子逻辑,都是很早就诞生了的。

  • @yazinnnn
    @yazinnnn ปีที่แล้ว

    学fp可以从clojure/scheme/racket/fsharp开始

  • @clementlin3140
    @clementlin3140 ปีที่แล้ว +3

    我也是透過面試,被問倒後再去學習補強不足的地方,coding路上學海無涯...

  • @RogHaung
    @RogHaung ปีที่แล้ว +1

    想請問影片中有提到react會盡量把UI code 跟 state code分開,請問是怎麼分法呢?有沒有例子,因為很好奇,因為我常常把JSX 、hooks、功能都是寫同一個component 裡面

    • @foodchain7486
      @foodchain7486 ปีที่แล้ว +1

      可能像是 fetch data 就會寫成 hook,取得資料之後再放到 component 裡面去呈現(?)

    • @leosin5767
      @leosin5767 ปีที่แล้ว +1

      react上把UI 和state分開 最有名的是redux
      UI = f(state)
      雖然嚴格來說用container (a component that connects to the store, which is global) by definition無可能是pure的啦 (使用useSelector的一刻就已經depends on things other than input) 至少function component是這樣
      其實這個要看你想以哪一個層面去看 separation of concerns
      只能說jsx, hooks在同一個component/container上 是react的特點(jsx, styling, logic 全都是react 的concern)

  • @dsindun7224
    @dsindun7224 ปีที่แล้ว

    搞一个FP系列的吧,总结一下你学习到的,

  • @vesdhiteas5378
    @vesdhiteas5378 ปีที่แล้ว +2

    我之前也用c#學FP,我用的是這本functional programming in c#,後來很忙就沒看完
    聽你這樣一說,我之後若想重拿FP來玩的話,用c#來學不太適合了?😂

    • @XD-nl1wl
      @XD-nl1wl ปีที่แล้ว

      C# 應該更偏OO一點

    • @dickgg
      @dickgg ปีที่แล้ว

      dotNET 有 F# , 那個 F 就是 Functional

    • @syashin7668
      @syashin7668 ปีที่แล้ว

      微軟有F# 啊

  • @teh8207
    @teh8207 ปีที่แล้ว

    Tail recursive 要compiler 支援其實還要看語言是否支援

  • @treezhang13
    @treezhang13 10 หลายเดือนก่อน

    Haskell是FP的西瓜中间的一口,不得不品尝

  • @user-oo2hq6pl9t
    @user-oo2hq6pl9t หลายเดือนก่อน

    看完影片先默默的 fork `fp-ts`...

  • @forevertwo
    @forevertwo ปีที่แล้ว +2

    聽君一席話, 如聽一席話。

    • @james-kool
      @james-kool  ปีที่แล้ว

      我把我的經驗無保留的在這邊分享了,能不能從中得到一些東西取決於個人悟性,以及在人生中所在的位置

  • @YiuMingLai
    @YiuMingLai ปีที่แล้ว

    scala 吧,紿終學完fp, 工作上也是要用class.

  • @elliotching1142
    @elliotching1142 ปีที่แล้ว

    老师老师像我这种摆烂型不学 FP 可以吗😂 我只用 loop 我只用 OOP😂

    • @james-kool
      @james-kool  ปีที่แล้ว

      可以呀,至少會看TH-cam影片😂

  • @jimcheung6133
    @jimcheung6133 ปีที่แล้ว

    正在学 elixir ❤

  • @erhu65
    @erhu65 6 หลายเดือนก่อน

    RxJs算嗎?

  • @ac.23z
    @ac.23z ปีที่แล้ว

    可不可以分析什麼應用適合寫FB什麼應用適合寫OOP

  • @ekmanhsieh
    @ekmanhsieh ปีที่แล้ว

    Ramda 感覺比fp ts 更好用 文件上

  • @oo7521
    @oo7521 หลายเดือนก่อน

    學FP的好處是?

  • @houzeyu1584
    @houzeyu1584 ปีที่แล้ว +1

    R語言我記得就是偏向函數導向的語言,記得之前在學校學過,結果畢業出來被python屌打,不知道甚麼樣的需求會需要。不過能夠從不同的設計思路來學習一個程式語言,已經很厲害了,加油

    • @jimmy__uwu__
      @jimmy__uwu__ ปีที่แล้ว

      R哪是阿==
      少數見過這麼笨的玩愣

    • @hongliu4341
      @hongliu4341 ปีที่แล้ว

      R是計算機🤣🤣

    • @houzeyu1584
      @houzeyu1584 ปีที่แล้ว +1

      哈哈,我不是寫程式的,小丑竟是我自己,給大家見笑了!

    • @YYHo-kw2bi
      @YYHo-kw2bi ปีที่แล้ว

      R的purrr就很fp

    • @YYHo-kw2bi
      @YYHo-kw2bi ปีที่แล้ว

      我想research用的比較多吧r

  • @dsindun7224
    @dsindun7224 ปีที่แล้ว

    啥时候 来点硬 知识,别都 弄方法论的

  • @kewang3093
    @kewang3093 ปีที่แล้ว +1

    学rust呗