受験勉強みたいな方法で学んだら、挫折していたかも
――興味深いなと思うのは、大学で計算機学を専攻した場合、OSやプログラミング言語の自作って、コンピューターのことを基本から学んでから最後に挑む課題なんですよね。でも、上原さんの場合は、コンピューターの基本を一回学んでみて、それをきちんと理解し直すためにOSや、プログラミング言語を自作した。
上原 たぶん、僕はいわゆる勉強が嫌いなので、そういう方法になったんだと思います。プログラミングでも何でも、知識を蓄積していくだけという方法だと途中でやめちゃったと思うんです。
――総花的に、全部の知識を順番に覚えていく形だと続かない、と。
上原 そうですね。いわゆる受験勉強みたいな方法で学んでいくと挫折するだろうなと思ったので、そうはしなかったです。
何か「これを作ってみたい」っていう目的意識を持って始めると、勉強するものはすべてその目的に直結するわけで。そうすることで、興味やモチベーションを維持できたので、結果いろいろな周辺知識も自然と身について、プログラミングの技術もある程度ついたと思います。
つまずいたときは、頭で理解しようとすることから一旦離れた
――なるほど。ただ、ステップアップしていくときにどうしても分からないことって出てくるじゃないですか。そういうところの解決ってどうしてました?
上原 僕の場合は、オブジェクト指向(注3)がよく分からなくて詰まったんですけど、頭で理解しようとすることから一旦離れて、実際に何か作ってみました。
(注3)……ソフトウェア設計で使われる考え方。この方法論を理解していないとプログラムが煩雑になり、特に多人数でのソフト開発が困難になる。現在の大規模なソフト開発では必須のものだが、概念的でわかりにくい部分があり、プログラミング入門者にとってのハードルでもある。
――たいていのプログラミング学習者ってオブジェクト指向で引っかかると思うんですけど、頭で理解しようとする人がほとんどだと思います。
上原 抽象的なものを学ぶときは、まずその必要性を体感できないと駄目だなという気づきがあったので。中学2年生の夏頃にPythonで質問投稿サイトのようなウェブアプリを作ろうとしたんです。でも、やっぱりオブジェクト指向が分からなかったので、一旦それは置いておいて、その時の知識で作ってみたんですよね。
そうすると、このURLに対してこの処理をする、みたいな処理をダラダラと宣言的に書いていくことになって、結果、どうしてもコードがグチャグチャになってメンテナンスできなくなっちゃって……。そのプロジェクトはボツになっちゃったんですけど、その後にまたオブジェクト指向を勉強し直してみたら、この機能はこういう需要に応えているのか、みたいなことがすごく分かりました。