プログラミング
PR

【違いを知れ】7つの言語7つの世界【感想・レビュー・まとめ】

ちゅけ
記事内に商品プロモーションを含む場合があります
スポンサーリンク

書籍情報

メルカリでの検索結果はこちら

書名:7つの言語 7つの世界

著者名:Bruce A. Tate(著) まつもとゆきひろ(監訳)

出版社:オーム社

書評

どんな本?

本書の著者は様々なプログラミング言語を学ぶことで、それぞれの言語が持つイディオム長所、短所を理解することによって、特定の問題を解決する時に他の言語で使われている手法などを参考にすることによって、プログラマ自身のレベルを引き上げることができると言うふうに述べています。

本書では以下の7つのプログラミング言語の座学と簡単な実習を通して特性の説明を行なっています。
Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell

現代この中で日本でまともに使われているのはRubyだけですが、 各言語間で少しずつ違った特徴があるため、今まで流行りのオブジェクト指向の言語でしかプログラミングしたことがないエンジニアにとっては他の言語について知るだけでもとても新鮮な刺激を得ることができます。

読んだきっかけ

ちゅけ

">100人のプロが選んだソフトウェア開発の名著に記載があった本

Google Social Developers Japanコミュニティオーナーの田中洋一郎さんが選出しており業務で使っている言語以外の特性についても学んでみたいと思ったことがきっかけです!

https://chuke-blog.com/book-review-100-selection/

良かった点・悪かった点

  • 関数型言語などメジャーではない言語を扱っているので普段の開発業務では知り得ない言語の特徴を知ることができる
  • 各言語の特徴的な部分をピックアップして紹介しているのでテンポが良い
  • 具体的なプログラムも記載されているため、どのような挙動になるか、本を読むだけでも参考にすることができる
  • 各言語の長所や短所を最後にまとめてくれているので、概略をつかみやすい
  • 扱われている言語が古く、またマイナーなため本格的に学んでもそれらの言語の知識が直接身にならない可能性が高い
  • 浅く広くするための本であるので、各言語の詳細については学ぶことができない

感想・まとめ

Ruby, Io, Prolog, Scala, Erlang, Clojure, Haskell

本書では、上記の言語を主題に各言語の特徴などを解説しています。

現代ではオブジェクト指向のプログラミング言語が大半を占めています。 それゆえに、現代のエンジニアはオブジェクト指向以外の言語に触れる機会が少なく思考の幅が狭まっていると個人的には考えています。

本書では多数の言語を学ぶことにより、関数型言語や制約論理プログラミング、プロトタイププログラミングなど、多彩なプログラミングモデルの言語の概略とそれぞれの言語の信念やその背景について学ぶことができます。

個人的に衝撃を受けた言語はPrologです。 この言語は制約論理プログラミングと言って、従来のプログラミング言語のように処理を自分で書くのではなく、前提条件をプログラマーが規定し、その解を出すように推定してくれると言うものでした。

まさにビックデータを扱うAIやChatGPTの先取りだったんだと思いました。

また関数型言語に関しては著者も難しいと記しておりました。関数型言語の中でもそれぞれレベルがあり、完璧な関数型言語の記述を求める。Haskellから 1部オブジェクト思考の考え方も認める力など様々なレベルのものがあることを知ることができました。

関数型言語では状態の変化を許さないと言う特徴から、並列処理が容易にできるようになると言うメリットがある。一方で、状態を持つことができないので、一般的な処理が難しくなってしまうと言うトレードオフの関係であると言うふうに著者は述べていました。

現在のプログラミングの主流は、オブジェクト思考ですが特定の条件が求められる性能によっては、関数型言語の方が有利である場合もあるので場合によってはそれらも選択肢に入り得るということを頭の片隅に置いておくことにします。

本書で扱われている7言語について、業務でPHP・Ruby・TypeScriptを触ってきた自分の視点から、それぞれ具体的に感じたことをまとめておきます。

Ruby:業務でも使っている言語なので復習的な位置づけでしたが、他の6言語と比較して読むことで「なぜRubyの文法は書きやすいと感じるのか」を言語化できました。ブロックやイテレータの扱いやすさは、他の言語(特にIo)と比較して初めて実感できるものでした。

Io:プロトタイプベースの言語で、クラスという概念自体が存在しない点に一番衝撃を受けました。オブジェクト指向=クラスベースだと思い込んでいたので、「オブジェクトからオブジェクトを直接複製する」という発想は目から鱗でした。

Prolog:前述の通り制約論理プログラミングが最も印象的でした。実際に簡単な家系図の推論プログラムを写経してみましたが、「答えの出し方」ではなく「答えの条件」だけ書けば動く感覚は、通常の手続き型プログラミングとは根本的に思考の順序が逆でした。

Scala:オブジェクト指向と関数型のハイブリッドという立ち位置で、業務でJavaを書いた経験がある人ほど「関数型の考え方への橋渡し」として読みやすいと感じました。

Erlang:並行処理を前提とした設計思想が特徴的で、プロセス間通信の考え方はマイクロサービスの設計を考える上でも参考になりました。

Clojure:LispベースでJVM上で動くという特性上、既存のJavaエコシステムを活かしながら関数型を導入できる点が実務的だと感じました。

Haskell:本書内でも「学ぶのが最も難しい」とされている通り、純粋関数型・強い型システム・モナドの概念でかなり苦戦しました。ただ、副作用を型で管理するという発想は、その後TypeScriptでコードを書く際に「予期しない副作用を減らす」意識に確実につながっています。

こうして改めて7言語を振り返ると、単に「知らない言語に触れた」だけでなく、普段使っているRubyやTypeScriptの設計判断の「当たり前」を相対化できたことが一番の収穫でした。

こんな人におすすめ!

  • 特定の言語でしか開発したことがない人
  • 本書で挙げられている言語のうち気になっている言語がある人
  • プログラミングモデルについて知りたい人

総評

個人的評価
ちゅけ

マイナーな言語を主題に各言語の特徴を紹介している本

オブジェクト指向のプログラミング言語以外も学ぶことで、視野を広げることができました。

気になったらぜひ読んでみてね😆

スポンサーリンク
記事URLをコピーしました