はじめに
この文章は新たに何かコンピューターを学び始める方向けに、自分自身で考えるちょっとしたコツをまとめるための文章です。大げさに言えば人生で得た教訓の共有を目的としています。
新規性がどうチャラとか、検証可能な全詳細をとかレイヤー違いの愚かな質問をする人は何も得られませんので、ご遠慮ください。
コンピューターもしくはシステムを学ぶということ
理論的には数学、実装としては物理を学ぶということです。本気で勉強すると必ずこのどちらかの知識が必要となります。
ただ、実質的に、これらの学問を体系的にすべて学ぶことはできません。でもまぁ、コンピューターシステムを仕事とすることぐらいは、関係がある。根ざしていることを理解だけしていけば問題ありません。勘違いしてほしくないのはこの2つの学問が要らないと言っているわけではないこと。またコンピューターシステムが「チョロい」といっているわけでもないことです。
そのいずれにも十分に価値があって、世の中のために不可欠で、学ぶに値する大切なことなんです。ただ、ちょっとだけ見ている場所が違うだけなんです。
では、なぜ、根ざしている、基本である物理や数学をいったん忘れることができるのでしょうか?
なぜ、数学や物理をいったん忘れることができるのか?
それは、コンピューターシステムの学び方には「抽象化」という考え方があるからです。
例えば、私たちは CPUの中で電子がどう動くか を意識しなくてもプログラムを書くことができます。
また、ソートアルゴリズムを使うときに、厳密な計算理論をすべて理解している必要はありません。
これらは「低レイヤーの理論や実装を一度隠蔽し、高レイヤーの視点で考えられるようにする」ことによって成り立っています。
じゃあ数学も物理もいらない?
もちろんそんなことはありません。むしろ、より深く理解したいなら、数学や物理に戻ることが必要になる場面が出てきます。
数学の視点
- ハッシュ関数の衝突確率 を理解するには確率論が必要。
- 機械学習のモデルの最適化 には線形代数や微分が重要。
- グラフアルゴリズム を理解するには離散数学が不可欠。
物理の視点
- CPUキャッシュのヒット率 を上げるには、メモリ階層の理解が大事。
- スレッド並列処理の効率化 には、CPUのパイプラインやコア間通信の知識が役立つ。
- ゲーム開発 では、物理エンジンが実世界の運動法則(ニュートン力学)に基づいている。
レイヤーを意識して学ぶと理解が楽になる
つまり、コンピューターを学ぶとき、はじめは抽象化を活用して「考えやすく」することができますが、より高度な知識を求めるなら、結局、数学や物理に戻ってくることになります。
大事なのは、「今、自分がどのレイヤーで考えているのか?」を意識することです。
それが分かれば、余計なものを気にせず、適切な知識を取捨選択して学べるようになります。
レイヤーと共に大事なこと
誤解を恐れずに言えば、コンピューターを学ぶということは、抽象化レイヤーの概念や仕組みの理解、コンピューターの使い方の理解の両方を一緒にやるべきだということです。それぞれ得意・不得意があるでしょうが、片方から得られるフィードバックが他方の理解を進めることもしばしばあります。そのため、どちらか一方をおろそかにすることはできないと思います。
使い方の学習
コンピューターをたくさん使ってください。プログラムを書いたり、その動きを検証してください。自分のために、学んだことをまとめて発信してください。他の人から、いろいろなフィードバックが得られるはずです。
「生成AIに聞けば実装方法なんていつでもわかる?」
確かにそうかもしれません。生成AIを使えば、いつでも動くコードが手に入ります。
でも、そのコードが誤っていたら?
エレガントでなかったら?
保守性に乏しかったら?
それらを直すのは 自分自身 です。自分のセンスを磨くためにも、学習と発信は続けていく必要があります。
概念の学習
たくさん本を読んでください。読んで読んで、たくさん読みましょう。そして、自分のためにまとめ、発信しましょう。もちろん、身近な人との対話でもよいです。
そして 識者の意見を真摯に聞くべき です。
間違ってもAIの意見を鵜呑みにしないこと。AIはまだ未熟です。自身の持っている情報を飛び越えて、埋め、補完し、伝えてくることもあります。
必ず 識者(先輩)の意見を聞いて、自分なりにかみ砕くこと が重要です。
実装の勉強は、使ってみて反応を観察すればすぐに終わります。しかし、概念の理解は「振る舞いの観察」ができない分、コミュニケーションに由来する部分が大きい のです。そのため、実装の勉強に比べて 成長を実感しにくい 分野でもあります。苦しいかもしれませんが、しっかり積み上げていきましょう。
大切なこと
他者の発言が どの立場でのものなのか をしっかりと理解しましょう。それは レイヤー だったり、学習の軸 だったりします。
相手のレイヤーや学習の軸が違っていることに気付ければ、自然と 敬意や謙遜 が生まれ、新しい発見にもつながります。
反対に、自分の学習方法や立場での考え方を 相手に強要することはやめましょう。それは、発見や気づきから自分を遠ざける結果にしかなりません。
長くなりましたので、今回はここまでにします。
次回は 具体的なレイヤーの例を取り上げながら まとめていきます。
読んでくれたら嬉しいです!