megamouthの葬列

長い旅路の終わり

プログラマと学歴

もはや現代では大学に行く必要はない、いや行ったほうがいい、という議論があるらしい。
大学が、「学歴」という形で、社会における個人の扱いをある程度は規定している事実がありながら、今ひとつ「大卒」であるということが、それほど重要視もされていないようにも見えるプログラマという職種こそ、このような議論がふさわしいのかもしれない。
そのようなプログラマと学歴との関係を少し書いておこうと思う。

プログラマカースト

プログラマは奇妙な人々である。
クーラーの効いた小洒落たオフィスの最新スペックのパソコンに向き合って、鳴り続ける外線電話に出ようともしないで、その間にTwitterで卑猥なイラストをリツイートするといった、一般の社会人では考えられないような非常識を行ってもクビにならず、むしろ、これこそギークの証であると、納得される部分さえある。
そんな普通でない人々に学歴など必要なく、必要なのはただ、計算機科学の識見と、プログラミング能力のみであり、大学なんて行ってようがいまいが、何の関係もない。ほら、ゲイツジョブズザッカーバーグもみんな中退してるし。と思われてるかもしれない。

そういう話が本当かどうか、という話をする前に、プログラマにもヒエラルキーがあることを説明しておこう。

もちろん業界や、役割の違い(SIerの末端のプログラマと機械メーカーの社内SEとか)もあるが、何かの勉強会で登壇したり、公開MLに出したメールのシグネチャに所属を書いている場合に、尊敬されるか、バカにされるか、ぐらいの意味でカーストを考えると次のようになる。


外資系大手本社>国内大手研究所>外資系大手日本法人=国内大手本社>国内メガベンチャー外資ベンチャー>大手子会社>国内ベンチャー>中小ベンダー>クソザコフリーランス


スペースの都合上不等号(>)は一つにしたが、ほとんど=の場合もあるし、「超えられない壁」が含まれる場合もある、そのあたりは適当に脳内で補完して欲しい。
またこれらは所属企業によるものだが、同時にOSSへのコントリビューターにもカーストがあって、ついでに書いておくと


カーネルメンテナ>言語メンテナ>カーネルコミッター>言語コミッター>有名ライブラリメンテナ>色々>ユーザーグループ主催者>ブログでアプリへの文句だけ書奴~


みたいな序列である。
適当に書いてるように見えるし、実際適当に書いているので、首をかしげる向きもあるだろうが、例えば、場末の勉強会にIBM所属のLinuxカーネルメンテナがふらっとやってきたら、登壇者一同が卒倒、逃亡し、プレゼンは全て中止、懇親会では、彼の前に名刺を持った長蛇の列が出来るという光景は容易に思い浮かぶであろうから、その程度には真実味を帯びていると、言えなくもない。

カーストと学歴

で、このプログラマカーストと学歴がどう関わってくるかといえば、実に簡単な話で、上位カーストに入る為には普通に、旧帝の情報系の修士号を持っていなければならず、中位階層であっても、よほど熱心でなければ、そこそこの大学の学士以上の経歴は必要になってくる。

世のニート達が「プログラマになりたいんだけど何の言語を覚えたら良い?」というスレを立てるほどには、「プログラムさえ出来れば職業プログラマにはなれる」という認識は存在していて、それは一定の事実を含んでいる。

だがそれは、プログラマさえ出来たら猫でも可、ぐらいのカーストには所属できるかもねという意味であって、家で頑張ってrails覚えた中卒ヒキニート楽天に面接に行けば間違いなく門前払いになる程度には学歴フィルターが存在するのも事実である。

反証はいくつかある。16歳でrubyコミッターしてますとか、引きこもりでセキュリティ専門家ばりの知識を持った人間が、大学も出ずに、皆が羨むようなメガベンチャーにポンっと入ったりする事例がある。
特に00年代の頃、まだIT業界が混沌としていた時代はそのようなエピソードが多かった。

だが今やソフトウェア開発に必要なのはコミュニケーション能力だ、とさえ言われる時代である。
その伝統も失われて久しく、そういう人材はニュースバリュー目当ての胡散臭いベンチャーが採用したという話以外では聞くことがなくなった。
(余談な上、面倒なので、原文を探さないが、とあるJavascriptの達人がライブドア(現LINE)にポンっと入った時、社員の一人が匿名座談会で「同僚に中卒までいる」と発言して、OBである小飼弾が激怒した、という事件があった。IT業界が学歴に無関心であった時代から、普通の学歴重視の業界へ移りゆく過程を象徴しているように思う)

ちなみに海外ではこの傾向はさらに顕著で、日本のプログラムを一切書かなくても貰えるような学士号ではなく、NetBSDのソースを血反吐を吐くまで読み込まないと手に入らない情報科学系の博士持ちがゴロゴロいるのがGoogleだったりFacebookだったりする。

カーストの外

では、カーストの外で自由にやれば良いのでは?と考える人もいるかもしれない。
それならOSSの世界はどうだろうか?githubのアカウントフォームに学歴を登録するフィールドはないし、プルリクエストは小学生でも送ることができる。

しかし、OSSの開発に加わるということは、そのOSSを使用していなければならない。しかも、バグを発見したり、新機能の追加を思いつくには、相当なヘビーユーザーであることが必要である。

例えば、自宅サーバーにUbuntuを入れて、Apacheやnginxをたてて遊んでいるプログラマ志望者はヘビーユーザーではない。
アクセスするのは友人以下5名ほどで、秒間アクセス数は10を超えない。おそらく彼のApache宇宙線によるメモリ化けや、お母さんの掃除機がゴツゴツあたってグラフィックカード接触がおかしくなる以外の理由で潜在的なバグに突き当たることはあり得ないだろう。

新機能にしても、同じようなことは過去の誰かが考えているものだ。それらの機能が今存在しないのは、何らかの経緯で却下されたか無視されたことによることがほとんどである。
もし彼が「ぼくのかんがえたすごいしんきのう」を拙いCコードで表現することに成功したとしても、Google翻訳を駆使して、なんとか英語圏の人間に読めるプルリクを送れたとしても、忙しいメンテナが一瞥して言うことは「過去ログ嫁」である。

前に書いた気がするが、ソフトウェアの開発には「縁」が必要なのだ。
アホみたいな量のコードを読み下し、コーディングスタイルを真似し、単体テストケースを書き、開発者とコミュニケーションをとってまで、自分のコードをマージしてもらう。
そんな事をする動機は、プログラムを書ける、という単なる事実からは絶対に生まれない。

差し迫った必要があって、やらないとしょうがない、長い英文メールをMLに投稿して、海外のカンファレンスに行って直談判して、メンテナを納得させて、マスターブランチにマージしてもらわないと自分が困るのだ、という状況に至って初めて成立するのが、大手OSSへのコントリビュートである。

つまり、その「縁」をプロダクツと自分に紡ぐ為には、そういう世界に身を置かねばならない。
そしてその世界は遥か天上の、修士ですら気後れするような上位カーストにしか存在しない。

学歴のないプログラマの生き方

Twitterの志位++和夫さんという非常にパンチの効いたハンドルネームの持ち主の方に文章を褒められつつ「megamouthの文章は闇とゴミしかない」と言われて、実に嬉しかったのだが(皮肉でなく本当に)さすがの私もここまで闇とゴミを撒き散らすと、少しは救いを書きたくなるものだ。
なので、最後に少し付け加えておく。

プログラマの実際として、例えば同僚の評価などで、学歴がどれほど影響するか、という点については、これは正直に「ほとんど関係ない」と断言できる。
もちろん何をやっても高学歴の人間を敬う人や、低学歴を見下す人種はいるが、それも他の業種より少ない実感はある。

実際に私は、有名大学出の人間が素人同然のコードを書いているのを見たことがあるし、専門学校卒(それも情報系でないところ)の青年が空き時間にC++のテンプレートがチューリング完全かどうか確かめているのを目撃したこともある。

コードは一部の人間にしかわからない高級車のようなものだ。そこには正しく動くか動かないか、という明白な基準があり、同時に厳然とした「美」が存在する。

どんな高学歴の人間でも、動かないコードばっかり書いてプロジェクトを炎上させれば、皆から呆れられ、やがては見放されるし、得体の知れない中卒でもしっかりとした仕事をしていれば、一目おかれ、尊敬される。

プログラマとは、現代産業における労働者でありながら、芸術家に対するような評価軸で見られる存在でもあるのだ。
カースト?そんなもん気にしなければ無いのと同じである。
孤独なプログラマがpushしたgithubには学歴も所属も書いてはいない。twitterを使えば、大学教授と議論だって出来る。

だから、もし誰かが大学を卒業しないでプログラマになる、と決断したとしたら、私はそれを勧めはしないけれども、止めもしないだろう。

ここは静かだ。自分に注目を集めるために闇雲に気張る必要もないし、恥を晒す必要もない。
ただコードを書いて書いて書きまくればいい。

そして何よりプログラミングという行為は、今やどこからも失われつつある荒野に、自分が本質的に自由なのだと、確かめられる荒野に続いている。

人生に絶望するより、きっとそれは悪くない。