台大での生活も丸3年が過ぎました。本稿は、学部3年の冬休みから学部3年(下)にかけて、生機系(Bio-Industrial Mechatronics Engineering, BIME)で過ごした日々を記録します。話の筋は大きく「研究編」「修課編」「課外編」の3つに分けられると思います。ただ、私は生機系に所属していますが、実際には生機系そのものの話はそこまで多くありません。

研究編

学部3年(上)から、ブラウザの原理と開発に触れ始めました。気づけばとても面白くなっていて、もっと学びたいと思い、iThome の鉄人競賽(30日連続で技術記事を書く大会)に参加しました。30日連続で技術記事を書くことで、ブラウザに関する知識を強化し、そして自分を強制的に学習へ追い込みました。

ただ、原理だけを語ろうとすると、20日目あたりでネタ切れしました。理解がまだ浅く、細部まで深く議論できなかったのです。そこで「論文を読めば続けられる」と考え、ブラウザ研究に関する論文を中心に読むことにしました。するとこれが功を奏して、残りの日数を走り切れました。毎日4時間ほどかけて6〜10ページ程度の中短型の論文を読み、要約と所感を書く、という流れです。結果としてシリーズ『做個網路瀏覽器吧!』は運良く鉄人賽のソフトウェア組で首獎を取り、本当に嬉しかったです。

とはいえ、私は素人より少し詳しい程度でした。より深い研究をしたいと思い、教授のもとで研究することを考え始めました。資工系のウェブサイトを見て、指導してもらえそうな教授を探しましたが、ブラウザ原理や開発に直接つながる研究をしている教授は見当たりませんでした。それでもブラウザは「アーキテクチャ」と密接なテーマだと思います。資工系の研究分野の中で「架構(アーキテクチャ)」という文字が入っている教授が3人いて、公式サイトの上部に並び、互いにリンクされていました。2人が副系主任、1人が網媒所長です。3人の研究背景と経歴を見比べた結果、私に合うのは1人だけだと分かり、つまりチャンスは一度しかないと思いました。

それ以前にも私は「研究」というものに関して、いろいろな経験を積んでいました。高校時代の研究では師大(NTNU)の物理系教授に相談し、実験器材のために中研院物理所の研究員を訪ねたこともあります。大一からは大気系で研究助理をし、大二には生機系の導師と研究をしました。

経験は多いとはいえ、師大の傅祖怡教授と大気系の林博雄教授には満足してもらえたはずです。しかし失敗例もありました。高校生向けの研究培育計画では、受験勉強を優先してしまい、結果的にうやむやで終わりました。指導してくれた研究員の方は、きっとがっかりしたと思います。生機系では生医分野の深層学習研究をやろうとして、結局私が適当に流してしまいました。幸いクラス担任にお願いしていたので関係性が近く、自責の念は少し軽かったですが、失敗の記憶は深く刻まれました。私は同じ失敗を繰り返したくありませんでした。

教授探しは一度きりの勝負で、失敗すれば台大を出て指導教授を探すことになるかもしれません。幸い、記事を書きながら論文を多く読んでいたので、それが一つの「持ち札」になりました。私は清大の彭明輝先生も尊敬していて、先生のエピソードには学ぶべき点が多いと思います。中でも印象的だったのは、先生が英国で博士を始めたとき、初対面の場で教授から数本の論文を渡され、「読んでから研究方向を議論しよう」と言われたのに対し、先生が「教授、これらは全部読み終えました!」と言って、教授がすぐに見方を変えた、という話です。元の話は 〈劍橋去來〉 にあります。この話が教えてくれるのは、研究をしたいなら、先に論文を読み、準備をしてから教授に会うべきだ、ということです。つまり、どんなことでも事前準備が大切です。

私は教授を選びましたが、教授も当然学生を選びます。それでも私は「教授はきっと受け入れてくれる」と信じていました。まずメールで指導をお願いしたい意思を伝え、面談の相談をしました。そのメールには、私が読んだ複数の論文とその解析を添付し、さらにオープンソースへの貢献経験、2社でのインターン経験も説明しました。これだけ誠意があれば、どの教授でも受け入れてくれるだろうと思ったのです。実際に話は順調に進み、資工系の 洪士灝 先生に正式に指導してもらうことになりました。

ここまで書きましたが、学部3年の冬休みは研究の基礎作業に費やしました。論文を読み続け、科技部(MOST)の大専生計画にも申請しました。申請書を書き、研究方向やテーマを考えるだけで冬休みは静かに過ぎていきました。計画は採択され、正式な実施期間は7月から翌年2月です。採択の通知を知ったのは6月中旬でした。ただ、結果を待ってから研究を始めるわけにはいきません。採択されてもされなくても研究は真剣に進めるべきなので、学部3年(下)には2〜3週間に一度、教授と議論しました。

最初はとても熱血でしたが、徐々にブラウザ研究は本当に難しいと分かってきました。ブラウザというソフトウェアは発展がすでに高原期にあり、天井が近いのかどうかも誰にも分かりません。つまり、大きなブレイクスルーは出にくく、進歩は微小なものになりがちです。さらに厳しいのはブラウザの複雑さです。重みのある研究をするなら Chrome のような主流ブラウザを材料にせざるを得ませんが、こうしたソフトウェアは数百万行の巨大プロジェクトで、コードが複雑すぎて「改造したいから改造する」というものではありません。全体を理解するだけでも簡単ではありません。

この点について私は少し情けない気持ちもあります。成果を出したいと思っても、時間をかければ必ず報われるとは限りません。それでも私は過去の失敗を繰り返したくなく、今回は本気で研究をやり切ると決めていました。なぜなら本当に興味があるテーマだからです。結局、学部3年(下)は「空想実験」程度しかできませんでした。システムを作り、トップ10サイトの毎日のバックアップイメージ(ブラウザ研究の重要素材)を収集しました。教授には「Chromium を改造して空想実験の結果を検証したい」とずっと言っていましたが、結局この学期中には実現できませんでした。ソースコードを読んで研究はしましたが、実力不足でこの学期内に形にできなかったのです。

研究が進まないことは常に不安で、プレッシャーは非常に大きかったです。私は高水準の研究をしたいし、教授を失望させたくありません。ある面談で「どうすれば安定して成果を出せますか?」と聞いたところ、教授は「研究には洞察力と先見性が必要だ。どこに題目があるかを見つけ、題目を見たときに『できるかどうか』を判断できなければならない。その能力は練習が必要だ」と言いました。博士課程なら当然、成果を出して卒業するプレッシャーがあります。数か月成果が出なければ指導教授が能力不足を心配することもある。しかし過去の実績が十分なら、最後には成果を出せると信じてもらえる、と。教授は私を慰めてくれて、「君はまだ学部生で、今は練習が主だ」という意味でした。

それでも私は学部3年(下)の研究に満足できず、水準が足りないと感じました。それでも先生の専題研究では A+ をもらいました。先生が信じてくれた以上、後半の研究では絶対に失敗できません。

修課編

今学期の系必修は4科目もあり、正直多すぎると思いました。電資学群は学部3年(下)から必修がなくなるのに、うちの系は学部4年(上)にも2科目あります。特筆すべきなのは、私は重要度が低い必修を1つ落とし、その時間帯に資工系の「資料結構与演算法」を入れ、さらに資工系の「作業系統」も取りました。

大二から学部3年(上)までは会社でインターンをしていたので、資工系の授業を取る余裕はほとんどありませんでした。ソフト開発の経験は多少あっても、基礎訓練が欠けていたので、今学期は本気で履修することにしました。結果として今学期は合計23単位で、大一以来最多になりました。

資工系の授業について言うと、私が学部3年で取るのは一般の資工生より遅いです。彼らにとっては1つが大一(下)、もう1つが大二(下)です。しかし私はこのタイミングで取ったからこそ、別の味がありました。私はすでに多くのコードを書き、オープンソースにも参加し、会社でもインターンをしていたので、知識がより実感を伴って入ってきます。微積分を学び始めたばかりだと「何に使うの?」となりがちですが、実は後でどんな工学分野でも使います。私の場合は、問題を解く中で能力不足を感じて、そこから補う、という順序です。どちらの学び方も良いと思いますし、私は「足りない→補う」タイプでした。総じて資工系の授業は楽しく、今学期の幸福な時間になりました。資工に最初から入らなかったことを悔やみ続けていますが、今のソフト開発への情熱も、回り道の経験があったからこそだと思います。

必修には流体力学もありました。『十月の天空(October Sky)』という小説(映画化もされました)があります。米ソ宇宙開発競争の時代、アメリカの炭鉱町の高校生がロケットを作る夢を追う物語です。私はこれに後で大きく影響されました。宇宙への好奇心で物理が好きになり、航宇技術の魅力で工学が好きになり、当時は NASA で働くのが夢でした。しかし私は中学1年で、勢いで『飛行工程基礎』『実験火箭原理設計與製作』という2冊の本を手に入れたものの、最初の数章だけで理解できず、後半は微積分だらけで挫折しました。期末レポートでロケット技術を改めて研究しようと思ってこの本を読み返したとき、思わず笑ってしまいました。今はすごく楽に読めるのです。

もう一つの必修は機械元件設計で、これは史上最大の危機でした。先生が容赦しないからです。結論だけ言うと、この学期は40人中10人が落ちました。転系前は機械は面白そうで、自分にもできると思っていましたが、現実は違いました。私は力学の計算が壊滅的に苦手で、これまでの力学科目も先生の慈悲で通過してきたので、こんなに厳しい先生に当たったのは本当に不運でした。

この科目は4回の試験があり、その成績がそのまま学期成績になります。しかも先生は調整しません。合格のために私は本当に神経を張り詰めて対応し、最後はギリギリで C- で通過しました。それでも私は満足です。こんなに厳しい先生に会うのは一度で済んで良かった。この授業は好きでもあり嫌いでもあります。良い点は、私はこれほど真面目に必修に取り組んだことがなく、機械とは何かを改めて真剣に理解し直せたことです。成績は良くないですが、機械力学への恐怖心は確実に減りました。悪い点は、時間を大量に奪われたことです。必死にやってやっと合格するレベルだと、資工分野にもっと時間とエネルギーを注げません。同級生には毎回ほぼ満点の人が何人もいて、先生は M 字分布の右側を指して「また簡単すぎたようだ。満点が多い」と言います。先生、左側に点が取れない人が山ほどいるのは見えていますか? 台大であっても社会の差は依然として明白です。

ともあれ今学期は無事 All Pass でした。ソフトウェアエンジニアが機械系の必修を大量に耐え抜けたのは、本当にありがたいことです。

課外編

毎年3月中旬、台大には杜鵑花節があり、高校生向けに学科・サークル博覧会が開かれます。今年も参加しました。私と後輩たちはブースを担当し、動くタコ型ロボットを展示しました。

default

私は杜鵑花節では高校生にとても真剣に説明しますが、高校生の心構えはかなり適当だと感じます。誠意が伝わってくる人は本当に少ない。誠意のない来客に対しては、主催側も熱意を失います。

また、学生オープンソース年会 SITCON でも登壇しました。テーマはブラウザ原理とオープンソース経験です。講演は本当に簡単ではありません。準備の過程で、自分が理解できていない点が多いことにも気づきました。しかし自分の口で説明できる知識は、本当に自分のものになります。会場では Mozilla のエンジニア 鄺子進 にも会いました。私が参加しているオープンソースプロジェクト Servo は Mozilla のものなので、彼は私の話題をよく理解していて、その縁で一緒に昼食をとり、少し話しました。ブラウザ開発、中西の開発文化の差、これまでの経験など、どれも面白かったです。私が最も尊敬したのは、彼がいろいろな会議に参加して登壇し、しかも中国語・英語・広東語で講演できることです。毎回挑戦しているのです。

実はこの講演の後、私も少し「中毒」になりました。100人を超える聴衆の前で話すのは本当に面白い。学部3年の夏には COSCUP で2本講演する予定で、これからも機会を見つけて勢いに乗りたいと思います。

speaking image

残りの時間でも私はたくさんコードを書きました。「大学卒業には10万行のコードが必要」という都市伝説がありますが、私はおそらく簡単に達成したと思います。今学期特に力を入れたのは 気象機器人 の開発です。どんな質問にも答えられるチャットボットで、Line、Messenger、Telegram の3プラットフォームに対応させました。機能の追加と改善にかなりの労力をかけ、後輩や友人も開発に協力してくれて、ユーザー数は2,000人近くに達しました。小さな成果ですが、達成感があります。


話はだいたいここまでです。読んでくれてありがとうございます。次の物語はもっと精彩になるので、どうぞお見逃しなく。

😊