『プログラマの考え方がおもしろいほど身につく本』読み終わりました。

読んだ本、全部レビューとして残したいなぁ、と思ったけど、さすがにしんどいですね。

それに最近ちゃんと読めてないです・・・。最後の夏休みを利用して、積み本消化したいなぁ。
いい本いっぱいあるのに読まないんじゃ意味ないですね・・・。

今日紹介するのはこちら。先日参加させていただいているCTFチーム、よかろうもんの勉強会でも
一部だけ紹介させていただきました。

プログラマの考え方がおもしろいほど身につく本

7月頭くらいから、通学の電車の中で読んでました。

このレビューは、あくまで僕の主観です。内容の正確さや、クオリティは保証できません。あくまで自分自身のための記録です。
気になる方は、自分で読んで理解していただければと思います。

構成は

  1. 1章と2章で問題解決へのアプローチの基礎とヒント(戦略、パズル)
  2. 3〜6章で問題に対するプログラミングからのアプローチ(配列、ポインタ、クラス、再帰)
  3. 7章でよりよいコードの再利用
  4. 優秀なプログラマの考え方

とおおまかになっています。

ちなみに、3〜6章に書かれているサンプルコードは全てC/C++で記述されています。
Cをやったことのない人でも、全編通して読むことはできますが、やったことあればスムーズだと思います。

ただ、僕個人としては、Cなどの言語を触った経験がなく、ポインタの概念が全くない人にこそ、役に立つのではないかな、と思いました。

ポインタ(参照)の概念については、詳しく解説がされており、更に有効な使い方なども一緒に紹介されています。
クラスにしても、リストにしても、スタック、キューなどのデータ構造も『ポインタってこうやって有効活用されて
いるんだなぁ』と納得できると思います。(ポインタ(参照)をプログラマが触らないにしても、内部的には利用されているので
勉強になると思います。)

あと、本書は『プログラミングが出来るようになる』ことを目的としているのではなく
『プログラマーらしい問題解決へのアプローチのヒント』の紹介が目的(だと僕は思う)なので
さらっと一回読むだけだと、あんまり何も残らないかもしれません。第一章にある

  • 常に計画を持て
  • 問題を分割する
  • 問題を簡略化する

この3点が個人的には印象に残っています。

『XXXXのプログラムを書いてくれ』と言われたとき(または必要になったとき)に
なんとなくキーワードを拾って調べなんとなく使えそうなライブラリを見つけて、
なんとなく動かしてみる、というフローを、ダラダラと、いつの間にか繰り返している時って結構あると思うのですが、
上記のフローで作業を進めると、見つけたライブラリでどうにか成らなかった時に、
しばらく手が止まっちゃうんですよね(僕の場合)

分割と簡略化に関しては、僕はよくペーパープロトタイピングを用いてます。
プログラミングに起こす前に、流れや、処理を紙に列挙してみてます。

その段階でゴールまで書けたら初めて処理を書きます。人によって向き不向きはあると思いますが、
僕はこれが習慣になってて、よかったなぁ、とよく思ってます。

計画・設計の大切さを再認識しました。


あと取り上げたいのは、6章の再帰の活用に関してです。

ここで、再帰を用いるメリット・デメリット、そして手法がかなり解りやすく書かれています。

再帰って、ぱっとコード見ただけだと、処理を追いかけるのがしんどいし、
自分で書け、といわれると簡単な処理でも手が止まってしまうことばかりで、
再帰が大の苦手でした。

全てのパターンに当てはまるはずはないですが、再帰を使った処理を自分で実装するときの
ヒントが大いに含まれています。再帰に苦手意識のある方はヒントになるかもしれません。

僕は、この本にあるポイントを注意して、コードを読む、書くをしていたら
かなり理解が進みました。使いドコロは限られますが、ビビらずに使いたいなぁ、と思うようになりました。

おすすめです。


8章の『プログラマの考え方』は、この本の一番根幹にあたる部分かもしれません。

優れたプログラマが、どのようにして問題解決に挑んでいるのか、学習を続けるべきなのか、なんていう部分があります。

このへんは、オライリーの『プログラマのためのサバイバルマニュアル』やオーム社の『アジャイルプラクティス』なんか
で紹介されていたものと共通のものがありました。(より『計画的に』というキーワードにフォーカスしていますが。)


各章には、『結論』と『演習問題』が章末に含まれていて、それらを全て網羅すると、本自体は薄いですが、結構な
ボリュームになります。※ぼくも演習問題は、全部でなく、自分で好きなものを選んで実践しました。

プログラムをとりあえずできるようになったけど、もっともっと生産的に、効率的に、クールに書きたい、なんていう人のヒントになると思います。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です