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
21k
私の異常なプログラミング教育
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
0
42
Dive Into Single Fetch
gothedistance
1
93
クラフトマンシップ(職人魂)を湾岸MIDNIGHTから学ぼう / Learn Craftsmanship from Wangan Midnight
gothedistance
0
180
プロ野球をデータモデリングしてみたら沼だった件 / Baseball ERD Modeling to be obsessed
gothedistance
2
630
フロントエンド開発スタイルの変遷と、私がFlutterにハマったわけ
gothedistance
8
10k
ITプロジェクトのはじめ方 / How to work around software project
gothedistance
27
150k
私がITプランナーを志すようになった理由、そして、目指していること / bpstudy142_why_i_wanna_be_a_it_plannner
gothedistance
1
750
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
Kaggle 班ができるまで
abap34
1
190
お仕事図鑑pitchトーク
tetsuyaooooo
0
2.3k
Medidas en informática
irocho
0
270
LLMs for Social Simulation: Progress, Opportunities and Challenges
wingnus
1
100
week15@tcue2024
nonxxxizm
0
570
H5P-työkalut
matleenalaakso
4
36k
Adobe Analytics入門講座【株式会社ニジボックス】
nbkouhou
0
19k
Qualtricsで相互作用実験する「SMARTRIQS」実践編
kscscr
0
290
1106
cbtlibrary
0
410
XML and Related Technologies - Lecture 7 - Web Technologies (1019888BNR)
signer
PRO
0
2.5k
Blogit opetuksessa
matleenalaakso
0
1.6k
世界のオープンソースロボットたち #1
shiba_8ro
0
140
Featured
See All Featured
Teambox: Starting and Learning
jrom
133
8.8k
It's Worth the Effort
3n
183
27k
Large-scale JavaScript Application Architecture
addyosmani
510
110k
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
27
4.3k
[RailsConf 2023] Rails as a piece of cake
palkan
52
4.9k
Gamification - CAS2011
davidbonilla
80
5k
The World Runs on Bad Software
bkeepers
PRO
65
11k
Documentation Writing (for coders)
carmenintech
65
4.4k
Java REST API Framework Comparison - PWX 2021
mraible
PRO
28
8.2k
Facilitating Awesome Meetings
lara
50
6.1k
KATA
mclloyd
29
14k
Building a Modern Day E-commerce SEO Strategy
aleyda
38
6.9k
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!!