* おすすめ
考えることが大好きな筋金入りのプログラマーや数学好きは、とても楽しめると思います。
* 翻訳
英語版も読んでおりますが、翻訳は普通で特に気になりません。
* 内容
副作用の無い純粋関数でのScalaを見事に表現されている。
定義→定理→証明で実力をつけていく数学書のスタイルでとても効果が実感しやすい。
Scala版のSICPみたいな本。
* 前提
ただし、前提としてCやJavaでフィボナッチ数列の再帰処理をすらっとかける程度の基礎力は無いと読めない。
自分で汗をかいて考えずに、答えを覚えて利用するタイプのプログラマー?も読めない。

無料のKindleアプリをダウンロードして、スマートフォン、タブレット、またはコンピューターで今すぐKindle本を読むことができます。Kindleデバイスは必要ありません。
ウェブ版Kindleなら、お使いのブラウザですぐにお読みいただけます。
携帯電話のカメラを使用する - 以下のコードをスキャンし、Kindleアプリをダウンロードしてください。
Scala関数型デザイン&プログラミング ―Scalazコントリビューターによる関数型徹底ガイド (impress top gear) 単行本(ソフトカバー) – 2015/3/20
一貫した、合成可能な、美しい方法へ。
関数型を深める!
◎データ構造/入出力/エラー処理を関数型で記述
◎ライブラリを設計・開発
◎関数型プログラミングの共通パターンを見抜く
Scalaは、オブジェクト指向と関数型のいずれにも対応した言語ですが、本書では関数型を指向し、より簡潔で洗練された副作用のない手法を解説しています。「モジュール化/再利用化/並列化を進めやすい」「バグが発生しにくい」「テストが容易になる」といったメリットを享受すべく、関数型というプログラミングパラダイムを深めていきましょう。 ※ 本書は『Functional Programming in Scala』の翻訳書です。
■『まえがき』より
よいソフトウェアを記述するのは容易なことではありません。他のアプローチを使って何年も格闘してきた末に、私たちは関数型プログラミングに出会い、心を奪われました。関数型プログラミングのアプローチは他とは異なるものですが、その教義がプログラムを作成するための一貫した、合成可能な、美しい方法へといかにしてつながるのかを私たちは次第に理解するようになりました。
…略…
自分たちの学習経験から、書きたい本のイメージは明確にあったので、すぐに簡単にできるだろうと考えていました。結局4年以上もかかったわけですが、よい本ができたと考えています。これは私たちが関数型プログラミングを学んでいたときにあればよかったと思える本です。
私たちが関数型プログラミングに出会ったときの興奮が少しでも伝わることを願っています。
■『本書に寄せて --- Martin Odersky Scala言語設計者』より
本書は深く考えさせる本です。細部への注意を促し、プログラミングに対するあなたの考え方を否定するかもしれないからです。本書を読み、推奨されている練習問題を解くことで、純粋関数型言語とは何か、その言語で何を表現できるか、それにはどのようなメリットがあるかについて理解を深めることができるでしょう。
特に気に入っているのは、すべてがこの1冊に含まれていることです。可能な限り単純な表現から始まり、すべての抽象概念を詳しく説明した後、それらの上にさらに抽象概念を組み上げていきます。ある意味、表紙の向こうにScalaの別世界が展開します。その世界では、ミュータブルな状態は存在せず、すべての関数が純粋です。よく使用されるScalaライブラリは主に、関数型のインターフェイスを持ちながらも部分的に命令型の実装に基づいているため、この理想郷に少し似つかわしくありません。私の考えでは、ミュータブルな状態を関数型のインターフェイスにカプセル化できることは、Scalaの長所の1つです。しかし、その能力がよく誤用されることも事実です。それにはまって抜けられなくなっていることに気づいた場合は、本書が強力な毒消しになります。
関数型を深める!
◎データ構造/入出力/エラー処理を関数型で記述
◎ライブラリを設計・開発
◎関数型プログラミングの共通パターンを見抜く
Scalaは、オブジェクト指向と関数型のいずれにも対応した言語ですが、本書では関数型を指向し、より簡潔で洗練された副作用のない手法を解説しています。「モジュール化/再利用化/並列化を進めやすい」「バグが発生しにくい」「テストが容易になる」といったメリットを享受すべく、関数型というプログラミングパラダイムを深めていきましょう。 ※ 本書は『Functional Programming in Scala』の翻訳書です。
■『まえがき』より
よいソフトウェアを記述するのは容易なことではありません。他のアプローチを使って何年も格闘してきた末に、私たちは関数型プログラミングに出会い、心を奪われました。関数型プログラミングのアプローチは他とは異なるものですが、その教義がプログラムを作成するための一貫した、合成可能な、美しい方法へといかにしてつながるのかを私たちは次第に理解するようになりました。
…略…
自分たちの学習経験から、書きたい本のイメージは明確にあったので、すぐに簡単にできるだろうと考えていました。結局4年以上もかかったわけですが、よい本ができたと考えています。これは私たちが関数型プログラミングを学んでいたときにあればよかったと思える本です。
私たちが関数型プログラミングに出会ったときの興奮が少しでも伝わることを願っています。
■『本書に寄せて --- Martin Odersky Scala言語設計者』より
本書は深く考えさせる本です。細部への注意を促し、プログラミングに対するあなたの考え方を否定するかもしれないからです。本書を読み、推奨されている練習問題を解くことで、純粋関数型言語とは何か、その言語で何を表現できるか、それにはどのようなメリットがあるかについて理解を深めることができるでしょう。
特に気に入っているのは、すべてがこの1冊に含まれていることです。可能な限り単純な表現から始まり、すべての抽象概念を詳しく説明した後、それらの上にさらに抽象概念を組み上げていきます。ある意味、表紙の向こうにScalaの別世界が展開します。その世界では、ミュータブルな状態は存在せず、すべての関数が純粋です。よく使用されるScalaライブラリは主に、関数型のインターフェイスを持ちながらも部分的に命令型の実装に基づいているため、この理想郷に少し似つかわしくありません。私の考えでは、ミュータブルな状態を関数型のインターフェイスにカプセル化できることは、Scalaの長所の1つです。しかし、その能力がよく誤用されることも事実です。それにはまって抜けられなくなっていることに気づいた場合は、本書が強力な毒消しになります。
- 本の長さ384ページ
- 言語日本語
- 出版社インプレス
- 発売日2015/3/20
- 寸法18.5 x 2.3 x 23.2 cm
- ISBN-104844337769
- ISBN-13978-4844337768
この商品を見た後に買っているのは?
ページ 1 以下のうち 1 最初から観るページ 1 以下のうち 1
商品の説明
著者について
■著者
◎Paul Chiusano(ポール・キウザーノ)
Scalaや関数型プログラミングなどのソフトウェア開発コンサルタント。2008年以降、Scalaによる関数型プログラムを商用ベースで展開。
◎Rúnar Bjarnason(ルナー・ビャルナソン)
プログラマー歴は12年。2008年から関数型プログラミングに注力。関数型プログラミングやScalaプログラミングをテーマにブロガーやスピーカーとして活躍中。ScalazライブラリやJava関数型ライブラリ開発の主要なコントリビューターである。
■翻訳者
◎株式会社クイープ
1995年、米国サンフランシスコに設立。コンピュータシステムの開発、ローカライズ、コンサルティングを手がけている。2001年に日本法人を設立。主な訳書に、『IT技術者なら知っておきたいストレージの原則と技術』、『Smashing Android UI』、『シスコ技術者認定試験 公式ガイドブック Cisco CCENT/CCNA ICND1 100-101J』、『シスコ技術者認定試験 公式ガイドブック Cisco CCNA Routing and Switching ICND2 200-101J』、『Raspberry Pi ユーザーガイド 第2版』などがある(いずれもインプレス発行)。http://www.quipu.co.jp
■テクニカルレビューア
◎水島 宏太
東京都の某社にてエンジニアとして活動中。プログラミング言語(特にScala)や型システム、パーサーなどといった話題が大好き。一般社団法人Japan Scala Association代表理事。
◎吉田 憲治
2013年、2014年と、Scalazへ一番多くコミットしているコミッター。twitterアカウント @xuwei_k
◎Paul Chiusano(ポール・キウザーノ)
Scalaや関数型プログラミングなどのソフトウェア開発コンサルタント。2008年以降、Scalaによる関数型プログラムを商用ベースで展開。
◎Rúnar Bjarnason(ルナー・ビャルナソン)
プログラマー歴は12年。2008年から関数型プログラミングに注力。関数型プログラミングやScalaプログラミングをテーマにブロガーやスピーカーとして活躍中。ScalazライブラリやJava関数型ライブラリ開発の主要なコントリビューターである。
■翻訳者
◎株式会社クイープ
1995年、米国サンフランシスコに設立。コンピュータシステムの開発、ローカライズ、コンサルティングを手がけている。2001年に日本法人を設立。主な訳書に、『IT技術者なら知っておきたいストレージの原則と技術』、『Smashing Android UI』、『シスコ技術者認定試験 公式ガイドブック Cisco CCENT/CCNA ICND1 100-101J』、『シスコ技術者認定試験 公式ガイドブック Cisco CCNA Routing and Switching ICND2 200-101J』、『Raspberry Pi ユーザーガイド 第2版』などがある(いずれもインプレス発行)。http://www.quipu.co.jp
■テクニカルレビューア
◎水島 宏太
東京都の某社にてエンジニアとして活動中。プログラミング言語(特にScala)や型システム、パーサーなどといった話題が大好き。一般社団法人Japan Scala Association代表理事。
◎吉田 憲治
2013年、2014年と、Scalazへ一番多くコミットしているコミッター。twitterアカウント @xuwei_k
登録情報
- 出版社 : インプレス (2015/3/20)
- 発売日 : 2015/3/20
- 言語 : 日本語
- 単行本(ソフトカバー) : 384ページ
- ISBN-10 : 4844337769
- ISBN-13 : 978-4844337768
- 寸法 : 18.5 x 2.3 x 23.2 cm
- Amazon 売れ筋ランキング: - 417,773位本 (本の売れ筋ランキングを見る)
- - 460位開発技法
- カスタマーレビュー:
-
トップレビュー
上位レビュー、対象国: 日本
レビューのフィルタリング中に問題が発生しました。後でもう一度試してください。
2016年4月30日に日本でレビュー済み
Amazonで購入
2016年3月5日に日本でレビュー済み
Amazonで購入
[内容]
一方的にやり方を説く類書と異なり、純粋関数型プログラミングで用いられるモナドによる抽象化などについて、どうしてそれを用いるのが必然なのかを成り立ちから説明してくれています。
しかし、内容は概念的・抽象的で、説明するよりは練習問題を通じて体感させる方針のためかなり難解です。
得られるものには5つ星をつけてもいいのですが、通常レベルのプログラミングでは必要ないことを考えると、気軽に手を出す本ではないように思います。
[要求される読者レベル]
中級以上のプログラミング経験は必要です。
特にPart II が非常に読みづらいので、Akka, ScalaCheck, scala.util.parsing.combinatorまで知っていると多少有利かもしれません。
また、Haskellをある程度知っていないと、この本が何を目指しているのかわからないと思います。
[GitHub(英語版Web資料)]
練習問題解答は、章番号を書いていないため探しにくいです。
各章に「チャプターノート参照」とありますが、あまり参照元の説明になっていません。
[その他]
FRP(Functional Reactive Programming)については本文には説明がなく、GitHub上で触れるのみだったのが少し残念でした。
一方的にやり方を説く類書と異なり、純粋関数型プログラミングで用いられるモナドによる抽象化などについて、どうしてそれを用いるのが必然なのかを成り立ちから説明してくれています。
しかし、内容は概念的・抽象的で、説明するよりは練習問題を通じて体感させる方針のためかなり難解です。
得られるものには5つ星をつけてもいいのですが、通常レベルのプログラミングでは必要ないことを考えると、気軽に手を出す本ではないように思います。
[要求される読者レベル]
中級以上のプログラミング経験は必要です。
特にPart II が非常に読みづらいので、Akka, ScalaCheck, scala.util.parsing.combinatorまで知っていると多少有利かもしれません。
また、Haskellをある程度知っていないと、この本が何を目指しているのかわからないと思います。
[GitHub(英語版Web資料)]
練習問題解答は、章番号を書いていないため探しにくいです。
各章に「チャプターノート参照」とありますが、あまり参照元の説明になっていません。
[その他]
FRP(Functional Reactive Programming)については本文には説明がなく、GitHub上で触れるのみだったのが少し残念でした。
2015年4月30日に日本でレビュー済み
Amazonで購入
私は大学の講義でOCamlを少し勉強して、他にもいくつかのプログラム言語を知っています。Scalaについては、
7つの言語 7つの世界
を読み本当に軽く知っている程度でした。
この本はまずPart 1では関数型プログラミングで一般的なListやOptionといったデータ構造に触れつつ、かつ最初の段階からflatMapやmapといった関数を実装させる練習問題を盛り込んでいます。
これらを用いて、Part 2では具体的なデータ構造の議論をする前に、代数の設計を初めて徐々に具体的な実装へ落とすというトップダウンな開発方法を紹介しています。この部分はやや難解で、練習問題もあまり解けずとりあえず読み進めることにしました。
Part 3はPart 2で実装した諸々をさらに抽象化するために、モノイドやモナド、ファンクターを紹介しています。個人的な感想ですが、知りたいなと思うことが結構練習問題になっており、この本単体で(答えを見ずに)読み進めていくのはちょっと難しいなと思いました。ただ、13章で紹介されていたスタックオーバーフロー回避のためのトランポリン化というのは、大変興味深いものでとても参考になりました。
Part 4はさらっと読んだ感じですが、この本で積みあげてきたことがどれだけ具体的な実装に落とせるのか、ということをテーマにしている印象です。
この本全体の感想として、まず組版や翻訳には特に問題はないと思います。私は以前 Scalaスケーラブルプログラミング を図書館で借りて読もうとしましたが、なんだかフォントが気にいらずに結局読みませんでした。この本は組版や翻訳にそういう違和感は感じません。
練習問題ですが、私はこの本の約半分くらい(答えを見たものも含めて)解きました。この本は章末などに練習問題がまとめてあるタイプではなくて、本文のそこかしこに問題があるタイプの本です。練習問題が解けていることを前提にして文章が進んでいくようなスタイルになっていますので、この本を読む際は練習問題を解くぞという気持ちが必要だと思います。
また、この本は章と章が密接に結びついていると感じました。つまり、どこかの章は興味が薄いので、先におもしろそうな部分を読もうと思っても、それはちょっと難しいと思います。(ただ、最初の方にある章は、関数型プログラミングをある程度知っている人なら飛ばしてもいいと思いました)
私個人の考えですが、この本はたぶん全くの初心者が読むのは少々難しいと思います。ここで言う初心者とは「プログラミングの初心者」であって、「Scalaの初心者」ではないと思います。また、この本でScalaを知るというのも、関数型プログラミングの側面しか触れていないという点でやや厳しいかなと思います。この本は、何か別の本や、あるいは大学などで少し関数型プログラミングの教養があって、それでScalaの関数型プログラミングの側面を知りたいと思う方におすすめできる良書だと思います。
この本はまずPart 1では関数型プログラミングで一般的なListやOptionといったデータ構造に触れつつ、かつ最初の段階からflatMapやmapといった関数を実装させる練習問題を盛り込んでいます。
これらを用いて、Part 2では具体的なデータ構造の議論をする前に、代数の設計を初めて徐々に具体的な実装へ落とすというトップダウンな開発方法を紹介しています。この部分はやや難解で、練習問題もあまり解けずとりあえず読み進めることにしました。
Part 3はPart 2で実装した諸々をさらに抽象化するために、モノイドやモナド、ファンクターを紹介しています。個人的な感想ですが、知りたいなと思うことが結構練習問題になっており、この本単体で(答えを見ずに)読み進めていくのはちょっと難しいなと思いました。ただ、13章で紹介されていたスタックオーバーフロー回避のためのトランポリン化というのは、大変興味深いものでとても参考になりました。
Part 4はさらっと読んだ感じですが、この本で積みあげてきたことがどれだけ具体的な実装に落とせるのか、ということをテーマにしている印象です。
この本全体の感想として、まず組版や翻訳には特に問題はないと思います。私は以前 Scalaスケーラブルプログラミング を図書館で借りて読もうとしましたが、なんだかフォントが気にいらずに結局読みませんでした。この本は組版や翻訳にそういう違和感は感じません。
練習問題ですが、私はこの本の約半分くらい(答えを見たものも含めて)解きました。この本は章末などに練習問題がまとめてあるタイプではなくて、本文のそこかしこに問題があるタイプの本です。練習問題が解けていることを前提にして文章が進んでいくようなスタイルになっていますので、この本を読む際は練習問題を解くぞという気持ちが必要だと思います。
また、この本は章と章が密接に結びついていると感じました。つまり、どこかの章は興味が薄いので、先におもしろそうな部分を読もうと思っても、それはちょっと難しいと思います。(ただ、最初の方にある章は、関数型プログラミングをある程度知っている人なら飛ばしてもいいと思いました)
私個人の考えですが、この本はたぶん全くの初心者が読むのは少々難しいと思います。ここで言う初心者とは「プログラミングの初心者」であって、「Scalaの初心者」ではないと思います。また、この本でScalaを知るというのも、関数型プログラミングの側面しか触れていないという点でやや厳しいかなと思います。この本は、何か別の本や、あるいは大学などで少し関数型プログラミングの教養があって、それでScalaの関数型プログラミングの側面を知りたいと思う方におすすめできる良書だと思います。
2022年1月3日に日本でレビュー済み
Amazonで購入
翻訳が機械翻訳レベルでひどいし、関数型プログラミングとはなにかを知ろうとする人にとっては意味不明な内容ばかり。買うべきではない。
2016年7月14日に日本でレビュー済み
Amazonで購入
HaskellやErlangに馴染んでいる人が一般的なScalaのプログラムを見ると「なんじゃこの醜いプログラムは。これなら普通にJava使えよ」と思うことが多く、オブジェクト指向と関数型のハイブリッド言語なんてロクなもんじゃないな、と決めつけてしまう人も多いことと思う。
そんなあなたに「副作用なしのちゃんとした関数型言語のスタイルでScalaを使うことができるよ」ということを教えてくれるのがこの本。
「最近Scalaが人気あるようだけど勉強する気にならないなぁ」という方でも、この本を読めば「Scalaもまあ使えそうだ」という気になるかも知れない。
(Javaの豊富なライブラリが使える、Java VM上で動かせる、という点以外にHaskellやErlangより優れた言語だと思える部分は特にないかも知れないけど)
そんなあなたに「副作用なしのちゃんとした関数型言語のスタイルでScalaを使うことができるよ」ということを教えてくれるのがこの本。
「最近Scalaが人気あるようだけど勉強する気にならないなぁ」という方でも、この本を読めば「Scalaもまあ使えそうだ」という気になるかも知れない。
(Javaの豊富なライブラリが使える、Java VM上で動かせる、という点以外にHaskellやErlangより優れた言語だと思える部分は特にないかも知れないけど)
2015年6月21日に日本でレビュー済み
Scalaはオブジェクト指向型言語と関数型言語の特徴を統合したマルチパラダイムの言語です。
Javaなどに慣れているプログラマがScalaを使うと、オブジェクト指向型言語の側面を活かしつつ
クロージャー・パターンマッチ・型推論などといった機能を添え物として使う「ベターJava」的な使い方になりがち。
それでは、関数型のパラダイムを完全に理解するにはHaskellなどの方がより良いのかという疑問が生じますが
本書はこれにNoを突きつけ、Scalaプログラミングを副作用のない純粋関数型の手法で設計・開発する方法を解説します。
それは、ThoughtWorksアンソロジーの「オブジェクト指向エクササイズ」同様の「徹底した制約で特定のパラダイムを理解させる」アプローチです。
Scalaで純粋関数型プログラミングという本書のエクササイズを通じて、読者はオブジェクト指向とは異なる種類の抽象性や美しさに気づくでしょう。
正直、全てをこなすのは大変ですが、それを行う価値はあります。全てのプログラマにおすすめです。
Javaなどに慣れているプログラマがScalaを使うと、オブジェクト指向型言語の側面を活かしつつ
クロージャー・パターンマッチ・型推論などといった機能を添え物として使う「ベターJava」的な使い方になりがち。
それでは、関数型のパラダイムを完全に理解するにはHaskellなどの方がより良いのかという疑問が生じますが
本書はこれにNoを突きつけ、Scalaプログラミングを副作用のない純粋関数型の手法で設計・開発する方法を解説します。
それは、ThoughtWorksアンソロジーの「オブジェクト指向エクササイズ」同様の「徹底した制約で特定のパラダイムを理解させる」アプローチです。
Scalaで純粋関数型プログラミングという本書のエクササイズを通じて、読者はオブジェクト指向とは異なる種類の抽象性や美しさに気づくでしょう。
正直、全てをこなすのは大変ですが、それを行う価値はあります。全てのプログラマにおすすめです。