Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
私の異常なプログラミング教育
Search
YUMOTO Michitaka
October 20, 2017
Education
9
22k
私の異常なプログラミング教育
BPStudy#122 〜いかにプログラミングを学ぶか?プログラミング教育を考えるの発表資料です。
https://bpstudy.connpass.com/event/66418/
YUMOTO Michitaka
October 20, 2017
Tweet
Share
More Decks by YUMOTO Michitaka
See All by YUMOTO Michitaka
Short Introduction for Kysely
gothedistance
1
150
Dive Into Single Fetch
gothedistance
1
170
クラフトマンシップ(職人魂)を湾岸MIDNIGHTから学ぼう / Learn Craftsmanship from Wangan Midnight
gothedistance
0
240
プロ野球をデータモデリングしてみたら沼だった件 / Baseball ERD Modeling to be obsessed
gothedistance
2
740
フロントエンド開発スタイルの変遷と、私がFlutterにハマったわけ
gothedistance
8
12k
ITプロジェクトのはじめ方 / How to work around software project
gothedistance
27
150k
私がITプランナーを志すようになった理由、そして、目指していること / bpstudy142_why_i_wanna_be_a_it_plannner
gothedistance
1
840
ITプランナーの必要性を小一時間問い詰めたい / Why We need IT-Planner.
gothedistance
0
13k
IT企画をちゃんとやりたい#01 ガイダンス資料 / IT Planning do well_01
gothedistance
0
6.5k
Other Decks in Education
See All in Education
社外コミュニティと「学び」を考える
alchemy1115
2
150
日本の教育の未来 を考える テクノロジーは教育をどのように変えるのか
kzkmaeda
1
190
ANS-C01_2回不合格から合格までの道程
amarelo_n24
1
210
OJTに夢を見すぎていませんか? ロールプレイ研修の試行錯誤/tryanderror-in-roleplaying-training
takipone
1
120
Virtual and Augmented Reality - Lecture 8 - Next Generation User Interfaces (4018166FNR)
signer
PRO
0
1.7k
Open Source Summit Japan 2025のボランティアをしませんか
kujiraitakahiro
0
290
Data Physicalisation - Lecture 9 - Next Generation User Interfaces (4018166FNR)
signer
PRO
0
410
ビジネスモデル理解
takenawa
0
430
Case Studies and Course Review - Lecture 12 - Information Visualisation (4019538FNR)
signer
PRO
1
2k
FinOpsスキルの効率的な上げ方 #ochacafe
chacco38
1
170
Human-AI Interaction - Lecture 11 - Next Generation User Interfaces (4018166FNR)
signer
PRO
0
430
Gesture-based Interaction - Lecture 6 - Next Generation User Interfaces (4018166FNR)
signer
PRO
0
1.7k
Featured
See All Featured
We Have a Design System, Now What?
morganepeng
52
7.6k
Thoughts on Productivity
jonyablonski
69
4.7k
Producing Creativity
orderedlist
PRO
346
40k
Documentation Writing (for coders)
carmenintech
71
4.8k
Music & Morning Musume
bryan
47
6.6k
Measuring & Analyzing Core Web Vitals
bluesmoon
7
460
Unsuck your backbone
ammeep
671
58k
4 Signs Your Business is Dying
shpigford
183
22k
Testing 201, or: Great Expectations
jmmastey
42
7.5k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
30
2.4k
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
PRO
19
1.3k
YesSQL, Process and Tooling at Scale
rocio
172
14k
Transcript
ࢲͷҟৗͳϓϩάϥϛϯά ڭҭʹ͍ͭͯ YUMOTO Michitaka(a.k.a ͟͝ઌഐ) @gothedistance BPStudy#122
ࣗݾհ n 1979.11.12 東京⽣まれ ͪͳϠΫ育ち n マイメンはؗࢁণฏ n (株)クオリティスタートの代表⼾締役 n
ござ先輩とも呼ばれる n GoTheDistanceというブログの中の⼈ n ツイートの99%は野球の話 2
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
4 ϓϩάϥϛϯάڭҭΛ ࢝ΊΔ͜ͱʹͳͬͨ ͖͔͚ͬ
ͦΕҰ௨ͷϝʔϧ͔Β࢝·ͬͨ n ブログ仲間のSさん(えらいひと)からの連絡 n 毎年受講させている、F社の研修の学習効果が芳しくないと報告 があった。 n 学習カリキュラムを変える必要があると感じているけれども、 他社のものにどうこう⾔えない。 n
フリーランスで講師をやっている⼈に来てもらって、カリキュ ラムの作成を内製しながら改善するやり⽅が良さそうだ。 n そんなことをやってくれるエンジニアで講義もできるような ⼈ってそうそういな・・・あっ(察し 5
正直、教育にはあまり興味がなかった 6 ⼊⾨書を書いた以上、後には引けない 1 最⼤の理由が「独習Python⼊⾨」という本を出したこと。 プログラミングの⼊⾨書を書いておいて、教える仕事から 逃げるのはバツが悪くて嫌だった。 2 参考までに⾒せてもらったF社の研修資料を⾒て、これじゃ わかるもんもわかんねーわ、おもんねーわと思い、⾃分なら
もっと上⼿に教えられる⾃負が芽⽣えた。 教えることはあまり好きではないけど、得意なことでした。 得意なことを活かして「まずは塁に出る」ことに決めました。 3
7 PythonΛ࠾༻ͨ͠ཧ༝
Javaはプログラミングの⼊⾨に不向き 8 現場がJavaだからっていうの辞めて〜 1 Javaは「オブジェクト指向が使える⼈」のための⾔語です。 これからオブジェクト指向を学ぶ⼊⾨者には無駄にハードルを 上げる格好になります。これが最⼤の理由です。 2 Javaは環境構築が他の⾔語に⽐べて⾯倒です。IDEを⼊れて ボタンを押せば実⾏できる時代ですけど、コンパイルを説明
する時にはやっぱり環境の話が必要。 クラスローダーとか、ヒープやスタックとか、プリミティブ とオブジェクトとか、初学者には無駄に重たい概念が多い。 3
こういう説明をして実際に提案した 9 「Python」でやらせて頂きたいです 1 Pythonは型宣⾔が不要で、記号もかなり少ない⾔語です。 その分「可読性」が問われる⾔語なので、コードの意味を 考えるのにプラスに働くと考えています。 2 PythonはJavaに⽐べて、Webアプリの構築がとても簡単に 実装できます。⾔語の⽂法や設計思想等を理解することが
⽬的ではないので、実装⼿段はシンプルなのが望ましい。 Google三⼤⾔語(Java,C++,Python)に挙げられるほど、特に 海外では⼈気のある⾔語です。マイナーではございません。 3
10 ϓϩάϥϛϯάͷֶश ϋʔυϧ͕ͳͥߴ͍ͷ͔
抽象と具体の⾏間が広いから 11 変数 制御構造 データ構造 関数 オブジェクト クラス設計 ⾏間の広さを独習で埋めるのは難しい 抽象的な部分
具体的な部分 Θ͔ΒΜ
ハードルその1〜繰り返し〜 12 n プログラミングの基礎⽂法は⼤別すると2つ n 「条件分岐」と「繰り返し」 n 条件分岐は「ここに⼊る」というのが直感的にわかる n 繰り返しで詰まる理由
n ॲཧ͕Կ܁Γฦ͞ΕΔ͜ͱ͕ɺίʔυ͔ΒಡΈऔΕͳ͍ n 何回もprintって書いてあるわけじゃないのに、何度もprint が実⾏される所が腑に落ちるまで時間がかかる。
ハードルその1〜繰り返し〜 13 n XIJMFจGPSจΑΓ͍͠ n forは配列を回せば勝⼿に繰り返す n while⽂は「開始条件」と「終了条件」を、同時に満たす条 件を記述する必要があるので頭を使う。 n
繰り返しが始まない or 無限ループに遭遇することが多い n 条件式に設定した変数が再評価されることがなかなか頭に⼊ らない。
ズンドコきよしとかいう試⾦⽯ 14 n これをwhileで実装できれば繰り返しが腑に落ちる⼈多い。
ハードルその2〜データ構造〜 15 n 配列ぐらいから怪しくなる n 1つの変数に1つの値(スカラー値)は⼤丈夫 n 連想配列と配列の区別がピンとこない⼈が出てくる n データ構造を意識させるには⼿書きがベスト
n 実際に紙に書いてもらうとイメージが喚起される n 連想配列の配列がクリアできれば、もう⼤丈夫。 n ίʔυͷࣸܦ͚ͩͰຒΊ͖Εͳ͍ͷ͕͜ʔΏʔॴ
ハードルその3〜オブジェクト指向〜 16 n ͍ͭ͜ʹدΓఴ͏ϝϦοτ͕·ͣΘΒͳ͍ n クラスを作って抽象化できる有り難みが感じられない n グローバル汚染が〜と⾔ってもダメ。汚染されたことがない イノセントワールドには届かない。 n
if⽂のネストの⾟みは視覚的に伝わるので、そこを排除する ⽅向でイメージ戦略で⼊る。 n オブジェクト指向はあくまで ⽅法論の⼀つであるという⽴ ち位置が重要。哲学や求道の ⽅向性に⾏くと無事死亡。
ハードルその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)に出ると前提知識が増える。
18 Ͳ͏ͬͯࢥߟΛཧ͢Δ ͖ͳͷ͔
機能を作るには順番に考えるしかない 19 処理内容の順番をどう表現するか? 1 フローチャート、正直好きじゃないです。ですが、機能を 実装するには「どういった処理を、どの順番で実⾏するか」 ということを考え無くてはならない。 2 いきなりコードを書くと⼿戻りが多いのはわかったけれど、 じゃあどうやって⾃分の考えを表現していいかわからない。
そういう声が多かった。 箇条書きで書くと抽象度が⾼すぎる。フローチャートだと、 粒度が細かくなりすぎてわけがわからなくなる。難しい。 3
機能を作る時に何を考えているのか 20 ϒϥοΫ ϘοΫε 検索項⽬ 検索結果 ü 検索項⽬を元に検索結果が作られる ü その中⾝はブラックボックス状態
1. 検索項⽬を取得する 1. 顧客コード 2. 顧客名 3. 担当者 2. 検索条件を組み⽴てる 3. 検索を実⾏する 1. 1件もない場合は空の リストを返す 2. 存在する場合は以下 の検索結果を返す
感覚的にはゴルフのアプローチに近い 21 ⼤きな⽬標を、⼩さな課題に分解する 1 ゴルフのコースマネジメントに近い気がしています。 ホールアウトするまでの戦略をどう作るか、コースの ⾒取り図を元に攻略するあの感覚です。 2 やったことがないものは、ティーショットをとりあえず 打つしか無い。経験が増えてくると、コースの全体像が
⾒えて、ピンまでの距離が明確になり選ぶ⼿段も正確に。 バックキャスティングの習慣を⾝につけてもらうこと、 条件に落とし込んでYES/Noでコースマネジメントを 作ること。この2点をコーチングすることが重要。 3
22 ࠷ޙʹ͓͓͖͍͑ͯͨ͠ ϓϩάϥϛϯάͷֶशۂઢ
23
24 GAME SET!! Thank You!!