エンジニアのひよこ_level10

毎日更新してた人。たまに記事書きます。

【プロトタイプ】開発の速度と設計に関わる、 『正しい意味で』プログラムを書く【724日目】

この記事は?

今週の土曜日に開催されます、PHPカンファレンス沖縄で登壇する時の内容のプロトタイプです。

これはまた更新されていく可能性があります。

ネタバレが嫌な人はブラウザバック!
そして、『これはこうしたほうがいいんじゃない?』って思うのがあれば、お気軽にお声がけください!

話したいこと

アンチパターンを通じて、

○○だから、これで動く
から、
○○だから、こう書く

に感覚を変えていきましょう。

アンチパターン

CSS

marginは空白を作ってくれる。だから2つ使えば両方の空白を足した値になるよね!

→使っているものの意味を正しく理解していないパターン

marginが重なるとページの幅が予想外の値になる。

なんでこうなってる?

この時こう動くから、きっとこうなんだろうっていう思考。

どう向き合う?

この時こう動くのは、こういう『目的』だから、きっとこうなんだろう

扱っているものの『目的』を知覚しよう

JS編

apiを投げたら、ユーザーのステータスが変わる。すると表示内容を変更する必要がある。
なら、apiを投げた時に、内容を変更すればいいよね!

→発生するタイミングを正しく理解していないパターン

他の事象で、ユーザーのステータスが変わる機能が実装されると、正しく動かないor多重管理が始まる

なんでこうなってる?

起こった事象の細分化が足りてない or ユーザー視点でしか見れてない

どう向き合う?

apiを投げたら、表示内容を変更する必要がある。

ここまでしか分析が出来てない場合は、『なぜ』を繰り返す癖をつけてみる。

apiを投げたから、画面の変更をする必要がある。なぜか。ユーザーのステータスが変わるから。
ユーザーのステータスが変わると画面の変更をする必要がある。なぜか。見る権限が変わるから。

こうなると、権限が変わることをトリガーにするのも良いのかもしれないと考られます。

apiを投げたら、ユーザーのステータスが変わる。すると表示内容を変更する必要がある。

ここまで分析していたら、『Aすると、Bが起こる。だから○○する』 の一番最後に発生する部分に着目することを意識する。

PHP

情報が足りてない場合もある。

1.『ボタンをクリックしたら、このページのclassがspecial_itemsのパーツの色を変えてほしい』
2.『それはこの画面の上から4番目のパーツだ』

こう言われたとき、あなたはどんなプログラムを書きますか?
これ、実はこの時点では答えがありません。

なぜか。『依頼者の目的』が明らかになっていないからです。

『なぜ』の問い掛けをしてみましょう。みなさんは、この問い掛けはどんな意図で投げられたと思いますか?

依頼者の目的

では、ヒアリングしてみました。
どうやら、特集をやりたいらしい。

特集対象の時には、対象にspecial_itemsをつける。
special_itemsを目立たせるために、色を目立つ色に変える

違う可能性って?

今回はわかりやすく4番目にしましたが、これが1番目で色が金色を指定していたら・・・?

もしかしたら、1位である、1番目であるということに意味があったら・・・?

もし間違えると?

この実装は2種類考えられます。

.ranking:first-child {
    background-color: yellow;
}

.special_items {
    background-color: yellow;
}

前者であれば、一番最初であることが重要なので、中身がどんなに変更されようが、
必ず一番上は黄色になります。

後者であれば、順番がどんなに変わろうが、対象のクラスは黄色になります。

1位を黄色にするのが目的のときに、後者を実装すると、
special_itemsの場所が変わったり、special_itemsが他の場所で使われたりすると、バグが発生します。

特集を対象とする時に、前者を実装すると、
special_itemsをつけたものが1位じゃなくなった時に、バグが発生します。

なぜ?の問い掛けは、自己完結するとは限らない。
実装に着目するのではなく、目的に着目する。
そのためには、依頼者に確認するというのも可能ならしよう