Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
本当に 0 からの 関数型プログラミングの歩き始め方 / How to Walk into F...
Search
TAKASE Kazuyuki
March 24, 2023
Education
1
1.2k
本当に 0 からの 関数型プログラミングの歩き始め方 / How to Walk into Functional Programming from Scratch
このスライドは、2023/03/24 に開催された「第四回 関数型プログラミング(仮)の会」で発表したものです。
cf.
https://opt.connpass.com/event/272470/
TAKASE Kazuyuki
March 24, 2023
Tweet
Share
More Decks by TAKASE Kazuyuki
See All by TAKASE Kazuyuki
型付け力を強化するための Hoogle のすゝめ / Boosting Your Type Mastery with Hoogle
guvalif
1
270
A Tour of Anti-patterns for Functional Programming
guvalif
0
3.5k
"数学" をプログラミングしてもらう際に気をつけていること / Key Considerations When Programming "Mathematics"
guvalif
0
720
"情報設計" と "体験設計" の観点から捉える UI 構築の考え方 / Approaches to UI Construction from the Perspectives of "Information Architecture" and "Experience Design"
guvalif
0
760
Chatwork における採用広報と技術広報のリアル / Trial & Error of New Grad Developer Relations at Chatwork
guvalif
0
560
宣言的 UI 時代のクライアントサイド DDD 大考察 / Client-side DDD in the Age of Declarative UI
guvalif
11
11k
新卒採用・育成を通じて、プロダクト人材が育つカルチャーを作りたいお話 / How to Make Developer's Educational Culture
guvalif
2
1.9k
Other Decks in Education
See All in Education
社外コミュニティと「学び」を考える
alchemy1115
2
170
SkimaTalk Introduction for Students
skimatalk
0
380
Avoin jakaminen ja Creative Commons -lisenssit
matleenalaakso
0
1.9k
Virtual and Augmented Reality - Lecture 8 - Next Generation User Interfaces (4018166FNR)
signer
PRO
0
1.7k
AIC 103 - Applications of Property Valuation: Essential Slides
rmccaic
0
200
ANS-C01_2回不合格から合格までの道程
amarelo_n24
1
240
系統性を意識したプログラミング教育~ガチャを実装しよう~
asial_edu
0
400
JPCERTから始まる草の根活動~セキュリティ文化醸成のためのアクション~
masakiokuda
0
180
Implicit and Cross-Device Interaction - Lecture 10 - Next Generation User Interfaces (4018166FNR)
signer
PRO
2
1.7k
Info Session MSc Computer Science & MSc Applied Informatics
signer
PRO
0
180
新卒交流ワークショップ
pokotyamu
0
410
実務プログラム
takenawa
0
4.8k
Featured
See All Featured
Optimising Largest Contentful Paint
csswizardry
37
3.3k
GraphQLとの向き合い方2022年版
quramy
48
14k
Being A Developer After 40
akosma
90
590k
Unsuck your backbone
ammeep
671
58k
[RailsConf 2023] Rails as a piece of cake
palkan
55
5.6k
Into the Great Unknown - MozCon
thekraken
39
1.9k
4 Signs Your Business is Dying
shpigford
184
22k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
31
2.4k
A designer walks into a library…
pauljervisheath
207
24k
Designing Dashboards & Data Visualisations in Web Apps
destraynor
231
53k
Mobile First: as difficult as doing things right
swwweet
223
9.7k
Refactoring Trust on Your Teams (GOTO; Chicago 2020)
rmw
34
3k
Transcript
© Chatwork 本当に 0 からの 関数型プログラミングの歩き始め方 2023/03/24 [Fri] DevRel 部
MGR 高瀬 和之 (@Guvalif) Chatwork 株式会社
2019 年に Chatwork 株式会社へ フロントエンド・エンジニア としてジョインし、 リリース基盤やビデオ通話アプリケーションの開発に従事。 2020 年から エンジニア採用広報に転身
し、技術イベント運営や エンジニア採用を主業務とする。パラレルワークで講師業 も営む。 Opt さん主催のイベントには、直近のものだと 「第二回 プログラミング教育について話し合う会」に登壇しました 自己紹介 - 高瀬 和之 (たかせ かずゆき) 2 :@Guvalif YouTube にて アーカイブ配信中!
- 良い設計を発見する ための、ベース知識として用いる - 安全な開発を実現する ための、勘所として用いる - これらは決してプログラミング言語に依存すること無く、普遍的に応用可能 だと考える -
つまり、ライトユーザーです (コワクナイヨ! 関数型プログラミングに対する私の立ち位置 3
前提整理 "関数" に親しんでもらう "高階関数" に親しんでもらう "型" に親しんでもらう "パラダイム" に親しんでもらう 1
2 3 4 5 AGENDA アジェンダ
前提整理 1
"0 から" とはどのくらいのレベル感を想定しているか? 6 - "知っている & できない" から、1 つステップアップ
しようとしているレベル感 - 例) プログラミングっておもしろそうだな、まずは Progate で勉強してみようかな? 知識伝達 知識の 分解・再構成 応用知識の 習得 基礎知識の 習得 原体験 経験学習 経験学習 経験学習 知らない & できない 知っている & できない 考えるとできる 考えなくてもできる 教えられる
教材選定と検証母集団 7 - "知っている & できない" から 1 つステップアップしようとしているレベル感の人たちに 対してラーニングを提供したいという背景から、見た目で
Trial & Error がわかりやすい教材 を 選定することが多いです → JavaScript (& HTML + CSS) を活用 - 検証母集団は: - 18 〜 60 才の男女,約 100 人 - 職種や文系・理系の区分は問わない ※ "エンジニア" かつ "考えるとできる" 人のステップアップをどう支援するか?に関しては、 もし要望があればどこかでお話します
"関数" に親しんでもらう 2
学習体験の意図 / 状態定義例 9 ▪ 意図 - 関数型プログラミングをしようにも、関数の有用性 をわかってもらわないことには始まらない →
まずはいくつかのパターンを通じて、関数に慣れ親しんでもらう ▪ 状態定義例 プログラムの全体を構成する手続きが実装できる プログラムの全体を構成する手続きから 構造を分解し関数に置き換えて実装できる
課題設定例 10 - 以下の 3 パターンに分けて、課題の提示やフィードバックを繰り返す: - 処理のまとまりに対して、名前を付ける 用途 -
似た記述であって一部だけが異なる処理に対して、テンプレート化する 用途 - なんらかの命令と結果の組に対して、アクターに見立てる 用途 ※ まず慣れ親しむことを最優先するため、この時点で "副作用" / "クロージャ" / "テスタビリティ" などのキーワードには触れません 発展的指示として … 凝集度っていう考え方も調べてみるとおもしろいよ
"高階関数" に親しんでもらう 3
イベント駆動を理解しその上で インタラクションを実装できる 学習体験の意図 / 状態定義例 12 ▪ 意図 - 関数をファーストクラスなものとして扱う原体験
を得てもらう → map / filter / reduce などを始めとした、主要な高階関数を理解するための足がかり ともする ▪ 状態定義例 順次・反復・分岐処理は実装できるが インタラクションの実装方法は知らない λ. λ. λ.
課題設定例 13 - 「ユーザーの入力に反応できるのはなぜか?」という発問を行う - イベントループにより、さまざまなイベントを待ち受けることができる - イベントの種類に応じて、行いたい処理を登録し切り替えることができる - ↑の登録処理は、まさに
関数を値として受け渡す ことに他ならない → 高階関数の具体例 ※ 本質的には、コールバック関連の課題設定であればなんでも良いと思います カリー化を用いた課題設定も、同様にバリエーションとしてありだと思います 発展的指示として … 関数を返してくれるケースで便利な用途ってありそう?
"型" に親しんでもらう 4
学習体験の意図 / 状態定義例 15 ▪ 意図 - 型があることでエラーや実装のミスを減らせる ことを実感してもらう →
ここでの仕掛けを通じて、代数的データ型や Monadic Computations への応用 も見据える ▪ 状態定義例 データに性質の違いがあることは知っているが 暗黙的変換などで実装ミスをすることがある 型システムを通じてデータの性質の違いを可視化し 未然に暗黙的変換に気づくことができる λ→ λ2 λP λP2 = or ≠
課題設定例 16 - HTML の各種 attribute に対して、値を入れたり取り出したりする課題の提示を行う: - 特に数値や配列を入れるような課題だと、文字列への 暗黙的変換
が起きて良い - 一通りバグらせてもらった後、TypeScript を導入してもらう - 未然に暗黙的変換が防げる → 型システムの恩恵の具体例 ※ 動的型付けプログラミング言語だと、このあたりのバグらせパターンは設計しやすいです undefined になるパターンなども、良く課題として用いています 発展的指示として … 型レベル計算ってキーワードも調べてみるとおもしろいよ
"パラダイム" に親しんでもらう 5
View / Model / Event が混在した状態の ペインを理解し、解決手法に興味が持てている View / Model
/ Event が混在した状態で なんらかの UI を実装できる 学習体験の意図 / 状態定義例 18 ▪ 意図 - 関数型プログラミングの実応用に触れてもらうことで、応用知識習得への導線 をつくる → ここからが本当の関数型プログラミングへの入り口 (他の登壇者の方がノウハウをお話してくれる … はず) ▪ 状態定義例
課題設定例 19 - 「見た目を操作しているのか、値を操作しているのか、なんだがスパゲッティ …」 - 宣言的 UI っていう考え方があるよ、React っていうものを調べてみるといいよ
- 「イベントが複雑に入り組んでいるときに、上手く管理する方法ってないかな …?」 - 非同期ストリーム っていう考え方があるよ、RxJS っていうものを調べてみるといいよ - 「UI の変化が複雑な時に、うまくデバッグする方法ってないかな …?」 - イベントソーシング っていう考え方があるよ、Redux っていうものを調べてみるといいよ 発展的指示として … Elm ってプログラミング言語も調べてみるとおもしろいよ
まとめ 01 0 からの育成を見据えるなら、基礎知識の習得フェーズにおいても さまざまな伏線を仕込むことが大事 20 02 トップダウンで関数型プログラミング言語を用いるケースは未検証なので もし事例をお持ちの方がいればディスカッションしましょう!
人事・組織戦略立案 ブランドリフト 採用・育成 ピープルマネジメント We are Hiring !!! 21 本部長
VPoE & ピープルマネージャー 人事 & 学習体験デザイナー エンジニア採用広報 HRBP 全体支援 人事企画 & 組織開発を横断するスクラムチームで、プロダクト人材の成長環境 を一緒につくりませんか?
働くをもっと楽しく、創造的に