自己の技術的弱点の発見
こんにちは、シニアソフトウェアエンジニアのriddleです。 このポッドキャストは、IT業界のいろんな話やリアルをお届けします。
今回は、riddle が見つけた自分自身の技術的な弱点について、ちょっと紹介しようと思います。
シニアエンジニアって冒頭から歌っておいてですね、 弱点が新たに見つかったという話なんですけれども、
ちょっと内容に入る前に、 なんでわざわざこれをエピソードにしたかったかというとですね、
この年になって、自分の明確な弱点というか、 弱いポイント、かつ自分が認識できていないものを新たに認識するのって結構難しいんですよね。
というのも、明確に誰かから、これできないですよねって、 面と向かって言われることってほぼないですし、
なんかめちゃくちゃな失敗をして、そこから学びを得るみたいな、 大きな失敗みたいなこともなかなかしづらくなっている、しなくなってきているっていうのもあって、
なかなか機会に恵まれないですと。 今回はですね、ちょっと仕事の中で、
あれなんかここ、自分うまくできてないなーってちょっと思うきっかけがあって、 そこからAIとの壁打ちの中で、
うまく自分の不得意なところが言語化されたので、 そこについて紹介したいなと思っています。
AIが指摘した具体的な弱点
何が苦手かという話なんですけれども、 AIによるとですね、
いくつか言うと、モデリング能力の不足、 アプリケーション設計の判断基準不足、
設計上の問題を実装前に予見する力、 この3つが不足しているんじゃないかという話でした。
具体的にどういうことかというと、 私別にアプリケーション自体を書くっていうのは全然問題なくできまして、
実際にそれで作ったシステムを運用などして、 特にめちゃくちゃ大きな問題を起こしたということは書こないんですけれども、
やっぱり最近コードを書いていて、後からの機能追加だったり、 仕様変更だったり、運用性みたいなものを考慮したときに、
やっぱりこっちの方がいいよねみたいなことで、 たびたび自分で修正のプルリクを上げることがありました。
リファクタリングってやつですね。そうなってきたときに、 結局機能としては変わってないけど中の動き変わってるみたいなケースがあるんですけど、
この作業って無駄じゃないですか、言うたら。 要するに初めから自分が一発でパーンていいもの仕上げられたら、
このリファクタリングの作業って、ゼロとは言わないですけど、 結構圧縮できるはずなんですよね。
ってなったときに、ちょっとこの辺り弱いんじゃないかというところで AIと相談しまして、
先ほど紹介いただいたモデリング能力と アプリケーション設計の判断基準不足と、
実装前に設計上の問題を要件する力が不足しているんじゃないかという形でした。 具体的にはモデリング能力不足っていうのは、
業務上の概念とかドメインの知識みたいなものを 実際にプログラミングとして表現する際に、
どのような形で型とか変数とかオブジェクトに分割するか。 Javaとかだったらクラス設計とかにも通じるんですかね。
そういうところが安定してないと。 2つ目っていうのが、もちろん知識としては知っているんですが、
うまくコンポーネント感を結合にしたりとか、 DIとか使ってテスタビリティを担保したりとか、
責務を分離したり、変更容易性を保ったり。 そういったいわゆるソフトウェアの原則として大事なことを、
どの程度、どの場面で重要視すべきかという判断基準が十分に自分の中で体系化できていない、 みたいな課題もありました。
あとは、コードを書いた後で結構違和感とか問題には自分で気づけるんですけれども、 それを実装する前とか、手を動かす前に自分で書く設計書、
もしくは頭の中で書く設計図みたいなものから推理して、 ああ、これはダメだなっていうのを予見する力というか、
考える精度だり、そのプロセスを省略しているというところに結構課題があるなと思いました。
弱点の背景と原因分析
これはもうその通りだなと思います。 なんでそうなっているのかなって考えると、これは自分の出身も関係しているかなと思って、
インフラを出身としていて、アプリケーションというのは基本的に身を見真似で、 動くものを作れるように後追いでスキルを醸成してきたというところがあって、
要件定義に従ってそれをまずはモデル分解して、こういうふうに作りましょうねみたいな、 いわゆるウォーターフォール的な開発を通ってきていないということもあるので、
結果的に動いてしっかりしたものが作れてはいるものの回り道だということが結構あるんじゃないかなと思っています。
もちろんインフラも事前に設計したりして、それを構築するというフェーズはあるんですけれども、
やっぱり若干モデリングみたいなところはそんなに多くないですね。
もちろん事前にこことつなげた問題ないよねとか、 この構成だとこの辺にスケーラビリティの問題出るよねみたいなことは検討できますし、検討もしてきたんですけれども、
やっぱり不慣れな分野ということもあって、その辺りのキャッチアップというか理解がまだまだ足りないんだなということを自覚しました。
弱点発見の意義と今後の学習方針
今回このように問題というか自分の苦手なところを見つけられたっていうのは非常に喜ばしいと同時に改善していかないといけないなと思うところであります。
冒頭申し上げた通り、こういう力って足りてないよって面と向かって、若い時はもしかしたら言われるかもしれないんですけど、
多分それもがっつりアプリケーションを触っている人だったら言われるかもしれないですね。
ってなってきた時に、かつ新機能を作るにしても結構既存の実装がしっかりあるケースだと、もうそこのレールに乗っ取ってやってしまうので、あまり露見することも少ないかなと。
そうすると結構がっつり大きな機能とか新機能サービス作る時じゃないと、なかなかそのドメインモデリングとかってやらないことも多いと思いますし、
そういったところで今までただ露見してなかった、もしくは自分が気づかなかったみたいな感じかなと思います。
ということで今後はですね、ちょっとこの辺りについてトレーニングをしていきたいと思っているんですが、
自分自身の得意な勉強方法として、何か決まったゴールに対してコツコツと勉強を積み立てるみたいなところが結構得意で、
例えば資格勉強とかってその最たる例なんですが、インフラ系だとIPAが出してくれていた資格があって、
それが実際に現場で役に立つかどうかは別として、それのテストに対して決められた過去問とか問題集とか教科書みたいなものをコツコツやっていって、
それを半年みたいな期間の中でやっていて、結果合否が出るみたいなものは非常に得意とするところなんですけど、
このドメインモデリングとか、どっちの方が良いんだっけみたいな判断基準の情勢みたいなところって、
最終的には究極的には答えがないですと。それはもうケースバイケースでしょうし、
ドメインだったり状況によっても変わる可能性がありますと。
あったときにこれを目指して勉強しましょうっていうのがちょっと見えないんですね。
なってくると最終的なまずゴールがどこなのかっていうのをちょっと定めたいんですけど、なかなかこう多分難しいと。
かといってこれ多分、書籍読んで知識をつけるって類でもないと思うんですよね。
自分の場合、まあAIと株主してわかったんですけど、なんかこの辺りの知見がないってわけじゃないんですよね。
だから用語としても知ってるし、概念としても知ってるし、大事なこともわかってるが、
それを現場の中で応用して取り組むにはとか、自分の考えの第一ステップとしてそのフェーズをうまく盛り込むには、
まずこれをうまくできるようにするみたいな訓練のところが足りないと思っているので、
その訓練をどうやってやっていくのか。で、まあこれも結局AIに頼っちゃうんですけど、
AIにケーススタディを作ってもらって、実際にそれを自分がテキストベースで回答していくっていうのをちょっと繰り返しやろうかなと思っています。
っていうのがまずプライベートでできること。
仕事における改善策と振り返りの重要性
で、仕事の中では多少仕事がその効率一時的に悪くなったとしても、中長期的な観点から自分がやる大きなタスクに対して、
もう少し以前よりも時間をかけて前準備をしてみる。
ここでいう前準備っていうのはどういうふうに作るのか、それをなぜこういうふうに分けたのか、
こういうふうに分けるとどういうメリットがあって、ここで分けないとどういうデメリットがあるのか、みたいなところを一通り考えてから手を動かす。
手を動かした結果、どういうギャップがあって、そのギャップはなぜ生まれたのかっていうのをちょっと振り返る時間みたいなものを設けようかなと思いました。
こういう感じで業務の中にいろいろ自分ができないことのヒントが隠れていることもありますので、振り返り大事です。
振り返りの中から自分ができないものをピックして、それをどのように改善して潰して成長につなげていけるのかっていうのを判断する位置材料として、
今回ちょっとポッとキャストという形で収録してみました。
課題への向き合い方と自己判断の重要性
これ1点注意点なんですが、こうして見つけた課題、あると思うんですけども、皆さん大なり小なりきっとあると思うんですが、
今回の場合私、これはぜひ改善しないといけない、改善したいと思ったんで取り組みますが、そうじゃないケースもあると思ってますと。
自分はこの分野に関してはもう完全に捨てますと。
他のスペシャリストの方に頼むので、最低限のとこだけあれば良くて、それ以上のことは望みませんというのも一つの選択肢だと思います。
時間は有限なので全然あり得る選択肢だと思います。
なので自分が見つけた課題に対してですね、本当に自分が対応すべき課題なのかどうかっていうところだけはまず自己判断して、
必要であればマーケットに相談して、これは解くべき課題なのかっていうところをいろいろクリアにした上で望んでもらうといいかなと思います。
このポッドキャストはハッシュタグリアリティで皆様からの感想やコメント募集しております。
またチャンネルの概要欄にありますGoogleフォームのリンクからもご投稿可能です。ありがとうございました。