2017年10月20日にBPStudy#122〜いかにプログラミングを学ぶか?プログラミング教育を考えるが開催されました。
第1部は「子ども向けプログラミング教育」がテーマ(その1、その2、その3、その4) でした。
第2部は「大人向けプログラミング教育」で、クオリティスタート社のござ先輩と、Python学習プラットフォームのPyQチームに話してもらいました。
ござ先輩は今年の4月から企業のプログラミング初学者向けに研修を実施されていて、そこでの経験からお話いただきました。
資料は以下です。
気づいたらスライドのはてなブックマークが340を超えていてバズっていました(2017年11月13日現在)。さすがですね。
事業としてプログラミング研修を始めた経緯
- 他社の新人向けプログラミング研修の学習効果が芳しくないという相談を知人から受けた
- 独習Python入門――1日でプログラミングに強くなる! を2016年8月に出版していた
教えることは得意だが、自分としてはあまり好きではないこと
- 会社の事業戦略として、(本塁打でいきなり得点を狙いに行くのではなく)まずは得意なことで塁に出ることを考え、引き受けることにした
研修にどのプログラミング言語を使うか
Javaはプログラミングの入門に不向き
- オブジェクト指向が前提(オブジェクト指向が使える人のための言語)
- 環境構築が面倒(コンパイルの理解が必要)
- 重たい概念が多い(プリミティブ、オブジェクト、クラスローダー、ヒープ、スタックなど)
Pythonは入門向けに向いている
- 型宣言が不要で、記号が少ない。そのぶん可読性が問われる言語なのでコードの意味を考えるのにプラス
Webアプリの構築が簡単(Javaに比べて)
Webアプリは言語の文法や設計思想よりもまずは動かして学ぶことのほうが重要
Pythonは海外では人気
プログラミングの学習ハードルが高い理由
- 抽象的概念(変数、制御構造、データ構造、関数、オブジェクト、クラスなど)と、具体的概念(プログラムコード)の行間が広い。
- 行間の広さを独習で埋めるのは難しい
プログラミング学習のハードル
その1:繰り返し
- なんども繰り返すことが、コードから読み取れない(5回出力したいなら、5回printを書けばよいのでは。。と考えてしまう)
- while文はfor文より難しい
ズンドコきよし
- whileで実装できれば繰り返しが腑に落ちる人が多い
その2:データ構造
- 連想配列と配列の区別あたりから理解が怪しくなる
- 手書きで書いてもらうとイメージが喚起されて効果が高い(写経では埋められないところ)
その3:オブジェクト指向
- オブジェクト指向に寄り添うメリットが伝わらない
- クラスを使う意味など
その4:行き過ぎた抽象化
- ライブラリの便利さが伝わらない
- WTFormは中身で実行されていることを知っている人にとってはとても便利。知らない人にとっては「ふーん」「あたりまえ」
どうやって思考を整理するのか
- どういった処理を、どの順番で実行するか
- どうやって自分の考えを表現してよいか分からない(「いきなりプログラムを書くのは戻りが多く良くない」というのは理解している)
- 箇条書きだと抽象度が高すぎる、フローチャートだと粒度が細かすぎる
機能を作る時に考えていること
検索処理の場合
検索項目を取得→検索条件を組み立てる→検索を実行する(検索結果により処理が分岐)
ゴルフのアプローチに近い感覚
- バックキャスティングの習慣を持たせる
プログラミングの学習曲線
- 粘り強く時間をかけて学び、覚醒することでいきなり実力がグンと伸びるのがプログラミング学習
まとめ(私の感想)
プログラミング初学者のハードルとなるポイントを的確にまとめていただきました。
ござ先輩の対面研修での経験からお話いただきましたが、オンラインでPythonを学ぶPyQにも組み込めそうなアイデアをもらうことができました。
このアイデアをもとに、プログラミング初学者のハードルを超えやすいようなコンテンツや仕掛けをPyQに入れていければとおもいます。
そして「プログラミングの学習曲線」は私も体験し、以下のような感じで相当苦しみました(もともと要領が良くないほうというのもあり)。
- 「この少しのことをするのに、なぜこんなに色々書かなくてはいけないのか?めんどくさい。自分には向かないのかも」と感じた
- いろいろな概念や要素があり、それらをどこでどう使うのか分からない
- なぜさまざまな技術があるのか分からない。プログラミング言語が複数あったり、データベースの種類がいくつもある意味もよくわからなかった
- 小難しそうな概念をすべて理解しきれない。理解しきれてないから不安になる
- 書いたコードは動いた。しかし苦労していろいろ修正した結果、読みにくいコードになっている
ござ先輩の話を聞き、PyQの参考になるヒントも得られ、過去の自分も振り返ることができ、有意義な発表でした。
ござ先輩ありがとうございました!
プログラミング教育をテーマに開催したBPStudy#122。おおとりは、PyQチームの発表です。