リモートでPythonデータ分析研修をやりました

# 概要

社内の新卒研修でpythonの研修を2020年4月に実施しましたので、それにあたって検討したあれこれをまとめました。
同じようなことをやろうとしている人の参考になれば。

以前やった[Pythonを使ったデータ分析の研修について](https://qiita.com/calderarie/items/081b51613ab6cce58544)も興味があればどうぞ。

# 勉強会の概要

## 参加者

弊社の新入社員が対象。
文理、プログラミング経験はばらばら。

## 目標について

研修を行う目的は、Pythonを使ったデータ分析業務を遂行できるようになることです。ただこれは努力目標みたいなところがあるので、もう少しやるべきことを具体化するために行動目標と達成目標を設定しました。

行動目標として「講義内で扱う基本的な機能を理解し、それらを組み合わせた発展的な実装を自分自身で試行錯誤しながら実装する」を、達成目標として「指定した課題をクリアする」としました。


## 環境

今回は、Anacondaを利用することとしました。

アカウントがあれば初心者でもすぐに利用できるgoogle colabも検討しましたが、ただ触ってみることが目的ではなく実業務で使うことを考えると、自分でインストールし環境を見える化した方が理解が深まると考えたためです。


## 研修カリキュラム

以下のようなコンテンツで進めました。

あまりちゃんと確認はしてないですが、自分が受験した時の主観では、Python3エンジニア認定基礎試験の4~5割位は取れるコンテンツは網羅していると思います。

なお、データ分析や機械学習の実践については別の研修で扱っているため、ここでは取り扱っていません。（こちらも僕の担当なので、そのうち記事にします）

1. オリエンテーション
    - 研修の概要
        - 進め方や受講者側が意識すべきこと
    - データ分析におけるPythonの利用イメージ
    - Pythonの特徴について
    - Python環境について
    - プログラミング時に意識すべきこと
1. pythonの基礎
    - 型(int, float, str, bool)
    - データ構造(list, dict, tuple)
    - 構文(if, for, try, def)
    - ファイル入出力
    - クラス
    - モジュール
    - 課題
1. 演習
    - 実データ収集と可視化
    - 結果の発表


## 準備時に考慮したこと

- 「なぜPythonを使うのか」「なぜPythonなのか」について、業務での使い方を交え、最初に理解してもらうようしました
    - 具体的なイメージがあった方がモチベーションも上がるという考え
- 後述するレビュー観点にあるような内容ですが、プログラミング時に意識してほしいことを明記しました
    - 業務でプログラミングする以上、一過性のものではなく、長期的な運用を見据え、最低限可読性高い必要があるため
- 講義内で全てを説明するのは困難であるため、サンプルコードを多めに添えて、動かしながら理解してもらうことを意識しました
    - また、関連書籍を経費で購入・配布し、利用してもらいました

- データ分析をするために必要な知識を身に付けることが目的なので、不要な知識は極力削りました
    - 例えば、tryやassertは有用ですが、特に初心者は混乱の元になると思いましたので、紹介程度に留めました
    - また、クラスも扱っていますが、最低限の情報に留めています
- 多くの知識を詰め込むというより、重要な基礎をちゃんと理解してもらうことと色々試行策度する力を身に付けてもらうことを重視しています
    - 課題内容の半分程度は、調べることを前提にした内容となっています
    - 簡単なサンプルコートは提示しますが、直接的な回答は示さず、リファレンス等を参考にしないと解いてもらいます
    - 課題の中でデータ分析でほぼ必須となるpandasやmatplotlibを学習してもらいます
- 最終的な目的は業務で使える水準に達することなので、実業務を想定した演習を行いました
    - 実際の使い方のイメージをつかんでもらいます
    - データ分析に関する色々な話は本研修では取り扱っていません

## 進め方で工夫したこと

- コロナで現地開催するのは現実的でないご時世なので、研修自体はオンラインビデオ会議ツールを使って、リモートにて行いました
    - オンサイトと異なり、反応から理解度がどの程度か分かりにくいので、適宜質問を促す等する
    - 資料自体を見やすいよう大きめのフォントで簡素に作成する
- 資料に添えたサンプルコードを実際に実行しながら、各機能について説明しました
- Slackで質問用チャンネルを用意し、講義中・講義外共に質問しやすい仕組みを用意しました
- また、各人の理解度の把握した上での個別指導をするため、個別に面談を行い、解いてもらったプログラム課題を見ながら、口頭試問やコードレビューを行いました
    - この指導による効果は大きいですが、非常に時間がかかるので、改善ポイントでもあります

## 課題のレビュー方針について

研修時には課題を設けましたが、そのレビュー時に具体的に何を確認するかは明確に定めました。これは、以下の[Googleのコードレビューガイドライン](https://google.github.io/eng-practices/review/)を参考にしております。

> - 設計: 適切に設計されているか
> - 機能: 想定通りの挙動をするか
> - 複雑さ: シンプルになっているか
> - テスト: 適切な自動化テストがあるか
> - 命名: 変数・クラス・メソッドなどに明確な名前がつけられているか
> - コメント: 適切なコメントがつけられているか
> - スタイル: コーディングスタイルに従っているか
> - ドキュメント: 関連するドキュメントが更新されているか



# 資料の抜粋

一部、コンテンツを公開しようと思います。

（全編公開でもいいのですが、口頭説明が前提の資料となっており、あまり十分なものになってないと思うのでやめておきます。）

## 研修を受ける際の心構え

- まず手を動かそう
    - 案ずるよりも産むが易し
    - 失敗を恐れるな
    - 試行錯誤の経験が後々に活きてくる

- 考えて分からなければ調べる・質問する
    - 初心者が困るポイントは、大体誰かが解決している
    - コピペで終わるのはNG　原因と解決法をしっかり理解しよう
    - どうしても解決できなければ質問する 周りの力を借りるのも時には必要
    - トラブル解決時の勘所を身に付けていく

- 自立的かつ自律的に取り組む
    - 本講義内容で扱うのは、あくまで最低限のスキルレベル
    - 教わるだけでなく学び取る姿勢が大事
    - 終わったら、更に気になる分野を学習してみよう

## プログラミング時に意識すべきこと

- 質の高いプログラムを意識する
    - 「動けばいい」精神は悪
    - プログラムは、一から書き上げるよりも、読んだり変更を加えることの方が多い
    - 品質が低いプログラムは、後々の自分や周りへの生産性に影響を及ぼす

- プログラムの品質に関する観点
    - [Googleのコードレビューガイドライン](https://google.github.io/eng-practices/review/)


# 反省点

- オンライン会議特有のコミュニケーションが不得手でした
    - オンサイトでは生で感じられる反応ですが、オンラインでは積極的に反応を確かめないといけないです
    - また、こちらから届けられる情報も、(やり方にもよりますが)画面共有の情報と音声だけなので、気を使う必要があります
    - これは講師側の都合ですが、1人でずっと喋り続けなければならない状況は精神的に疲弊します

- 質問しやすい仕組みづくりはしましたが、そもそも質問しやすくなるよう心理的安全性を構築することは課題です
    - 特に入社からリモートでしか接してない人との関係性の構築ってどうやるの？と感じてます
    - 個別の面談はその対策の1つになるかなとは思います

- 初心者がつまずきやすいトラブルシューティングが足りませんでした
    - 経験を積むと何となくわかってくる勘所をどう教えるかは未だに悩ましいです
    - 苦労して学んでもらうというのも一つの手段ですが、それではとても解決できない部分もあるので、どこまで自分でやるのかの基準を作る必要があるかと思いました
- 複雑な課題を解くための考え方が不十分でした
    - 簡単な処理を組み合わせ、複雑な処理を実現する課題を設けましたが、初心者にとってハードルが高かったようです
    - プログラミングのロジックの考え方を身に付ける意図ですが、他の課題が調べながら進めることを前提にしていたこともあり、解き方が大分変わるためです
    - おそらく複雑なプログラムを読んでもらって簡略的な図に落としてもらうなどの作業をしてもらい、どのようにプログラミングを進めていくかを身に付けてもらう必要があったかと思います

# 最後に

何度目かの自分が講師として研修をする機会でしたが、初めてのオンラインでの実施だったので苦労することが多かったです。

別の講義も担当していますので、そのことについても、いずれ記事しようと思います。