Slide 1

Slide 1 text

Nstockの開発における 「認知負荷」へのアプローチ CHUO_Tech 2024-06-19 Yuki SHIMA

Slide 2

Slide 2 text

自己紹介 Make the startup ecosystem AWESOME 02 © Nstock Yuki SHIMA Nstock 株式会社のソフトウェアエンジニア 最近上野に引っ越しました。富山県出身。 先週末に2人で韓国行く予定だったんですが 友達の寝坊で一人旅になりました。 参鶏湯美味しかった。

Slide 3

Slide 3 text

Nstockにおける 開発生産性

Slide 4

Slide 4 text

いろいろやってます Make the startup ecosystem AWESOME 07 © Nstock 生産性を上げる努b u ドメイン勉強 u ユビキタス言語の整‚ u モブプロ、ペアプロの利V u GitHub CopilotやChat GPTな どLLMの利V u 読書 u 各自の得意な領域の共有会 生産性を下げない努b u 言語やライブラリの定期的な バージョンアッ} u 技術的Issueの洗い出x u Toilの解ˆ u Design DocやFigmaを使った図 式化

Slide 5

Slide 5 text

Nstockにおける開発生産性 Make the startup ecosystem AWESOME 08 © Nstock その中でも本日は コードを書くときの「認知負荷」 の話をします

Slide 6

Slide 6 text

開発生産性の妨げになる 「認知負荷」

Slide 7

Slide 7 text

Make the startup ecosystem AWESOME 10 © Nstock プログラマー脳 出版社:秀和システム ページ数:288ページ コードを「読む」ときの認知プロセス について記載されている書籍 ガチおすすめ

Slide 8

Slide 8 text

認知負荷へのアプローチ Make the startup ecosystem AWESOME 11 © Nstock VT 課題内在性負H ET 課題外在性負H CT 学習関連負荷

Slide 9

Slide 9 text

認知負荷へのアプローチ Make the startup ecosystem AWESOME 12 © Nstock IG 課題内在性負荷 取り組むタスク自体の難しさ これ自体を大きく減らすことはできない事が多い。分割するのが効果的。 例)ドメイン知識が求められるもの(Nstockでいうとストックオプション そのものの知識)

Slide 10

Slide 10 text

認知負荷へのアプローチ Make the startup ecosystem AWESOME 13 © Nstock IG 課題外在性負荷 タスクそのものとは別の難しさ 各々の習熟度や手順の複雑さからくるもの。 読み手が持っている知識によって大きく異なる!! 例)Java初心者。なんでこのテーブルだけ他と違って非正規化してあるん だ?など

Slide 11

Slide 11 text

認知負荷へのアプローチ Make the startup ecosystem AWESOME 14 © Nstock HG 学習関連負荷 学習やタスクを遂行するために必要な負荷 この負荷を高くしても問題ないように、課題内在性負荷と課題外在性負荷 を小さく保つ必要がある 例)新機能の開発。セキュリティ知識の習得。(シチュエーションによって かわる)

Slide 12

Slide 12 text

「認知負荷」へのアプローチ

Slide 13

Slide 13 text

Nstockにおける開発生産性 Make the startup ecosystem AWESOME 16 © Nstock コメントを書く

Slide 14

Slide 14 text

あるとおもいます Make the startup ecosystem AWESOME 17 © Nstock コードは読む時間が7割〜8… b スタートアップであれば相対的に書く時間が長e b しかし、時間が経ってメンバーが増えて利用しているお客様が増えれh b 自分が書いていないコードを読C b 自分が書いた記憶のないコードを読む(!)

Slide 15

Slide 15 text

Make the startup ecosystem AWESOME 18 © Nstock コードを読むときの 2つの認知負荷を低減できれば 生産性に効くはず! Nstockにおける開発生産性

Slide 16

Slide 16 text

Nstockの認知負荷を分類 Make the startup ecosystem AWESOME 19 © Nstock 課題外在性負‘ y 直感的でない命Y y 実装の妥協† y 不慣れなJav„ y 仕様や機能の妥協† y バイテンポラルデータモデ• y 使われていないフィールドやカラム 課題内在性負‘ y 株式報酬にまつわる用| y ストックオプションの計算ロ ジッ~ y 「ほふり」や証券会社との連携 スキーw y 株式分割の効力発揮タイミング

Slide 17

Slide 17 text

Nstockの認知負荷を分類 Make the startup ecosystem AWESOME 20 © Nstock 課題外在性負‘ y 直感的でない命Y y 実装の妥協† y 不慣れなJav„ y 仕様や機能の妥協† y バイテンポラルデータモデ• y 使われていないフィールドやカラム 課題内在性負‘ y 株式報酬にまつわる用| y ストックオプションの計算ロ ジッ~ y 「ほふり」や証券会社との連携 スキーw y 株式分割の効力発揮タイミング 課題内在性負荷を直接 減らすのは難しい コメントでのアプローÑ Ð 用語をJavaDocで説明す× Ð 計算ステップを自然言語でも説明す× Ð ドキュメントへのリンクを置Ö y コードに近いと参照しやすい

Slide 18

Slide 18 text

Nstockの認知負荷を分類 Make the startup ecosystem AWESOME 03 © Nstock 課題外在性負‘ y 直感的でない命Y y 実装の妥協† y 不慣れなJav„ y 仕様や機能の妥協† y バイテンポラルデータモデ• y 使われていないフィールドやカラム 課題内在性負‘ y 株式報酬にまつわる用| y ストックオプションの計算ロ ジッ~ y 「ほふり」や証券会社との連携 スキーw y 株式分割の効力発揮タイミング 課題外在性負荷は 減らしやすい(人や習熟度にもよる) コメントでのアプローf d TODOやFIXMEなどのタグをいれB y VS CodeならExtensionがありま d Why not、「なぜそうしなかったか」を書p d ドキュメントへのリンクを置p y コードに近いと参照しやすい

Slide 19

Slide 19 text

Make the startup ecosystem AWESOME 22 © Nstock 具体例の紹介 「わかっちゃいるけどゴメンナサイ」の言い訳

Slide 20

Slide 20 text

すまぬ・・・ Make the startup ecosystem AWESOME 23 © Nstock 未来へのメッセージ(TODO / FIXMEu q あと何が必要かを記載していQ q 仕様上の前提を明記することで、「分岐足りてるんだっけ?」の疑問を 解決できる

Slide 21

Slide 21 text

わかっていたのよ Make the startup ecosystem AWESOME 24 © Nstock なぜそうしなかったのか(Why nots q あえてこの実装にしたことを記載していP q 標準とは違うコンポーネントを使っている理由を説明

Slide 22

Slide 22 text

Make the startup ecosystem AWESOME 25 © Nstock コードコメントで どういう意味だ(課題そのものがムズい) なんでこうなってないの?(Why not、過去経緯) を解消する

Slide 23

Slide 23 text

Make the startup ecosystem AWESOME 26 © Nstock コードコメントの 使い分けと工夫の紹介 実践編は大幅カットしました

Slide 24

Slide 24 text

いわゆるコメントって2つあるよね? Make the startup ecosystem AWESOME 27 © Nstock ドキュメンテーションとしてのコメントとコード中のコメンp ˜ ドキュメンテーショ† ˜ JavaDocとか、IDEやEditorでいい感じに見れU ˜ コード中のコメンv ˜ デバッグやコードを追加・修正するときによく分かる 自分はIDE上にどう表示させたいかどうかで使い分けています メソッドのスコープ内で要注意 or メソッドを使うときの事前条件

Slide 25

Slide 25 text

働きたくないでござる Make the startup ecosystem AWESOME 28 © Nstock LLMにやってもらƒ d 単純な説明やJavaDoc(体感7w d 固有名詞もコメントを書いていけばかなりの精度がでY d 複雑な仕様やWhy notの記載(体感2w d 完全に任せるのは難しいが書きっぷりとかは合わせやすい 単調な説明はGitHub Copilotに任せっ切り Copilotが不正確な説明をするということは怪しい

Slide 26

Slide 26 text

子曰く Make the startup ecosystem AWESOME 29 © Nstock 一方f ‘ 「コードそのものがドキュメントであるべきt ‘ 「コメントを書く必要性を感じたらまずはリファクタリングしましょ うt ‘ “When you feel the need to write a comment, first try to refactor the code so that any comment becomes superfluous.” — Martin Fowler

Slide 27

Slide 27 text

※諸説あります Make the startup ecosystem AWESOME 30 © Nstock いいから!!!かけ!!! ※1 個人の意見です ※2 もちろん書くべきでないコメントもあります

Slide 28

Slide 28 text

まとめ

Slide 29

Slide 29 text

コードコメント Make the startup ecosystem AWESOME 32 © Nstock コメントを使った認知負荷へのアプローx v 課題内在性負荷は難しいので助ける精w u ややこしいドメインロジックや固有名詞の説e v 課題外在性負荷は下げやすい(ときもあるS u 過去経緯の説明、Why noD u 将来必要になることや留意点、TODO

Slide 30

Slide 30 text

Nstockにおける開発生産性 Make the startup ecosystem AWESOME 33 © Nstock コメントを効果的に使って 2つの認知負荷を下げるようにしている 認知負荷の増大による生産性の低下のダメージを最小限 に抑えるテクニックの一つ

Slide 31

Slide 31 text

Make the startup ecosystem AWESOME 34 © Nstock 自分が迷ったということは 他の誰かも迷うポイント 未来の自分もどうせ迷うのだ Nstockにおける開発生産性

Slide 32

Slide 32 text

Make the startup ecosystem AWESOME 35 © Nstock みんなもコメント書こうぜ!バグらないから! ※3 あまりに間違ったコメントはバグの要因になります Nstockにおける開発生産性