noyのブログ

健康なエンジニアを目指す人のブログ

『コーディングを支える技術 成り立ちから学ぶプログラミング作法』を読んだ

gihyo.jp

プログラミング言語の文法や機能を,言語の比較や歴史的な背景を用いて解説した本.個別の言語の知識は数年後も役立つかは分からないので,言語に依存しない普遍的な知識を学ぶ方がいいと著者は述べている.「何の言語を勉強すればいいですか」という質問の一つの答えになりそう.

「プログラミング作法」とあるけど良いコードの書き方の話ではない.

本書の対象者を自分なりにいうと,「プログラミング言語にはそれぞれ違いがあることを知った初学者」だと思う.静的型付け,動的型付け,変数のスコープ,継承,ミックスイン……などの概念をなんとなく知っている人なら内容を楽しく読めると思う.「この言語では,その機能をこうやって実現するのか」という新しい発見ができる.プロは「そうだね」っていいそう.

あるプログラミング言語を解説した書籍はたくさんあると思うけど,この本は機能という面から複数の言語の仕様を解説している.新しい言語を学ぶ際にも,本書のように複数の知識と結びつけるようにすれば,より効果的に,学べると思う.「プログラミング言語を1つ知っていれば,別の言語を学ぶときにその知識が使える」ということ.

というわけで,色々な言語を学んでみたいと思っている初学者が読んでみると面白いんじゃないかと思う.ただ,プログラミング初心者(プログラミングについて一切知識がない人)が読んでも意味がわからないと思うので注意.

面白かった章

11章 オブジェクトとクラス

少なくとも2人のオブジェクト指向言語の設計者が,「オブジェクト指向」という言葉を全く違う意味に使っています.特に,型と継承に関しては意見が逆向きです.(p.186)

クラスとは何なのでしょうか?この質問も一般的に答えようとすると泥沼にはまる,危険な質問です.(p.189)

この章では,「変数と関数を束ねて模型を作る方法」として,以下の4種類を解説している.

  • モジュール
  • 関数も変数と同じようにハッシュに入れる
  • クロージャ
  • クラス

「変数と関数が束なった模型」の表現方法が言語によって異なり,さらに役割も異なる.そして,言語ごとに「オブジェクト指向」という言葉が意味するものも異なる.

クラスとは,オブジェクト指向とは一体……うごごご!