コンピュータサイエンスの勉強計画

目標を決める

  • これを学んでどんなことが出来るようになりたいかというイメージを持つ。

方針

  • (TBD)
  • コンピュータサイエンスは、兎に角分野が多すぎる。正気の沙汰ではない。
  • しかも広くある程度深く学ぶ必要があるので、好きなものを適当に読むのではなく綿密な計画が必要になる。
  • マニアックと感じるものは学習を避け、必要と感じる勉強に取り組む。
  • 難度の高い書籍を読むために、数学や競技プログラミングなどの土台作りを怠らない。
  • 難度の高い書籍は、土台作りが一定以上ある前提において、丁寧に読むより繰り返し読むことを重視する。

教材

数学

  • 赤チャートIA/IIB/IIIC
  • やさしい理系数学
  • 線形代数入門 (斎藤正彦)
  • 解析入門 (杉浦)
  • これなら分かる応用代数
  • 群論入門
  • 統計学入門
  • いかにして問題をとくか

分散システム

  • Distributed Systems 3 (Andrew S. Tanenbaum)

言語処理系

  • TaPL
  • きつねさんでもわかるLLVM

プログラミング言語

関数型

Perl

C++

  • C++テンプレートテクニック
  • Exceptional C++
  • Effective C++
  • Effective Modern C++

アルゴリズム / 計算幾何学

機械学習・AI

Linux / OS

コンピュータ構成と設計

  • パタヘネ上・下

セキュリティ

  • セキュリティコンテストチャレンジブック
  • 体系的に学ぶ安全なWebアプリケーションの作り方
  • C/C++セキュアコーディング

インフラ

  • 月刊や特集のやつ

ネットワーク

  • マスタリングTCP/IP 入門編
  • マスタリングTCP/IP 情報セキュリティ編
  • マスタリングTCP/IP ルーティング編
  • マスタリングTCP/IP IPv6
  • マスタリングTCP/IP OpenFlow編

ソフトウェア・エンジニアリング