レビュー指摘、ちゃんと理解できてる？

## 初めに
何かしらのレビュー指摘を受けた際に「なるほど！確かに指摘の通りだ！」と、理解・納得して業務に挑んでいると思います。
ところで、それは自分にとって有益な理解、納得を出来ていますか？
この記事では、「**本質への理解**」についてお話ししていきます。

「理解ってなんだよ！」
「どうせ『先輩が言っているから』じゃダメだ、という話だろう」
と思った方々が、対象読者です。

なお、内容的に、意識高い系要素を含みますので、苦手な方はブラウザバックを推奨します。

Qiitaの記事を引用して後輩や部下に指摘・指導する方もいると思います。
また、本記事の内容は、プログラミングだけでなく、設計や、個人での勉強においても同様に重要なことだと考えています。
そういった方々の助けになれたらと思います。

## 本題
### 言いたいこと
初めに、「本質への理解」をすると何が嬉しいのか、逆に「本質への理解」をしないと何が起きるのかについてですが
筆者は下記の通り考えます。
- 本質への理解をしている場合
  - 全く同じ場面でのミスでなく、似た様な場面でのミスを減らせる
  - 考えを応用して、新しい場面でのミスを減らせる
  - 本質の考えを発展させ、自身の理解を構築できる
- 本質への理解をしていない場合
  - 全く同じ場面でのミスしか減らせず、似たような場面でミスをするor指摘される
  - 指摘ばかりが続いて、ストレスが溜まる

### 数学の問題の問題例
業務内容的にコードレビューがない業務をされている方もいると思います。
そのため、ここでは数学の問題で例えたいと思います。
(中学校1年生レベルの数学の話ですので、構えなくても大丈夫です。)

みなさんは中学生の頃に学んだ「**移項**」という概念を覚えていますでしょうか？

以下の一次方程式において
$x - 2 = 1$
左辺の $-2$ 部を右辺に**移項**することで、**$-2$ の符合が反転し**
$x     = 1 + 2$
となり
$x     = 3$
という解を求めることができる

というものです。

:::note
そんなのあったっけ？という方は
上記内容を以下のどちらかの方針で理解しようとしてみてください
・本質的に理解しようとする
・表面だけを理解する
また、今後の内容はどちらの理解をしようとしたかを意識して読んでいただければと思います
:::

### 理解の種類
数学の例で挙げた**移項**ですが、ざっくり分けると下記理解があると思います。
1. **-2**を＝の右側に移動すると **+2**になる
  →説明されたものだけを覚える(理解とも言えない)
2. **数字**を＝の右側に移動すると**符合(+と-)が反転する**(だけ)
  →表面への理解
3. 移項すると**引き算されていたものは足し算に、足し算していたものは引き算に**になる
  →本質への理解一歩目
4. 等号(=)の性質上、**左辺と右辺に同様の操作をした結果が移項**である
  →より本質への理解

<details><summary>4の意味が分からないという方への補足</summary>

数学上、等号(=)は「等号の右側と左側が等しい」ことを表します
左側と右側が等しいということは、左右に同じ操作をしても等しくなります。
したがって
$x - 2 = 1$ が与えられた場合

```math
\begin{align*}
&x-2&&=&1&\\
&x-2+2&&=&1+2& ←両辺を+2する\\
&x&&=&1+2&
\end{align*}
```
</details>

---
#### 1の理解の場合
**-2**を＝の右側に移動すると **+2**になると思っているので
$x-1=4$の様な問題を与えられた場合、
「$-1$の移動の仕方は知らない！」となってしまいます。

全く同じ場面でしか対応ができなくなっており、論外ですね。

---
#### 2の理解の場合
**数字**を＝の右側に移動すると**符合(+と-)が反転する**と考えています。
そのため
$x-1=4$の様な問題を与えられた場合は

$x=4+1$ ← $-1$を右に移動したから$+1$だ！
$x=5$

と、答えを求められますが、
$-2x=-6$では

$x=-6+2$ ← $-2$を右に移動したから$+2$だ！
$x=-4$

と間違えてしまいます。(正解は$x=3$)

どちらの問題も一次方程式ですが、形が同じ一次方程式(今回で言うと、xに数字がついていないパターン)にしか対応できません。
しかも、**理解した通りにやった**(解いた)のに答えを間違えるという悲しい状態です。

この時に、「自分の理解が誤っていたかも…」と思えれば良いですが、
中には「前に言われていたことと違う！指摘が間違えている！」と考えてしまう人もいます。
こうなってしまうと最悪です。誰も幸せになりません。
(作業者は解く作業に時間を費やし、見る人は指摘＋説明が必要という状況)
そう考えると1の理解をしている人の方が何一つ分かっていないので「教え直さねば…」と思えるだけマシかもしれません…

#### 3の理解の場合
移項すると**引き算されていたものは足し算に、足し算していたものは引き算に**になると考えています。
そのため2の時同様、
$x-1=4$の様な問題を与えられた場合は解くことができ、
$-2x=-6$を与えられた時には、式中に足し算も引き算もないので解くことができません。

2は間違えたが解くこと(作業)はでき、3は解くことすらできないので一見すると劣って見えるかもしれません。
しかし、2と違う点は
$-2x=-6$を与えられた時に、**自分の理解では解けないものであると自覚できる**ということです。
したがって、作業をする前に、
「自分は『移項すると**引き算されていたものは足し算に、足し算していたものは引き算に**になる』と考えていたため、この様な問題の解き方を知りません」と聞くことができます。
事前に聞くことができるので、無駄な作業時間を減らすことができています。

---

#### 4の理解の場合
等号(=)の性質上、**左辺と右辺に同様の操作をした結果が移項**であると考えているため、
$-2x=-6$を与えられた時でも

「xを求めたいが、$x$に$-2$がかけられている。
なので、左辺を$-2$で割り算したい。
であれば右辺も$-2$で割り算すれ良い」

$-2x\div-2=-6\div-2$
$x=3$

と、少し違う場面に遭遇した場合でも正しく解くことができます。

---

## まとめ
本質を理解することで、同じような場面でミスをしなくなったり、応用の幅が増えることは理解いただけたと思います。
「こういう時はAを使うんだよー」と言われても、なぜその時にはAを使う必要があるのかを理解すれば、
Aを使うべき場面、使わないほうがいい場面を理解できます。
Aを使わない方がいい場面がわかれば、他の良い方法を探そうとなります。

実際の現場では、指摘や説明などをそのまま鵜呑みにするだけで、本質を理解できる場面はそう多くないと思います。
レビュアーや上司が、懇切丁寧に本質を添えた指摘をしてくれれば良いのですが、世の中そういう人ばかりではありません。
「レビュアー・上司が本質を言ってくれないのが悪い！」と他人に期待するのはやめ、
「指摘で言いたいことの本質はなんだろう？」と考えてあげましょう。
また、「あなたの指摘はこういう意図ですか？」と、考えついた本質が合っているかを確認できる良いと思います。
もちろん、すべてのレビュアー・上司が気軽にそういうことが確認できるとは思っていませんが、
本質を理解しようとする癖をつけることで、表面だけの理解をしてしまうケースは減らせると思います。

また、レビュアーや上司の方々は
「自分の指摘は本質を説明できているか」
「指摘した相手は本質を理解できているか」
を意識してあげましょう。
本質を伝えるには、相手のレベルに合わせた説明が必要であり、すごく時間のかかることだと思います。
しかし、2の理解の人のように、間違えた状態でレビューに出され、なん往復もやり取りをしたり、
何度も同じような指摘をするよりは精神的にも、業務的にも辛くないと思います。
(中にはどれだけ口酸っぱく言っても理解してくれない人はいるので、そういう人は使い方を変えてあげましょう)