HELLO CYBERNETICS

深層学習、機械学習、強化学習、信号処理、制御工学、量子計算などをテーマに扱っていきます

素人流:コンピュータ・サイエンスの基本知識を取り揃える書籍

 

 

follow us in feedly

https://cdn.blog.st-hatena.com/images/theme/og-image-1500.png

はじめに

謎のタイトルを掲げていますが、実質は私の決意表明と書籍の紹介になりますのでご留意ください。

ちなみにこの記事ではコンピュータ・サイエンスのすべての分野に精通することは不可能だと思われるので(なんたって自分がその目処立っていないので)、あくまで初心者〜中級者向けということで勘弁してください。

データ構造のアルゴリズム

これは中々奥が深い分野だと思われますが、この手の話は理屈を眺めていても私は中々頭に入ってこないタイプでした。どうしても内容に集中できないのです。「本当に意味あるんかしら?別にプログラムはこんなこと知らなくても書けるような…」なんて勉強しながら思っちゃうわけです。

そういう人にこそ下記の書籍がとってもおすすめ。

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

プログラミングコンテスト攻略のためのアルゴリズムとデータ構造

タイトルがとんでもなく仰々しいのですが、プログラミングコンテストでは「アルゴリズムとデータ構造の工夫で、差異が出る」ということを実感できるような具体例に触れることができます。すなわちプログラミングコンテストを攻略してみようというゲーム的な感覚で進みつつ、アルゴリズムとデータ構造の重要性を学んでいくことができるというわけです。

別に競技プログラミングでハイスコアを目指しましょう!ということを言っているわけではありません。単純に楽しく勉強できる最高のツールなのです。

また、この手の少し基礎的な勉強をしようと思う場合には、「C/C++」辺を言語として選択すると良いと思います。上記の書籍でもサンプルコードは擬似コードあるいはC++で記述がなされています。

C++ってとんでもなく複雑化している巨大な言語ではあるのですが、ソフトウェアを真面目に実装していくということではなく、勉強のツールとして使う分には素晴らしい言語です(もちろん使いこなせるならば応用でも強大な言語です)。低階層を意識しつつ、型や計算を明示的に書いていくことでコンピュータの動作をイメージできるようになるはずです。

あと単純に速いので、Pythonをはじめとする高レベルなスクリプト言語の数値計算ライブラリなどはC++で実装されていることが多いです(PyTorchなんかPyを冠しつつほとんどC++でございます)。

コンピュータ・アーキテクチャ

コンピュータ・アーキテクチャはコンピュータ・サイエンスでは恐らく最もハードに近い低階層の分野です(もちろん細かくはデジタル論理回路、電子回路、半導体素子くらいまでは降りていくのでしょうけども)。プログラムの動作は物理的にコンピュータ上の回路の動作によって実現されているわけですが、通常プログラマがこれを一々意識しなくても良いように設計がなされています。

コンピュータ・アーキテクチャをどこまで掘り下げていくべきかというのは私自身にもよく分かっておりませんが、勉強をするならば以下のヘネパタ本がおすすめです(というか、大体の人からヘネパタ読めという回答が得られます)。

ヘネシー&パターソン コンピュータアーキテクチャ 定量的アプローチ 第5版

ヘネシー&パターソン コンピュータアーキテクチャ 定量的アプローチ 第5版

コンピュータの構成と設計 第5版 上・下電子合本版

コンピュータの構成と設計 第5版 上・下電子合本版

こいつらはかなり骨太で物理的にも分厚いので(構成と設計の本は電子版だからマシだが)、気楽に読んでみようという感じにはなり辛いですが、随時読み進めていくという形で使うのが良いかなと思います。実際、コンピュータを直接設計しなければならないようなケースというのは一般人には中々訪れにくいものでもあるので、データ構造とアルゴリズムなどソフト面の勉強をしつつ、気になる点が生まれるごとに低階層を調べるというのが良いかなと思います。

もちろん時間があるならば「構成と設計」を通読するのがよろしいようです。「定量的アプローチ」の方は割と専門的な言葉を既知として、更に高性能なコンピュータを実現する方法について述べている本なので、勉強が進んでからでもいいかなと思います。

ネットワーク

ネットワークは実のところ技術的なお話という感じで取り組むのも良いのですが、ある意味、共通のルールを制定する歴史のお話でもあります。だから、なんというか、「バリバリ理論的な雰囲気で勉強したい理系の人」にも、「理系っぽそうな話に苦手意識のある文系の人」にも不人気な印象です…笑。

かくいう私も、特に好き好んで学ぼうという意識はありませんでした。広く浅く(浅いといっても、教養としては十分)学ぶことのできる本でサッと勉強したいと思います(実際、下記のどちらかで十分でしょう)。

マスタリングTCP/IP 入門編 第5版

マスタリングTCP/IP 入門編 第5版

  • 作者: 竹下隆史,村山公保,荒井透,苅田幸雄
  • 出版社/メーカー: オーム社
  • 発売日: 2012/02/25
  • メディア: 単行本(ソフトカバー)
  • 購入: 4人 クリック: 34回
  • この商品を含むブログ (37件) を見る

基礎からわかるTCP/IP ネットワークコンピューティング入門 第3版

基礎からわかるTCP/IP ネットワークコンピューティング入門 第3版

セキュリティ

セキュリティは前々からずっと興味のある分野でした。が、なんというか目立たない分野過ぎてミーハーな私は中々勉強に着手できませんでした。「IoT、ビッグデータ、人工知能!」とか言われる中で、そんな社会は「セキュリティ」なしでは語れないはずです。

将来セキュリティエンジニアの需要が爆発的に増加し、高収入を得る隠れたポジションになるはずだと狙いを定め、割としっかりと勉強したいなと思っております(何を隠そうネットワークの勉強をする気になったのも、そういう観点である)。

まず初めの一歩として以下の暗号技術入門はとってもおすすめです。暗号理論っていったら小難しそうな代数の話がチョコチョコと出たりするのですが、この本は意欲的な一般読者なら楽しく読めるようになっています。

暗号技術入門 第3版

暗号技術入門 第3版

あと下記の情報セキュリティハンドブックは、教養としてインターネットに関わるすべての人に読んで欲しい内容となっています(内閣サイバーセキュリティセンターなんてあるんですね)。

情報セキュリティハンドブック

情報セキュリティハンドブック

  • 作者: 内閣サイバーセキュリティセンター
  • 出版社/メーカー: 内閣サイバーセキュリティセンター
  • 発売日: 2017/07/14
  • メディア: Kindle版
  • この商品を含むブログを見る

あと、ある意味、既にIoTの塊と言える自動車のセキュリティについてガチンコで学んでみようと思い以下の書籍にも目を向けました。

カーハッカーズ・ハンドブック ―車載システムの仕組み・分析・セキュリティ

カーハッカーズ・ハンドブック ―車載システムの仕組み・分析・セキュリティ

ソフトウェア工学

実際にソフトウェアを設計するという観点では、プログラミングに対する考え方、設計、要件定義などについて学ばなければなりません。これは幅の広い学問分野である(だと思われる)ので、ズバリコレを学べ!ということは中々言えませんが、兎にも角にもソフトウェアというものについて知っていなければ、エンジニアリングすることはできないでしょう。

www.hellocybernetics.tech

最後に

ただの書籍を羅列下記事になってしまいましたし、私がもともと興味のあった分野とそうでない分野で明らかに難易度の差が出てしまったような感じがしますが、これを決意表明としてコンピュータ・サイエンスの初歩から基本くらいは幅広く理解できるようになりたいです。