見出し画像

お前は何者か

内容が重めになってきて(海外大学のコースカタログから図を作りつつ、履修していないコース含めコースの英語ページを読みながらサマリー作るとか)更新滞ってしまっています。こちらプロフピン留め用というか、かっちりした記事ばかりになると筆が遅くなってしまうので軽めの記事も混ぜて行こうと思います。例えば、初心者のよくある悩み、勉強に何のコードを書けばいいかわからない、など。

まずはプロフィール用のお前は誰だ記事です。エンジニアとして為になる話としての情報量はあまりないです。どんな人が書いてるのか気になった人が読んでくれれば、程度の内容です。文系大学から理系大学院でコンピュータサイエンス専攻の修士持ちだったりするので、仕事でプログラミングを始めて生涯の仕事にしたい人の人生の参考にもなったら良いなぁ、とも。

コンピュータとの出会い(高校時代)

エンジニアとしての原点、コンピュータとの出会いは中学3年の時でした。受験が終わって時間ができた時に父がWindows PC(Win95)を買うと言い、合格祝いにエヴァの鋼鉄のガールフレンドを買ってもらいました。PCが来る前にソフトを買うという。

そして、あっという間にPCにハマります。ゲームから始まり、インターネットは知の泉に思えました。1990年代後半でネット参加者も少なく、ネットにゴミやカネ目当ての嘘は少なかった気がします。そんな中、高校生のMLというメーリングリストに高校1年で出会い、日本中(ほぼ関東甲信越)の高校生とメールでやりとりしていました。その流れで当時の使い放題のテレホーダイを親に契約してもらうと毎晩MLメンバーとチャットしてました。たまにオフ会も。

当時、MSコミックチャットというのがあって、発言すると漫画のコマのようなところにキャラクターが出て吹き出しにチャットのメッセージが出るというもので、自分でキャラクター(FFから拝借した)を作ったりしてました。基本的に何かを使う時はカスタマイズしたくなる質です。

その延長線上で自分の好きだったアーティストの非公式HPを作り公開します。当時、アーティストや芸能人が公式ページを持っていることは少なかったので、自分が集めた情報を公開して、ファンのたまり場ができれば、という思いから作りました。高校生のMLで日本中の高校生と知り合えた経験もモチベーションになりました。

HTMLのフレームで組んだ阿部寛のHPのダークモードみたいなものから始まりましたが、CSSやActionScriptなんかを突っ込んで、perlのcgiをコピーしてタイトルとか一部編集してActionScriptと組み合わせて動的な掲示板を作ったりしました。
あまりwebだったし、プログラムが壊れるのが怖くなかったので、テキトーに書き換えながらどこに変化が起きるかを楽しみつつ学んでた感じです。とほほさんのページとかにはだいぶお世話になりました。

大学は付属校で理工学部に大半が行くこともあり、コンピュータ関連で、と考えていましたが、独学である程度できてしまったので、知見を広げようと文系の他学部に進みます。当時クラスで文転は数人しかいませんでした。中学ではトップ争いをしてた成績もテレホタイムの夜ふかしと2時間かかる通学、天才だらけの中で真ん中かやや下まで落ちてました。

あの頃、初志貫徹で理工学部に行っていればショートカットになったかも知れませんが、2000年代半ば辺りからの技術の加速的な広がり、2010年代の機械学習のブーム再来もあったので、この後に出てくる留学のタイミングが2010年代で良かったかも知れません。人生わからんものです。

停滞期(大学)

大学では停滞してました。男子校から共学の学部に入り、バンドサークルで演奏したり、当時参加者の少なかった出会い系で学外の人と知り合って遊んだり。秒速の男がなんとか通った情報処理の授業は毎回最初の10分で終わらせて遊んでAでした。

使ってたPCは基本的に自作でデスクトップ組んでました。

デジタルの世界に戻る

大学卒業後、少し夢を見てブラブラしてましたが、ひょんなことからバイトしてた会社の社内の情報のシステム化を提案して(手作業面倒だったので)非常にアナログな情報サイトを社内に作って表彰されたりして、そろそろ夢を見る時間も終わりかな、と初めて就職したのはシステム開発会社でした。

最初に3ヶ月弱Javaの研修を受けて現場へ。いきなり最初の案件で1万ファイルを越すコードを渡されたけど、1週間ほどにらめっこしたら処理の流れが見えて普通に修正してましたが、いきなり使いまわしてる部分をstaticに修正してバグを埋め込むということをやらかしました。まぁ、影響なかったので助かったけど。

入社半年後くらいの春にテクニカルエンジニアデータベース(今のデータベーススペシャリスト)をいきなり受けて、さんざん社長とかにもコツコツ行け、と言われたけど、資格給上書きされるなら上書きさせないとこから受けよう、と。そして、応用情報とかは広くて深めだから時間も経験も足りないけど、DBなら狭いからなんとかなるかな?と思い。その年は午後Iが超難問で午後IIは帰る人も続出することもあってか、ラッキーで合格。翌年には秋に落ちたシステムアーキテクトも受かりました。資格否定する人もいるけど、お陰様で(他にも10個くらい取ったけど)現場面接とか、転職試験の書類は基本的に素通りでした。

常駐先としては1社に2年ちょっといて、2社目は会社の初めての取引先に一人で行って、後にチームで入れるようになったり開拓しました(実際は楽しみながら作ってただけ)。辞めると言ったら主任になりました(そのまま辞めましたが)。

SI業界の限界を感じる

3年ちょっと働いたのですが、当時は特にシステム開発といえばJavaのWeb開発(SpringとかSeasarとか)とOracleもしくはMySQLで、システム業界の外ではHadoop出てきたり、GREE/モバゲー、サイバーなどが全盛期(入社前からSNSはmixiやってたけど)で、お金や技術者が集まってるように感じた、その辺とかのソシャゲー(まだガラケー)界隈やWeb系中心に受けて技術力に差にかなり凹みました。大抵のもの作れると天狗になってたけど、ググってできることが早くできるように慣れてただけだった。簡単な物を早く作れるチーム内で少し目立つ程度の量産型になりかけていました。

この時、正直二分検索も知らず、面接で聞かれてテキトーに答えたのが二分検索で、ああ、そういうのが技術としてまとめられてるんだ、と気づきました。この時代は入門以上の文献が少なかったのか見えてなかったのか、全然知識として身近になかったのですが、知らないのやばいな、とすごく危機感を感じたのを覚えています。自分は動くコードを書けてはいるけど、裏側がちゃんと動いているのか、正しく動くコードが書けてるのか一気に自信がなくなった。自分の知識は経験だけに基づいてすごくふわふわした体系化していないものだと気づきました。要は再現性がないのです。

また、某ソシャゲーの会社のCTOに「ググればできるは技術じゃない」と言われ、自分は技術者と言えるのか疑問に感じました。

Androidとの出会い

そして転職したガラケーのゲーム会社。文系エンジニアと言うこともあり、ポジションはシステム部で社内用CMS(ガラケーの会員制ゲーム配信サイト用)の保守開発がメインで、当時やっと現在のスマホに近い形になったIS-03を買って世界が変わりました。

中3初めてPCを触ってインターネットに繋がった時のような興奮を今も覚えています。まもなく日本Androidの会に出入りするようになってイベントのスタッフをやったり、iPhoneも買ってアプリを作ったりしました。

で、会社がスマホ対応に動かないのに業を煮やして部長に直談判したところAndroid担当として、活動の出入りとかにも経費を使っていいようになったり。また、システム部から開発部に初の異動が認められてゲーム開発にも足を踏み入れ出しますが、あまりにスマホ開発やコミュニティ活動、OSSの魅力に取りつかれ…

アメリカ留学

スマホと言えばアメリカ。Mountain ViewのGoogleにCupertinoのApple。会社を辞めて半年後にはアメリカにいました。何もわからないので留学エージェントを使い、しかし全然英語聞き取れなくて、大学ApplyしつつもTOEFLのListeningは一桁…。
で、紆余曲折ありましたが、留学生向けのブリッジコース(大学院のための必須になる学部の授業を受けつつ英語を学ぶ)のある大学の大学院にコンピュータサイエンス専攻で入学許可もらいますが、英語力(TOEFLの点)が満たせず最初の一年は大学附属の語学学校へ。

大学附属の語学学校では入学許可されるレベルは2学期目で突破しましたが、3学期も授業受けました。毎週Essay書いて、2週間に1度はプレゼンしてました。Persuasive Essayだとか説得力のある文章の書き方であったり、多様性への理解のようなことも授業を通して学びました。
Essayも最初に結論を言う構成であったり、プレゼンの冒頭でフックで興味を引きつけるテクニックとか、日本では全く習ったことのないことばかりで面白かったです。

ブリッジコースではデータ構造に始まり、アルゴリズム、計算理論、OS I/II、プログラム言語(SyntaxとかSemanticsとか)アーキテクチャなどなどを。英語の授業は語学学校と大差ない感じでした。英作文とか。

大学院ではコンピュータグラフィックスが楽しくて、CG関連の授業を色々取りました。画像処理とかShaderとかグローバルイルミネーションとか。他にも大学院レベルのアルゴリズムやプログラム言語(ラムダ計算とか)、データベースに機械学習、博士レベルの計算理論もうっかり受けたり。業務してからの大学はこれまで自分が書いてたものの裏側がわかって、種明かしみたいだったし、自分が見えていなかった部分が、少しずつ霧が晴れるようにどんどんクリアになっていくようでした。

辛くも楽しい大人になってからの大学生活でしたが自分で学費を払ってたのでそういう大変さも。自分でアパート(というか学生寮)を借りたり、友人から中古車買ったり。語学学校の成績優秀者で$10,000の返済不要の奨学金ももらえました。が、夏休みは大学院の授業はなかったので日本に帰国してフリーランスでスマホゲーム制作とか出稼ぎしてました。

主に西海岸にいましたが、もうね、毎週なんかしらの事件が起きて、アメリカは飽きない国でした。自然は本当にすごくて、アメリカ行くなら都市部より国立公園とか行くといいと思います。日本で見たことないような風景がいっぱいでした。日本では向かいから来た人と同じ方向に2回避けたりしたら舌打ちされたりするけど、向こうではお互い笑ってSorryと言ったり、すれ違いの知らない人の挨拶も普通だし、人と人が関わることが生きる活力になるというのをすごく思わせてくれました。買い物に行くだけで知らない人となんかしら会話するしね。

卒業後のフリーランス

本当はスマホに魅せられて行ったアメリカで働きたかったのですが、一部の人達の生活様式で夜にあまり寝れなかったりして、また家庭の事情もあり帰国して大学の休みの間にお世話になっていた会社でフリーランスで働きます。

フリーランスは給料も良かったし、経費をなるべく使おうとタワマンに住んだりもしました。が、タワマンは構造上軽くしないとまずい関係で、部屋と部屋の間の壁は薄いのか、地面がつながってて部屋の間に壁を作る造りのせいか、1日中聞こえる上下左右の足音に悩まされ(テレビとか声は全く聞こえなかった)、1年ほどで逃げ出しました。ミストシャワーは良かった。気密性は高くて、夏冬エアコンは全く使いませんでした。床暖房とか試しに1回使った程度かも。

フリーランスではゲームエンジン(C++)を使いつつもWebフレームワーク(Java)でAPIを書いたり、時にはOpenGLのレイヤーをハックしたりしてました。楽しいし、給料もいいけど、その分ガッツリ働いて、また10時〜19時の会社だったので勉強会もあまり参加できず、上積みは少なくて、やりつくした感が出てきた頃、大学で習った機械学習の知識からディープラーニングを独学で書き出したりして、ちゃんとできる人のいるところで働きながら学びたいと思います。

機械学習の世界へ

そして転職した機械学習の会社。フリーランスから正社員に戻るのは大変でした。

話は戻って機械学習の会社では音声認識の畳み込み周りだとかサーバーでの諸々の処理とかを書いたりしました。後は検索だとか推論だとか複数のシステムを組み合わせて制御する製品やその情報をクローリングするとことか。

この会社は本当に技術力が高くて、それを率いる2人の超絶ソフトウェアエンジニアと2人の違う方向性ですごい研究者がいました。エンジニアリングとは不確実性と向き合うとはどういうことかを学びました。スクラムとか開発手法できなものも取り入れて、組織的に知識を育てる方法論とか。

ただコードを書けば良いわけではない。技術的負債を減らして、拡張性の高い、手戻りの少ない開発が長期的にはコストを圧縮することも実感しました。一般的なアドホックな修正を入れて、恒久対応と言いながらも継ぎ接ぎに近い変更(拡張ではない)を繰り返したコードは保守コストが累乗的に増えていきます。ただコードを書くことが一番の成長につながる時期は初期だけです。ちゃんとやりましょう(と自分に言い聞かす)。

第四次産業革命の中心地へ

死亡者の平均年齢がほぼ平均寿命という恐怖の感染症でフルリモートが増える中、やはりイノベーションは人と人が直接関わる中から産まれる、と思い転職活動を始め、気付いたらAIとロボットを組み合わせてイノベーションを起こそうとしてる会社からお声がけ頂き、現在、IPOやそこからの拡大に向けて新しい挑戦をしています。

今回の転職活動もスカウトされたのに、フリーランス経験から組織に馴染めなさそうとか社風と違う、みたいな理由で書類落ちしたり。スカウトしてくれた人事の人と話して社風合うと思ったから応募したのに人事が目指してる方向と現場の向いてる方向が違ったんですかね。フリーランス経験ってマイナスになることもあるという経験談。

二度と受けるか畜生。バイアスからの完全な人格否定みたいな理由だった。

現状、開発チームはエンジニアリングとは言い難い状態で、READMEすらまともに書いていないプロジェクトが多い中、ここからなんとか動くだけでなく、不確実性に強い開発体制を作っていければと思ってます。いや、でも頼むもう一人エンジニアリングできる人が欲しい…。他部署とかお客さんへの資料作りとかは強い人達なんですが、開発者向けのドキュメントとかCI/CDみたいな動作を保証するような環境を作るのは得意じゃない人が多いようで。

ここから

まずは上場といろんなところでの製品導入を目指しますが、将来的にはやっぱりアメリカで働きたいかな、と。わからないけど、この日本だけ続く縮こまった時代が終わったら、国を問わずカンファレンスで話したり、面白いもの作っていければと思っています。

ロボット系HWエンジニアと毎日関わっているので、自分でもHW周りの知識や経験もつけて、現実世界もエンジニアリングできるようになっていけたらいいなぁ。妻にもプログラミングを教えてたりするので二人で家族システム作って遊んだり、ガジェット作ったりもしていきたいと思ってたりします。

では、良い連休を。
今月はもう1本くらい軽めの記事が書ければ。
あとコンピュータサイエンス系の講義っぽいのも少し書ければと思います。学習マップ4年は少し後になるかも。

この記事が気に入ったらサポートをしてみませんか?