新人教育のススメ ～研修では教えるな！～

# はじめに
お疲れ様です。
日本総合システム株式会社 (NSS) の毛利と申します。

新人教育って難しいですよね。  
時間をかけて丁寧に指導したのに、なかなか成長してくれなかったり。  
その人のためを思って色々言っているのに、素直に受け止めてくれなかったり。。  
新人さんも、自分が何をわからないかがわからないので、どんな指導をすれば良いのか悩んでしまったり。。。  

NSSでは新人研修に力を入れており、入社前研修・OJTも含めると1年以上もの時間をかけて、教育を行っています。  
![研修計画](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3799996/87c8f976-4574-dca0-2079-616b77eff38a.png)


上記のカリキュラムは全て社内で実施しており、社員が講師業務を担当しています。  
私自身、2023・2024年度と2年にわたって講師を担当したのですが、その中で教育に関する様々な気付きがありました。  
今回はその中から「研修では **"教える"** な！」というテーマで書いてみようと思います。  

# このコード、どう思いますか？
```c
    #include <stdio.h>

    int main(void) {
        printf("%d + %d = %d\n", 1, 1, 1 + 1);
    return 0;
    }
```
    
見ての通り、「1 + 1」の計算式および計算結果を、C言語で表示するプログラムなのですが…ツッコミどころ満載です。  
具体的には、以下のような指摘点があると思います。  
* インデントが崩れている。
* main関数について、戻り値を使う必要が無いのに、わざわざint型の戻り値を設定している。
* "1"を全てべた書きしている。(マジックナンバーになっている)

指導している新人さんが上記のようなコードを書いてきた場合、どのように指導していけばよいのでしょうか。  

:::note warn

上記の指摘点については様々な意見があると思いますが、
NSSでは可読性・効率性・保守性などを意識したコードが書けているかを重視しています。
"コードが動いているからOK"とするのではなく、「より良いコード」が書けるよう日々指導しています。
:::
<details><summary>(参考)NSS内の解答例</summary>

```c
    #include <stdio.h>

    void main(void) {
        int left_side_num = 1;
        int right_side_num = 1;
        printf("%d + %d = %d\n", left_side_num, right_side_num, left_side_num + right_side_num);
        return;
    }
```

</details>

# "教える"指導
以下のように、問題点と修正方法をそのまま伝えて直してもらうのが、ごく一般的な指導方法かと思います。  
* return行のインデントが崩れているので、1段階字下げしてください。
* main関数の戻り値は特に使用しないので、voidを設定してください。
* "1"をべた書きせず、左辺・右辺それぞれを変数に入れて、そちらを使用するようにしてください。

本記事ではこのような指導方法を、 **"教える"指導(=ティーチング)** と定義します。  

インデントのような、単なるルール・規約違反に該当する指摘であれば、ティーチングでも問題ありません。  
ですが、戻り値や"1"のべた書きについては、別に修正しなくてもコードは動くので問題無い…と、言えなくもないです。  
このような、「より良い成果物」にするための指摘の場合、ティーチングは適していないと考えています。  

人は、他人から教わったことはすぐに忘れてしまうものです。  
ティーチングでは直接答えを教えるので、その場では修正できても、定着させることができません。  
また、その課題に特化した答えを得ることに終始するため、ベースとなる考え方や応用方法を学びづらいです。  

新人教育の目的は、課題を解けるようになることではありません。(大事なことではありますが…)  
課題を解く中で、基礎となる知識・考え方・調べ方等を身に付けること、  
身に付けたテクニックを用いて、様々な成果物を高い品質で作成できるようになることが目的です。  
そのためには、"教える"指導をするのではなく、新人さんに **"考えさせる"** 必要があります。  

# "教えない"指導
ここからが本題です。  

新人さんに"考えさせる"ためには、 **"教えない"** 指導をする必要があります。  
これは、指導を放棄するという意味ではありません。  
直接答えを教えるのではなく、気づいてもらえるように誘導するのです。  
このようなアプローチのことを、本記事では **"教えない"指導(=コーチング)** と定義します。  

### "教えない"指導のポイント  
:::note info
**新人さんが自ら気づけるように、質問を重ねて誘導する。**
人は"教わったこと"は忘れやすいが、"自分で気づいたこと"は忘れにくい。  
**新人さんが、自分の言葉で説明してくれるまで待つ。**
"何がわからない"かがわからない場合も多いので、会話から糸口を掴んでいく。  
**指摘する際は、理由をはっきりと伝えて、納得してもらった上で修正してもらう。**
実際に手を動かして、成果物が改善されたことを実感してもらうことが重要。  
**色々な角度で質問して、深く理解できているかを確かめる。**
課題に特化した知識ではなく、根本となる考え方が身に付いているかを見る。  
**"自身の考えや意図を説明できるか"を重視する。**
アウトプットの訓練も兼ねている。  
**性格や能力は人によって異なるので、一律の成果を求めるのではなく、個人に合わせた指導をする。**
もちろん、最低限の基準はあるはずなので、そこを満たせるようにサポートはする。  
<font color="Red">**できている部分はしっかりほめる。**</font>
**一番重要。** 指導に熱中すると忘れてしまいがちなので、気を付ける。
:::

今回のケースでは、以下のような質問すると良いと思います。  
* returnで0を返していますが、この戻り値はどのように使われるのでしょうか？
    * 新人さんに、戻り値が活用されていない = 不要である、ということに気づいてもらえるとGood。
* 1 + 1ではなく、2 + 3の計算をしてほしくなった場合、どのように直しますか？
    * (新人さんは、"1"を一つずつ書き換えていくはずなので…) → 直す箇所が多くなってしまうと思いませんか？
        * 変数を使う、という発想にたどり着いてもらえるとGood。

もちろん、人によって能力は異なるので、想定した回答が返ってこないことはままあります。  
その場合でも、直接答えを教えるのではなく、根気強く質問を重ねていくことが大切です。

### "教えない"指導の難しさ
"教えない"指導は、指導する側にとっても難易度が高いです。
* 新人さんの理解度を少ないやり取りで見極める力
* 適度な塩梅で誘導し続けるための質問力
* 課題内容や、使用する技術に対する深い知識
* 新人さんがしっかり理解するまで根気強く向き合い続ける忍耐力

などの様々なスキルが求められます。  
また、コミュニケーションが重要なので、対面かつ十分な時間を取って指導できる環境も必要になります。  
いきなり指導方針を変更することは大変だと思いますので、まずは **質問する(対話する)こと** を意識すると良いでしょう。

NSSの新人教育では、"コーチング"というワードが一般的になる前から、"教えない"指導を重視していました。  
そのため、プログラムのレビューは基本的に対面かつ、会話しながら行いますし、研修期間もかなり長く取っています。  
時間をかけて、しっかり成長した新人さんを現場へ送り出すことができているので、顧客からの評価も高いです。  
今後もこの指導方針を継続し、会社全体の成長に繋げていこうと思います。

# おわりに
今回は、 **"教えない"** 指導方法についてご紹介しました。  
この考え方は、新人教育に限らず、教育全般に使えるものだと思いますので、ぜひ試していただければと思います。

今後も、教育に関する気付きを投稿していく予定ですので、本アカウントのチェックをお願いいたします。  
他にも、技術色の強い記事・コラム・体験談など様々な記事が揃っていますので、読んでいただけると嬉しいです。  
ご覧いただきありがとうございました。