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
社内のメンバーに「関数型プログラミングの学習・教育」についていろいろ聞いてみた
Search
Sponsored
·
Ship Features Fearlessly
Turn features on and off without deploys. Used by thousands of Ruby developers.
→
かとじゅん
March 24, 2023
Programming
2.3k
2
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
社内のメンバーに「関数型プログラミングの学習・教育」についていろいろ聞いてみた
かとじゅん
March 24, 2023
More Decks by かとじゅん
See All by かとじゅん
TAKTでAI駆動開発の品質を設計する
j5ik2o
7
1.6k
終盤で崩壊させないAI駆動開発
j5ik2o
3
2.9k
CQRS/ESになぜアクターモデルが必要なのか
j5ik2o
0
2.1k
メッセージ駆動が可能にする結合の最適化
j5ik2o
11
7.1k
曖昧なプロンプトでも正しいコードが書ける理由
j5ik2o
0
530
AIコーディングエージェントの現実と設計品質の重要性
j5ik2o
0
160
なぜイベント駆動が必要なのか - CQRS/ESで解く複雑系システムの課題 -
j5ik2o
17
8.3k
アクターシステムに頼らずEvent Sourcingする方法について
j5ik2o
8
1.7k
メッセージとイベントを中核に置いたシステム設計の有用性について
j5ik2o
12
4.5k
Other Decks in Programming
See All in Programming
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
290
AIを活用したE2Eテスト実装効率化のあゆみ / ebisu-mobile-14-kotetu
kotetuco
0
160
Language Server 使ってる? 〜VSCode と Zed の場合〜 / Are you using a Language Server? ~For VS Code and Zed~
handlename
0
820
フロントエンドとバックエンドで「1文字」を揃えよう
youkidearitai
PRO
0
780
LaravelLive Japan の裏方のすべて — 第188回 PHP勉強会@東京 (2026-06-24)
suguruooki
2
150
エンジニアと一緒にテストコードの設計と実装を改善した話
mototakatsu
0
250
act1-costs.pdf
sumedhbala
0
160
LLM本来の能力を解き放つサンドボックス技術とAI民主化への適用
yukukotani
3
4.8k
The Bowling Game- From Imperative to Functional Programming - Part 1
philipschwarz
PRO
0
240
Dataformのリポジトリを立ち上げるときにまずやること / dataform-day0-2026
snhryt
0
210
TSKaigi Night Talks 2026_TypeScriptでサプライチェーンの整合性を型に閉じ込める
geekplus_tech
0
430
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
350
Featured
See All Featured
Build The Right Thing And Hit Your Dates
maggiecrowley
39
3.2k
CSS Pre-Processors: Stylus, Less & Sass
bermonpainter
360
30k
Practical Orchestrator
shlominoach
191
11k
Kristin Tynski - Automating Marketing Tasks With AI
techseoconnect
PRO
0
280
DevOps and Value Stream Thinking: Enabling flow, efficiency and business value
helenjbeal
1
250
Technical Leadership for Architectural Decision Making
baasie
3
430
Max Prin - Stacking Signals: How International SEO Comes Together (And Falls Apart)
techseoconnect
PRO
0
200
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
750
Color Theory Basics | Prateek | Gurzu
gurzu
0
380
The #1 spot is gone: here's how to win anyway
tamaranovitovic
3
1.1k
Navigating Algorithm Shifts & AI Overviews - #SMXNext
aleyda
1
1.3k
Transcript
© Chatwork 社内のメンバーに 関数型プログラミングの学習・教育 についていろいろ聞いてみた テックリード 加藤潤一(かとじゅん) 2023/3/24 Chatwork株式会社
自己紹介 2 • twitter, github ともに j5ik2o • Chatworkで働いてます ◦
チーム横断的にいろんなことやって ます • よく使うプログラミング言語 ◦ Scala(仕事) ◦ Rust(趣味) • テスラ モデルY パフォーマンスというガ ジェットを買いました • WEB+DB PRESS vol132 「オブジェクト 指向神話からの脱却」のレビュー 最近、明治維新の人?と言われたりします
発表の目的 3 • Scala導入初期(2014年ぐらい)から関数型プログラミングは積極的に採用しており、 座学で教育するというよりはモブやペアで実践的に取り組んできた経緯があります • 今回は、みなさんがどのように学んできたのかを把握するために、Scalaや TypeScriptなどで関数型プログラミングを日常的に使っている人たちにアンケート を採ってみた。そのアンケート結果をみながら私見を挟みつつ、ゆるく発表してみ ようという企画です
• 僕らの現状を把握してみたという感じで「こうやるといいよ」みたいな提案はあま りないです…。サンプルがn=7なのでこの資料を鵜呑みにしないでください… • イベントを盛り上げるアイスブレイク的な発表です。お酒でも飲みながら、ゆるく 聞いてください
会社概要 4 会社名 Chatwork株式会社 代表取締役CEO 山本 正喜 従業員数 267名(2022年3月末日時点) 所在地
東京、大阪、ベトナム、台湾 設立 2004年11月11日
Chatworkとは 5 ※Nielsen NetView 及びNielsen Mobile NetView Customized Report 2022年5月度調べ月次利用者(
MAU:Monthly Active User)調査。※調査対象は Chatwork、Microsoft Teams、Slack、LINE WORKS、Skypeを含む47サービスを Chatwork株式会社にて選定。 効率的に情報共有できる グループチャット 仕事の見える化ができる タスク管理 見落としがなくなる ファイル管理 いつでも会議ができる ビデオ/音声通話
Chatworkは利用者数No.1*のビジネスチャット 6 * Nielsen NetView 及びNielsen Mobile NetView 2021年4月度調べ月次利用者(MAU:Monthly Active User)調査
3月 リリース 10万社 突破! 20万社 突破! 30万社 突破! 導入社数 35万4000社以上! (2021年12月末日時点)
早速 本題に(おそらくgdります…)
アジェンダ:アンケートの質問一覧&あいだに私見をはさみます 8 • Q1. 関数型プログラミングが有用だと感じる理由は? • Q2. どのように関数型プログラミングを学びましたか(複数可)? • Q3.
関数型プログラミングの学習難易度はどのくらいか? • Q4. 関数型プログラミングの教育難易度はどのくらいですか? • Q5. 関数型プログラミングを教えるならどの言語がよいか? • Q6. Q5のプログラミング言語をおすすめする理由は? • Q7. 関数型プログラミングを学ぶ人へのアドバイスはありますか?
Q1. 関数型プログラミングが有用だと感じる理由は? 9 • テストがしやすい • 副作用を排除したIN/OUTが明確(参照透明) • 式の合成で作られる関数はコードの品質が高い •
合成しやすい式を使ってコード部品を小さく作りやすい • 継承に頼らない設計が可能 • 並行性に優れたプログラミングが可能 • クロージャをうまく使えばはクラスと 同等の使い方ができる さすがに有用性について否定 的な人はいなかった笑
【私見】 有用性の一事例 10 mapはflatMapと succeedで、optはmap とsucceedでつくられ る。副作用がないため 関数の挙動が掴みやす い
Q2. どのように関数型プログラミングを学びましたか(複数可)? 11 • 書籍 ◦ 『Scala 関数型デザイン &プログラミング』 ◦
『Scalaスケーラブルプログラミング』 ◦ 『すごいHaskellたのしく学ぼう!』 ◦ 『Real World Haskell』 ◦ 『プログラミングElixir』 • 公式ドキュメント類 ◦ Hoogle x Hackage 身のみ蓋もないが、良書を使った自 学習が基本。昔に比べたらだいぶ高 速道路だと思う
【私見】『Scala 関数型デザイン &プログラミング』は開眼する本 12 • すこしScalaに慣れたらこの本がお勧め。 • 関数型プログラミングのよさをいかした設計を学ぶ意味で、こ の本はすごくよい •
この本は読むというより「エクササイズ」を実際に解き、コー ドを書く本 ◦ ChatworkでScala採用初期のころList型を実装する課題 で盛り上がった • よい本だけど、絶版…。 ◦ MANNINGなら買えます。『Functional Programming in Scala』現在Scala3対応のセカンドエディションあり • 他の言語でも、考え方をある程度適用可能 ◦ 本書で紹介されるParserコンビネータライブラリ、 Property-based testingライブラリをRustで実装した
Q3. 関数型プログラミングの学習難易度はどのぐらいですか? 13 難易度は比較的高め?
Q3. 関数型プログラミングの学習難易度はどのくらいか? 14 • 学習目的: 関数型プログラミングの理解度や求めるスキルレベルによって、難易度が変わりま す。現場で実践に必要なレベルであれば習得は可能で、慣れるまでに2〜3ヶ月かかるとの意見 があります。 • 既存のプログラミング経験:
ある程度のプログラミング経験があり、別のパラダイムを学ぶ場 合、先入観が邪魔して難易度が上がることがあるとの意見があります。ただし、関数型プログラ ミングを早い段階で学ぶことで、既存のパラダイムへの過学習が少なく、理解が容易になるとい う意見もあります • 純粋関数型言語とマルチパラダイム言語: 純粋関数型言語でのプログラミングは難しいとの意見 がありますが、多くの現代のプログラミング言語が関数型プログラミングの機能を備えているた め、基本的な概念の学習は難しくないとされています。 • 数学的な知識: 関数型プログラミングを理解し、困難な問題を解決するためには、数学的な知識 や理解がある程度必要となるとの意見があります。 基本的な概念の習得は、多くのプログラミング言語が関数型プログラミングの機能を備えているた め、難しくないとされています。しかし、純粋関数型プログラミングを追求したり、複雑な問題を解 決するために関数型プログラミングを活用する場合、数学的な知識や理解が求められるため、難易度 が上がることがあります。
Q4. 関数型プログラミングの教育難易度はどのくらいですか? 15 • どう教えるかによる? • 数学の得意不得意が大きく影響すると思うので、一概に言えないので、真ん中に。 • これも何をどこまで教えるか次第かなと... 「何を学ぶか」に依存するので
答えるのは難しい・・・ 具体的な回答は得られなかっ た
Q5. 関数型プログラミングを教えるならどの言語がよいか? 16
Q6. Q5のプログラミング言語をおすすめする理由は? 17 • Haskell: 書籍との対応が取りやすく、他のパラダイムでの記述が難しく、関数型プログラミング のエッセンスを学ぶのに適しています。特にバックエンド開発者に適しているとの意見がありま す。 • Elm:
見た目が動くものを作れるため直感的に理解しやすく、他のパラダイムでの記述が難しいた め、関数型プログラミングのエッセンスを学ぶのに適しています。特にフロントエンド開発者に 適しているとの意見があります。 • Rust: 手続き型プログラミングを書くことができ、徐々に関数型プログラミングに移行できると いう特徴があります。このアプローチは、関数型プログラミングに徐々に慣れていくのに役立つ でしょう。 • 軽量で実行環境が得られやすい言語: 学習者がすぐに実行できる言語を選ぶことで、関数型プログ ラミングの学習が容易になるとの意見があります。 教える言語は学習者の背景や目的、そして言語の特性によって異なります。実用性が高く、関数型プロ グラミングのエッセンスを学ぶのに適した言語を選ぶことが重要です。HaskellやElmは、関数型プロ グラミングの原理を学ぶには適しており、バックエンド開発者やフロントエンド開発者にそれぞれ推奨 されています。Rustは徐々に関数型プログラミングに移行するアプローチをとることができる点で、一 部の学習者にとって適しているかもしれません。
【蛇足】関数型プログラミングが怖いと感じられる理由と対処法 18 関数型プログラミングが「怖い」と感じられる理由は人それぞれですが、一般的には以下のような要素 が考えられます。 • 未知のものへの恐れ: 関数型プログラミングは、命令型プログラミングとは異なるパラダイムであ り、初めて学ぶ人にとっては未知のものです。そのため、学習の難しさや新しい概念に対する恐 れから、「怖い」と感じることがあります。 •
理解が難しい概念: 関数型プログラミングには、高階関数や純粋関数、カリー化、モナドなど、独 自の概念が多く存在します。これらの概念を理解することが難しく感じるため、「怖い」と感じ ることがあるでしょう。 • 学習曲線: 関数型プログラミングをマスターするためには、従来の命令型プログラミングとは異な る思考方法やアプローチが必要です。そのため、学習曲線が急であり、習得が難しいと感じるこ とがあります。 • 利用される言語: 関数型プログラミング言語(HaskellやScalaなど)は、一般的なプログラミング 言語(PythonやJavaなど)とは異なる構文や特性を持っています。これらの言語に慣れるまでに は時間がかかり「怖い」と感じることがあるでしょう。 ただし、アンケート回答者たちが「怖くない」と言っているように、関数型プログラミングは十分に学 べるものです。適切な学習方法を見つけ、継続的に学ぶことで、関数型プログラミングの恩恵を享受で きるようになります。未知のものへの恐れは自然なことですが、挑戦することで克服できるはずです。
Q7. 関数型プログラミングを学ぶ人へのアドバイスはありますか? 19 • パラダイムや設計の指向を学ぶことは、ソフトウェア開発の視野を広げることにつながりま す。関数型プログラミングもその一つであり、取り組みをラフに捉えることで、怖さやプレッ シャーを減らすことができます。 • 関数型プログラミングの学習は、恐れることはありません。ポジティブな態度で取り組むこと で、学習の難しさを軽減できるでしょう。
• 学習の目的を明確に持っておくことが重要です。興味や好奇心から学ぶのか、解決したい課題 があるのかによって、学習の進め方や焦点が変わるためです。 関数型プログラミングを学ぶ際には、柔軟な態度で取り組み、学習の目的を明確に持つことが重要で す。パラダイムや設計指向を学ぶことで、ソフトウェア開発の視野が広がり、新たなアイデアやアプ ローチが見えてくるでしょう。学習過程で恐れず、ポジティブな態度で関数型プログラミングに取り 組むことで、より効果的にスキルを習得し、問題解決能力を向上させることができます。最終的に は、関数型プログラミングが提供するエッセンスを、自分の開発スキルに活かすことが大切です。
© Chatwork おわり
None