アラフォー未経験からからエンジニアを志し、社内制度(リカレント教育制度)を使ってエンジニアに転職してから1年が経とうとしています。
何気なく続けてきた「#今日の積み上げ」ツイートを振り返りつつ、この1年取り組んできたこと、現在の立ち位置、もっとこうすればよかった、などを書こうと思います。
(参考)私の「#今日の積み上げ」ツイート
https://twitter.com/search?q=from%3A%4042urawa%20%23%E4%BB%8A%E6%97%A5%E3%81%AE%E7%A9%8D%E3%81%BF%E4%B8%8A%E3%81%92&src=typed_query
1年休まずがむしゃらにやってきたつもりですが、実力はまだまだ一人前からはほど遠いです。
広く浅くやってきたことに後悔はないのですが(セキュリティや機械学習、AWSなどは大きくどんなことをやっているかがわかり、世界が広がったと思います)、もう少し主技術となるC#にがっつりコミットしていてもよかったかな、、と振り返ると少し反省しています。
けどそうした振り返りができるのも、完全に惰性で続けていた「#今日の積み上げ」ツイートがあったからこそだとも思うので、書き続けたことでそういう反省も見えたのはよかったのかもしれません。
ツイッターばかり見ていると、自分が出来の悪い人間に思えることも多いですが、未経験から短期間で結果を残せる彼らが異常なだけとも思います。
なのでエンジニアという仕事が新たな学びに溢れていて楽しいなと思えるかぎりは、これからもずっと学び、開発し続けたい気持ちに変わりはありません。
同じくアラフォー未経験の方の励みに少しでもなればうれしいです。
#エンジニアになる前
某大学院のメカ系を修了し、新卒で大手製造メーカーに入社しレンズ加工プロセスの開発に携わってきました。
ただ、「今のままでは会社に依存したキャリアしか積めないな・・」という不安から、30代後半という厳しい年齢であることは覚悟の上で、4ヶ月の研修を経てソフトウェアエンジニアに社内転職できる制度に2020年11月に飛び込みました。
参考)
4ヶ月にわたる社内ソフトウェア技術者研修で学んだこと(2020年11月〜2021年2月)
#研修修了直後
勤務先がメーカーということもあり、研修は主に組込みエンジニア育成のために組まれたカリキュラムで、使用した言語もほぼC言語くらいでした。
一方で、異動先は生技で社内の事業所やグループ会社の製造DXやスマートファクトリー化を実現する部門への配属となりました。
装置の稼働管理に異常検知、人作業のデータ化、在庫管理、製品に使われている各部品のトレーサビリティ、センシングデバイスなどを20人ほどの部隊で開発しており、完全にWebエンジニア集団の中に飛び込むことになりました。
使用技術や言語はWebアプリケーション(React、TypeScript、Node.js)、デスクトップアプリケーション(C#)、データ収集・解析(Python、PostgreSQL)、その他DockerやGitLabなどなど。
Web系といえば独学でわずかに素のPHPとMySQLくらいしか扱っていなかったので、情報系新人以下のレベルの中堅社員がいきなりやってきたぞ、と思われてもやむなしという状況でした。
具体的には
・オブジェクト指向をまったく知らない、触ったこともない
・http通信とはなんぞ?リクエスト?レスポンス?WebAPIってなんじゃらほい。Swagger?
・C#ってゲームつくるときに使う言語ではないんだっけ?
・MVVMなんて聞いたこともなし。MVCすらさっぱりわからないのに・・
・Gitも扱える自信なし
・Linuxのコマンドはcdとlsしか知りません
普通に考えれば大ピンチもいいところです。
はたしていつまでエンジニアをさせてもらえるのか・・という不安ももちろんありました。
#配属直後から今までの歩み(C#でWPFアプリ開発)
3月1日に配属になり、初めの1ヶ月ほどは技術調査などの雑用をしつつ、C#とWPFについてネット上の教材で学んでいました。
そして4月からは先輩(入社年は僕の2つ上の超ベテランエンジニア)のサポート役として、細胞培養工程向けの消耗品在庫管理システムの開発(要求分析をするためのプロト版)がスタートしました。
システムの目的はトレーサビリティの向上、つまり、「この細胞はどの試薬とどの試薬を混ぜ合わせて培養したのか、そのときどんな資材を使ったのか、それら消耗品のロットは◯◯で、どの受入試験を合格した消耗品なのか」をあとからいつでもトレースできるようにすることです。
資材(ピペットとかシャーレとか)と試薬(PBSとか◯※△とか…)が受入試験され、合格棚に置かれ、製造エリアに搬入され、使用され、廃棄される、までの消耗品の一生を追いかけられるようにします。
僕が仕事をしやすくなるように先輩が気を利かせてくれ、
「この画面のソースコードを参考にして作ってみるよいいよ」
という感じで、それほど躓かずに進められたと思います。
・・・が、いかんせんスピードがとても遅く、ほぼ毎日5時45分に家を出て帰りは21時過ぎ、という感じでした。
(&緊急事態宣言で晩飯難民にも)
結局、当初の4画面目標に対し出来上がったのは1画面のみ。
先輩からは「1画面だけを完ぺきに仕上げてもらうほうが今後のためになる」との判断でした。
(先輩が残り9画面とサーバーサイド全般を担当)
ここでの2ヶ月では苦しみながらもMVVMモデル、データバインディング、オブジェクト指向、型定義、コレクション(特にリストと辞書型)、ラムダ式、イベントハンドラなどを学びました。
また、テストについても濃い経験ができ(単体テスト、スタブ活用、カバレッジ、システムテスト計画書など)、実務経験はやっぱりスキルアップするんだな〜と感じました。
余談)
ただ加速度的に力がつくボーナス期間も1ヶ月半で終わり、その後はひたすら作ったプロトタイプを用いての要求分析を延々と半年やっていて、せっかく身についたスキルが早くも剥げ落ちようとしています。。
#配属直後から今までの歩み(ラズパイカメラと要求分析体験)
その後は半年にわたり、コードを書く機会には残念ながらほとんど恵まれず、
・ラズパイカメラを使った安全キャビネット内作業のレコーディングシステム検討と要求分析
・先輩の要求分析の仕事ぶりを見て学ぶ(毎週1時間の打ち合わせ+議事録)
のみをやっていました。
ラズパイカメラの開発では、
・低容量で動画を長時間撮りっぱなしにするために解像度とフレームレートを抑える(640×480とか3fpsとかくらいに)
・長時間動画の検索性を高めるために、mp4box(OSS)を用いて動画ファイルにチャプター情報を埋め込む
・チャプター情報はExcelマクロベースの作業指示書を用いて、各工程ごとにタイムスタンプが打てるようにして、
「A工程 9時15分に開始」「B工程 9時50分に開始」「・・・」
というデータをテキストファイル化して、その情報を動画ファイルにメタデータとして埋め込むことで、動画内の作業工程とチャプタータイトルがぴったり一致するようにする
というシステムを考え、それを認めてもらえるや否や、さっそく検討を進めていった感じです。
ラズパイにはPythonのライブラリとして
・openCV
・picamera
・Flask
を用いることでAPIをつくり、httpリクエストから録画開始・修了できるようにしました。
※これらはQiitaはじめググればすぐに出てくる情報なのですが、それに気づいてないor気づいても導入に踏み切れない医療業界の DX遅れ=紙文化 の現状を改めて知るところとなりました・・(クライアント談)
ただ、作業レコーダーとして超絶便利なラズパイカメラですが、大きな課題として保証問題にぶつかっています。
これを回避するため、同じようなことを市販カメラで代替できないかの調査・検証を現在も行っています。
#まとめと今後
組込みエンジニアとしてのリカレント教育を経て一応は長年の憧れだったIT戦士になれたものの、配属先はWebエンジニアというピンチ状況でしたが、
・わからないことは素直に聞く、相談する。知らないことを恐れない、恥ずかしがらない
・雑用は進んで引き受ける(社外の人とのメール、調査、各種申請書作成など)
・独学は欠かさない。ドメインの理解も欠かさない(僕の場合は細胞培養の慣習や用語、工程など)
を心がけ、なんとかボロをそこまで出さずに今年を終えられそうです。
ただ、来年はがっつりC#のアプリ開発が年初から控えているので、「1画面しかできませんでした〜」なんてことになったら自首するつもりで備えるつもりです。
「ああ、あのときもっと歯を食いしばって業務以外の時間も頑張ったり、事前準備をしておけばよかった・・・」
といった後悔だけはしないよう、「#今日の積み上げ」ツイートと学習はこれからも欠かさずしたいと思います。
アラフォー未経験の方(つまり1年前の自分)にとって本記事が少しでも参考になればうれしいです。