「しゅん」という人間の作り方 〜生まれてからの 20 年間を振り返る〜
はじめに
先に書いておくが、この記事は全文駄文である。全く推敲していないし、全く校正していない。 さて私は 2023/04/22 に 20 歳の誕生日を迎える。 自分の半生の振り返りをここに書いておき、自分という人間がどのように構築されていったのかを知ってもらえたらと思っている。
自分の半生
私は元々何か創作したりするのが好きな人間だった。 一番古い記憶だと、幼稚園の頃で、折り紙でオリジナルの作品を作ったり、既存のボードゲームから新しいボードゲームを作り出して、父親にプレイしてもらったりしていた。 無論、園児が考える程度のルールなため、そのほとんどが破綻しており、よく父親を困らせていたような気がする。
一方で、私はテレビゲームも好きだった。幼稚園の頃、母に連れられてゲームセンターのマリオカートを遊ぶのが好きだった。 そんな頃に Wii とマリオカート Wii が発売され、母にねだった覚えがある。 というわけで、我が家には比較的幼少期からテレビゲーム機があった。
小学校に上がると、よく家で放課後に友達と家でゲームをしていた。小学生なので公園で野球したり、鬼ごっこしたりもしたが、私としては家でゲームをする方が好きだった。 一応、我が家にはゲームに関する取り決めがあり、勉強をやったらゲームを一日 30 分まで遊べるというルールがあった。 しかし、友達と遊ぶ場合は例外というルールだったので私がゲームをしたいがためによく友達を家に呼んでいた。
そんなごく一般的な小学生だったのだが、小学 4 年生のときに我が家にスマホとタブレットがやってきた。 親は別に IT 系の仕事をしているわけでもないし、ゲームもやらないのでどちらかと言うと IT には疎い人たちで、スマホも「別にガラケーでいい」というスタンスだったのだが、 流石に世の中の流れに逆らえなかったのか、母がスマホを買い、家族で使うためのタブレットも買った。 当時テレビゲーム機もネットに繋いでいなかったような私にとっては、タブレットでアクセスできるインターネットという世界は非常にワクワクさせるものだった。 特に自分が興味を惹かれたのはテレビゲーム機の改造に関する情報で、いろんな人がいろんな方法でいろんなゲームを改造しているということに興味を持った。 自分もマリオカート Wii の改造である CTGP Revolution を入れてみたり、スーパーマリオブラザーズ Wii で自作のステージを作ったりしていた。1 これらの情報は主に YouTube と Goolge 検索で得たものであった。今思えばこれが自分のインターネットでのはじめての情報収集作業だったのかもしれない。 このような改造作業をしているうちに、だんたんとパソコンやインターネットを使いこなせるようになってきた。
また、自分と Minecraft との関係も自分の半生を語るにあたって重要なものだと思う。 ある程度インターネットを使いこなせるようになったところで、自分は Minecraft というものを知った。 PC で遊ぶゲームというのが自分にとっては新鮮で、プレイスタイルがほぼ無限にあるというところに惹かれた。 当時テレビゲームのソフトは誕生日やクリスマスに親に買ってもらっていたが、Minecraft は親に買ってもらえなかった。 親としては PC でのゲームというのがどうも胡散臭く感じたらしく、Minecraft を買ってもらうことはできなかった。 そのため、無料でできる体験版を何度も遊んだ記憶がある。 最終的には貯金を貯めて、どうにかして買った(どうやって買ったのかは正直覚えていない。あまり褒められた購入方法では無かった気がする)。
Minecraft は自分にとっては非常に大きな影響を与えたゲームだった。 自分は特にクリエイティブモードが好きで、レッドストーン回路を組んだり、コマンドブロックで遊んだりしていた。 レッドストーン回路では電卓くらいまでは作った気がする。今思えば、自分は Minecraft のレッドストーン回路で論理回路や 2 進数計算を学んだのかもしれない。 また、Mod というものにも興味を惹かれた。特に工業系の Mod が好きで、当時では有名だった IC2 や BuildCraft を遊んでいた。 そのうち、自分でも Mod を作ってみたいと思うようになった。しかし、自分は当時プログラミングの知識どころか PC の知識ですら全くと言っていいほどなかったので、 Java の開発環境の Eclipse をインストールしようとして、32bit と 64bit の違いが分からず挫折した。
そんな中、ある日親が Scratch の本を買ってきてくれた。これが実質的に自分のプログラミングのスタート地点だった。 ブロックプログラミングというのが非常に分かりやすく、自分はすぐにプログラミングの楽しさにハマった。 親が買ってきた本には色々なゲームが載っていたが、全部作り終えると自分はもう少し難しいものを作りたいと思った。 当時は Scratch もそこまで有名では無かった気がするが、インターネットに載っていたシューティングゲームを作って、自分で改造したりしたような記憶がある。
私がプログラミングにハマって少し経った頃、私は中学校に入学した。 詳細は伏せるが、私は中学受験して中学校に入学しており、入学当初は周りのレベルの高さに圧倒されていた。 自分より何倍も勉強ができる人、秀でた能力を持っている人、大企業の社長令嬢など、周りには自分よりも優れた人が大勢居た。 小学生の頃は正直自分は秀でた方だと思っていたが、中学校に入ってから井の中の蛙であることに気付いた。 特に勉強面では勝てる見込みが無いと思い、それ以外のことに力を入れることにした。それがプログラミングだった。
私はだんだんとブロックプログラミングでは物足りないと感じるようになってきた。しかし、普通のプログラミング言語は過去の挫折の経験からか、手を出せないでいた。
そんな中、中学校に一つの案内が届いた。それは 2 泊 3 日で行われる Life is Tech!というイベントだった。
そこでは 3 日間という超短期間でプログラミングを学ぶことができるということだった。
イベント参加費は正直めちゃめちゃ高かった気がするが 親にねだって、参加することができた。
そのイベントでは様々なコースから一つを選んで参加するのだが、私は iOS アプリ開発コースに参加した。
イベントの参加は私にとっては驚きの連続だった。今まで自分は家にあった家族共用の一体型 PC しか触ったことが無かったが、イベントでは MacBook を使って開発を行った。
始めてノート PC というものを触ったし、始めて macOS というものを触った。トラックパッドの使い方が分からず、右クリックの方法について聞いた覚えがある。
そんな中で苦戦しつつも自分は XCode と Swift を使ってアプリを作ることができた。きちんとコードを書いた、始めてのアプリである。
そのアプリは、勉強の時間を計測してくれるアプリだった。タイマーかストップウォッチを選べて、その時間を記録してくれるものだった。
記録の永続化もしていなければ、バックグラウンドでの計測機能すら無く、とても実用には耐えないアプリだったが、それでも自分は自分のアプリを作ったということに喜びを感じた。
次に自分が始めたのは Python だった。近所の本屋で「Python の絵本」という本を見つけたのがきっかけだった。
その本で、自分は基本的なプログラミングの概念を学ぶことができた。特にclass
によるオブジェクト指向プログラミングの概念は、
自分が新たに触れるものだった。自分はすぐに Python の魅力にハマった。Python はライブラリが非常に豊富で、ライブラリさえあれば
かなり色々な事ができた。自分は Python で GUI アプリを作ることが多く、オセロやブロック崩しを作ったりした。
特にブロック崩しでは何を思ったのか当たり判定を全て自分で実装した。
C++で物理演算を実装するサイトを参考にして、Python 上にベクトル演算による当たり判定を実装した。
当時中学生だった私には線形代数の知識が全く無かったので、この実装を通して基本的な線形代数を学ぶことができた。
2 年生の頃、私は県のサイエンスグランプリというものに出場した。 これは県内の中学校の生徒が集まって、そこで数学や物理、化学などの科目の問題を解いて、その成績を競うものだった。 なんと 1 位から 3 位までのチームはつくばでの無料ツアーという副賞もあり、先輩が去年それに参加していたのを見て、私もツアーに行きたいと思い友達を誘って参加した。 コンテストの問題は 6 ジャンルほどあったが、中にはプログラミングなんて問題もあり、自分はそれを解いた。内容はフローチャートの抜けている箇所を埋めるというような問題だった気がする。 結果としては 4 位だか 5 位だかだった。残念ながらその大会ではツアーにいけなかったのだが、その後学校の掲示板にツアーの参加者を募集する掲示があった。 それは一次審査と二次審査に通過すればサイエンスグランプリと同様つくばへの無料ツアーに参加できるというものだった。 すぐさま私は友達と二人で参加申請を行った。一次審査は作文、二次審査はプレゼンで、それぞれ宇宙への思いを語った。 元々自分は宇宙に興味があり、小学生に読んだホーキング博士のスペース・アドベンチャーというシリーズの本をきっかけに宇宙に興味を持った。 そういった思いを作文とプレゼンに載せたことで友達と二人、つくばへの無料ツアーに参加することができた。 私の中学校ではこのツアーへの参加者は 6 人も居て、県内の中学校の生徒では 2 番目に多い中学校だった。 中には殆ど話したことも無い人も居たが、みんなで見学したり、夜ホテルで遊んだりしてとても仲良くなったと思う。
さて、ここで紹介しておきたいのが私の中学時代の友人である K だろう。 K は私とは中学校の同級生であり、非常に優秀な人だった。 先程のツアーの参加者の一人で、ツアーを通して仲良くなった。 K はプログラミングこそ詳しくなかったが、アイデア力に非常に優れていて、よく彼が考えてきたアイデアを私が「面白い!」といって実装したりしていた。 中には自分の知識不足で実装できないものもあったが、私は彼の面白いアイデアを実装しようとして様々なプログラミング(やそれ以外)の知識を学ぶことができた。 K のおかげで自分のプログラミングの知識は広がっていったと言えるだろう。 K のアイデアを実装していくに当たって、自分が興味を持ったのは Web アプリだった。 当時はアイデアを実現するに当たって LINE Bot を使ったことがあったのだが、LINE Bot には LIFF という LINE と連携した Web アプリを作ることができる機能があった。 LIFF を実装する中で、自分は Web アプリの開発に興味を持った。 最初に自分が使ったフレームワークは Vue だった。当時は Node.js も HTTP も JavaScript すら全く知らなかったので、かなり苦労した。 Vue のための本を買って、どうにか Web アプリを実装していった。 自分で実装したアプリが PC でもスマホでも動くことに新鮮さを感じ、私は Web アプリの開発にハマっていった。
また、私は 2 年生の終わりから学友会といういわゆる生徒会にて放送委員会の委員長を務めることになった。 委員長に任命した副会長二人2曰く、私が技術分野に非常に詳しいから放送機器の操作や、動画制作ができるだろうということで任命された。 自分は今までずっと別の委員をやっており、放送機器の操作なんて全く知らなかった。 しかし、前任の委員長も部活の先輩だったため、色々教わりながら放送委員会の運営をしていった。 放送委員会では、普段の放送の他に学友会で使用する動画の制作なんかも行っていた。 当時ほぼ動画編集の経験が無かったが、そこは気合で乗り切った。 今思えばそんなにクォリティの高い動画では無かったと思うが、友達や先生に褒められたのは嬉しかった。 他にも自分は音楽集会や学習発表会(いわゆる文化祭)の音響操作を担当したりした。 全校生徒が体育館で合唱したり、発表を聞いてる間袖部屋で三役と雑談しながら(ときには歌ってしながら)音響を操作しているのは少し優越感があって楽しかった。
そんな中、私は高専に進学した。 私の中学校はほとんどが近くの進学校に進学するので、高専に進学する人はほとんどいなかった。 しかし、私は遂に学校で本格的にプログラミングが学べるということで期待を持って高専に進学した。 だが私は高専に入学してすぐに、自分の期待していたこととは違うことに気づいた。 私のような入学前からプログラミングをやっていた人は殆どおらず3、授業でも低学年のうちでは殆どプログラミングをやらなかった。 理想と現実のギャップは辛かったが、高専というのはかなり自由度の高い学校だったので、普通の高校生よりも自由な時間が多く、自分のやりたいことをやることができた。
2 年生には全国のプログラミング好きの高専生が集まるコミュニティに参加した。 今まではプログラミングを好き好んでやっている仲間が少なかったので、このコミュニティでそういった仲間をたくさん作ることができた。 また、仲間とプログラミングの情報交換をしたりハッカソンに参加したりすることで、自分のプログラミングの知識は更に広がっていったように思う。 コミュニティへの参加は自分の成長にとても大きな影響を与えてくれた。 しかし、こうしたイベントの参加への機運が高まっていったタイミングで新型コロナウイルスが流行してしまった。 本来はオフラインで開催されるイベントが中止になったり、オンラインで開催されるようになったのは非常に悲しかった。 コロナの流行によって空いた時間によってコミュニティでの繋がりが深まっていったが、 コロナの流行によってオフラインでの人との繋がりが減っていってしまったことはなんとも皮肉なことだったと言えるだろう。
3 年生では部活にかなり力を入れた。 私は情報技術研究部という部活に所属していて、いわゆるプログラミングをやっているような部活だったのだが、高専プロコンへの出場も一つの目標だった。 同じ学年の部員たちと新入部員を増やすにはどうしたらいいのかを考えたり、新入部員へのプログラミング講座資料を作ったりと、部活の運営にも力を入れた。 また、高専プロコンへの参加は 3 年生の時点で始めてで、わからないことばかりだったが、どうにかひねり出したアイデアで課題部門の予選を突破した。 高専プロコンでの開発は共同開発であったが、自分にはプロジェクト管理の経験も知識も無かったので開発は非常に難航した。 開発メンバーでの意思疎通が上手く行かなかったり、開発に大幅な遅れが出てしまったりし、本戦の直前には壮絶なデスマーチを繰り広げた。 本戦出場に当たっては、当日行うプレゼン用の資料を作ったり、マニュアル審査用のマニュアルを提出したりする必要がある。 マニュアルに関してはほぼ一日で仕上げて提出した。しかも 2 日間ある本戦の 1 日目にはまだ肝心のプログラムが完成していないというかなり無茶苦茶な状況だった。 1 日目のプレゼンを終わらせると、2 日目のマニュアル審査とデモンストレーション審査の練習と(僕が発表役だった)、プログラムの完成を目指した。 2 日目は睡眠時間 1.5 時間というほぼ寝ていないような状態でボロボロになりながらもなんとかこなした。 デモンストレーションでは 1 回目は上手く行ったのに、2 回目では機器の不具合によって動作しなかった。 そもそも当日までプログラムが完成していないような状況でよく動いたなという感じだったが、デモンストレーションで上手く動かなかったのはショックだった。 結果としては特別賞を受賞した。自分としては受賞は期待していなかったので、発表されたときは嬉しくて思わず叫んだ覚えがある。 上手く行かないことだらけの開発であったが、この経験を通じて自分のプログラミングの知識はもちろん、プロジェクト管理の知識や経験も得ることができたし、何よりプレゼンへの対応力が上がったと思う。
他にもアルゴリズムの授業が非常に印象に残っている。 本校のアルゴリズムの授業は、授業の前半で講義を行い、後半で大きな課題に取り組むという形式である。 その課題というのは「円周率を 1000 桁計算するプログラムを作る」というものである。主に多倍長演算を実装するための課題であるが、これが非常に難しい課題だった。 円周率計算に使用する公式は各個人に与えられそれぞれ異なるものだったのだが、私に与えられた公式は非常に収束が遅く、1000 桁なんてとてもじゃないが計算できないような公式だった。 私はありとあらゆる手段を用いてプログラムを高速化しようとした。授業中に示される多倍長演算のプログラムは簡単で分かりやすいが遅い。 そのため私は授業中に示されるプログラムをすべて捨て、独自で実装を進めた。 特に掛け算なんかは普通に実装すると になるのだが、FFT を使うと に抑えることができる。また FFT は浮動小数点演算なため大きい桁数だと誤差が生じるが、NTT という剰余環を使った演算だと誤差が生じない。 こうしたアルゴリズムを実装することによってプログラムの高速化を図った。 FFT/NTT は結果として定数倍が大きくなるのと、値のオーバーフローが生じたりしてしまったため本実装への採用は断念したが、この実装を通してより専門的なアルゴリズムや数学の知識を得ることができたと思う。 公式の収束が遅い問題は、オイラー変換という数学的な方法を用いて級数の収束を速めることで解決した。 これらの工夫によって最初は 1 時間かけて 5 桁くらいしか求められなかった計算が、最終的には 20 秒で 1000 桁求める事ができるようになった。 あまりにも劇的な変化に、アルゴリズムの凄さを実感した。
この辺りで自分が興味を持ったのが、Web アプリにおけるパフォーマンス改善とアクセシビリティである。 Web アプリのパフォーマンス改善は、Web アプリの開発において非常に重要な要素であり、近年その注目度が高まっている。 SPA などのリッチな Web アプリが増えるにつれて、非常に重い Web アプリケーションが増えている。 重たい Web アプリは、ユーザーの体験を悪化させるだけでなく、通信量の増加によるコストも増大させる。 こういった問題を解決するための手段を積極的に学んだり、実際に既存の Web アプリのパフォーマンス改善に取り組んだりした。 また、アクセシビリティについても興味を持った。 Web アプリはデバイスの制限を超えて、多くの人に利用される。 中には、視覚障害者や聴覚障害者などの障害を持つ人もいるし、そもそもディスプレイが無いようなデバイスからもアクセスされる。 そういった様々な環境でアクセスされても同様の体験を提供することがアクセシビリティの目的である。 自分はまだまだアクセシビリティについて理解が浅いと感じているが、これからも積極的に学んでいきたい。
4 年生では就職への視野を広げるためにインターンへ積極的に参加した。 始めに参加したのは Pixiv のインターンである。 きっかけは高専プロコンのスポンサーとして参加していた Pixiv がインターンを開催していることを知ったことだった。4 元々自分は創作が好きで、他人の創作物を見るのも好きだった。そういった他人の創作活動を支援したいという思いがあったので、Pixiv のインターンに参加した。 詳細は伏せるが、インターンでは非常に多くの刺激を受けることができ、自分が実際に企業で働いたときのイメージをすることができたと思う。 本当は Pixiv のアルバイトもそのまましてみたかったが、残念ながら平日のアルバイトは学校の授業があるため難しいということで断念した。 また大学へ進学したら考えてみたいと思っている。
他にも自分は Chatwork のインターンに参加した。 Chatwork では DDD やアジャイルスクラム開発が学べるということで、高専プロコンで自分の実力の無さを痛感した設計やプロジェクトマネジメントのスキルを身につけるために参加した。 こちらではより「学ぶ」ということが多くできたインターンだった。特に日本のエンジニア界隈で有名な方々と設計や開発についてお話を聞いたり議論したりでき、非常に貴重な経験となった。
また、卒業研究の前段階であるプレ卒研が始まった。プレ卒研では実際に各研究室に配属され、研究室の研究内容の基礎的な知識を学んだり実際に研究したりする。 私はホログラフィの研究を行う研究室に配属された。ホログラフィは興味深いもので、「究極の 3D 映像技術」とも呼ばれる実用化されれば非常に大きな影響を与える技術である。 残念ながら現在ではハードウェア面でもソフトウェア面でも課題が多く、実用化はまだまだ先になりそうだが、そういった課題を解決していくのもまた面白いだろう。
さて、今自分は編入学勉強の真っ只中である。これを執筆している明日には願書を提出しないといけないし、約一ヶ月後には試験がある。 編入学を志望する大学では自己アピール文の提出が必要なのだが、自己アピール文を書くにあたって自己分析を行った際に気づいたことがある。 それは、自分はもっと世の中にコンピュータが浸透していってほしいと思っているということである。 現在でこそスマホなどの携帯端末が普及しているが、それでもコンピュータを使う時間とそれ以外の時間というのは明確に別れていることが多いだろう。 コンピュータは人間のありとあらゆる行動を驚くほど拡張してくれる。 私は日常のあらゆる場面において、コンピュータが使えるようになっていってほしいと思っている。 将来的にどのようになっていくのかは分からないが、いつかコンピュータという存在を認識することなく、コンピュータが人間の行動を支援してくれるような世界が実現されるのではないかと思っているし、その世界に貢献していきたい。
終わりに
思ったよりも長くなってしまった。 今回はプログラミングに関連した出来事や思い出・印象に残ったことを書いたが、もちろんここに書いていないこともたくさんある。 中学校の頃の学友会での思い出、高専での活動などなど、書きたかったが、書いてしまうとあまりにも長くなってしまうので今回はここまでにしておく。
こうして振り返ってみると自分はじつに色々なことに挑戦してきたなと思う。 これからも挑戦を恐れずいろんなことに興味を持って取り組んでいきたい。 数十年後、自分がどうなっていくのかは分からないが、これを読んで自分の基本に立ち返ることができたらいいなと思っている。