桐生あんずです

新卒エンジニア1年目のブログです。日常やプログラミングについて書いてます。

「入門コンピュータ科学 ITを支える技術と理論の基礎知識」を読んだ

桐生あんずです。
最近、プログラミング言語の教本を読み進めて勉強してはいるけれども、もっと根底の部分というか情報学の土台の部分をもっと知るべきなのではないかと思ってまずはKADOKAWAから出版されている「入門コンピュータ科学 ITを支える技術と理論の基礎知識」を数日間かけて読んでいた。

入門 コンピュータ科学 ITを支える技術と理論の基礎知識

入門 コンピュータ科学 ITを支える技術と理論の基礎知識

内容としては、1~3章はブール演算の説明から始まり、マシン語オペレーティングシステムといった情報学の土台の土台と言えるような話が続く。

個人的に、実学的な話だと強く感じ始めたのは4章からでネットワークの基礎の話が始まりサーバーとクライアントの構造やネットワークセキュリティの解説が参考になった。一番ハッとさせられたのが5章のアルゴリズムについての章で、どのようにコードを構築すべきかを具体的にイメージするプロセスが細かく説明させられていたのがすごくよかった。
コーディングがちゃんとできるようになるためには、問題解決をするためのプロセスのイメージを膨らませて具体化させていく作業がとても重要だとわかったので、今後開発をしていく中でも困ったらすぐネットの文献やサンプルコードに頼るのではなく開発における問題で何が起きているのかをまず捉えて、どのような対処をすべきなのかを書き出して捉える作業をしようと思った。
問題解決のイメージをどう段階的に膨らませるかについては、P209に紹介されていたポリアの問題解決の段階の定義をプログラムの文脈に置き換えた話ががすごくわかりやすかったので引用します。

第一段階:問題を理解する。
第二段階:問題を解く計画を考案する。
第三段階:計画を実行する。
第四段階:解の正確さと、それが他の問題を解くためのツールとなり得るかどうか評価する。
プログラム開発の文脈に翻訳すると、これらの段階は次のようになるだろう。
第一段階:問題を理解する。
第二段階:アルゴリズム的な手続きによって、どのような問題が解けるかのアイデアを得る。
第三段階:アルゴリズムを定式化して、プログラムとして表現する。
第四段階:プログラムの正確さと、それが他の問題を解くためのツールとなり得るかどうかを評価する。

これをちゃんと行うためには、問題を捉えることはもちろん大事で、問題を解決するために繰り返し構造や再帰構造をどう使っていくかといった「武器」の扱い方を理解することが大事だと思う。
私の場合、問題を捉えるところまでいっても言語に用意されている「武器」の使い方についての知識が乏しいせいで自分で考える能力がまだちゃんと身についてない状態と言える(つまり日本語の読み書きが不自由な状態…)ので、まずは武器の使い方を教本やサンプルコードで理解し、問題を用意して武器をどう使うべきなのかを自分で考えるといった勉強方法が必要なのではと思った。

6章のプログラミング言語について紹介された章も、5章と同じくらい重要なことが書かれていた。
プログラミング言語の形成の歴史から始まり、変数とデータ型、データ構造といった伝統的なプログラミング概念、オブジェクト指向プログラミングにおけるクラスとオブジェクトの概念などといったプログラミング言語の学習においてはかかせない常識が一から説明されている。
この部分に関しては、いずれかのプログラミング言語を勉強してから読んでみると、スッと入る部分が多かったと思う。もちろん早めに知っておくべき話ばかりなのだが、RubyJavascriptの基本的な書き方をある程度知った後に読むと具体的な使い方のイメージがすごくしやすいと思う。
7~9章もモジュールの扱い方やデータ構造、SQLなどといった開発においてはかかせない説明が多くあり、特にDMBSについての解説はまだ完全に理解できない部分はありながらも重要そうだと思った。
なので、一度で読み終わらすにはとても勿体無い本だと思ったので4~9章は定期的(まずは週一ぐらい)に読み振り返っておきたい。

なんとかして全体通して読んでみたけれど、文系非情報系エンジニア見習い的な立場としては情報工学の基礎を文字通り入門できた気がする本だった。
実際、同年代の情報理工系の人はこういった内容を1回生ですでにやっているのだろうと思うしやっぱり専攻の違いはデカいなあ…と今更ながら思った。そんなことを嘆いても仕方ないので、バイト先や個人開発でコードを書いて実際に学びつつ、彼らが授業で知り得ている内容は技術書をガンガン読んで知見を得ていくしかないのだと思う。
また、読んでいて難しいとは思うところはかなりあれど、「ああ、ここが知りたかったんだよ!!!」とずっと思いながら楽しく読めた。

自分が使っているプログラミング言語の教本を読み進めることも大事だけど、もっとこういった基礎じみたことを勉強したいなあとなったので基本情報技術者試験を申し込んでみた。
去年、プログラミング言語のことをあまり理解してない状態でITパスポートを取っていた時よりかは実学的なイメージで勉強ができそうなので楽しみ。
ITパスポートの時にもお世話になった栢木先生の本を書いました。のちのち午後問題の対策もやらないとなあ…。

そんな感じです。文系で情報系に入門したい方はかなりおすすめの本でした。ありがとうございました。