$30 off During Our Annual Pro Sale. View Details »

私の異常なプログラミング教育

 私の異常なプログラミング教育

BPStudy#122 〜いかにプログラミングを学ぶか?プログラミング教育を考えるの発表資料です。

https://bpstudy.connpass.com/event/66418/

YUMOTO Michitaka

October 20, 2017
Tweet

More Decks by YUMOTO Michitaka

Other Decks in Education

Transcript

  1. ࢲͷҟৗͳϓϩάϥϛϯά
    ڭҭʹ͍ͭͯ
    YUMOTO Michitaka(a.k.a ͟͝ઌഐ)
    @gothedistance
    BPStudy#122

    View Slide

  2. ࣗݾ঺հ
    n 1979.11.12 東京⽣まれ ͪͳϠΫ育ち
    n マイメンはؗࢁণฏ
    n (株)クオリティスタートの代表⼾締役
    n ござ先輩とも呼ばれる
    n GoTheDistanceというブログの中の⼈
    n ツイートの99%は野球の話
    2

    View Slide

  3. BPStudyʹ͓͚Δొ൘ཤྺ
    n BPStudy#79(初登場 / 野球)
    n BPStudy#91(野球)
    n BPStudy#92(エンジニアの経営学)
    n BPStudy#100(野球)
    n BPStudy#103(野球)
    n BPStudy#108(⾃社紹介)
    n BPStudy#112(野球)
    n BPStudy#115(野球)
    n BPStudy#122(プログラミング教育)
    n BPStudy#124(野球)
    3
    /&8

    View Slide

  4. 4
    ϓϩάϥϛϯάڭҭΛ
    ࢝ΊΔ͜ͱʹͳͬͨ
    ͖͔͚ͬ

    View Slide

  5. ͦΕ͸Ұ௨ͷϝʔϧ͔Β࢝·ͬͨ
    n ブログ仲間のSさん(えらいひと)からの連絡
    n 毎年受講させている、F社の研修の学習効果が芳しくないと報告
    があった。
    n 学習カリキュラムを変える必要があると感じているけれども、
    他社のものにどうこう⾔えない。
    n フリーランスで講師をやっている⼈に来てもらって、カリキュ
    ラムの作成を内製しながら改善するやり⽅が良さそうだ。
    n そんなことをやってくれるエンジニアで講義もできるような
    ⼈ってそうそういな・・・あっ(察し
    5

    View Slide

  6. 正直、教育にはあまり興味がなかった
    6
    ⼊⾨書を書いた以上、後には引けない
    1
    最⼤の理由が「独習Python⼊⾨」という本を出したこと。
    プログラミングの⼊⾨書を書いておいて、教える仕事から
    逃げるのはバツが悪くて嫌だった。
    2
    参考までに⾒せてもらったF社の研修資料を⾒て、これじゃ
    わかるもんもわかんねーわ、おもんねーわと思い、⾃分なら
    もっと上⼿に教えられる⾃負が芽⽣えた。
    教えることはあまり好きではないけど、得意なことでした。
    得意なことを活かして「まずは塁に出る」ことに決めました。
    3

    View Slide

  7. 7
    PythonΛ࠾༻ͨ͠ཧ༝

    View Slide

  8. Javaはプログラミングの⼊⾨に不向き
    8
    現場がJavaだからっていうの辞めて〜
    1
    Javaは「オブジェクト指向が使える⼈」のための⾔語です。
    これからオブジェクト指向を学ぶ⼊⾨者には無駄にハードルを
    上げる格好になります。これが最⼤の理由です。
    2
    Javaは環境構築が他の⾔語に⽐べて⾯倒です。IDEを⼊れて
    ボタンを押せば実⾏できる時代ですけど、コンパイルを説明
    する時にはやっぱり環境の話が必要。
    クラスローダーとか、ヒープやスタックとか、プリミティブ
    とオブジェクトとか、初学者には無駄に重たい概念が多い。
    3

    View Slide

  9. こういう説明をして実際に提案した
    9
    「Python」でやらせて頂きたいです
    1
    Pythonは型宣⾔が不要で、記号もかなり少ない⾔語です。
    その分「可読性」が問われる⾔語なので、コードの意味を
    考えるのにプラスに働くと考えています。
    2
    PythonはJavaに⽐べて、Webアプリの構築がとても簡単に
    実装できます。⾔語の⽂法や設計思想等を理解することが
    ⽬的ではないので、実装⼿段はシンプルなのが望ましい。
    Google三⼤⾔語(Java,C++,Python)に挙げられるほど、特に
    海外では⼈気のある⾔語です。マイナーではございません。
    3

    View Slide

  10. 10
    ϓϩάϥϛϯάͷֶश
    ϋʔυϧ͕ͳͥߴ͍ͷ͔

    View Slide

  11. 抽象と具体の⾏間が広いから
    11
    変数
    制御構造
    データ構造
    関数
    オブジェクト
    クラス設計
    ⾏間の広さを独習で埋めるのは難しい
    抽象的な部分 具体的な部分
    Θ͔Β΁Μ

    View Slide

  12. ハードルその1〜繰り返し〜
    12
    n プログラミングの基礎⽂法は⼤別すると2つ
    n 「条件分岐」と「繰り返し」
    n 条件分岐は「ここに⼊る」というのが直感的にわかる
    n 繰り返しで詰まる理由
    n ॲཧ͕Կ౓΋܁Γฦ͞ΕΔ͜ͱ͕ɺίʔυ͔ΒಡΈऔΕͳ͍
    n 何回もprintって書いてあるわけじゃないのに、何度もprint
    が実⾏される所が腑に落ちるまで時間がかかる。

    View Slide

  13. ハードルその1〜繰り返し〜
    13
    n XIJMFจ͸GPSจΑΓ೉͍͠
    n forは配列を回せば勝⼿に繰り返す
    n while⽂は「開始条件」と「終了条件」を、同時に満たす条
    件を記述する必要があるので頭を使う。
    n 繰り返しが始まない or 無限ループに遭遇することが多い
    n 条件式に設定した変数が再評価されることがなかなか頭に⼊
    らない。

    View Slide

  14. ズンドコきよしとかいう試⾦⽯
    14
    n これをwhileで実装できれば繰り返しが腑に落ちる⼈多い。

    View Slide

  15. ハードルその2〜データ構造〜
    15
    n 配列ぐらいから怪しくなる
    n 1つの変数に1つの値(スカラー値)は⼤丈夫
    n 連想配列と配列の区別がピンとこない⼈が出てくる
    n データ構造を意識させるには⼿書きがベスト
    n 実際に紙に書いてもらうとイメージが喚起される
    n 連想配列の配列がクリアできれば、もう⼤丈夫。
    n ίʔυͷࣸܦ͚ͩͰ͸ຒΊ͖Εͳ͍ͷ͕͜ʔΏʔॴ

    View Slide

  16. ハードルその3〜オブジェクト指向〜
    16
    n ͍ͭ͜ʹدΓఴ͏ϝϦοτ͕·ͣ఻ΘΒͳ͍
    n クラスを作って抽象化できる有り難みが感じられない
    n グローバル汚染が〜と⾔ってもダメ。汚染されたことがない
    イノセントワールドには届かない。
    n if⽂のネストの⾟みは視覚的に伝わるので、そこを排除する
    ⽅向でイメージ戦略で⼊る。
    n オブジェクト指向はあくまで
    ⽅法論の⼀つであるという⽴
    ち位置が重要。哲学や求道の
    ⽅向性に⾏くと無事死亡。

    View Slide

  17. ハードルその4〜⾏き過ぎた抽象化〜
    17
    n WTFormsが理解できるまで相当時間がかかった。
    n WTFormsはHTMLのフォームを抽象化して便利機能が沢⼭ある
    ナイスなライブラリです。
    n HTMLのフォームを表現しているのが伝わりにくかった。
    n 苦戦したのが「form.populate_obj(src,dest)」関数でした。
    n request.form[ʻkeyʼ]でデータが取れるのは伝わるが、WTFormsのクラスの
    オブジェクトとSQLAlchemyのオブジェクトがマッピングされて、値が⾃動
    代⼊される凄さが伝わるまで、時間を要した。
    n 多くのことを瞬殺してくれているおかげで、逆にわかりにくかった。
    n ⾏き過ぎた抽象化は、⿊魔術と区別がつかない。
    n Pythonの外(Web/DB)に出ると前提知識が増える。

    View Slide

  18. 18
    Ͳ͏΍ͬͯࢥߟΛ੔ཧ͢Δ
    ΂͖ͳͷ͔໰୊

    View Slide

  19. 機能を作るには順番に考えるしかない
    19
    処理内容の順番をどう表現するか?
    1
    フローチャート、正直好きじゃないです。ですが、機能を
    実装するには「どういった処理を、どの順番で実⾏するか」
    ということを考え無くてはならない。
    2
    いきなりコードを書くと⼿戻りが多いのはわかったけれど、
    じゃあどうやって⾃分の考えを表現していいかわからない。
    そういう声が多かった。
    箇条書きで書くと抽象度が⾼すぎる。フローチャートだと、
    粒度が細かくなりすぎてわけがわからなくなる。難しい。
    3

    View Slide

  20. 機能を作る時に何を考えているのか
    20
    ϒϥοΫ
    ϘοΫε
    検索項⽬
    検索結果
    ü 検索項⽬を元に検索結果が作られる
    ü その中⾝はブラックボックス状態
    1. 検索項⽬を取得する
    1. 顧客コード
    2. 顧客名
    3. 担当者
    2. 検索条件を組み⽴てる
    3. 検索を実⾏する
    1. 1件もない場合は空の
    リストを返す
    2. 存在する場合は以下
    の検索結果を返す

    View Slide

  21. 感覚的にはゴルフのアプローチに近い
    21
    ⼤きな⽬標を、⼩さな課題に分解する
    1
    ゴルフのコースマネジメントに近い気がしています。
    ホールアウトするまでの戦略をどう作るか、コースの
    ⾒取り図を元に攻略するあの感覚です。
    2
    やったことがないものは、ティーショットをとりあえず
    打つしか無い。経験が増えてくると、コースの全体像が
    ⾒えて、ピンまでの距離が明確になり選ぶ⼿段も正確に。
    バックキャスティングの習慣を⾝につけてもらうこと、
    条件に落とし込んでYES/Noでコースマネジメントを
    作ること。この2点をコーチングすることが重要。
    3

    View Slide

  22. 22
    ࠷ޙʹ͓఻͓͖͍͑ͯͨ͠
    ϓϩάϥϛϯάͷֶशۂઢ

    View Slide

  23. 23

    View Slide

  24. 24
    GAME SET!! Thank You!!

    View Slide