強くなりたいと思って独学するが、僕はものごとの習得の仕方をよく忘れる
強くなりたいとよく思う
もともとは数学を自分の武器にして生きていくという心を固めて 2018 年くらいに機械学習から独学を開始して、今はお金をたくさん稼ぐことよりも、当時道具として見ていたはずの計算機自体が面白くなってしまって、今では計算機科学やエンジニアリングについて学んだり考えたりすることの方が楽しくなってしまいました。もちろん今でもお金は好きです。でももともと整数論が好きで、シンプルな規則から生み出される数学の深い世界に魅了されていたので、有限個の機械語から構成される計算機の上で織りなす不思議な世界に未だ興味が尽きないのはなるべくしてなった、という気もします。
僕は田舎で暮らしていて大学も期待していたほどコンピュータ・サイエンスの深いところまで教えてはくれなかったので、本とインターネットが現在までの支えになっています。特に知らない領域を知るために Twitter をよく使います。Twitter をはじめたとき、企業に勤めているソフトウェア領域のエンジニアの方々はどこの会社でも同じような課題にぶつかっていることが多いからかそれほど発信する情報が多様ではないように感じたので、情報系の学生で色々なことに手を出しては独自の謎のこだわりを持ってコードを書いている人を好んでフォローしていました。そういった人の方が今やっていることを実況してくれるので謎のキーワードがたくさん TL を流れるようになり、僕はそれを片っ端から検索にかけて個人ブログを読んだり、慣れてきたらコードをちらっと見たり、その言語に入門したり、動かそうとしてデバッグが大変だったり、そうして情報を吸収してきました。
そうした生活を送っていると、やりたいこととか気になることとかが無限に発散するわけです。知らないこともたくさん出てくる。本もいい本を買ってしまうので、すぐに完全に理解できることはなくて中途半端に理解して積んでしまう。TaPL は 3 回も挫折してしまったように、理解するのに自分の限界を感じることも多くなってきました。
こういう気持ちでもっと理解したい、何か面白いソフトウェアを作れるようになりたい、そういった気持ちを僕は「強くなりたい」と表現します。
強くなる機会の獲得は強くなりたい気持ちのみに作用する
たぶん僕がこういった強くなりたい気持ちと混同していたのが、強くなる学習機会の獲得でした。Twitter で見ていると学生であれば京都の技術・デザイナーが集まるコミュニティや、東京の方の大学の技術団体、セキュリティに強い/教育を担う人を育成する団体には自分の興味と近いところで面白いことをしている人が多いことに気づきます。これらの団体へ参加できないことで、嫉妬に近いような、僕だけロケットブースターがないような感覚になりました。また一部の講座に参加することで、僕もできるんじゃないか?という高揚感を得て強くなりたい気持ちがある程度満たされることもありました。
しかし、これらはあくまで強くなりたい気持ちにのみ作用します。別に本質的に僕がものごとを習得したわけではないのです。講座が終わった瞬間経験値がもらえるわけではなくて、講座が終わった後もものごとを完全に習得するまで鍛錬が続くと、きっと自分が満足するようになるのです。
強くなる機会の獲得によって強くなりたい気持ちが満たされてしまう、このことを僕はいつも忘れてしまいます。
ひとつのことをうまくやる
2018 年ころから Twitter を見ていると、高校生ですごいコードをバリバリ書く人が大学生になって面白そうなソフトウェアを書いていたり、当時から現役ですごい人がさらに面白いことをしたりする例に遭遇したり、最近プログラミングに熱中した人があっという間に深い知識を得てコードをたくさん書くようになる様子を見てきました。僕は人が強くなる過程に興味があるのでブログを読んで色々調べるのですが、結局黄金の法則のようなものはなく、結局個人依存が大きいということが分かりました。
それでもある程度言えることはあって、複数のことがうまくやれる人はひとつのことをある程度深く突き詰めた人だということが言えそうだと思います。フロントエンドが設計からブラウザの仕組みまで深く理解できている人は言語処理系を作ってもきれいなコードを書いているな、とか、低レイヤ人材がインフラに手を出すとすごい速度で手を動かして理解していくんだな、とかそういう感じです。
どうしても Twitter を見ていても、調べごとをしていても、コンピュータ・サイエンスの世界は飽きることのない面白い題材が無限に存在しています。積読が増えるばかりで一つの積読に取り組んでいても目移りして中途半端に理解したまま、分かったことと分からないことの境界も曖昧なまま別の面白そうなことを勉強し始めてしまいます。それで終わる人生もいいのですが、これでは強くなりたいという僕の気持ちは満たされなさそうです。
ひとつのことを自分がやりきったと思うまで突き詰める、このことを僕はいつも忘れてしまいます。
ものごとの習得
結局個々人依存なら、自分が今までうまくやれたケースを考えてみることにしました。プログラミングは 22 歳くらいから始めたので経験が浅くあまり参考にならないので、15 歳くらいから真面目に独学していた数学と、大学受験勉強のことを思い起こしてみます。質量転化と基礎に対する考えを思い出しました。
まずは量が圧倒的に足りないケースが多いということ。受験勉強をするとき、苦手と思っている科目はそもそもたいして勉強していないというやつです。僕の今のケースに当てはめると型理論周りが TaPL 挫折したと言ってもそんな時間かけたかと言われると Go 言語の習得までにかけた時間より格段に少ないので、まだ質量転化や具体の抽象化が始まっていない気がしました。
次に基礎です。僕は基礎をひたすら固めて瞬時に出せるようにしておくと勝手に習熟していく速度が上がっていくという性質を持っていることは高校生のときによく思っていたので、これがまだ使えそうなら使ってしまったほうがよさそうです。言語の文法、コマンドといった基礎的な事柄は調べれば済むので毎回調べていますが、ここがキャッシュされると高速になって、習熟のためにかける時間コストを減らしてより習熟に時間をかけられそうです。
最後に、基礎をひたすら固めてから何かこれだと思うものに対して中心的に、継続的に時間をかけることについてです。題材を今まで選んでは続かないということを繰り返してきました。LLVM も、計算機の仕組みも、Rust も、自動運転も、通信も、すべて面白く時間をかけてもいいと思えます。一方でそれがこの時点でひとつに収束していないのはなぜだろうと考えたときに、それはやっぱり基礎ができてないから、もしくは本気で量を重ねていないことの裏返しなんだろうな、と思います。
ものごとの習得には段階がある、このことを僕はいつも忘れてしまいます。
終わりに
手を動かして本を基礎順に並べてひたすらやっていくしかないんだろうなと思います。Twitter から離れたほうがいいという結論は今までも僕の中で繰り返されています。ただ、数学とか大学受験勉強の本気さを思い起こして、どれくらい僕は本気で強くなりたい、と思っているんだろうかと感じたので文章に残しておきました。