台大での生活も4年目に入りました。気づけばキャンパスにいられる時間はあと1年しかなく、名残惜しい気持ちになります。高校から台大に入り、もうすぐ台大を卒業するまでの間に、私は大きく変わりました。物理学者になりたかった自分がソフトウェアエンジニアになり、好きな運動も水泳からテニスへ変わりました。経験してきたことは本当に多く、GIS Taiwan、綠領農学市集、複数社でのインターン、さまざまな講演など、時々自分でも「こんなこともしていたのか」と忘れてしまうほどです。

大学の主目的は専門知識の伝授ですが、私が台大で最も貴重だと思うのは「社会化の洗礼」です。学内で多くの活動・講演・授業に参加し、台湾の若者の中でもトップ層の人たちと接する機会がありました。同時に学外でも多くの活動に関わり、業界で働く経験もしました。互いに関わり、学び、共に仕事をする過程で、さまざまな背景の人と接し、付き合う方法、自分の表現、他者の傾聴、そしてコミュニケーションと調整を学びました。

このシリーズは大学生活を通しで記録しているので、今回は学部4年(上)です。前回は学部3年(下)まででした。学部3年(下)の夏については この夏、CloudMosa で見たこと聞いたこと に書きました。卒業のために必要単位は取らないといけません。これまで仕事や転系、他学科の授業を取っていた影響で、今学期は卒業要件のためだけに取る授業が5科目もありました。そこに加えて、自分が取りたい「DBMS(資料庫管理系統)」と「計算機結構」も履修し、合計は20単位を超えました。学部4年なのに単位が山積みなのは異常で、自分が少し悲しくなりました。(ちなみに来学期も系の授業を3科目取らないと卒業できません。はぁ!)

研究所(大学院)出願編

大学院出願に関する所感は 半路出家で国内 CS 大学院に出願した話 に書きました。ただ、あの記事は出願そのものの記録が中心なので、ここでは前後の文脈を少し補足します。この章は退屈かもしれないので、次の記事に飛ばしても構いません。

学部4年になる前、私は大学院に行くなど全く考えていませんでした。休学したいと思ったことすらあります。ただ私は Jobs でも Gates でもなく、大きな計画があるわけでもないので、結局は歯を食いしばって学位(台大の学士)を取りに行きました。その後、大学院を考え始めた理由は、資工系の科目は明らかに楽に感じたことと、夏のインターンで自分の実力がまだ弱いと痛感し、大学院で穴を埋められると思ったからです。

私は早い段階から大学院のことを考えていて、半年前の研究計画の時点で布石を打ち、8〜9月には書類を準備していました。多くの学生は10月に提出期限が迫ってから準備しますが、結局は「どれだけ慌てるか」の違いに過ぎません。とはいえ準備していても、出願の過程はやはり面倒で、学期開始から10月中旬まで生活が乱されました。書類を修正し、推薦状の草稿を書き、手続きを回し、教授に推薦状アップロードを何度もリマインドする必要がありました。

過程では「海外に行くべきかどうか」もずっと悩みました。職場の同僚とも話し、洪士灝先生にも相談し、自分でも考えましたが、今でも完全には解決していません。ただ国内で先に受かっておくのは退路になるので、台大の網媒所と交大資工所に出願しました。網媒所は実質的に資工ですが、私は落ちました。正直かなり落胆しました。自分の実力と経歴なら受かるはずだと思っていましたが、台大は結局成績しか見ません。将来ソフトウェアエンジニアになるのに、機械系で C を取ったから何だというのか。でも交大資工所には受かり、ひとまず安心しました。転向の過程では「人に見下されるのでは」とずっと不安でしたし、ある意味で資工所に受かったことは自分を証明する材料にもなりました。ただ、本当はそんな外的価値がなくても、私はすでに自分を証明していました。

研究所に受かった後、交大は先に指導教授を決める必要があり、教授探しも大変でした。最初に当たった教授は印象が最悪で、対話でも不耐で、そもそも受け入れる気がないように見えました。断るなら最初のメールで断ればいいのに、わざわざ交大まで来させて「自分が正しい」と思っている話を延々と聞かされるのは理解できませんでした。2人目はずっと親切でしたが、先に研究経験のある学長姐と話し、教授とも話した結果、「あなたには向かないかもしれない、よく考えなさい」と言われました。3人目はすごい先生らしく、洪士灝先生も勧めてくれましたが、研究室が満員でした。4人目でようやく張永儒先生と話がまとまりました。

張永儒先生は HCI(人機介面)をやっていて、しかもミシガン大学の博士です。この点は洪士灝先生と同じで、私は「ミシガンとは縁があるのでは」と感じ、いつか行けたらと想像しました。HCI は私にとって良い領域かもしれません。というのも、他の領域のように正統な資工訓練を強く要求しないので、私のような半路出家には良い題目です。さらに HCI は生活に近く、他の研究題目ほど虚無的ではないので、起業志向の私にはより役立ちます。

結局、大学院に受かったとはいえ、私が本当に進学するかはまだ分かりません。卒業後すぐ海外で働くかもしれないし、もう1年かけて海外大学院に出願するかもしれません。とにかく未来には不確実性があります。でも交大資工に受かったのはやはり嬉しい出来事です。

計算機構造編

夏に洪士灝先生に「計算機構造を取るべきか」を聞いたら叱られました。何を叱られたのかはもう忘れましたが、とにかく取らないといけないと感じ、実際に履修して収穫が大きかったです。

先生は計算機構造に関する Facebook の投稿を何本も書いていて、私が最初に覚えているのは 與時俱進的計算機結構 です。ただ先生はこの種のテーマについて頻繁に所感を書いていて、読むと啓発されることが多いです。

学期末には私も 軟體工程師必修的三門課 という記事を書きました。3科目は「資料結構與演算法」「計算機結構」「作業系統」で、その一つがこの授業です。資工所が非本科生の修士に補修させる3科目として挙げるのには明確な理由があり、ソフトウェア開発ではこれら3つが相互に補完し合い、効率的で高速なコードを書けるかどうかに決定的な影響を与えます。

DBMS 編

今学期は DBMS(資料庫管理系統)を履修しました。私は最初から「自作 DBMS」をやるつもりで、プロジェクト名は StellarSQL です。Rust で実装した軽量 DBMS で、学期中ほとんどこれを書いていました。

ちょうど今学期は ITHelp の鉄人賽が早めに開催され、私にとっては参加3年目でした。せっかく DBMS を自作するなら鉄人賽から始めようと思い、テーマを Let’s build a DBMS にしました。毎日少しずつ調べて書けば1か月で終わるのでは、と甘く見ていましたが、毎日安定したアウトプットを出すのは本当に難しい。新しいシステムをテーマにすると、調査や資料読みだけで一日が潰れてしまい、後半は進度が追いつかず、最終的には佳作でした。

後日、表彰式で審査員の一人である徐千洋さんに会いました。彼は HITCON の創設者で、毎年審査員もしているので、私たちは知り合いです。彼は私を励まして、「この2年は良い記事を書いている」と言ってくれました。私は去年のブラウザシリーズはまあ良かったと思いますが、今年の DBMS は正直かなり微妙で、上で書いた通りです。ところが実際には、DBMS の理解も深まり、自作の StellarSQL がそれなりに形になったのは、学期末のさらに2か月後でした。後でより滑らかなチュートリアルとして書き直したいですが、当時書いた「日誌」も読む価値があると思います。

今年は佳作を取れたこと自体が意外でした。シリーズ全体が目的のない研究日誌のようだったからです。それでも私は、題目選びが比較的「独特」だったと思います。みんなが「車輪の使い方」を書く中で、私は「車輪の作り方」を研究していた。審査員がそこを評価してくれたのだと思います。だから私が「出来が悪い」と言っても、徐さんは笑って「これは難しいからね」と言うだけでした。

image

ITHelp 鉄人賽会場

後期にはチームメンバーを集め、作業の半分ほどを分担してもらったことで、StellarSQL の開発速度が明確に上がりました。数か月で 10K 行以上のコードを書き、費やした時間は数百時間規模です。メンバーの 黃宇平董書博李彦均 の協力に感謝します。彼らの助けでプロジェクトはより順調に、より完成度の高いものになりました。

システムを作るのは本当に面白いです。学校で学んだことはほとんど使えるし、学校で教わらないことも自分で学ぶことになります。StellarSQL を設計するときも、システムについてはかなり細かく考えました。ただし時間の制約で、protocol、cache、parser などはかなり簡素な実装になっています。それでも「軽量 DBMS」という位置づけで見れば、アーキテクチャ設計は決して悪くなく、コード品質も高いほうだと思います。

完成度は正直 1/3 に満たないと思いますが、雛形はすでにできていて、動作し、継続開発中のプロジェクトです。今後は重要な機能を補い(例えば SQL コマンドの不足を埋めるなど)、一部のモジュールは書き直して、より複雑でも高性能な設計へと段階的に置き換えていきます。