この記事について
まだ十数年程度ですが私のエンジニア半生について記載してみようと思います。
学生時代~雑用からフリーランス~
きっかけは、大学の部活動のHP管理人を始めたことでした。たまたま先輩に「パソコン詳しいよね?」ということで、HP作成を引き受けたことがエンジニアとしての始まりでした。もともと存在したちいさなHPを、大学公式HPとしてきちんとした体裁のものにしたいというオーダーであったため、HTML、CSSといった技術面だけでなくサイト設計なども含めて、ほぼ知識ゼロからいろんなものを勉強しながら制作し、仕事を成し遂げるという最初の経験でした。
公式HPをリニューアルしたということが運が良かったのか悪かったのか、様々な人に私がHPを作れるという情報が知れ渡り、大学のOBOGの社会人の先輩方ともコネクションが持てたということが私のエンジニア半生としてはとても大きかったです。
社会人の先輩方からボランティアしてみない?アルバイトしてみない?ということを誘われ、いろいろなWEBページの作成、WEBアプリケーションの開発を受け持ってスキルを上げていきました。当初はHTMLとCSS、JSの簡単なWEBページ作りだけだったのですがだんだんPHPやMySQL、Linuxサーバを使った本格的なシステムを手掛けるようになり、気が付いたら学生フリーランスエンジニア(?)になっていました。
当時は怖いものを知らなかったので明らかにオーバースキルな無謀案件も承諾していました。毎回毎回猛勉強させられるだけでなく、ヒヤッとする経験、ヒヤッとするまででとどまらず業務委託者としての責任を追及される場面もありました。幸い損害賠償こそ免れたものの、信頼関係を完全に失って以降の仕事の依頼を完全に切られるという、猛省させられる経験もしています。しかしながら、ある意味直接的に責任を問われる経験ができたのは、責任やリスクマネジメントについてしっかり学ぶことができてよい経験だったかなと思います。会社に入ると、上司がこのあたりの責任を背負ってくれることが多かったため、頼れる上司の存在のありがたさを後になって振り返ると感じます。
ちなみに具体的にどんな苦労があったかは以下の記事にまとめてあります。よろしければこちらもご確認ください。
自分でいうのもあれですが、エンジニアキャリアのスタートとしては、かなり特殊な部類に入ります。フリーランスエンジニア的なことはしていたものの、複数のエンジニアと仕事する経験はほとんどなく、仕事の受注元はあまり技術に詳しい人たちではないばかりか、技術について詳しく話し合える友達もほとんどいませんでした。そのため後に新卒でエンジニアとしてWEB企業に入社して初めて、エンジニアを志す同期と会話をすることになりますが、結構価値観のギャップを受けることが多々ありました。
学生時代からがっつりエンジニアやってました系の人に「一番得意で好きな言語はなんですか?」って言われたときに「PHP」と答えたのですが、「それって猫語(=誰でも使える言語)ですよね。どうして?」って言われたりしたのは結構印象に残っています。当時すでにLAMP系のシステムがやや枯れた、ダサいものとなっており、Node.jsだとかRubyOnRailsなどが流行っていました。それゆえにあえて枯れた言語をあげたのは彼にとって違和感だったようです。
もちろん興味本位で新しいものも勉強もしていたのですが、学生時代から実務が中心であり、たとえ技術選択から自由に選択できたとしても、ノウハウがたまっていて運用面で安心できる枯れた技術の選択が好きでした。今でも新しい技術を採用するよりは、ある程度枯れて安定したもののほうが好きです。
新入社員時代~がむしゃらに王道を学んだ時代~
新入社員時代はただひたすらがむしゃらに言われた仕事やっていました。当初は慣れたHTML、CSS、JS、PHPを使ったWEBシステムばかりでした。それでも、今まで1サービス1サーバのモノシリックな小規模システムしか触っていない自分にとって、フロントエンドサーバだけでもロードバランサを使って何台も冗長構成をとっているシステムを設計したり、様々なバックエンドサービスと連携させるシステムを開発することはとても新鮮でした。
あと、ありがたいことに当時の上司はじめ、たくさんのエンジニアの先輩方がいたので、さまざまなことを教えてもらい、これまでの独学・偏りだらけの知識から、ある種王道的な知識、技術を身につけられたのも大きかったです。
入社2-3年目頃~責任を背負いながらの未知との挑戦~
この頃から、ある程度大きな仕事をオーダーされることが増えました。
一番印象に残るのはWebSocketでオンラインゲームを作る企画に携わったことです。ありがたい(?)ことに主任として、システムアーキテクト、技術選択まで任されました。Web以外のプロトコルに初めて触るだけでなく、当時WEBサーバ運営が主流故にLAMPシステム以外のシステム運用ノウハウがほとんど会社にない状況であったので、まったく未知のものに挑戦するということになりました。
ちなみに勉強として様々な本を読みましたがこちらの本がとてもためになりました。すでに古い本ですが、ベースとなる考え方は今でも変わらないと思います。
仕事として面白かった半面、常に責任や恐怖を感じる経験でした。未知のものに対する経験は学生時代さんざんしていますが、それは学生故に無責任であったからで、改めて責任を感じた状態で未知のものへの挑戦は正直恐怖でした。技術調査、検証、開発メンバーへの技術教育と、無茶苦茶仕事しました。残業量的には今でも一番していた時期でした。でもこの経験あって、技術的に未知のものに対しても恐怖に負けなくなったのかなと思ったりしています。
一方このPJは無事リリースこそしたものの、思うほど収益がでず、後にあっさりとサービス終了してしまいました。単にエンジニアリングやっているだけでは会社に貢献できない、もっと職種の枠を超えて動いていかないといけないと自覚した時期でもありました。このことをきっかけに職種にとらわれず、いろんなものに挑戦するようになります。
ちなみに、このほか、Android/IOSアプリの運用や開発などもやっていました。当時IOSアプリはSwiftではなくObjective-C、しかもARCやストーリーボードなどの便利な機構がなかったのでOSバージョンアップごとに、予期しないクラッシュが発生したり、安定稼働にかなり苦労した記憶があります。
あとアプリケーションだけでなくデータエンジニアリング的なことも経験させてもらいました。Hadoopにたまった大量のデータを再集計をするバッチ処理などを作っていたのですが、データエンジニアリングはそんなに得意ではなかったので、付け焼き刃で実行時間数日というようなスクリプトを作って無理やりアドホック集計していたことなどは思い出に残っています。
入社3-5年目~マネジメントの苦労~
これまではどちらかというとプログラマ、サーバサイドエンジニアという立場でしたが、異動によりSE的な仕事に移ります。プログラムを書いたり、サーバ運用をすることは全くなくなったわけではないものの大幅に減りました。
その代わり、セキュリティ設計、そもそものネットワーク含めたシステムアーキテクトの確認、各種システムの開発状況・運用状況のマネジメントといった上流の仕事が増えました。
ちなみに誤解がないように念のため説明しますが、ここでいうマネジメントはいわゆるプロジェクトマネージャーとのような管理職に就任したというよりは、PMO(Project Management Office)としてのPJ遂行のための支援活動業務が中心です。単発ではPJマネージャーとしてPJのリーダー、音頭取りとなる経験ももちろんありましたが、PMは別にいて、自分自身は前者のPMOとしての支援活動業務をすることが圧倒的に多かったです。
より上流の仕事になって、ネットワークなど新しいことを技術面でも学ぶことは多かったものの、なによりたくさん学ばされたのはコミュニケーションテクニックでした。
今までは比較的PJの仲間内だけのコミュニケーションだったので会話や認識の齟齬は発生しずらかったのです。(それでも認識合わせで苦労したり、認識の違いで喧嘩になることもしばしばありましたが...)。
上流になるとそもそもなところで全く価値観、認識、前提知識の全く違う人たちと会話することになります。例えば、エンジニアじゃない人にエンジニアリング観点でコスト見積もりの正当性、PJ運営上のリスクを納得してもらうよう説明したりする場面が多々あります。その時はまず相手の考え方、知識量をしっかり見極め、必要に応じてコミュニケーション戦略を事前に検討するなど、気軽な仲間内以上にコミュニケーションに気を遣う必要があります。
特に困ったのが個別最適化と全体方針の調和です。各PJから個別最適化観点で、こういう技術導入したい、ああいうことをしたいという相談をよく持ち掛けられます。なるべく実現させてあげようと思うのですが、会社全体方針、あるいはその子PJの親に相当するPJの方針上NGを出さないといけないときがあります。実現させてあげようというときも、単にOKをするのではなく、会社の方針に沿うように細かい調整が必要になり、NGを出さないといけないときは代替案がないか検討に苦労したり、最悪どうしてもお断りしなければならないときは相談者にできないことを説得しなければなりませんでした。NGを出すときにマネージャークラスの権限がある方に説明に出てもらってマネージャーの口から言ってもらうことが一番楽ですが、なんだかんだでできないことが多く、対等な立場同士が説明に行って納得してもらうのはとても苦労することでした。当然、双方に遺恨を残してしまったこともあり、こういうブログの場では具体的エピソードを絶対語れない辛い経験が結構あります。
そういった状況故に総合的なビジネススキルが必要とされていました。ロジカルシンキングなどのビジネススキル本であったり、仏教、心理学をはじめとする自己啓発本をいろいろ読むようになるのもこのころからでした。
ちなみに、この時期から会社以外でも様々な活動を始めてました。
一つ目は副業としてのフリーランスの再開です。当初はスキマ時間のボランティア的なものばかりでしたが、ある程度経験があるということで、学生時代のような極小環境ではなく、ある程度しっかりした技術環境のあるところでエンジニアリングの仕事ができたのは大きかったです。当時の勤め先はGCPやAWSといった今どきのクラウド環境ではなかったので、それらを触ることができたことはもちろんのこと、会社の環境に対しても相対的な目線で見れるようになったのは大きかったです。
二つ目は小学生中心にプログラミング教育のボランティアをしていたことです。会社でも新しい技術を導入したときにメンバーへの教育活動をやっていましたが、子供への教育はまったく違う感覚のものでした。子供たちは本当に自由気ままに学んでいきます。主に教えていたのはScratchを使ったゲーム作り、ラズベリーパイを使った電子工作です。電子工作に至っては未知の経験なので、時々全くわからないオーダーを子供たちからもらい、子供たちと一緒に教室で勉強することもありました。その時も、時には自分よりも早く解決策を見つける子供の発想力には何度もおどろかされました。結構この時期はストレスをためることが多かったため、子供たちへのボランティアは私にとって癒しでもありました。
入社6-8年目(現在)~雑食エンジニアへ~
その後一時開発に戻り、サーバサイド中心にいろんな開発PJを転々としていました。比較的小規模なものばっかりであったたものの、環境もLAMPだけでなくJava、Node.jsなど様々なものを短期間で経験させてもらいました。
7年目の夏、そろそろ勤め先ではエンジニアリング以外のこと、特に元からの志である法務領域の仕事を本格的にしたいと思って異動希望を出して現在に至ります。
今現在のエンジニアリングのメインはこのサイトの運営をはじめとする副業フリーランスですが、なんだかんだ、本業の方でもエンジニアリング領域のことをやる機会は多いです。
例えばとてつもなく大量のデータが入ったエクセルファイルのデータを加工したいときにVBAのマクロやPythonでの集計プログラムを作ったり、バックオフィス業務として使っているシステムに問題があったときにシステム運用部門への改善交渉をするときなどです。かつてのようなミッションとして任されていることではなく、法務というバックオフィス業務の片手間で、もっと周りが効率よく業務をよくできないかなという動機でやっています。改善という動機故に、結局自ら調べたり学んだり検証したりという状況です。データ集計やWindowsアプリを触ることが多く、もともとはWebエンジニアでしたが、もはやいろんなことをやる雑食エンジニアという状態です。
このブログも枯れた技術採用して片手間運用という状況ですが、それでも引き続き新しいことを学んでいます。先日SQLの学習ツールを作った時もWebAssemblyを触るのが初めてでいろいろ四苦八苦しながらの実装でした。
ありがたいことに、まだまだ衰えるどころか、引き続き様々なことを学ばされる日々です。
ちなみに、なかなか縁に巡り合っていないですがAIとGolangで何かできないかなと最近は思っています。AIについては大量データの集計などはやっていたのですが実際にデータをもとに機械学習を駆使してレコメンドなどを作ったりした経験はなく、Golangについては枯れたものだとJavaやPython、モダンなものだとTypeScriptやKotlinなどと古今東西様々な言語を触ったものの、未だに未経験であるからです。例えばこのブログのちょっとしたモジュールなどで実装できるとおもしろいのですが、なかなかそういう機会に巡り合えず今に至ります。
終わりに~今後について~
簡単ですが、私の十数年ちょっとのエンジニア半生でした。本業の職種は変わったとはいえこれからもうまく付き合っていければと思っています。またアップデートがあればこの記事を更新していこうと思います。最後まで読んでいただきありがとうございました。
Photo by Utsman Media on Unsplash