コンピュータサイエンス

コンピュータサイエンスの学びの場

コンピュータサイエンスとは

  • 計算と情報を、理論と実装の両方から扱う学問です。計算機科学、情報科学とも呼ばれます。
  • 理論は、何がどれだけ速く計算できるか。実装は、OS、ネットワーク、データベースのように、それを機械の上で動かす仕組みです。
  • この場では分野の地図を、仕事で先に使う順の 6 本の道に分け、動かして測って身につけます。

コードの下で何が起きているかを図と可視化で見て、自分で動かし、比べた回数を測って確かめます。言葉の暗記では終わらせず、面接の問題と基本情報の過去問で使えるかを試します。

1 回の進み方

  1. 1

    問い

    身近な遅さや不思議から始めます。なぜ検索は一瞬で終わるのか。

  2. 2

    仕組み

    図と可視化で、値がどう動くかを 1 歩ずつ見ます。

  3. 3

    動かす

    その場で動くコードで、値を変えて結果を見ます。

  4. 4

    測る

    データを倍にして、比べた回数がどう増えるかを数で確かめます。

  5. 5

    説明

    3 行で説明し、面接の問題か過去問を 1 問解きます。

学ぶ順の地図

数と論理から言語と処理系まで、6 本の道を左上から順に進みます。石 1 つが 1 回です。ログインすると、つないだコースのレッスンを済ませた回の石が緑に変わります。薄い石は準備中の回です。

分野の地図と道

コンピュータサイエンスの分野は、理論の基礎と、作る側の実装に分けて地図にできます。分野ごとに 1 行の説明と、どの道で学ぶかを並べました。

実装作る側の分野
  1. 道 6プログラミング言語言語の設計と、コンパイラなどの処理系
  2. 道 5分散コンピューティング複数の機械で 1 つの仕事をする
  3. 道 3並列コンピューティング同時に複数の処理を進める。並列処理
  4. 道の外ソフトウェア工学作り方、試験、保守。プログラミングの進め方応用
  5. 道 3コンピュータ・アーキテクチャCPU とメモリの作り。オペレーティングシステム
  6. 道 4通信コンピュータネットワークと暗号理論
  7. 道 5データベースデータを壊さずに速く出し入れする
  8. 道の外人工知能学習と推論。生成 AI応用
  9. 道の外ロボット工学機械を動かす制御と認識応用
  10. 道の外コンピュータグラフィックス画像と 3D の描画応用
  11. 道の外データサイエンスデータの集計と分析応用

道の外の分野 (今あるコース)

数論、計算科学、ロボット工学、コンピュータグラフィックスは、今はこの場で扱っていません。

全部の回の一覧

36 回のうち、今あるコースや可視化、この場の頁で学べるのは 29 回です。準備中の回も、学ぶ順の目安として並べています。

道 1数と論理と計算量
  1. 1-12 進数と 16 進数桁の重み、変換、表せる範囲学べる
  2. 1-2文字コードと論理UTF-8、真理値表、ド・モルガン学べる
  3. 1-3計算量を数えるBig-O、ループの回数学べる
  4. 1-4データの表し方バイト、キャッシュ、エンディアン学べる
  5. 1-5符号化Base64、チェックサム学べる
  6. 1-6情報量と圧縮ビット、確からしさ、圧縮準備中
  7. 1-7計算できない問題チューリングマシン、停止問題準備中
道 2データ構造とアルゴリズム
  1. 2-0アルゴリズムとは順次、分岐、反復の 3 つで書く手順学べる
  2. 2-1線形探索と二分探索100 万件でも 20 回で見つかる学べる
  3. 2-2遅いソート 3 つ挿入、選択、バブル学べる
  4. 2-3速いソート 2 つマージ、クイック、平均と最悪学べる
  5. 2-4スタックとキュー積む順と並ぶ順学べる
  6. 2-5再帰自分を呼んで小さくする学べる
  7. 2-6木と二分探索木たどる順、片寄り学べる
  8. 2-7ハッシュ表鍵から一気に引く、衝突学べる
  9. 2-8グラフと最短経路幅優先、深さ優先、ダイクストラ学べる
  10. 2-9動的計画法同じ計算を 2 度しない学べる
  11. 2-10試験と面接で確かめる基本情報 科目B、道場 10 問、面接 20 問学べる
道 3コンピュータの中
  1. 3-1OS の役目とシステムコールOS が間に立つ理由学べる
  2. 3-2プロセスとスレッドスケジューラ、プロセス間通信学べる
  3. 3-3メモリとファイルメモリの階層、仮想メモリ、i-node学べる
  4. 3-4取り合いと排他レースコンディション、Mutex学べる
  5. 3-5CPU が命令を実行する命令、レジスタ、クロック準備中
道 4ネットワークと暗号
  1. 4-1層に分けて考えるOSI、TCP/IP、パケット学べる
  2. 4-2IP とサブネットIP アドレス、CIDR、ルーティング学べる
  3. 4-3TCP と UDP再送、輻輳制御、ポート学べる
  4. 4-4HTTP と DNSHTTPS、HTTP/3、名前解決学べる
  5. 4-5TLS と暗号の基礎鍵交換、証明書学べる
道 5データベースと分散
  1. 5-1正規化重なりを無くす学べる
  2. 5-2インデックスと B-tree索引が速い理由学べる
  3. 5-3トランザクションACID、分離の度合い学べる
  4. 5-4分けて置くスケーリング、複製、CAP学べる
道 6言語と処理系
  1. 6-1正規表現とオートマトン後戻りが増える式準備中
  2. 6-2字句解析と構文解析電卓の式を木にする準備中
  3. 6-3小さなインタプリタ変数と if を持つ言語準備中
  4. 6-4型と型検査型が間違いを先に止める準備中

実例から引く

CS の知識が足りずに本番で起きた事を、公表された一次の記録から引きます。各回の終わりにつなぎます。

ほぼすべての二分探索に潜んでいた整数の上限越え

2006年6月2日に公表

広く使われていた Java の二分探索で、真ん中の位置を (low + high) / 2 で求める式が、とても大きな配列のときに整数の上限を超え、負の数になっていました。道 1 の 2 進数と、道 2 の二分探索がつながる例です。

Google Research Blog (英語)

ハッシュの衝突を狙って Web サーバーを止める

2011年12月28日に公表

多くの言語のハッシュ表で、狙って衝突させる鍵を大量に送ると表への出し入れが極端に遅くなり、Web のサービスが止まり得ると公表されました。ハッシュ表の最悪の計算量が、そのまま障害になった例です。

oCERT-2011-003 (英語)

1 本の正規表現が配信網の CPU を使い切った

2019年7月2日

配信網の守りの規則に入った正規表現が後戻りを大量に起こし、HTTP を受ける CPU を使い切って、配信網の全体で 502 の誤りが出ました。形式言語の知識が、本番の障害につながった例です。

Cloudflare Blog (英語)

面接と試験で確かめる

道の終わりに、学んだことが使えるかを外の物差しで確かめます。

仕事にしたい人は

よくある問い

コンピュータサイエンスとは何ですか

計算と情報を、理論と実装の両方から扱う学問です。何がどれだけ速く計算できるかを考える理論の側と、OS やネットワークやデータベースのように、それを機械の上で動かす実装の側があります。英語の computer science の訳で、計算機科学や情報科学とも呼ばれます。

プログラミングとは何が違いますか

プログラミングはコードを書くことで、コンピュータサイエンスは書いたコードが速いか、正しいか、どこで壊れるかを説明するための知識です。同じ動きをするコードでも、データが増えたときの速さはアルゴリズムで大きく変わります。

数学はどこまで要りますか

この場の道 1 と道 2 は、四則演算と 2 の累乗が分かれば進めます。証明は求めず、比べた回数を数えて確かめる形にしています。数論のように数学が深い分野は、仕事で直に使う場面が少ないので、今は道に入れていません。

独学でどこまで身につきますか

この場の道 1 から道 5 は、準備中の 3 回 (情報量と圧縮、計算できない問題、CPU が命令を実行する) を除き、今あるコースと可視化と面接問題だけで独学で進められます。止まったときに聞ける人がいない、何から始めるか迷う、の 2 つが独学で止まりやすい所なので、学ぶ順を道に並べ、各回に修了の条件を書いています。

情報工学とは何が違いますか

情報処理学会のカリキュラム標準 J17 は、情報の専門教育をコンピュータ科学、情報システム、ソフトウェアエンジニアリング、コンピュータエンジニアリング、インフォメーションテクノロジの 5 つの領域に分けています。この場が扱うのは、そのうちのコンピュータ科学の中身です。

大学で学ぶ物と同じですか

ACM と IEEE-CS と AAAI がまとめた大学の CS の指針 CS2023 は、17 の知識の領域を挙げています。この場は、その中から仕事で先に使う物を選び、学ぶ順に並べています。大学の講義のように全部の領域を同じ重さで扱うことはしていません。

Web 系のエンジニアにも要りますか

要ります。画面が遅いときにデータの持ち方を変える、データベースの索引を足す、通信の層で原因を切り分ける、のどれも CS の知識です。転職の面接でも、データ構造とアルゴリズムの問題をその場で解くコーディング面接があります。

どこから始めればいいですか

仕事で先に使う道 2 (データ構造とアルゴリズム) の最初の回、アルゴリズムとはから始めるのを勧めます。7 行のコードをその場で動かすところから入れます。2 進数に不安があれば、道 1 の最初の回から始めてください。

出典と数の取り方