ぷらすのブログ

僕がコンピュータサイエンスに関して知らないこと

こんにちは、@p1assです。

最近、Twitter 上で、「コンピュータサイエンスについて学びたい」みたいな話をよく見るのですが、僕もその1人です。

コンピュータサイエンスの学科に所属してないので、「独学で学ばないといけない」という気持ちはあるのですが、 「じゃあ一体何を学べばいいんだ?」 となってしまったので、自分なりに知らないことを挙げていきます。

挙げたものが本当にコンピュータサイエンスなのかどうかの確証はないです。

僕がコンピュータサイエンスに関して知らないこと

以下、箇条書きです。過去に書いたものなので、いくつかは既に学んでいます。

データベース

  • ACID 特性
  • 名前は知ってるし、概念は分かる。
  • 実際にどうやって ACID 特性の実現しているのかは知らない。
  • 分散データベース
  • Master Slave 構成などは知っている。
  • 実際にどうやって整合性を担保しているのかは知らない。

OS

  • プロセス
  • よく名前は聞くし、タスクマネージャーで kill してる。
  • 「プロセスとは何か?」の問いに答えられない。
  • 並列処理のために必要なことは分かる。
  • スレッド
  • CPU のスペックに書かれている「4 コア 8 スレッド」と OS 上のスレッドが違う概念らしい。
  • 何が違うのかは分からない。
  • Linux カーネル
  • 存在は知っている。
  • システムコールで呼び出せることは知っているが、実際にどんな種類があって、どんな仕組みかは知らない。

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

  • データ構造
  • Queue や Stack、Hash Map くらいは知っている。
  • 赤黒木の詳細は知らない。
  • アルゴリズム
  • ダイクストラは分かる。
  • 分枝限定法は名前だけ、実装は厳しい。

セキュリティ

  • 暗号
  • 共通鍵暗号、公開鍵暗号の特徴は知っている。
  • 具体的なアルゴリズムは知らない。
  • HTTPS
  • 共通鍵暗号と公開鍵暗号を両方使っているのは知っている。
  • SSL 証明書の認証レベルの違いは知らない。
  • 攻撃手法
  • SQL インジェクションと XSS は知っている。
  • 逆にそれ以外は知らない。

ネットワーク

  • TCP
  • 3 Way ハンドシェイクは知っている。
  • 実際にどんなパケットが送られているのかは知らない。
  • L2 以下
  • スイッチが何をしてくれているのは知らない。
  • 物理層でどのような電気信号がやり取りされているのか知らない。

プログラミング言語

  • プログラミング言語のパラダイムは理解しているつもり。
  • オートマトンは名前しか知らない。
  • 数学的にどのように型安全を保たれているのか知らない。

ハードウェア

  • CPU
  • 半導体がいっぱい載っていることは知っている。
  • CMOS についてもある程度理解している。
  • 「MIPS とは?」と聞かれると答えられない。
  • キャッシュ
  • いろんなところでキャッシュを使って、高速化を図っていることは知っている。
  • どの部分で、どのような方法でキャッシュが実装されているか知らない。
  • 二次記憶
  • HDD は何かが回っているっぽい。
  • SSD は書き込み限界があるらしい。
  • それ以上は知らない。

まとめ

  • 知らないことがたくさんある
  • 時間を見つけて勉強したい
  • 僕が知らないことすら知らないものがあれば教えてほしい