_ CS 30トピック
https://twitter.com/_ko1/status/1281972384036040704
と
https://twitter.com/_ko1/status/1281984532971786240
を見て、エンジニアトピックの作ってみる課題30個、ての考えてみると面白そうだなあ、と思って考えてみた。たぶん普通 CS という時よりも、自分の趣味と実務ぽいの多めだと思う
表記は
みたいになってる
アルゴリズムぽいやつ
- データ構造 / 赤黒木など平衡木 / ハッシュでもいいなあという気がする
- アルゴリズム / diff / 個人的には動的計画法の実用の圧倒的定番
- アルゴリズム / TSPをGPなり焼きなましなりで / メタヒューリスティクスなんか知ってていいと思うので
- アルゴリズム / オセロのゲーム木探索 / 再帰する系もなんか欲しいなあと思ったけどいらない気がする
あとダイクストラとか考えた
言語処理系ぽいやつ
- オートマトンと正規言語 / 特殊記号は .* くらいの正規表現エンジン / まあ定番
- 型 / intとfloatとtupleくらいの型推論 / 興味持った人は高階関数や多相あたり?
- パーサ / 四則演算を再帰下降 / まあ定番
- インタプリタ / add/jmp/print くらいの VM を実装 / 構文木インタプリタは忘れていいよねというのと、CPUエミュレータ的なのを兼ねられるかなと
- コンパイラ / ↑の VM からアセンブリ生成する / 発展課題として VM コードの方を生成する
S式からVMコード出して実行するとかすると一気通貫で良さそう
低レイヤとかUNIXぽいやつ
- 並列プログラミング / ミューテクス / cmpxchg で作ってみる
- 並列プログラミング / スレッドプール / ↑のやつ使うと良い
- シェル / パイプが使えるだけのshell / fork/pipe/exec
- プロセス制御 / make的なやつ / プロセス制御は実務的には結構役に立つ気がしている
- OS / qemuあたりにシステムコールを追加 / OS系、あれこれ考えたけど、あまりしんどくない課題が思いつかなかった。ついでに大規模なコード眺めるとかできて良いかなと
あと malloc とかも思ったけどいくらなんでも僕の趣味すぎるかと思った
ネットワーク、Web、分散システム
- ネットワーク / エコーサーバ / selectとかするやつ
- HTTP / HTTP喋ってログイン / スクリプト言語使っていいけどHTTPとクッキー喋るのは自力くらいの設定で
- JSとCSS / 特定サイト専用adblock / あんまほど良い課題が思いつかない
- SQL / ログイン情報SQLに保持してSQL injectionやってみる / RDB 作るとかの方が良いのだろうかと思ったけど軽くならない気がする……
- 分散システム / memcached的なKVS / クラウドぽいやつ。できれば DHT 使って
マルチメディアとUI
- グラフィックス / キャンバスで好きなもの書く / フラクタル書くとかよりはゲームのキャラ動かす的なのが良い気がする
- 音楽 / ドレミを適当に正弦波と矩形波で合成するくらいのシンセサイザ / 音のAPIはこういう感じになるんだなあと思った記憶がある
- UI / グリッドレイアウト的なやつ使って設定画面 / UIツールキットみたいなの使ってみるのは良い気がする
まあゲーム作ると良いと思う
統計と機械学習
- 統計 / 最小二乗 / 簡単すぎるかもだけど有用度も高いと思うんだけど、どうだろ
- 統計 / k-mean / SVMとかの方が良いのかな
- DNN / MNISTをnumpyくらいで / 勾配法やってりゃいいよ的な
統計わからん
情報理論と暗号
- 情報理論 / ハフマン符号 / 定番的なやつ
- 符号 / UTF8とUCS2の相互変換 / UTF8知らないとつらそう
- 暗号 / SHA1 / MTとかでも良い気がした。いらない気もするが git とか考えると
- 暗号 / RSA / 定番的なやつ
未分類
- 数値計算 / FFT / ルンゲクッタが定番な気がするけど。音楽のとこで合成したのにかけると楽しいはず?
- ハードウェア / 加算器 / iverilog 的なやつで
おもったこと
全体的に自分の趣味と知ってる領域に偏る。忘れてる領域多そうで、でも数えると既に30越えてる。座学ぽくなる計算量理論は……チューリングマシンとかラムダ計算とかあって良かった気もする。数学は……まあいいかなあ……。定理証明とかは、まあどうかなあ……というのと
なんとなく、わかってる人は1日でできるけど、わかってない人は勉強するのも含めて1週間くらい、1年もかけて一通りやるとなんか一通りわかった気になれるんじゃないの?くらいの内容になった気がする
(10:06)
_ k-mean
よりは wikipedia から言語モデル作る、とかの方が良い気がする
(10:17)
_ 候補
mark & sweep GC
DNS クライアント
(14:41)
_ 候補
ストレージの遅さを実感する系の……
あと mmap とか paging とかは良いトピックだよなあ
(14:43)