言語を覚えるには、コンパイラを書く。
ネットワークを覚えるには、ソケットを書いてプロトコルを実装する
3Dを覚えるには、ラスタライザを自前で書く。

結局これが効率の良い自習方法。