【読書メモ】コーディングを支える技術

gihyo.jp

いろいろ気付きがあったし、読み物としても面白かったです。

プログラミングを始めたばかりの頃は言語仕様が絶対だと思ってしまうけど、仕様は誰かが考えて決めたもの。なんでこうしたのか?を、色々な言語を比較しながら易しく教えてくれる本でした。

 

なぜ世界にはこんなにいろいろな種類の言語があるのでしょうか?それは、何を「楽」だと考えるかが人によって異なるからです。(p.13)

いろいろな設計の言語があるのは、人間にいろいろな目的があるからなのです。高速なコードを書くのが楽であるように設計されているC++と、コードを読むのが楽なように設計されているPythonを比較して、C++を読みにくいと言ったりPythonを遅いと言ったりしてもあまり有益な議論にはなりません。(p.14)

好きだった部分。それぞれの言語の思想をもっと掘り下げて知りたいと思った!

 

たとえば作者本人が書いたドキュメントやソースが一番詳しいでしょう。しかし「難しい」「量が多い」「英語なので読めない」と口実を付けて、誰かの書いたやさしい解説を探したりしてしまいがちです。それは「オリジナルの肉は大きくて硬いから」といって、安全なのか痛んでいるのかもわからない、誰かの作ったひき肉を食べるのと同じです。(p.80)

コラムで「どう学べばいいのか?」のような話を扱っていて良かったので、周りの初学者にコラムだけでもさくっと読んでほしい。

 

クラスの概念が複雑だと感じますか?たしかにそのとおりです。それは、C++Javaのクラスがいくつもの役割を持っているからです。
①まとまったものを作る生成器
②どういう操作が可能かという仕様
③コードを再利用する単位
(p.210)

複数のクラスを継承を使って密に結合してしまうのではなく、委譲を使って組み合わせたほうがよいのではないでしょうか。その委譲の参照も、ソースにハードコードするのではなく、設定ファイルを使って実行時に注入するほうがよいのではないでしょうか。こういう発想で「依存性の注入」(Dependency Injection)が生まれました。(p.223)

クラスには2つの相反する役割があります。1つ目は「インスタンスを作るためのもの」という役割で、このためには「完結した、必要なものを全部持った、大きなクラス」である必要があります。2つ目は「再利用の単位」という役割で、このためには「機能ごとの、余計な物を持っていない、小さなクラス」である必要があります。(p.231)

クラスについての話がとても学びになった。「インスタンスを作るためのもの」と「再利用の単位」をごちゃまぜにしていたけど、それぞれの役割を分けて考えるとすっきりする。

 

f:id:neruko_ha_sodatsu:20220118234439j:plain

面白くてぺろっと読んでしまった。