「みんなのコンピュータサイエンス」を読んだ

Posted on 2020-02-15 in zakki

考えてみればコンピュータサイエンスの知識を体系的に学んだことが無く、それが関係しているのでしょうか、ある分野では基礎的な事を何も知らなかったりと学び進める上で知識の穴も目立っていたことから、簡単におさらい出来るような内容を求めて買いました。

流れ

一番最初に基礎と題して、読み進めていく上で必要な内容 ( 問題を解決するための道筋の立て方、論理計算や場合の数のカウント方法 ) をおさらいします。その後は下に挙げたセクションそれぞれについて見ていく流れです。どのセクションでも「XX問題」と称して議題を提示して解法を考えるという手法を取っており、考え方も含め分かりやすかったです。後から知りましたがこの「XX問題」というのはすでに知られている有名な問題が殆どなのですね。NP 完全問題巡回セールスマン問題 は知ってはいましたが …。

  • 計算量 : O( ビッグオー )
  • 戦略 : 反復処理、再起処理、総当たり、バックトラック、動的計画 他
  • データ : データ構造
  • アルゴリズム : ソート、探索

後半ではデータベースやコンピュータ、プログラミングそのものの説明が記載されています。 ( データベースは置いておくとして、) コンピュータのセクションでは普段からプログラムを書かなかったり CS の知識を必要としない、一般的なコンピュータユーザでも馴染みのある言葉 (CPU とは ? メモリとは ?) から話が始まっていたりと馴染みやすい印象でした。

感想

  • 一通りのおさらい

コンピュータサイエンスの全体範囲がどこからどこまでなのか私も厳密には知らないのですが、範囲を広くカバーしているなと感じました。特に前半の計算量や戦略、アルゴリズムなどエンジニアの素養のような分野に関しては知らないこと ( 抜けてしまっていたこと ) も多く、知識の補充として非常に役立ちました。この分野は言葉の記載だけではどうしても伝わりにくいよなあ、と思うのですが、本書では図示されている割合が多く ( 何故か python チックな ) 擬似コードという手法で説明が補強されているので、自身の理解が進んだのかなと思います。

漫画で描かれているジョークっぽいのも好みです。リーダブルコードでもありましたが、こういうものも増えてほしいなと思います。

  • 写経や手を動かすことの必要性

これはもうホント言葉通りの意味ですが、読んでいるだけじゃダメだなとなりました。少なくとも個人的にはあまり身につかない。特に「戦略」や「アルゴリズム」セクションで顕著ですね。戦略としてどれを選択するかや実装能力など …。精進が必要ですね。

  • 擬似コードについて

戦略やアルゴリズムの説明にあたり擬似コードが用いられます。書中では " 擬似コードには、話し言葉が混ざっていてもかまわない " とあるのですが、書中の擬似コードには話し言葉はありません ( 文による補足があるものもあります )。本が想定しているレベルとして、" 数行のプログラムを書いたことがあり、for や while などの基本構文を知っていれば問題はない " とあり、実際のコードの内容から考えてもそのレベルで問題無い感触なのですが、一部、執筆者が意図している動作を汲み取れない箇所があったりもしつつ難儀しました。

具体的に言うと DFS と BFS の探索アルゴリズムの擬似コードなのですが、コードを見ても「本当にそんな探索シーケンスになる???」と疑問に思いつつも、引数やメソッドは擬似コードなので執筆者が動作を定義しているものだったりもするし、中々判断しきれないといった場面がありました。

おそらく私の読み取る力が全般的に足りていないのかなあという感覚が強く頑張らないとあかんなという思いが強いのですが、擬似コードへのフォローもあってもよかったとは思います。

このあと

他の書籍を通じて、戦略やアルゴリズム観点でもう少し深く見ていきたいと感じています。

感想