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
実務で使わないであろうHaskellを敢えて学んでみた
Search
Taketeru
April 21, 2024
0
38
実務で使わないであろうHaskellを敢えて学んでみた
Taketeru
April 21, 2024
Tweet
Share
Featured
See All Featured
Performance Is Good for Brains [We Love Speed 2024]
tammyeverts
10
950
Evolution of real-time – Irina Nazarova, EuRuKo, 2024
irinanazarova
8
810
Producing Creativity
orderedlist
PRO
346
40k
Code Review Best Practice
trishagee
69
18k
Statistics for Hackers
jakevdp
799
220k
Facilitating Awesome Meetings
lara
54
6.4k
Visualization
eitanlees
146
16k
KATA
mclloyd
30
14k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
126
52k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
138
34k
Agile that works and the tools we love
rasmusluckow
329
21k
Build The Right Thing And Hit Your Dates
maggiecrowley
36
2.8k
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を学び始め、関 数型プログラミングの良さを知り、 それがオブジェクト指向型言語にも有用であることを理 解した
ここから少しだけ話が飛躍します
プロダクトはなんらかの価値を生み出すことが目的
アプリケーションはそのための手段
つまり、目的を達成するために より良い手段を使っていけば良い
より良い手段の引き出しを増やすためには、 目の前の技術だけでなく、 幅広く学んでいくのが良いんだろうなぁ
実務で使うか否かだけではなく、 幅広く色んな知識を学んでいきたい それらの知識が繋がる時を信じて... (最後にやっとタイトル回収)
ご静聴ありがとうございました