Webエンジニアの視点から、改めて問い直すAI時代に必要なマインド

ai-image

軸となる思考を身につける

実装の根拠となる思考の軸を早い段階で身につけておくことは大切。

私の場合にはそれまでプログラミングに触れる機会がなかったので軸がなかった。全くないのは語弊があるが、それに等しい状態だった。一旦趣味の話を挟むが、私のゲームのプレイスタイルは実戦ありきのもの。大抵のゲームは簡単なチュートリアルがあってそれをプレイすれば大方操作のイメージはできるように作られている。幅広い年齢層の人がプレイするからそれを考慮しているのは当然で、すぐに実戦に参加できるようになっている。FPSとかだと練習場があってマッチの前に慣らすこともあるがそれを嫌う。まずは試合の勘を身につけたいのが一つ。それだけ試行数が増えてしまうが細かい知識は後から付いてくると分かっているので、しみつかせるために実戦を重ねる。勿論全てが有効とは限らず、一筋縄ではいかないこともある。自然と身に付いているのが理想だとすると、資格試験の勉強もそこが通過点で勉強した内容が自然と思い出せて使える状態になっているのが良い。

コンテクストによって適した時期はさまざま

話を戻す。思考の軸を早い段階で身につけておくことが大切と言ったが、早い段階とはどこのタイミングなのか。
コミットしてきた初歩の段階で軸となるものを教わっても、それをイメージ、解釈できてすぐに使える状態になるのは正直難しい。言語マニュアル、リファレンスを読むのはしんどい。分からない言葉ばかりだし、コードも読めないならばイメージできないし理解が進まない。
振り返ると初期の頃は業務に必要な問題を解いたり、実際のコードを読んだりしていた。paiza、progate、ドットインストール、udemyなどにもお世話になった。そうやって少しずつコードが読め、書けるようになっていった。
アーキテクチャではMVCを最初に教わったと思う。MVCと一言でいってもプロジェクトやサービスによってファイル構成が変わるし、一概にこの形が正と定まらないケースがある。Web系エンジニアの現場で感じたのは、これだという決まった型がなくて、プロジェクトごとに構成は変わるものだということ。それはそうでマニュアルを作成しようものなら時間と労力がかかるし、一旦プロジェクトが落ち着いても次のタスクがすぐにやってくるので、決まった形を作るのが難しかったりする。技術進歩のスピードも早いので、バージョンが上がったり、deprecatedになったり、同じ環境では対応できなくなったりもする。コンテナ化すれば環境も共有しやすいけど、それも万能ではない。プロジェクトが変わると前提として必要なビジネス知識も諸々理解しないといけないし、その辺りは個々に掘り下げていかなければならない。
エンジニアの性質として冷たいと思われることもあるようだが、1聞いて10考えるとか当然だし、プロジェクトごとの知識に振り回されたりもするし、ジェットコースターのように急加速すれば急に減速することもあるので、そういう業界なのだと思うようになってきた。

ドメイン駆動設計(DDD)と「なぜ」の根拠

で、慣れてくるうちに、自分で本読んだり勉強するのはこれまで通り当たり前で、軸となるものが欲しいなとやはりなってくる。

キーになったエピソードとして主義主張を持ったエンジニアの存在がある。
「自分の場合には、~という考えなので、ここは~して、こうなった」というような、まず軸に根拠となる考えがあって、それを元に実装するということ。
いたって普通な見方とも思われるが、油断するとなぜこの実装をしたのか?と聞かれたとき答えに窮することになる。このなぜの部分を明らかにしておかないと迷子になるし、他者にも自信をもって説明できないし、バグの温床にもなって保守性が低いものになってしまう。

ここでドメイン駆動設計(DDD)に出会う。DDDについては幾つか書籍やZennなどの記事を読んだ程度だが、それでも軸となる考えとして大事なものだった。
まずプロジェクトごとの複雑怪奇なビジネス知識をドメイン層に落とし込めるようになったことが大きい。それらをリポジトリで永続化していく。細かいところは理解していかないとだが、DDDによって思考の軸はできた。

なぜの部分を掘り下げられると、それを表現するのがメインになるのでコーディングがスムーズになる。
これはAIによるコーディングが今後一般的になるにつれて必要な視点だ。AIプロンプトでどのようなコードを生成してほしいのかを指示する。前提としてドメイン知識が固まっていないと的確な指示もできないし、コードとして適切でもドメイン上正しいと判断できない。
しかし思考の軸が定まっていれば、ディレクトリ構成やファイルごとの責務も根拠をもって決めることが出来るし、間違っていた場合の修正も理解しやすくなる。保守性、可読性、拡張性も上がる。
これが当初課題にあったイメージできるかを解消することになる。解像度が上がれば仕様の漏れに気づけたり、実装のスピードも上がる。レビューを依頼された場合も、信念をもって向き合うことができるし、リファクタリングやテスト仕様書を作成することにも役立つ。

おわりに

AIが壁打ち役として様々な疑問に答えてくれて、独学でもプログラミングを学びやすくなったことは大きい。知識詰め込み型の受動的な教育ではなく、AIによって能動的に物事を知れるのは凄い時代になったと思う。
だが、軸となるものがないとAIに振り回されることにもなるし、コーディングもAIのレビューを挟むことで逆に時間を取られたりすることもある。
AIでいうと日本でのスピード感も上がっていると感じる。今日共有したことは明日には古いものになり、別の方法が推奨されることもある。個々のコンテクストは異なるが、いずれにしても軸が定まっていれば、容易く自分を見失うことにならないだろう。

この記事の執筆者
ミラ

ミラ (異世界攻略班)
フロントエンド、バックエンドエンジニア。
PHP、Laravel、CodeIgniter、HTML/CSS、JavaScript、jQuery、Vue.js、Smarty、MySQL、Oracle、Go、Git、AWS。
『この世は異世界である』自由とは何かを求め模索する。
最近は、ウマ娘の楽曲を聴きながら執筆している。ライブが密かな楽しみ。