Enjoy Architecting

Twitter: @taisho6339

入社してからずっと目をそらしてきたズレについて

※最初に断っておくと職場やそこの人への愚痴などでは一切ありません。 客観的な職場の現状と自分のキャリアの希望のズレに言及した記事になります。

本記事について

現在大手Webサービス会社に新卒入社して7ヶ月経った。 だが、入社初期からずっともやもやしていて目をそらしてきたものがあるのでここで一旦言語化して整理したい。

記事の概要

ざっくり言えば、 「入社一年目はインプットが大量に必要だと思っているが自分が求めるインプットではなかった。自分の今後のスキルアップを考えたら今の環境にいるべきではない気がするが、今の環境で結果を出せていない事実もあるのでどうするのがベストか決めあぐねている」といった内容の記事を書く。

自分が職業エンジニアとしてやりたかったこと

自分は情報技術が好きである。 何かしらの大きな課題を前にしてそれを技術で解決することに憧れている。だから入社前はデータ分析職を希望した。よくわかっていないながら、データを分析して課題と解決方法を考えて、数学的、技術的に解決することに魅力を感じていたからだ。

だがその希望は通らずにサービス開発をするエンジニアとして配属された。サービス開発については前々からやってみたいと思っていた分野ではあったし、多くのユーザに実際に使われているプロダクトなのでより実践的な課題を解決できると前向きに捉えていた。 今後は、「サービス開発する上で立ちはだかるどんな技術的障害をも解決できるすごいエンジニア」になりたいと考えるようになった。よって企業としてアプリやWebサービスの開発に取り組むことで具体的に以下の技能を身につけることができることを期待した。

自分が期待していたサービス開発で学べること

  • 大勢のユーザからアクセスされた時にでも耐えられるインフラ設計ノウハウ
  • 安定したシステム運用のために必要なセキュリティ対策、監視運用
  • 質の高いアプリ、システムをリリースする上でどのように品質を担保するのか。どのように試験するのか。
  • チーム開発に最適化された効率のよい開発プロセス
  • 大勢のユーザから使用されるアプリを作るにはどのようにニーズを分析するのか。またその結果をどう活かすのか。
  • 保守性が高く、堅牢なソフトウェアを設計、実装するためのノウハウ
  • 他に自分が知らない知識

だが現実はそうではなかった。

期待と現実のギャップ

  • どうあるべきなのが正しくて、どういうテストケースを実行するのかなど確立されたテストプロセスは存在しない。「とりあえず動かしてみてなんとなく良さそうだからOK。」自動化テストなども存在しない。

  • ほぼウォーターフォール。降ってきた案件を単純に消化するだけ。

  • ログデータ分析の基盤が整っておらず、施策をうつにしても効果の試算や結果のレビューなどが存在しない。企画職が考えてこちらが実装するだけなので、「どんな効果を予想した施策で、その結果どうなるのか」が見えない。これでは開発プロセスを改善していくことが難しい。

  • 堅牢で保守性の高いソフトウェアとか夢。実態は、「謎の5000行のUtilクラス」、「意味もないネストの深い継承」、「5000行にも渡る何をやっているのか分からない共通クラス」。OOPデザインパターンを理解している人自体が少ない。

  • とりあえずなんとなく動くものをなんとなくリリースしているように見える部分がちらほら。

  • アクセス捌けなくなってきたらとりあえずサーバ台数追加で解決してきた。(もう少し分析などしっかり行ったうえで対策を打つべきだと思っている)

  • セキュリティは外部専門部署から指摘されたことをこなすだけ。こちら主体で考えて対策したりといったことはあまりない。 監視はしているが、どんな監視項目を設定するかなどの議論はなく前任者が設定した項目を完全に意味を把握することなくそのまま引き継いでいるものが多い。

まとめると技術力のある他社が実際に当たり前にできていること、考えていることがほとんどできていない。 エンジニアリングでの課題解決より受動的な開発が多い。

現実を前にした今の自分の気持ち

課題は自分で解決して変えていけよ、という話なのかもしれない。 でも インプットなくしてアウトプットが出るだろうか。 なんでも経験した範囲で取り組めるわけはないというのは理解できるが、 これらの課題を解決できるノウハウを持った「できるエンジニア」が近くに存在しないことは、 入社一年目でいろんなものを吸収する必要のある自分とマッチしているのか、というのは甚だ疑問である。

もちろん学ぶものがまったくないわけではなくて、チームとのコミュニケーションの取り方や、開発をすすめる上でのスケジュールや工数の考え方、外部との調整の仕方など多くのものを学ばせてもらった。だが、それらは技術力ありきで必要なものだと思っている。技術力なくしてそれらだけあっても、それは「エンジニア」ではないというのが自分の考えだ。自分は「エンジニア」になりたい。 「エンジニア」になりたいのに仕事を通してまず「技術」を吸収できないのがすごくもどかしい。

はっきり言えば転職をしたい。 だがほとんど今のチームで成果をだせていない自分が転職できるのか、するべきなのかというのも疑問である。。。 いち早く成果を出して転職をするのがベストなのだろうか・・・ 焦りだけが積もっていく。

追記(11/18)

思った以上にいろんな方に読んでいただけて驚いた。 厳しいコメントもいくつかいただけて嬉しい。 このような記事の書き方だと自分がなにもせず待っているかのように感じられる方も多いと思うが、 記載したような課題を自ら解決するべく動いているし、自主的な技術勉強を怠ってはいない。(足りているとは言いがたいけれど) いままでは「何も整備されていないということは一から自分で作って学んでいける」と思って取り組んできた。 実際それによって良くなりかかっている課題もある。

だが正解を知らない、指針が見えない課題が多すぎて、思うように進捗と成果が出せていないのは事実だし、 勉強会などで積極的に活動している”うまくいっているほう”の若手エンジニアの話を聞くとどうも焦りを感じてしまう。 情熱プログラマーにも書いてあったが、「自分が一番の下手くそであれ」というのは確かな正義だと自分は思っている。 レベルの高い環境が自分のスキルアップ促進に影響するのは間違いないし、同じ姿勢でも環境によって成長速度が変わってくると思う。

端的に言えば、能力値の低い自分では0から学んで自分で解決していくのはなかなか難しいので、 良い環境で周りの技術を盗んでスキルの底上げをしたい。 ということなのだと思う。