0. はじめに
Bizer株式会社でフルスタックエンジニアとして働きながら、国立大学法人電気通信大学の先端工学基礎課程(通称 K課程)という社会人向けの学士課程に在籍しています。
この春(2021年3月)に卒業予定のため、いちソフトウェアエンジニアから見た大学教育や学歴に対する考えをまとめておきます。
1. 対象読者
- 理系大学のカリキュラムがソフトウェアエンジニアという仕事にどう活きるか分からない方
- 就業しながら学士を取ろうとしている方
- ソフトウェアエンジニアと学歴の関係性を不透明に感じている方
2. 現職エンジニアが工学学士を取る理由
18歳で最初の大学を中退しエンジニアとして働き始めたため、途中の放浪期間などを差し引き、ソフトウェアエンジニアとしてのキャリアは現在10年程です。つまり大学入学時点では6年程のキャリアがあり、それなりに幸せなエンジニアライフを送っていました。
ではなぜ既にエンジニアとして禄を食んでいたにも関わらず、26という年齢で大学1に入ろうとしたのか、その理由について述べます。
2-1. バックボーンの欠如を埋め合わせる
日本のソフトウェアエンジニアなら覚えがあるかと思いますが、この業界は土日に仕事関係の勉強をする人の数が他業界に比べ突出して多いです。ソフトウェアエンジニアが他業界から見れば過酷なワークライフ2を送っている理由として、ラップトップ1台で始められるという参入障壁の低さ、そして技術トレンドのライフサイクルの速さが挙げられます。つまり勉強しないエンジニアは置いていかれるという事情です。
しかし技術トレンドの中には、変化の速いレイヤーと変化の遅いレイヤーがあることに気が付きます。ソフトウェアエンジニアの世界で必要になる知識は、次のようなピラミッドとして捉えることができます。頂きが高レイヤー、裾が低レイヤーを指します。
※筆者はWebエンジニアのため図がWeb寄りになっています。専門によってピラミッドの形は変化するはずです。
あるレイヤーはそれより下の全レイヤーに多かれ少なかれ支えられています。そして低レイヤーであるほど長いライフスパンを持つ傾向があります。
一つの例ですが、Preferred Networksが2015年から開発していたディープラーニング用のフレームワークChainerは、2019年末に開発をストップし、同社はFacebookのPyTorchへ移行していく旨を発表しました。しかしChainerもPyTorchもPythonという30年の歴史を持つ言語で書かれています。さらにディープラーニングが立脚する誤差逆伝播法は、発見から60年が経過しているアルゴリズムです。
別の例としては、サーバサイドを記述する言語が挙げられます。Rubyは直感的な文法とRoRの登場によりサーバサイド言語として国内を中心に多くのユーザを獲得しました。しかし2010年代前半から、C10K問題を解消できるnode.jsやGo言語が注目を集め始め、今ではサーバサイド言語におけるファーストチョイスの1席をRubyから奪っています。このブームの変遷を予期するには、プロセス・スレッドといった長い歴史を持つOSの基本的なアーキテクチャについて知っておく必要がありました。
このようなトレンドの変化は、ソフトウェアの世界における有り触れた日常です。上位レイヤーは高い進化圧に晒されており、選択と淘汰のサイクルが高速に回ります。一方、下位レイヤーにある変化の遅い知識は長く生き続けます。大学で教えるのは、まさにこの「遅い知識」です。遅い知識は陳腐化しづらく、技術的負債を生まない技術選定、各レイヤーの効率的な利用、そしてレイヤーを使うのではなく作る側へ回る時に必要になります。
低レイヤーの知識は独学や実務で身につけることは可能ですし、実際にそうしてきた尊敬できる人を何人も知っています。しかし大学はこのような遅い知識を体系的に教える場であるため、僕が学び直す場としては最適に思えたのが1つ目の入学理由です3。
2-2. 一部の企業の応募条件を満たす
僕の最終学歴は私大文系の中退という、計算機工学とは対局に位置するような経歴でした。もう30ですので、特に国内のソフトウェア業界に限れば、転職時に学歴はそこまで大きく影響しません。しかし外資IT企業の多くは「CS、あるいはそれに準ずる学士以上」という一文がQualificationとして挙げられています。
僕の場合、夜間・学士(修士でなく)・卒業30歳という三重苦です。現役の昼課程の学生と比較すれば極めて肩身が狭いですが、それでも門前払いされない経歴には一応なり、修士への切符も手に入れました。
また研究室という特殊な空間を経験することで、実験や論文の読み書きといった作法を学ぶ目的もありました。上にも書いたレイヤーを作る側に回るとき、こういった研究のお作法を知っておくことは無駄になりません。そして研究の作法というのは、どうしても研究室やそれに類する機関に所属しない限り、独学では身に付けづらい種類の技術です。
僕は死ぬまでエンジニアリングを続けていく所存なので、将来的に自分が選べるポジションの選択肢を増やしておきたかったことが2つ目の理由です。
3. 入学してどうだったか
入学理由は分かったけど、実際に入学してどうだったのか。僕と同じ道を辿る人はそれほど多くないかと思いますが、誰かの参考になればと思い書いてみます。
3-1. 研究の作法を知った
上で書いた内容の繰り返しになりますが、論文の読み方と探し方が(ほんの少し)分かりました。僕がお世話になった研究室は自然言語処理が専門で、卒論は「質問文をSQL文に自動翻訳するモデルにおけるディープラーニングを用いた教師データ拡張」というニッチなテーマで書きました。
3-2. 仕事との両立は大変
講義は平日夜と土曜にあります。特に1年次は久々の学問に慣れる必要がある中、毎週の提出が義務付けられた実験レポートの存在、週6日の通学など、控えめに言ってもハードな日々です4。僕はフルタイムではなく週30時間に仕事を減らしていましたが、それでも日曜は課題を解いていたら日が暮れていたため、実質的な休日は存在しませんでした。ちなみに4年間で卒業する夜間の生徒の割合は、毎年おおよそ3割程度です。僕がなんとかストレートに卒業できたのは、家族と会社の理解のお陰です。
3-3. 今後どうするのか
卒業後は大学院に進学する予定でしたが、修論の研究テーマを決めきれていないため、しばらくは仕事に専念することにしました。また大学院ですが、お世話になった電通大でも社会人に門戸を開いた大学院を一応設置しているものの、学生数が極端に少ないことと、昼間に授業があるといった理由により、社会人としては尻込みせざるを得ません。そのため今は社会人向けに東京サテライト校を有するJAISTが気になっています。数年は仕事に専念しながら研究テーマを探して、JAISTに持ち込もうかと考えています。
4. 結局、何を得たのか
「技術が分かる」と言った場合、そこにはレベルがあることを知りました。つまり、単にその技術だけが分かる人と、その技術を下支えする思想・数式・アルゴリズム・他分野との相互関係、さらには歴史的な位置付けまで分かる人がいるということです。
僕は10年間まがりなりにもプログラムを書いてきて、次のような記事を書くほどには、そこそこ自分が良いエンジニアなのでは?と思う日もたまにあります。
今は主にWebのフロントとバックエンドに軸足を置いていますが、数年後に躊躇なく専門を変えられるかどうかをよく考えます。もし理数の太いバックボーンを持った人なら、軽いフットワークで新しい専門分野に飛び移れるのでしょう。なぜならソフトウェアは多くのレイヤーの堆積であって、専門分野のスイッチングは上位レイヤーの交換であるからです。
僕はまだまだ自信が無いですが、4年間を費やして、躊躇なく移動できる彼らの背中ぐらいは拝めるようになった気がします。
Twitter:@aki202
-
自分の観測範囲だけでしか言えませんが、働きながらCSを学びたいソフトウェアエンジニアは少なくありません。少子化が止まる気配もないので、大学関係者の方が見ていたら、オンラインでCSが学べるコースのご検討を…僕はもう間に合いませんが、必要としている人は多いはずです。 ↩
-
あくまで他業界から見た話です。僕自身はプログラミングが趣味ですし、同僚やエンジニア仲間も同じ人種で、苦しんでいる人はあまり見かけません(ただの生存者バイアスの可能性もあります)。 ↩
-
低レイヤーを理解する目的であれば、大学は一つの手段に過ぎません。現に大学に頼らずに優れた見識を身に着けたエンジニアを大勢知っています。大学はたまたま僕の好みにあっていただけです。 ↩
-
ちなみにK課程には健康実践論という名の体育があります。 ↩