プライム無料体験をお試しいただけます
プライム無料体験で、この注文から無料配送特典をご利用いただけます。
非会員 | プライム会員 | |
---|---|---|
通常配送 | ¥410 - ¥450* | 無料 |
お急ぎ便 | ¥510 - ¥550 | |
お届け日時指定便 | ¥510 - ¥650 |
*Amazon.co.jp発送商品の注文額 ¥3,500以上は非会員も無料
無料体験はいつでもキャンセルできます。30日のプライム無料体験をぜひお試しください。
¥3,520¥3,520 税込
発送元: Amazon.co.jp 販売者: Amazon.co.jp
¥719¥719 税込
無料配送 6月3日-6日にお届け
発送元: ブックスドリーム 参考書・専門書・医学書専門店【30日返品保証・お急ぎ便対応可・適格請求書発行可能】 販売者: ブックスドリーム 参考書・専門書・医学書専門店【30日返品保証・お急ぎ便対応可・適格請求書発行可能】
無料のKindleアプリをダウンロードして、スマートフォン、タブレット、またはコンピューターで今すぐKindle本を読むことができます。Kindleデバイスは必要ありません。
ウェブ版Kindleなら、お使いのブラウザですぐにお読みいただけます。
携帯電話のカメラを使用する - 以下のコードをスキャンし、Kindleアプリをダウンロードしてください。
7つの言語 7つの世界 単行本(ソフトカバー) – 2011/7/23
購入オプションとあわせ買い
複数のプログラミング言語とパラダイムを使いこなせれば、プログラマとしての幅が広がります。本書は、1週間で1つの新しい言語を学ぶ"Seven Languages in Seven Weeks"を、Rubyの作者まつもとゆきひろ氏の監訳で発行するものです。言語の特徴を映画の登場人物になぞらえて、Ruby、Io、Prolog、Scala、Erlang、Clojure、Haskellという個性的な7つの言語を紹介。各言語の特性とそこにあるプログラミングパラダイムを、体験を通してものにしましょう。
- ISBN-104274068579
- ISBN-13978-4274068577
- 出版社オーム社
- 発売日2011/7/23
- 言語日本語
- 寸法15 x 1.5 x 21 cm
- 本の長さ336ページ
よく一緒に購入されている商品
この商品をチェックした人はこんな商品もチェックしています
商品の説明
著者からのコメント
執筆中の著作『プルーストを読めば良いプログラマになれる理由』より
Joe Armstrong(Erlangの作者)
「Gmailのエディタが引用符の起こしと受けを正しく入力させてくれないのですが」
「けしからん.教養のないプログラマと退廃的な文化の兆候だ」
「どうすればよいでしょうか」
「プルーストの『失われたときを求めて』を読んでいることをプログラマの採用条
件に含める必要があるだろう」
「7巻すべてですか」
「そうだ.7巻すべてだ」
「それで句読点の使い方が改善され,引用符の使い方が正しくなるでしょうか」
「それは分からないが,良いプログラマにはなるだろう.禅的な考え方だよ......」
プログラミングを学ぶことは,泳ぎを覚えるのに似ている.いくら理論を学んでも,プールに飛び込んで,息をしようと喘ぎながら水の中で手足をばたつかせる経験には代えられない.最初水中に沈んだときはパニック状態になるが,水面にひょいと顔を出して空気を飲み込むと,うれしい気分になる.「自分は泳げる」と思えるからだ.少なくとも,私は泳ぎを覚えるときそんな風に感じた.
プログラミングにも同じことが言える.学び始めが一番難しい.水に飛び込む気持ちになるには,良い先生が必要だ.
Bruce Tateはそんな先生だ.本書はプログラミングを学ぶときに最も困難な時期,すなわち最初のとっかかりの機会を提供するものだ.
興味のある言語のインタープリタまたはコンパイラをダウンロードおよびインストールする面倒な作業を何とか終えたとしよう.次に何をすべきだろうか.最初のプログラムはどのような内容だろうか.
Bruceはこの質問に見事に答えてくれる.「本書に掲載したプログラムまたはプログラムの一部を単に入力して,本書と同じ結果が得られるかどうか確認してみよ.自分でプログラムを書こうなどと思ってはいけない.本書の例を単に写すだけでよい.自信がついてくると,自分のプログラミングプロジェクトに挑戦できるようになる」.
何か新しいスキルを取得するときに実行すべき最初のステップは,自分で新しく何かを行えるようになることではなく,他の人が既にやってみせたことを自分でも再現できるようになることである.これが,新しいスキルを身につけるための最短経路だ.
新しい言語でプログラミングを始めるときに行うのは,その言語を構成している基本原理を理解するための難しい練習をこなすことなどではない.むしろ,セミコロンやカンマを正しい位置に指定するとか,何かを間違えたときにシステムが出力する奇妙なエラーメッセージを理解するといった単純なことだ.プログラムを入力し,コンパイラエラーをなくすという面倒な作業を終えて初めて,さまざまな構文の意味を考え始めることができるのである.
プログラムの入力と実行という機械的な作業を終わらせてしまえば,あとはゆったりくつろげる.残りの作業であるコードの解釈は潜在意識がやってくれるからだ.脳が意識してセミコロンの位置を決めている間に,潜在意識が表面的な構文の下に隠れている深い意味を理解する.そしてある日突然,論理プログラムの深い意味や特定の言語が特定の構文を備えている理由が分かるのだ.
多くの言語について少しだけ知っていると有用なスキルになる.筆者は,特定の問題を解くために,PythonやRubyを少しだけ理解する必要があると気づくことがよくある.また,インターネットからダウンロードするプログラムはさまざまな言語で書かれており,個人で使うには少し手を入れなければならないことが多い.
各言語にはそれぞれ,イディオム,長所,短所がある.さまざまなプログラミング言語を学ぶことによって,自分が興味を持っている種類の問題を解くのに最適な言語が分かるようになる.
喜ばしいことに,本書の著者であるBruceのプログラミング言語の好みは多岐にわたっている.彼はRubyのような確立された言語だけでなく,Ioのようなあまり評価されていない言語も取り上げている.プログラミングとは結局,理解することであり,理解できるかどうかはどれだけアイデアの引き出しがあるかにかかっている.したがって,新しい言語を直接体験することは,プログラミングが何たるかをより深く理解するために欠かせない.
禅の指導者は,数学が出来るようになりたければラテン語を勉強せよと言うだろう.プログラミングでも同じだ.オブジェクト指向プログラミングの本質を深く理解するには,論理プログラミングや関数型プログラミング(FP)を勉強する必要がある.関数型プログラミングに上達したければ,アセンブラを勉強する必要がある.
筆者がプログラマとして経験を積んでいた頃,プログラミング言語を比較した本は人気があったが,その大半は学術的な本で,言語の実際の使い方に関する実践的な情報は得られなかった.そうした状況が,その当時のテクノロジを反映していた.当時は,言語の概念について読むことはできたが,それを実際に試してみるのは事実上不可能だった.
現在では,概念について読むことができるだけでなく,実際に試してみることができる.泳ぐのは楽しいだろうかと思いながらプールサイドで突っ立っているのと,プールに飛び込んで水を楽しむのとでは雲泥の差がある.読むのと実際に試すのも,同じくらい大きな違いがある.
本書を心からお勧めする.皆さんが私と同じように本書を楽しまれるよう願っている.
2010年3月2日
Erlangの作者
Joe Armstrong
ストックホルムにて
著者について
著者
Bruce A. Tate(ブルース・テイト)
テキサス州オースティンに本拠地を置くRapidRedを経営する.RapidRedはRubyでライトウェイトな開発を行うコンサルティングファーム.過去にIBMでデータベースシステムプログラマやJavaプログラマなどとして勤務.その後,ベンチャー企業数社でクライアントソリューション担当部長やCTOなどを勤める.米国外での講演も多数.著書は10冊を超え,From Java to Ruby,Deploying Rails Applicationsやベストセラーの"Bitter"シリーズ,Beyond Java,ジョルト賞を獲得したBetter, Faster, Lighter Javaなどがある.
監訳者
まつもとゆきひろ
株式会社ネットワーク応用通信研究所フェロー.その他,肩書多数.Rubyの生みの親.三女一男の父であり,良き夫でもある.性格はふまじめだが,敬虔(?)なキリスト教徒である.温泉好き.鳥取県出身,島根県在住.牡牛座.O型.
訳者
田和勝(たわまさる)
フリーランス翻訳者.IT関連書籍.ドキュメントの翻訳を専門に行っている.主な訳書として,『Perlクックブック』『詳説正規表現第2版』(いずれもオライリージャパン刊),『プログラミングRuby 1.9言語編』『同ライブラリ編』(オーム社刊)などがある.兵庫県神戸市出身.
About this Title
はじめに
人が言葉を学ぶ理由はさまざまだ.最初の言語,つまり母語は生きるために学ぶ.それは日々生活していくための道具となる.外国語を学ぶ理由もさまざまだ.キャリアアップのためかもしれないし,変化する環境に適応するためかもしれない.場合によっては,学ばなければならないからではなく,学びたいから,新しい言語をマスターしようと決心することもあるだろう.外国語を学ぶと新しい世界が開ける.新しい言語を学ぶごとに物の考え方が形成されることを認識したうえで,何かの啓示を得るために言語を学ぶ人さえいるだろう.
プログラミング言語にも同じことが言える.本書では7つの異なる言語を紹介する.といっても,母親が毎朝苦い薬を飲ませるようなやり方はしない.読者の皆さんに深い洞察を与え,プログラミングに対する見方が変わるような経験をしてもらうことが目的だ.本書を読んでプログラミング言語の専門家になることはできないが,お決まりの"Hello, World"プログラムよりは高度なことをお教えするつもりだ.
1.1 本書のねらい
多くの場合,筆者が新しいプログラミング言語またはフレームワークを学ぶときは,短時間で読める対話型のチュートリアルを探す.目的は,管理された環境で言語を経験することだ.必要ならスクリプトを実行して探索することもできるが,基本的には,脳に軽い刺激をもらい,シンタックスシュガーを垣間見て,主要な概念を把握することができればよい.
しかし,こうしたチュートリアルで満足できることはまずない.既に知っている知識に少し付け足した程度ではなく,あるプログラミング言語の雰囲気を本当に味わいたければ,短いチュートリアルで足りることは決してない.深くしっかりと学ぶ必要がある.本書では,そうした経験を1回ではなく7回してもらうつもりだ.本書を読めば,次の質問に答えられるようになる.
.型付けモデルは?型付けには,強い型付け(Java)と弱い型付け(C),静的型付け(Java)と動的型付け(Ruby)がある*1.本書に登場する言語は強い型付けのほうに近いが,静的型付けと動的型付けは広く混在している.このバランスが開発者に与える影響についても触れる.型付けモデルは,問題の解決方法を形成し,言語の動作方法を制御する.本書に登場するすべての言語はそれぞれ独自の特徴的な型付けを採用している.
.プログラミングモデルは?本書に登場する言語のプログラミングモデルは,オブジェクト指向型,関数型,手続き型,それらのハイブリッド型の4つに大別できる.なかには2つ以上のプログラミングモデルを組み合わせた言語もある.本書では,論理ベースのプログラミング言語を1つ(Prolog),オブジェクト指向の概念を完全にサポートした言語を2つ(RubyとScala),関数型の性質を備えた言語を4つ(Scala,Erlang,Clojure,Haskell),プロトタイプ言語を1つ(Io)取り上げる.なかにはScalaのようなマルチパラダイム言語もある.Clojureでは,マルチメソッドを用いて独自のパラダイムを実装することさえできる.新しいプログラミングパラダイムを学ぶことは,本書の構想で一番大事なことのひとつだ.
.言語処理系は?言語処理系には,コンパイラ型とインタープリタ型がある.また,仮想マシン上で動作する言語もあれば,そうでない言語もある.本書では,対話型シェルが用意されている言語ではシェルを使っての探索から開始し,より大きなプログラムに取り組むときがきたらファイル単位での処理に移行する.パッケージモデルを本格的に利用するような大規模プロジェクトは扱わない.
.分岐構文と主要なデータ構造は?驚くかもしれないが,ifやwhileの類を使わずに条件分岐させることができる言語は意外と多い.ErlangのパターンマッチングやPrologのユニフィケーションがそうだ.コレクションは,ほとんどすべての言語で重要な役割を果たす.SmalltalkやLispといった言語では,コレクションによって言語の特性が決まる.C++やJavaといったその他の言語では,コレクションはあちこちで提供されており,凝集度が足りないせいでユーザは不便を強いられる.いずれにしても,コレクションについてはしっかりと理解する必要がある.
.その言語を固有のものにしている主要な機能は?並行プログラミングのための高度な機能をサポートする予定がある言語もあれば,ClojureのマクロやIoのメッセージ解釈など,独自の高レベルの構文を提供している言語もある.ErlangのBEAMのように,強力な仮想マシンを用意している言語もある.Erlangでは,この仮想マシンのおかげで,他の言語よりもずっと短い期間で耐障害性分散システムを構築できる.また,論理を用いて制約を解決するPrologのように,特定の問題に特化したプログラミングモデルをサポートしている言語もある.
本書を読み終えると,各言語の専門家にはなれなくても,各言語固有の特性については把握できるようになる.では,本書で扱う言語を紹介しよう.
1.2 この本で扱う言語
本書で紹介する言語を選ぶのは,皆さんが想像するよりずっと簡単だった.単に潜在的な読者に尋ねてみただけだ.結果をまとめてみると,8つの言語が候補として残った.そのうちJavaScriptはあまりにも人気のある言語だったので候補から外し,代わりに,次に人気のあるプロトタイプ言語であるIoを選択した.Pythonも候補から外した.オブジェクト指向言語は1つだけで十分だったのと,Rubyが既にリストの上位に入っていたからだ.そこで,リストのトップ10に入っていたPrologが意外な候補として挙がってきた.こうして次の7つの言語が残った.これらの言語を選んだ理由を以下に示す.
. Ruby.このオブジェクト指向言語は使いやすさとコードの読みやすさという点で評価が高い.オブジェクト指向言語を1つも含めないことも少しは考えたが,さまざまなプログラミングパラダイムをオブジェクト指向プログラミング(OOP)と比較したかったので,少なくとも1つのOOP言語を含めることは重要だった.それに筆者は大半のプログラマよりも強くRubyを推薦したかったし,Rubyの言語デザインを形作ることになった重要な決定事項について,その感じだけでも読者に味わってほしかったということもある.また,Rubyのメタプログラミングについてもかなり突っ込んで説明し,言語のシンタックスの拡張についても触れることができた.結果には大いに満足している.
. Io.Prologと共に,筆者が選んだ言語のなかで最も議論の多い言語だ.商業的には成功していないが,並行性構文とシンプルで統一されたシンタックスは重要な概念だ.余分なものを一切割愛した最小限のシンタックスは強力であり,Lispと大変よく似ている部分もある.Ioは小さなメモリ領域で動作し,JavaScriptのようなプロトタイプ言語であり,独特のメッセージディスパッチの仕組みを備えている(これには興味を持ってもらえるのではないかと思う).
. Prolog.確かに古い言語だが,極めて強力な言語でもある.Prologで数独を解いたことは,筆者にとって目から鱗の経験だった.これまでJavaやCで,いくつか難しい問題に苦労させられたが,そうした問題もPrologなら難なく解けただろう.筆者は,Erlangの作者であるJoe Armstrongが助けてくれたおかげで,Prologをより深く理解することができた(ErlangはPrologの影響を強く受けている言語だ).まだPrologを使ったことのない方は,この章を読んでうれしい驚きを感じるのではないかと思う.
. Scala.Javaの仮想マシン(JVM)上で動作する新世代言語の1つであるScalaは,強力な関数型プログラミングの概念をJavaエコシステムにもたらした.と同時に,OOPの概念も全面的に受け入れている.振り返ってみると,C++は手続き型言語とOOPの橋渡しの役割を担っていた.同じ橋渡し役という意味で,ScalaはC++と驚くほど似ている.Scalaのコミュニティに飛び込んでみれば,Scalaが純粋な関数型プログラマにとっては異端児だが,Javaの開発者には心底喜ばれている理由が分かるだろう.
. Erlang.本書で取り上げる言語のなかでも最も古い言語の1つだが,並行性,分散処理,耐障害性をきちんとサポートしている関数型言語として最近盛り上がりを見せている.新しく登場したクラウドベースのデータベースであるCouchDBの作者は,Erlangを選択し,ひたすら前進してきた.分散処理言語を少しでもかじったことのある人なら,その理由がお分かりだろう.Erlangを使えば,並行分散処理が可能な耐障害性アプリケーションを,これまでの言語では考えられないくらい簡単に設計できる.
. Clojure.もう1つのJVM言語であるClojureは,Lisp方言の1つで,JVM上での並行性の考え方に根本的な変化をもたらすものだ.Clojureは,本書で取り上げた言語のなかでは唯一,バージョン管理データベースと同じ戦略を用いて並行性を管理している言語だ.Lisp方言であるClojureはすごい威力を備えており,本書で取り上げるプログラミングモデルのなかでも最も高い柔軟性を実現している.しかも他のLisp方言と違って,括弧の数は大幅に削減されており,膨大なJavaライブラリや広範な配布プラットフォームなど,巨大なJavaエコシステムを利用できる.
. Haskell.本書で取り上げた言語のなかで唯一の「純粋関数型言語」だ.これは,書き換えることのできる「状態」がどこにも存在しないという意味だ.つまり,同じ関数に同じ入力引数を与えれば,毎回同じ結果が得られる.Haskellは,すべての強く型付けされた言語の中で,最も広範囲で高く評価された型付けモデルをサポートしている.Prolog同様,理解するには少し時間がかかるが,その価値は十分にある.
お気に入りの言語が含まれていなかったらご容赦願いたい.実は,既に何人かの言語好きの方から非難のメールが届いている.先ほど触れたアンケート調査では数十の言語が候補に含まれていた.筆者が選択した言語は必ずしも最善ではないが,それぞれ独特の個性を備えており,読者の皆さんに何かしら重要なことを教えてくれるはずだ.
1.3 この本を買ってください
もし,あなたが成長したいと思っている有能なプログラマなら,ぜひ本書を買ってほしい.自分が有能なプログラマかどうかなど漠然として分からないかもしれないが,どうかご容赦いただきたい.学ぶ姿勢を身につける
Dave Thomasは本書の発行元であるPragmatic Bookshelfの創業者の一人だ.彼は,多くの学生達に毎年1つの言語を学ぶことを奨励してきた.言語を学ぶことによる効用はいろいろあるが,最低でも,新しく学んだ概念を自分の選んだ言語で書くコードに取り込むようになる.
本書を執筆したことによって,筆者が書くRubyのコードは大きく変わった.実用性が高くなり,読みやすく,重複が少なくなった.可変変数を使うケースが減り,コードブロックと高階関数によって,コードの質が向上した.Rubyのコミュニティではあまり使われていないテクニックも使うようになり,おかげでコードがコンパクトで読みやすくなった.
うまくいけば,新たなキャリアを開拓することもできる.プログラミングパラダイムは,10年くらいのサイクルで変化する.Javaでは窮屈になるばかりなので,筆者は,Web開発に対するRubyのアプローチをより深く理解するために,Rubyでさまざまな実験を試みた.いくつか副次的なプロジェクトを成功させた後,自身のキャリアをRubyによるWeb開発の方向に強く押し進め,ひたすら前進してきた.筆者のRubyのキャリアは基本的な実験から始まって,拡大していったのだ.
移行期のヒントとして
本書の読者の多くは,ソフトウェア業界で前回プログラミングパラダイムが切り替わったときのことを覚えていないだろう.オブジェクト指向プログラミングへの移行は出だしで何度かつまずいたが,いずれにしても古い構造型プログラミングパラダイムでは,今日のWebアプリケーションに求められる複雑な処理には対応できなかった.Javaが成功したことで,オブジェクト指向への流れが一気に強まり,やがて新しいプログラミングパラダイムとして定着した.これにより,従来のスキルにどっぷりとつかっていた多くの開発者たちは,考え方,使うツール,アプリケーション設計の方法をすべて再編成しなければならなかった.
我々は現在,次のパラダイムシフトの真っ直中にいるのかもしれない.今回のパラダイムシフトを推進しているのはコンピュータの設計の変化だ.本書に登場する7つの言語のうち(RubyとPrologを除く)5つの言語が,大変興味深い並行性モデルを採用している.お使いのプログラミング言語がすぐにパラダイムシフトするかどうかはともかく,本書で紹介する言語が非常に興味深い回答を提示してくれることは間違いないだろう.Ioのフューチャの実装,Scalaのアクター,Erlangの「クラッシュさせろ」の哲学などを確認してみてほしい.Haskellのプログラマがどのような方法で可変状態を使わずに済ませているのか,Clojureがどのようにして,バージョン管理を用いて,最も難しい並行性の問題を解決しているのかを理解してほしい.
意外な箇所で深い理解が得られることもある.例えば,いくつかのクラウドスタイルのデータベースの開発言語として採用されているErlangは良い例だ.Joe Armstrong博士は,Prologを基盤としてErlangの開発を始めた.
1.4 この本を買わないでください
このセクションを読んで同意いただけるまでは本書を買ってはいけない.読者の皆さんには交換条件を提案したい.インストールの詳細ではなくプログラミング言語に焦点を絞って説明することに同意してほしい.代わりに,短い時間でできるだけ多くのことを教えると約束しよう.皆さんにはGoogleで検索してもらう機会が多くなるだろう.また,インストールに関してもサポートを期待してもらっては困る.その分,本題であるプログラミング言語についてより突っ込んだ解説ができるので,本書を読み終えたとき,プログラミング言語に関する皆さんの知識は格段に増えていることだろう.
7つの言語を解説するというのは,筆者らにとって野心的な試みであることを理解してほしい.読者の皆さんには,脳ミソを最大限に活用して,7つの異なるシンタックス,4つのプログラミングパラダイム,40年間にわたるプログラミング言語技術の蓄積を理解してもらう必要がある.筆者としては,広大な範囲のさまざまなトピックをカバーしなければならない.本書を執筆するために,実際にいくつかの言語を学んだ.各言語の最も重要な部分をうまくカバーするために,簡素化するための前提をいくつか設けることになる.
単なるシンタックスの説明では終わらない
言語設計者の考え方を本当に理解するために,本書では,基本的なシンタックスだけでなく,その背後にある考え方を積極的に吸収してもらう.つまり,お決まりの"Hello, World",あるいはフィボナッチ数列を出力する程度のコードでは終わらない.Rubyでは,メタプログラミングの世界を覗いてみる.Prologでは,完全な数独のパズルを解いてみる.Erlangでは,プロセスの死を検出して別のプロセスを起動したり,ユーザに通知したりするモニタを書いてみる.
本書の執筆にあたり,筆者は,基本事項だけにとどまらず,より深い解説をすると決めた.そこで,読者の皆さんに対して,1つ約束する代わりに,いくつか妥協してもらうことにした.まず,表面を撫でるような説明に甘んじることはしないと約束しよう.その代わり,専門書を読めば見つかるような基本事項には触れない.例外処理についても説明しない(ただし,それが言語の根本に関わる機能の場合は除く).パッケージモデルを必要としない小さなプロジェクトしか扱わないため,パッケージモデルについても説明しない.さらには,本書で提示するような基本的な問題を解くには必要ないプリミティブ(基本機能)について復習することもしない.
インストールガイドではない
筆者にとって最も大きな問題はプラットフォームだ.筆者はさまざまな書籍の読者から直接問い合わせを受けたことがあり,なかには3つの異なるWindowsプラットフォーム,OS X,少なくとも5つのバージョンのUnixのユーザがいた.それ以外のプラットフォームのさまざまな掲示板にコメントが掲載されているのも見た.7つの言語を7つのプラットフォームについて解説するのは筆者一人ではとても無理だ.共著者がいてもおそらく無理だろう.7つの言語のインストールについてもサポートは不可能なので,行わない.
読者の皆さんも,内容の古くなったインストールガイドなどに興味はないだろう.言語とプラットフォームは絶えず変化する.言語のインストールガイドのありかと筆者が使っているバージョンについてはそのつど触れる.そうすることで,読者の皆さんが同じ情報源を見て最新の情報を入手して作業できる.というわけで,インストール関連の疑問にはお答えできない.
リファレンスマニュアルではない
本書に掲載したサンプルコードについては,多くの方に徹底してレビューしてもらうように努力した.幸運にも,その言語の設計者本人にレビューしてもらったこともある.レビューが終わる頃には,本書は,各言語の神髄をうまくとらえた教材になるだろうと確信している.とはいうものの,各言語での読者のプログラミング作業のサポートまではできないことをご理解いただきたい.話し言葉にたとえて説明しよう.
通りすがりの旅行者として言葉を覚えても,ネイティブスピーカーとは大きな隔たりがある.筆者は英語は当然流暢に話せるし,たどたどしいがスペイン語も話せる.他にも3カ国語で,いくつかのフレーズを知っている.日本で魚を注文したこともあるし,イタリアでトイレの場所を尋ねたこともある.しかし自分の限界は心得ている.プログラミング言語に話を戻すと,筆者は,Basic,C,C++,Java,C#,JavaScript,Ruby,およびその他のいくつかの言語で自由にコーディングできる.その他にも,本書で取り上げた言語も含め,ある程度なら使える言語がいくつかある.本書で取り上げた7つの言語のうち6つについては,サポートできるだけの知識を持ち合わせていない.Rubyは常時使っており,5年間の経験があるが,IoでWebサーバを書いたり,Erlangでデータベースアプリケーションを作成する方法を教えることはできない.
7つの言語の詳細なリファレンスを書こうとしたら,大失敗に終わるだろう.プログラミングガイドを書くとしたら,本書で取り上げた各言語について,短くても本書と同じくらいのボリュームになる.本書では,各言語について,入門者には十分な情報を提供する.各言語をコード例を交えて解説し,プログラム例も掲載する.できる限り,すべてのコードをコンパイルし,確かに動作することを確認するようにする.ただし,読者の皆さんの実際のプログラミング作業を直接サポートすることはできない.
本書で取り上げた言語はすべて,サポートコミュニティが大変充実している.コミュニティが充実していることは,これらの言語を選択した理由の1つでもある.各章には,その言語に関する情報を検索してもらう演習問題を用意するようにした.これは,読者の皆さんに自力本願になってほしいという意図があってのことだ.自分の限界に挑戦してみよう
本書では,20分のチュートリアルよりは1段上の情報を読者の皆さんに提供していく.Googleについては皆さんご存じだと思うので,7つの言語すべてについて,簡単な入門者向けの記事を見つけることもできるだろう.本書では対話型のクイックツアーを提供する.また,ちょっとしたプログラミングの課題と1つのプログラミングプロジェクトを毎週提示する.これをこなすのは簡単ではないが,有益だし,楽しいはずだ.
本書を単に読むだけでは,シンタックスの雰囲気はつかめるだろうが,それ以上は無理だ.演習問題を自分でコーディングしてみる前にネット上で答えを探すようでは,失敗するだろう.まず自分で解いてみて,いくつかの問題が解けないことを自分自身で認識するようにしてほしい.いつだって,シンタックスを覚えるのは理屈を学ぶより簡単だ.
以上の説明を読んで不安になってしまうようなら,諦めて別の本を探すことをお勧めする.そうした方には満足してもらえないと思うからだ.そのような方は,7つの言語について,別個のプログラミング解説書を読んだほうがよいだろう.逆に,良いコードを短期間で書けるようにするという目標に興味を持っていただけたなら,ぜひ本書を読んでみてほしい.
1.5 終わりに
ここで,思い切って,やる気を起こさせるような言葉を書くつもりだったが,どうやら,すべては次の言葉に集約されるようだ.
楽しもう.
登録情報
- 出版社 : オーム社 (2011/7/23)
- 発売日 : 2011/7/23
- 言語 : 日本語
- 単行本(ソフトカバー) : 336ページ
- ISBN-10 : 4274068579
- ISBN-13 : 978-4274068577
- 寸法 : 15 x 1.5 x 21 cm
- Amazon 売れ筋ランキング: - 324,707位本 (本の売れ筋ランキングを見る)
- - 2,118位プログラミング (本)
- - 6,906位電気・通信 (本)
- カスタマーレビュー:
著者について
著者の本をもっと発見したり、よく似た著者を見つけたり、著者のブログを読んだりしましょう
-
トップレビュー
上位レビュー、対象国: 日本
レビューのフィルタリング中に問題が発生しました。後でもう一度試してください。
総合的には満足だったのですが、まず私の期待と少し違った点から説明します。
タイトルですが、翻訳としては美しい翻訳だと思いますが、原書の「Seven Languages in Seven Weeks」の方が内容には沿っていると思います。たしかに、7つの言語の世界観を伝えている側面もあるのですが、7つの言語についてそれぞれ1週間ずつ学習するというのが本筋だということは踏まえておいたほうが期待とのミスマッチが起きにくいと思います。
もし立ち読みできる環境であるなら、末尾の訳者解説と、各言語の「まとめ」の部分に目を通して、興味がわくかどうかを確認すると良いと思います。
さて、内容ですが、各言語せいぜい数十ページ程度(それぞれDay1~Day3で構成)しかないので、本格的にそれぞれの言語を学んで、使えるようになることを目指す、といったものではありません。それぞれの言語が生まれた背景や、思想・特徴、強み・弱みなどを、具体的な例をあげながら説明しています。これらを知ることで、実際に学習を始める際の戸惑いを軽減し、迷子になりにくくする、という意図があるのだと思います。
インストールや使用法などの説明はありませんが、各言語ごとに課題があり、実際に触りながら進めていくことが求められます。ただし、解答はないのと、2020年に同言語で課題を実施すると、当時作者が課題を通して感じてもらいたいと意図していたことを、感じ取れるのかやや疑問な点は注意です。
具体例として挙げられている内容や、出てくる関数やプログラミングの書き方などはすでに古くなっているかもしれませんが(確かめてないです)、それが本書の価値をそこまで減じているとは思いません。弱点として書かれている部分が改善されていたとしても、言語が出来上がった背景や目指すものはそうそう変わらないと思うので、メリット部分やユースケースについてはあまり変わらないと思うからです。例えばRubyは、パフォーマンスよりも開発者にとっての効率性を重視している、という形で整理されていますが、パフォーマンスが改善したとしても、この基本的な姿勢は変わらないはずですし、関数型のエッセンスを取り入れたとしても、純粋関数型のHaskellなどとの違いが消滅したということはないですので、本書で学ぶことのできる思想的な部分は今も役に立つと思います。
JavaやC、Python、PHPなどは取り上げられませんし、逆に聞いたことがなかった(し、今はもうほぼ使われてない?と思われる)言語が扱われていますが、これもマイナスではなく、仮にその言語が使われなくなっていたとしてもその思想や考え方を学ぶことができるので、有益でした。
そもそもの私の関心であった「なぜプログラミング言語にはたくさんの種類があるのか」という(ある種程度の低い)疑問には、満足に回答をもらえました。
なお、7つの言語はある程度独立していますが、順序を意識して書かれていて、前で説明したことの積み重ね的な要素もあるので、理想的には前から拾い読みででも読んでいくほうが良いかなと思います(特に目次後半の言語にのみ関心がある人は注意)。
★マイナス1の理由としては、①「世界」という言葉に期待しすぎた点。もう少し言語が成立した背景や歴史、創作者・コミュニティの話が厚いものと想像していましたが、そうではありませんでした。そのあたりは1-2pでさらっとまとめ、具体例で説明していく、というスタイルです。②翻訳に時々引っかかる点。時々翻訳につまづくことがありました。逐語訳すぎてわかりにくくなっている部分と、意訳してわかりにくくなっている部分の両方がありました。後者で象徴的なのはErlangの部分で、モットーは「クラッシュさせろ」と訳されているのですが、原文は「Let it crash」です。思想の中身的にも「クラッシュさせとけ」とかのほうが合うと思うのですが、なぜか「crash it」みたいに訳されていて、最初ひっかかりました。
ただ,ひとつの言語について書いているページはかぎられているから,これだけで理解するのはむずかしいかもしれない. 時間があれば実際にこの本にある例をなぞってみれば,より理解がすすむだろう. むかしとちがって,いまならそれが比較的容易にできるだろう.
各言語がどのような思想で設計されていて、どういう風な使われ方をするのかも、
書かれていて、簡単なプログラムのサンプルも載っています。
読んでいる最中に、この言語だったら実際にこういうことができそうだなとか、
想像力をかきたてられました。
実際に興味を引かれた言語があったので、別途その言語の本を買って読もうと思います。
例題がRubyとScalaとClojureとGroovyで書かれている本を読むために講読。
ということで拾い読みですが、様々の言語が現れる理由というか、言語を作る人たちには
曲げられないポリシーがあるってことが良く分かります。(それがどんなよううにでも曲がって見せるというものでも)
各言語へのガイダンスは実際に手を動かしても、仕事が終わったあとの2時間程度を3日で完了のボリューム。
読むだけなら1言語1時間程度の体験ツアーとなります。
評価ですが本書の性格上星5つというのは付けがたい(拾い読みだし)ですが、私にはとても役に立ったので星4つ
実際に使うことは難しいと思いますが、Prologのように例題の書かれているものもあります。
本当に各々の言語の性格が理解できるか、疑問な点もあります。各章の言語のたとえが、シザーハンズの主人公であったり、裁判官であったり、少し回りくどすぎるのではないか、とウンザリするところもあります。オブジェクト指向なら、簡単なクラスの書き方を書いた方が分かりやすいでしょう。
展覧会で絵を見て興味を持つ、その絵の作者について調べたければ他の本を読めばいい。言語のパラダイムを説いている本でもありません。あくまでも多数の作者の絵画を見るための本、です。
自分はないと思います。
サマリー、開発者への簡単なインタビュー、簡単なコード紹介(3日間の学習を想定した3節構成)、最後に長所・短所の整理、というセットで一つずつ言語を説明する。
所詮、プログラミングは水泳と同じく、やってみないと掴めないモノなので、これで分かった気になってはいけないし、わかった気になれるわけもない。著者も、「新しいアイディアを発見してもらうために書いた」と述べているし、「インディーズフィルムによって映画制作の最先端技術が進歩するように、新しいプログラミング言語はプログラムの編成や構造に関する考え方に変化をもたらす」とも述べている。
Rubyをメリーポピンズにたとえるなど、ユニークな説明も試みているが、私はRubyを使ったことがないのでなぜメリーポピンズなのか今ひとつよくわからず(そもそもメリーポピンズもよく知らないが)。もっと掘り下げて作者の考える「メリーポピンズな感じ」に共感させて欲しかった。そういう点では中途半端な感じがしないでもない。
取り上げられている7つの言語は、Ruby,Io,Prolog,Scala,Erlang,ClojureおよびHaskell。
特に、「事実、ルール、質問」のワンセットにより定義される推論言語Prologの説明はおもしろかった。ただし、文法の説明はあってもそれがどういう推論経路を辿るのかについてまでは説明はない。そこまではやらない。Prologは、自然言語処理やゲーム、航空機のスケジューリング、人工知能など広く使われているとのこと。
Rubyは、言語としての効率性には関心がなく、実行速度もそれほどでもなく、プログラマの生産効率の最適化に特徴があると定義している。ツィッターのオリジナル版の実装もRubyなんだそうで(その後、コアはScalaで書き直されている)、Rubyは存続可能な製品を短期間で市場に送り出すという意味では最適であるという。多くの企業が直面している市場までのリードタイム要件に応えるにはRubyでも充分すぎることが多いらしい。
そのほか、ScalaはJVMで動けるのでJavaライブラリを利用できるとか、Erlangは並行性と信頼性に優れているとか、ClojoreはJVMで動くLISPだがJVMを基盤とするがゆえにJavaのライブラリを利用できるためLISPが方言だらけになって失敗した轍を踏まないようになっているとか、ところどころにある各言語の素描みたいなものはわかりやすい。
しかし、大変良い本です。なぜかというと。いろいろな思想によって作られた、いろいろな言語を知ることができるから。まさに、世界を7つ俯瞰するような体験が得られます。
世の中には星の数ほどのプログラミング言語がありますが、これ一つ覚えておけばほかはみんないらない、という言語はありません。C++なんかはその辺を目指して割といい線はいっていると思うのですが、それでも達成には程遠い。多くのの機能を詰め込めばすべての機能が使いにくくなります。主要言語にしては、学習コストとか可読性はかなりひどくなってしまっています。
すべてを手に入れることができないなら、厳選したものを詰め込むしかありません。厳選された少ない要素で、多くのことができる便利な言語を作るにはどうしたらいいか考える。簡潔な記述の組み合わせで、いかに多彩なことが実現できるか考える。それには相当なセンスがいります。そして、そのセンスによって作り上げられた言語は、数学の公理系のように一つの世界を持つことになります。センスの良い美しい世界を。
ただし、その言語の中だけを見ていては、その世界の形はなかなかわかりません。ほかの世界と比べてみて初めて、その世界がどういう特徴を持っているか知ることができる。どういう美しさをもっているかを知ることができる。
そのような美しさが、7つ紹介されています。大変良い本ですね。