ベテランエンジニアの経歴と学習記録
まえがき
巷ではエンジニアスクールが話題ですね。
ベテランの中には新参者に厳しい意見も言う人もいますが、興味がある仕事にチャレンジするのはいい事だと思います。
さて、自分自身エンジニアとして働きはじめてもうすぐ8年ということでそこそこベテランになってきました。
そこでキャリアの整理という意味も込めて、初めてキーボードを触ってから今に至るまでの経歴を整理してみることにしました。
小学校低学年時代
母の使っていたワープロを譲り受けて遊んでいた。
最初はカナ打ちで入門したが、すぐにローマ字打ちに変えた。
このときからタイピングをしているのでキーボードとは長い付き合いである。
マリオ64の攻略メモを纏めて、感熱紙で印刷して使っていた。
マメなのか雑なのかよくわからないのはこの頃から。
小学校高学年時代
Windows98が自宅に設置された時期。
主な用途はゲームだったが、インターネットにもちまちま繋いでいた。
当時ダイヤルアップ接続だったので、接続してからは時間との戦い。
見たいページを予め開いておいてキャッシュを取り、切断してからじっくり読むという小技を使っていた。
ISDN→ADSLと時を経てアップグレードされることになる。
ググり力(当時Googleは無かったが)はこの時期から醸成。
中学生時代
WindowsXP到来 & Flash黄金時代
HTMLに興味持ってソース覗いたりExcelの関数を使って家計簿作ったりした。
VLOOKUPとかこの時期にめっちゃ書いた。
高校時代
ゲーム作りがきっかけでプログラミングを始める。
『ポイント学習C言語』というサイトで基本的な文法を覚えた。
徹夜でコード書いて、学校に行って夕方まで寝るというクレイジーな生活をしていた。
読書感想文で『プログラミング言語C』を読んで出した人はなかなかいないと思う。
ゲーム機を全部売ってMyPCを買ったので時間の制約がなくなった。
大学時代
授業理解の確認を兼ねて資格を取ったりした。
C#のおかげで随分Windowsプログラミングがやりやすくなり、プロダクトを作り始める。
この時期は殆ど2ちゃんねるに入り浸っていて、『AA自動生成機』『忍法帖自動生成機』などを作った。(実際のところユーザーは殆どいなかった)
あとWebアプリを作ろうとして中途半端に勉強した。
1〜3年目(1社目)
某大手電機メーカNのグループ会社に就職して4年弱務める。(初任給は24万円)
主に組込みシステムを取り扱う場所でSoCプロセッサメーカから業務委託を受けていた。
支給マシンがメモリ2GBという試された環境だったので、基本的に開発用LinuxサーバにSSHで繋いで作業をしていた。おかげでLinuxの基本コマンドとVIMのスキルが伸びた。
言語はC言語が中心でLinuxやAndroidのローレイヤーのコードをしこたま読む。コードは基本的にメーカ側が書いたものがあるのでテストとパッチ作成が主なお仕事。
部署内で一番Git詳しくなってGit大先生になってしまう。
タスクを整理するためにGTDはこの頃から使い始める。
その後、組織運営を見ていて会社の未来に疑問を感じたので転職。
(その後大規模レイオフが有ったらしい)
4年目(2社目)
自社でWebサービスを開発運用しているY社に入社。
入社前に一応PHPを調べたが実務でC言語をやっていたので、そこまで勉強することがなかった。この辺りから言語はあまり関係なくなってくる。
運用チームに所属するが、秘伝のソースのためバグの再現・原因の特定・修正が非常に大変であった。
勉強会などに色々足を運んで合理化に腐心した時期でもある。
5年目
基幹バッチの改修を1年半ぐらいする。
データフロー設計を抜本的に見直すことで30%高速化した。
テックリードとやらに任命されてコードレビューの依頼も受けていたが、クラス設計レベルの問題はコードレビューでは如何とも見ようがない。
この辺りから技術面でのエキスパート扱いを受け始める。
システムテストを自動化して夜中に回すなどしていた。
Jenkinsサーバがこの時期配備されたのでdocker-compose書いてUT自動で回すなどCIを開始。
6年目
この辺りからAWSを使い始める。
『技術に詳しい人チーム』のようなものに所属して、社内の技術的問題の議論などに参加。
途中で新設部署の技術リーダに選抜されたため抜本改修PJ自体には参加していない。
新設部署ではデータサイエンティストと協業して顧客分析システムをフルスクラッチ作ったりもした。ちょっとだけRを触る。
PythonはBetterBash的な扱いでちょくちょく書くことになる。
またこの時期社外で、付き合いのあるコミュニティサロンにサービスをフルスクラッチで作って提供。こちらは完全サーバレス。
C#でアプリを作ったときもそうだが、フルスクラッチでサービスを作るとだいぶ勉強になる。
7年目
個人で提供しているサービスを思い切ってSPAでリプレイスし、モダンフロントエンドに首を突っ込む。
バックエンドも管理がめんどくさくなったのでSAMで一元管理した。
ここからインフラは基本IaCで管理することになる。
仕事では契約関係のバッチをフルリプレイスする必要があり、珍しくクラス図をきちんと書いて実装。
チームのコードレビューを頼まれるが、設計が破綻していることが多いのでクラス設計書を書かせてレビューをしていた。
この辺からコードはテスト通ればいいよみたいな扱い。
8年目
個人で提供しているサービスのデザイン改修をした際にTypeScriptを導入。
会社ではサイトリニューアルプロジェクトにアーキテクトチームとして参画した。
当初アーキテクチャだけだったはずが、認証系の実装を巻き取ることに。
要件が特殊でAuth0などのSaaSが使えず、OAuth2の認証認可機構を自前で作った。
ついでにAWSで完結するCICD基盤を作るなどした。
プロジェクト完了を見届ける前に社長に指名され社長直属チームに異動。
企画→要件定義→設計→実装→テスト→リリース→運用 を全部こなすことになった。
振り返り
趣味含めるとなんだかんだで15年位コード書いてますね。
割と飽きっぽい性格なので、特定技術を深めるということはなく、かといって流行りに飛びつくわけではなく、いい感じに定着してきた技術からつまみ食いしてきた感じです。
特にプロダクトに新しい技術を取り入れるつもりはないんですが、組織の課題解決を最もシンプルに行おうとすると最新のサービスが浮いてくることが多いのでそうなってしまっています。
個人としてはフルスクラッチで一度サービスを作るとだいぶ感覚がつかめます。
特にSIerなどで特定のフェーズだけ担当してる人はビジネスの全容が掴みにくくなってるのでなにか作ってみると良いかと思います。
組織としては、やはり全体利益になるアウトプットを出すと喜ばれます。
なかなか経営数字に現れるようなインパクトのある企画は個人で動かせませんが、ちょっとした追加ならスキマ時間にできます。
例えばちょっと煩雑なリリース手順をスクリプト化するとか、引っかかりがちな環境構築をコンテナで纏めてしまうとか、ブラックボックスサーバの設定を調べてAnsible化するとか、毎日チェックしてる値をcronでpython蹴ってSlackに送るようにするとか、メンテされてないスクリプトをとりあえずGitに積んどくとか、そういう小さいことの積み重ねです。
人間が頑張ってやっていることをゼンマイ駆動にして、サボれるようにするのがエンジニアリングの本質だと思います。
エンジニアリング以前にビジネスとしているのだということを忘れないことも大切です。
これまでオーバーエンジニアリングしてしまう事が多々ありました。
実現したいことに対して、問題の本質はどこにあるのかは常に冷静に考える必要があります。
どれだけ高度な技術使ったプロダクトでも、課題分析が間違っていて何ももたらさないならゴミです。
その辺り自分もまだまだ上手くできていないので9年目の課題としたいですね。
長くなりましたけど、若手や駆け出しのエンジニアのキャリア構築の参考になれば幸いです。
この記事が気に入ったらサポートをしてみませんか?