Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
実務で使わないであろうHaskellを敢えて学んでみた
Search
Taketeru
April 21, 2024
58
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
実務で使わないであろうHaskellを敢えて学んでみた
Taketeru
April 21, 2024
Featured
See All Featured
Leveraging LLMs for student feedback in introductory data science courses - posit::conf(2025)
minecr
1
410
Mozcon NYC 2025: Stop Losing SEO Traffic
samtorres
1
560
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
SEO for Brand Visibility & Recognition
aleyda
0
4.7k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
31
3.4k
What the history of the web can teach us about the future of AI
inesmontani
PRO
1
710
Ecommerce SEO: The Keys for Success Now & Beyond - #SERPConf2024
aleyda
1
2.2k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
250
1.3M
Heart Work Chapter 1 - Part 1
lfama
PRO
10
36k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
The Language of Interfaces
destraynor
162
27k
Primal Persuasion: How to Engage the Brain for Learning That Lasts
tmiket
0
480
Transcript
実務で使わないであろう Haskellを敢えて学んでみた Taketeru
自己紹介 名前:Taketeru 職業:ソフトウェアエンジニア(2年目) 趣味:ゴルフ、飲酒、ミニマリズム 気になっていること:自作OS 悩み:引っ越し先を探すのが面倒くさい 外部のLT登壇は本日が2回目!
Haskellって何?
Haskellとは純粋関数型プログラミング言語
一旦、Haskellは置いといて...
なぜHaskellを学ぼうと思ったのか?
これまで培ってきたプログミングの メンタルモデルを壊して思考を整理したかった
(きっと)良くあるプログラミングの メンタルモデルの構築パターン
JavaやRubyなどのオブジェクト指向言語を使って、手続 き型プログラミングで簡単な実装をする
少しずつ実装するプログラムが大きくなっていき、クラス が肥大化する
どうやらオブジェクト指向プログラミングを すると良いらしい
なんとなくオブジェクトを設計し、 モノの抽象化をして、継承なんかを使ってみる ポリモーフィズムを実現したつもりになっている
なんかバグは多いし、 実装は分かりづらいし、 具象クラスに空っぽのメソッドが出現し始める
なんか違う、いや絶対違うと思い、 コード設計について勉強し始める
コード設計の勉強をしていくと... ➢ 継承は使わずに、委譲を使う ➢ オブジェクトはイミュータブルに設計する ➢ interfaceで振る舞いを抽象化する など...
え?オブジェクト指向プログラミングとは??
某kさんの話を聞く
「業務アプリケーションに、オブジェクト指向プログラミン グは必要ない」 (※若干の誇張あり)
え???
ナニモワカラナクナッタ
そうだ、 全然違うプログラミング言語を勉強してみよう
やっと本題 ここからHaskellを学び始めた話
Haskellとは純粋関数型プログラミング言語
純粋関数とは?
純粋関数は以下のような特徴をもつ関数 ➢ 同じ式を引数に与えた時に、常に同じ結果を返 す(参照透過性) ➢ 副作用(入出力、状態の変更、再代入など)を 持たない
具体的には?
純粋関数の例(Haskell)
ここからコード例はJavaで話を進めます
純粋関数の例(Java)
参照透過性を満たさない関数とは?
参照透過性を満たさない関数の例(Java)
副作用がある関数とは?
副作用がある関数の例(Java)
純粋関数の何が良いのか? ➢ テストがしやすい ➢ バグが起きにくい ➢ 実行順序に依存せず、並列処理もしやすい
Haskellでは、参照透過性を満たし、 副作用のない純粋関数が強制される
そんなHaskellを学んで、 実務にどんな良いフィードバックがあったか?
➢ 業務ロジック部分は純粋関数を意識して実装する ようになった → テスト容易性が上がり、バグも工数も減った ➢ モノ(オブジェクト)ではなく、コト(関数、メソッド)の 抽象化を考えるようになった
Haskellの純粋関数の考え方は他の言語でも有用
で、Haskellを学び始めて思考は整理されたか?
Haskellを学び始めて思考が整理された ➢ 特定のプログラミング手法に囚われる必要はな い ➢ ソフトウェアは保守性、拡張性、品質の高さが大 切であり、様々なプログラミング手法で培われて きたノウハウを組み合わせれば良い
実際、オブジェクト指向言語であるJavaにも、 関数型プログラミングの要素が入ってきている
そろそろまとめ
オブジェクト指向プログラミングを あまり理解せずに、コード設計を勉強したことで、意識せ ずに関数型プログラミングの考え方に触れ、Taketeru少 年は混乱した
そこで、純粋関数型言語であるHaskellを学び始め、関 数型プログラミングの良さを知り、 それがオブジェクト指向型言語にも有用であることを理 解した
ここから少しだけ話が飛躍します
プロダクトはなんらかの価値を生み出すことが目的
アプリケーションはそのための手段
つまり、目的を達成するために より良い手段を使っていけば良い
より良い手段の引き出しを増やすためには、 目の前の技術だけでなく、 幅広く学んでいくのが良いんだろうなぁ
実務で使うか否かだけではなく、 幅広く色んな知識を学んでいきたい それらの知識が繋がる時を信じて... (最後にやっとタイトル回収)
ご静聴ありがとうございました