はじめに
こんにちは。22新卒の sakuma です。 先日ようやく新卒研修を終え、ソリューション事業本部ゲームアライアンス事業部プラットフォーム開発部デベロッパーリレーショングループに配属されました。
皆さんは、何かを学ぼうとしたとき、どのような方法を選択しますか。 一人で机に向かい、参考書を開くでしょうか。動画配信サイトで専門チャンネルを探すでしょうか。 一人で学ぶことにも十分な価値がありますが、モチベーションの維持が難しく、しばしば道半ばで挫折してしまいます。
私は研修期間を通して「チームでの学習の効果」について認識しました。 チームで課題に取り組むことでこうした問題を解決でき、うまく活用できれば一人では獲得できない学びを得られるとわかりました。
そこで、本稿では以下の点について私が考え、感じたことをまとめていきます。
- チームでの学習の効果
- チームが活かされる場面
- 研修でチームでの学習がうまく機能した理由
本稿を通してチームでの学習が読者にとって今後何かを学ぶ際の選択肢の一つとなればと思います。
研修について
今年の新卒研修は2ヶ月半にかけて行われました。 研修設計の詳細については こちらの記事 をご覧ください。 研修設計からもわかるとおり本年度の研修では随所で「他者と学ぶこと」を重視したようなプログラムになっていました。 全体として主に四部構成となっており、順番に以下のことについて学んでいきました。
- チームでの学習の前提を学ぶ
- 変わらないものを学ぶ
- 変わり続けるものを学ぶ
- 価値を共創することを体験する
こうした研修の中で確かに
- 自分ができないことを他者に開示する機会
- 他者に説明する/他者と共に理解する機会
- 学んだことが、他者に影響を与えられる機会
を与えられ、私は他者と学んでいく中で成長を実感できました。 その中でも本稿ではこの研修の中でたびたび行われたチームでの学習について述べます。
新卒研修におけるチームでの学習
一般にチーム学習とは、米国の経営学者ピーター・センゲが著書「学習する組織」において提唱した「5つの訓練法」の一つとして知られています。 本稿においては単に研修生を少人数のグループに分け、ある課題の解を求める過程を指します。 もちろんチームでの学習の中で自らの行動が変化していく場面は多くありましたが、誤解を避けるため本稿ではあえて「チームでの学習」とします。
新卒研修において、チームでの学習は次の手順で行われました。
- 5人程度の小さなグループに分けられる
- ひとつの課題が与えられる
- 課題に対してチームで議論を行いドキュメントにまとめる
チームでの学習によって有意義な議論を行うためには、まず自分の能力についてチームメイトに十分に周知する必要がありました。 すなわち、自分がわからない場合には自分ができないことを開示し、自分に知識がある場合にはチームメイトに説明し、共に理解していくことが大切でした。 このように、チームでの学習には上述した他者と学んでいく機会がふんだんに入り込んでいました。 こうした過程を繰り返すことによって、私は研修を通してさまざまな知識を習得・概念化できたと思います。
チームでの学習の効果
チームで学習するとき、課題の答えを自分一人で導けない場合は他者から教えてもらう形式になるため、当然メリットを享受できます。 特に自分一人で学習する場合と違い、対話形式で自分が理解していない部分を探れるため、文章や動画などの一方的な学習よりも効果は高いと考えられます。
しかし研修を通して、私はチームでの学習はそれ以上の効果があると実感しました。 以下では直接教えてもらうことだけではない、チームでの学習のメリットについて述べていきます。
心理的安全性の向上
特にオンラインで研修を受けているため、一人で机に向かっていると、わからない箇所が出てきたときに鬱々としてしまいがちです。 もしもチームでの学習なしで講義形式を取られていた場合、それらを自分で調べるか講義を止めて講師に尋ねるしかありません。 自分で調べていてはその間に講義を聞き逃してしまいますし、全体の流れを止める心理的ハードルは高いため、一人で抱え込んでしまいそうになってしまいます。 特にオンラインでの研修は人と話す機会が少なく関係の構築が難しいため、友人にこっそり聞くといった行動も取りづらいです。
チームでの学習によって、多くの研修生と会話することによってメンバーと面識を持つことができ、こうしたハードルの高さを改善することができました。 わからないことがあればチームメンバーに聞けば良い、という安心感を得る事ができました。 こうした状況だからこそ、半ば強制的にでも人と話す機会を与えられることのありがたさを実感しました。
習得済みの知識の活用と再学習
自分が持っている知識は活用せずに放置していると忘れて行ってしまうものです。 チーム学習では自分が持っている知識をメンバーに披露する機会があるため、それらを活用するきっかけにもなりました。 知識を再確認することで新たな気づきや学びを得ることもできました。
私が自分の知識をメンバーに説明した機会の一つとして、以下のような正規表現の課題がありました。
有効なパスワードとマッチする正規表現を答えなさい ただし、有効なパスワードとは以下の条件を満たす文字列のことである
- 小文字 (
a
,b
, …,z
)、大文字 (A
,B
, …,Z
)、数字 (0
,1
, …,9
) だけで構成される- 8 文字以上、20 文字以内である
- 小文字、大文字、数字がそれぞれ 1 文字以上含まれる
こちらの問題は先読み条件を利用して次のように回答できます。
var regexp = /^(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])[a-zA-Z0-9]{8,20}$/;
先読み条件について本稿では詳しく述べませんが、重要な特徴として、マッチした場合にはそのことだけを確認し実際にはその文字列の先頭の位置とマッチするというものがあります。 上記回答はこの特徴を利用して文字列の中に各種文字が1文字以上含まれているか確認していました。
私は正規表現についてある程度知識を持っていたため、解答が公開された後にチームメイトに説明する役回りをしていましたが、説明の途中で先読み条件のマッチ位置に違和感を感じました。
先読み条件のマッチ位置が該当文字列の最後尾位置だと勘違いしていたため、(?=.*[a-z])(?=.*[A-Z])(?=.*[0-9])
によって文字数が稼がれ、[a-zA-Z0-9]{8,20}
では適切に文字数制限できないと考えてしまったのです。
そこで再度調べ直し、先読み条件のマッチ位置に関して正しい知識を得ることができました。
私自身は解答を見たときには納得したつもりになっていましたが、改めて人に説明することで違和感に気づく事ができました。
このように他者に説明することによって自分の理解が深まるだけでなく、認識の間違いに気づき、調べ直すきっかけを得られました。
チームでの学習の効果を高める活発な議論
前章において、チームでの学習のの効果について述べましたが、こうした効果が十分に発揮されるにはチーム内の議論が活発になり、多くのメンバーが発言し合う必要があります。 ところが、全ての課題においてチームメンバーの議論が活発になったわけではありませんでした。 そこで本章では活発な議論が発生した場面、及びあまり効果を発揮しなかった場面について述べます。
活発な議論が発生した場面
全体としてアルゴリズムを考える課題では活発な議論が生まれ、チームでの学習が非常に活きたと感じました。 ある問題に対する回答は一通りではない上に、各解法には明らかな優位点があったり、トレードオフの関係があるからです。 チーム内で単に回答を共有し合うだけでなく、それぞれがどういった場面で利用されるか、そもそもアルゴリズムをどのように実装するかなど、課題を中心として様々な話題へ展開でき、非常に有意義な時間を過ごせました。 与えられた課題の例を以下に示します。
$n$ 枚のカードに、整数がそれぞれ書かれています。 $i$ 枚目には $a_i $が書かれています。( $1 \leq i \leq n$ )。この中からちょうど$3$まいのカードを重複を許して選ぶ方法は全部で $n^3$ 通りありますが、この中でカードに書かれた整数の和が $k$ になるような場合の数を求めてください。
ただし、以下の制約を持つ。
$3 \leq n \leq 3000, $ 整数
$1 \leq k \leq 1000000000, $ 整数
$1 \leq a_i \leq 1000000000, $ 整数
まず、この問題にはいくつもの解法があります。 さらに最も簡単な方法として全探索によって解を求められるため、アルゴリズムに関する知識がなくとも問題自体には正解でき、成功体験を得られました。 しかし、この解法は時間計算量が$O(n^3)$のため、$n$が非常に大きく計算時間の制約が厳しい場合には使い物になりません。 こういった場合にはデータをうまくキャッシュして時間計算量を抑える必要があります。 こちらの問題では、効率の良い解答は時間計算量が$O(kn)$であるため、回答を思考する中でアルゴリズムのパワーを再確認することもできます。
このように、課題をさまざまな観点から解いたり、最適な方法を探求していくような課題においては自らの創造性やひらめきが重要となる課題ではチームのメンバーも生き生きとしていたように感じます。
活発な議論があまりできなかった場面
一方で以下のような課題においては、私たちの班ではあまり活発な議論が行われませんでした。
- gRPCのプロトコルバッファの仕様と例を探して、言語非依存のプログラム的な通信を行うことができることを納得しよう。
- gRPCのレスポンスコードを確認しよう。
- gRPCのレスポンスコードと、HTTPのレスポンスコードの対応を見よう。
gRPCとはProtocol Buffersというスキーマ記述言語を利用してプロトコルを記述し、各言語に用意されているライブラリを利用して、各々が解釈可能な形式に変換することでサーバとの通信を可能にする技術です。 こちらの課題は明確な回答がなく、チームメンバーが納得してしまえばそれ以上話すことがなくなってしまうという状況が生まれてしまいました。 もちろんRESTfulAPIやGraphQLとの比較をするなどして更なる発展的な議論は可能ではありましたが、アルゴリズムの時ほど盛り上がりを感じませんでした。 それらはあくまで「設計の意図を読み取る」ことが目的であって、「自分の創造性を発揮する」場面ではなかったためだと思います。
チームでの学習を有効に活用するために
前章に示したように、その活用が限定的であった場面もありましたが、全体としてはチームでの学習が非常に有効に機能した研修であったと思います。 しかし、どんなメンバーであってもチームでの学習を始めれば突然有効に機能するわけではないと感じます。
学生時代、私たちは当たり前のようにチームでの学習していました。 例えば理科の実験などでは小さな班に分けられ、各自学習する形式が取られていた方も多いでしょう。 そういった中で、チームでの学習はどの程度機能したでしょうか。 私の場合は有効な場面はそう多くありませんでした。 課題に興味を示していないメンバー、一人で理解して他のことを始めてしまうメンバーなど、せっかく集まったのにも関わらずそれを活かせない環境を何度も目の当たりにしました。 思い返してみると、こうした環境になってしまった原因は以下のようなものだと感じます。
- 共通の目標を抱えていない
- モチベーションが低い
小中高の学生時代は授業は必要だから受けているというスタンスの方が多かったように感じます。 そういった中では各々の目標は当然異なり、まとまりのない学習になってしまいました。
一方でDeNAの研修では、初めにDeNA Quarity及びDeNA Engineer Qualityを学んだことによって、多くのメンバーがコトに向かう重要性に気づき、失敗含めその学びをオープンにしながら共に学習していく姿勢を持ち一定のモチベーションを持って取り組めたのではないかと思います。
終わりに
本稿では研修を通して感じたチームでの学習の有用性について述べました。 チームでの学習は多くの場面で有効であり、メンバーと議論していく中で大きな学びを得る事ができました。 チームでの学習を通して人との関わり合いが広がり、問題が起きても一人で抱え込む事なく解決できるようになりました。 一方でチームでの学習にも限界もあり、とりあえず集まれば効果を発揮するわけではないことを学びました。 今後何か学習する際には課題やチームの性質を精査して適切にチームでの学習を取り込んでいきたいと思います。
本稿を通じて多くの人がチームでの学習に興味を持ち、今後何か学習する際に周りを巻き込んで学習しようとする動きの一助となれば幸いです。
今後も引き続き、今年度の新卒エンジニア研修についてお伝えする記事を掲載予定です。 もしよろしければ、 DeNA 公式 Twitter アカウント @DeNAxTech をフォローして、今後の新卒エンジニア研修の記事もぜひご覧ください!
最後まで読んでいただき、ありがとうございます!
この記事をシェアしていただける方はこちらからお願いします。