2018年10月12日金曜日

久しぶりの投稿(一年の振り返りと今後)

はじめに


ブログをまたやろうと思います。
理由は、転職から1年経ち、自分のキャリアのこととか人生のことなどを振り返って、今後に向けて考えをまとめたくなったからです。
考えをまとめるときは経験上、文章化するのが良いとわかってます。
ただ、幾度とブログやSNS上の個人発信はした期間があったものの、個人的にあまりいい思い出になっていなくて、意図せず人を傷つけるような書き方をしたり、後から見返して穴に入りたくなるようなことを書いたり、そういうことがあってしばらく離れていました。
今回のブログの目的は、自分の考えをまとめることなので、その目的から逸した事とかを勢いで書いたり、思いつくままにつらつらと書き連ねて出版するとかして後から後悔しないように、気をつけようと思います。
今回は、この一年の振り返りをこのタイミングでします。




この1年(2017年10月〜2018年10月)何をしたか


サマリ


営業からエンジニアに転職をして、仕事をするようになりました。
技術的には主に、機械学習(ディープラーニングで、 画像系とテーブル型データ系の教師あり学習)とWEBアプリ作成(MERNスタック)をやりました。

時系列で

  • 2017年10月
    転職活動をしていました。
    転職活動とは何かを勘違いしていて、前職の営業のノリで、二件の内定を目標に一日四件面接アポを入れて訪問するみたいなアプローチを取っていて、さらに業界の勉強のためとか言いながら面接相手も「未経験エンジニア募集」とあればどんな会社で あっても面接を入れました。
    結果的にはそれが良かったのかもしれず、ちょっとレベル高そうだが勉強目的で話は聞きに行くだけ行ってみようと当初は勢いで行った会社で、面接までいって内定までもらえ、縁があり入社することになりました。
    その他にも、2週間で20社くらい回れて、エンジニア業界の会社のあり方の多様性(SES、受託、自社開発、完全子会社、etc.)とか、会社の姿勢や規模や業界、そこにいる人とか色々見たり会ったりできて、諸々転職活動を通して得られたものがありました。
    ただし、そのうちの一つとして、25歳時点の自分は選ばなければ職には困らないという学びがありました。エンジニア業界特有かもしれないし第二新卒だったからかもしれないけど、未経験者であっても意外と門戸が広くて、むしろ選ばないと自分にとっても相手にとっても問題ではないかと後で気づいて、後半からは順当に選びながら応募するようになりました。
    終わってからは、エンジニア転職するくせにずっとエンジニアの勉強ができてなかったので、入社前の一週間くらいRails Tutorialをやってました。

  • 2017年11月
    入社当日にお客様の問い合わせ案件のプリセールス訪問に同行し、そこから一ヶ月なぜかパワポ作成をしていました。
    指示されたからとりあえずよくわからずやっていて、なんとなく発表までいってしまい、
    案の定お客様から、そういうのは求めていないと言われて、一瞬で終わった痛い一ヶ月でした。

  • 2017年12月〜2018年2月ごろ(以降2018年)
    やっとエンジニアとして勉強を開始しました。
    今後同じような問い合わせ時に見せられるようにと、実際に物体検知アルゴリズムSSDの理論と実装を勉強し、必要に応じてPythonや機械学習についても勉強しました。
    機械学習フレームワークKerasを使って一からSSD実装をして(もちろんいろんな人の実装を写経したりしながら)、実際に自分が実装したモデルが物体を学習したとき、すでに二ヶ月以上費やしていました。
    今思い返すと、OpenCVのビルドエラーで二日くらい平気で溶かしてたし、CUDAのインストールがうまくいかず変になってUbuntuを2、3回くらいOSからインストールし直したりしてて、当たり前ですが素人ポイントでつまづきまくっていました。
    ただしここで得た遅々とした経験から、いろいろPythonとか機械学習に必要な環境構築とか今後も活躍する知識が得られたので、振り返ると贅沢に時間を使わせてもらい貴重でした。
    最終的には、達成感というより機械学習の難しさというか、果てしなさを感じました。 ただこの感覚は、 今でもあまり変わっていません。

  • 3月〜5月
    ディープラーニングのプロジェクトで初めて受託案件を担当しました。
    お客様にモデルのトレーニング方法をドキュメントしたり、データ準備のためのPythonスクリプトを書いて納品したりしていました。
    終わってから、会社の技術ブログに解説記事を書けるくらいには理論と実装が理解できてたのと、学習データ作成ツールを一からPythonで作ったりして、その時やっていた物体検知にまつわるツールや業務フローは ほんの少しわかるようになりました。
    ブログは第二弾を書こうと思いながらまだ書けてないです。

  • 5月〜7月
    新しい問い合わせのプリセールスをしていました。
    事前に少しデータをもらえたので、いろいろ調べて初めて自分で簡単なニューラルネットをデザインして、実際にそれで学習ができることを確認して、機械学習ソリューションのPOC を出すことができました。
    あとは、別の既存プロジェクトにテスターとしてアサインさせてもらう機会があり、Javaで作った通信システムの動作確認とか顧客折衝とかをしていました。
    受託開発チームは受注してから必要な知識を身につけるというスタイルで頑張るスタンスなので、技術力不足からかまだ落ち着いたプロジェクトがあまり無く、このような安定したプロジェクトに入れる機会は貴重です。
    先輩に学べるのでむしろこういうプロジェクトに入れて欲しいと心のすみでは思いつつ、でも裁量権の大きいプロジェクトができる可能性がある社内受託担当のポジションにいれること自体はいいことだから頑張って受注取れるようプリセールス頑張らなければと思いつつ、一方でプリセールスしてる相手の会社から全然最終結果が返ってこないという焦らされる期間でした。

  • 7月〜9月
    プリセールス中の会社の関係でさらに「待ち」の時間ができて、もし受託できたら(この段階ではまだ決まっておらず)開発で使うであろうM ERNというWeb開発スタックの勉強をしてました。
    Node.jsとかReactとかというよりも、もっと前のHTTPとはみたいな話からわからなかったので、MozillaのMDN web docsとかをいっぱい読んで概念面は勉強して、MERNスタックでアプリを作るのは行き当たりばったりでいくつかチュートリアル見ながら頑張っていました。
    Pythonや機械学習に比べてWEB関係の技術はピンとくるチュートリアルとかが少なくて、というのもJavascriptは数年でめちゃ変わるしいろんなツールチェーンがあるのでチュートリアルがいろんな方面に分散していて、勉強方法が確立しづらいのがつらかったです。
    でもJavascriptの正式名称がEcmascriptであると知るくらいまではJavascriptに親しめたし、MERNでいわゆるフルスタックWEB開発できるようになったので、この時頑張ってよかったです。
    あとは同時並行でJavaの通信システムのテストがあり、内容的にSSLとかXMLとか、さらに突っ込んでテストしようとするとJavaのSpringとかMavenとか、重めのトピックをテスト終了目標日までの短期間で勉強しなければいけず、こちらも高ストレスでしたが相変わらず勉強にはなりました。

  • 9月〜10月
    諦めかけてたプリセールスが受注決定になったので、担当として開始しました。
    まずは覚えたてのMERNスタックを用いたアプリを開発期間一ヶ月で作って納品し、疲れからか精神がちょっと病んだみたいで、終わった直後に友達と飲んだ際に「目を合わせてくれないし、コミュ障になった」と言わました。
    MERNスタックで開発してたアプリもギリギリで、毎日新しいバグが出て来たり新機能追加のしかたを勉強しながら実装したり、チームメンバーを数人アサインされたのでタスク分配の管理とかもしつつのコーディングで手一杯でつらかった上に、いざ納品直前となるとデプロイという概念がMERNスタックからかけ離れすぎていてわからなさすぎて更につらくなって、ストレスから吐くかと思いました。
    時間をとってちゃんと勉強すればわかるであろう知識も、納品数日前となるとただでさえ焦っているので、いっぱいいっぱいで最後はずっと泣きそうでした。
    どうにか終わってよかったです。
    次は機械学習のシステム開発が始まっているので、カステラ本を読んでて、本腰を入れて機械学習勉強しないとという気持ちです。


終わりに


振り返ると、エンジニア転職して高ストレスな状況が多かった感想です。とはいえ嫌になったとかそう言うことでは無くて、楽器が上手くなりたいと思って練習しているときみたいな、どちらかというと前向きな気持ちが根底にあり続けるストレスでした。
ただし、結局ほとんど独学だし、そのためかその割にか、身につけたスキルと得た経験が小さくないかと危機感が湧いています。それは、プロジェクトの数とか規模もそうだし、作ったものの大きさ的にもそう。
この調子ではまずい。来年の今頃、適当にしてると、あと1〜2言語くらい (多分Javaとか)使いました、自分のサイトを作ってAWSでホストしました、 ディープじゃない機械学習少しわかるようになりました、Githubで簡単なプロジェクトを作って公開しました、くらいで終わって そうでやばい。
そもそもこの一年間はなんでも好き嫌いせずに勉強しないとと思って、受託チームへのアサインを含め仕事は一切選ばず来たものは全部引き受けていたつもりですが、エンジニアリングスキルはそれぞれそれなりにできる程度ではそんなに使い物にならないし、それぞれ一流になるにはそれなりにそれぞれに時間かけないといけないことがわかった気がします。特に今はジュニアレベルだし、まずは一つのことを高レベルでできるようになることを目指してなんぼな気もします。
転職した時の初心は、まだエンジニアとは何かわかっていない憧れだけだったので、今こそ もっと現実的な見直しをしなきゃだなと感じてます。
目標を立てる投稿を次でやると思います。

あと、どこに投稿するか迷ってこのブログ久しぶりに開けたらすごい過去技術記事頑張ってた時期一瞬あって、続けようと思い直したので、それもやってくと思います。