JavaTweetTweet「関数型プログラミング」という言葉が、良く聞かれるようになってきました。「安全なプログラムが書ける」とか、「簡潔な表現ができる」とか、噂レベルでは聞きつつ、学術的な香りが強いのかなと思っていたので、手を出していませんでした。関数型プログラミングを勉強しようと思ったのか?では、なぜ関数型プログラミングを勉強しようと思ったかというと、「実際に活用できるのではないか」というイメージが湧いたというか、必要に迫られたからです。最近ブログにもアップしていますが、分散環境での高速な分析について検証をしています。Pushの解析基盤の強化です。Sparkの操作を対話シェルで試してみる!データが大規模化してくると、性能要件を達成するために、処理の並列化が必要になります。並列処理というのは、実際にやってみると難しいです。その難しさの原因は、並列して実行される処理が、お互いに影響を及ぼし合ってしまうことです。関数型プログラミングは、そういうお互いに影響してしまうような難しい部分を、極端に少なくしてくれます。APIを学ぶそういうわけで、関数型言語や、関数型プログラミングが直接的に使えずとも、考え方は解析基盤の強化に使えそうだ、ということで勉強することにしました。8から関数型プログラミングの考えを取り込みはじめたので、ここから入門しようと思いました。8で使えるようになったラムダ式の表現を、今までのJavaのインタフェースとの比較で分かりやすく説明しています。これを読んで、Javaでのラムダ式の表現を学ぶことができました。X、Eclipse、Mavenへの導入から。APIについて説明されています。APIを使うと、今までのfor文を分かりやすく書き換えることができます。関数型プログラミングの考えを学ぶ前の本は、Javaの新しい機能の説明、という感じで、関数型プログラミングの説明には踏み込んでいません。そこで、もう少し踏み込んで関数型プログラミングを学びたくなったので、この本を読みました。8ラムダ式とStreamこの本では、今までの命令型プログラミングと、関数型プログラミングを比較しながら、表現の簡潔さなどについても触れています。APIについても、parallelメソッドひとつで即座に処理を並列化できたり、遅延計算によって無駄なリソース消費をしないことなども挙げていて、関数型プログラミングのメリットを理解することができます。本格的な関数型言語への入門ここまでJavaで学んできましたが、そうは言ってもJavaは「関数型プログラミングを取り入れた言語」にすぎません。最後に、Javaから離れて、本格的に関数型言語に入門します。──簡潔で、正しいコードを書くためにこの本は、「関数型プログラミングとは」という話から、実際にHaskellを使って、関数型のプログラミングを体験できるところまで説明されています。この本の半分くらいは、Haskellの使い方の説明ですが、Haskellを学ぶことが直接的に関数型プログラミングを学ぶことになります。World関数型プログラミングの話で時々名前を聞く、モナドという概念についても説明されています。次はどうするか?ここまで読んで、Javaに取り入れられた関数型プログラミングの具体的な理解から、Haskellによるかなり抽象的な考え方の理解まですることができました。次は、Haskellをもう少し使ってみて関数型の概念を体で理解できるようにするか、もう少しゆるくScalaを使って何かサービスを作るかをしてみようと思っています。Reactってなんだ?SIROK技術勉強会で発表しました。R3のシフター交換2016年1月10日3年ぶりのPHP。最近のパッケージ管理ツールComposerに触れてみました。可視化ライブラリD3.jsの設計が素晴らしすぎる。エンジニアリング半分で頑張っています。広告業界と無関係な僕がさっぱり理解できないアドテク用語を調べた。2014年3月30日WEBアクセス解析ツールMixpanelが簡単なのに凄い。