Lock in $30 Savings on PRO—Offer Ends Soon! ⏳
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
300
Dive Into Single Fetch
gothedistance
1
220
クラフトマンシップ(職人魂)を湾岸MIDNIGHTから学ぼう / Learn Craftsmanship from Wangan Midnight
gothedistance
0
280
プロ野球をデータモデリングしてみたら沼だった件 / Baseball ERD Modeling to be obsessed
gothedistance
2
810
フロントエンド開発スタイルの変遷と、私がFlutterにハマったわけ
gothedistance
8
13k
ITプロジェクトのはじめ方 / How to work around software project
gothedistance
27
150k
私がITプランナーを志すようになった理由、そして、目指していること / bpstudy142_why_i_wanna_be_a_it_plannner
gothedistance
1
910
ITプランナーの必要性を小一時間問い詰めたい / Why We need IT-Planner.
gothedistance
0
14k
IT企画をちゃんとやりたい#01 ガイダンス資料 / IT Planning do well_01
gothedistance
0
6.5k
Other Decks in Education
See All in Education
授業レポート:共感と協調のリーダーシップ(2025年上期)
jibunal
1
180
令和エンジニアの学習法 〜 生成AIを使って挫折を回避する 〜
moriga_yuduru
0
190
1008
cbtlibrary
0
120
2025年度伊藤正彦ゼミ紹介
imash
0
150
The knowledge panel is your new homepage
bradwetherall
0
220
ThingLink
matleenalaakso
28
4.2k
子どものためのプログラミング道場『CoderDojo』〜法人提携例〜 / Partnership with CoderDojo Japan
coderdojojapan
PRO
4
17k
Software
irocho
0
650
ロータリー国際大会について~国際大会に参加しよう~:古賀 真由美 会員(2720 Japan O.K. ロータリーEクラブ・(有)誠邦産業 取締役)
2720japanoke
1
750
東大1年生にJulia教えてみた
matsui_528
7
11k
The World That Saved Me: A Story of Community and Gratitude
_hashimo2
3
440
HyRead2526
cbtlibrary
0
170
Featured
See All Featured
Jamie Indigo - Trashchat’s Guide to Black Boxes: Technical SEO Tactics for LLMs
techseoconnect
PRO
0
31
4 Signs Your Business is Dying
shpigford
186
22k
Test your architecture with Archunit
thirion
1
2.1k
Measuring Dark Social's Impact On Conversion and Attribution
stephenakadiri
0
94
Facilitating Awesome Meetings
lara
57
6.7k
Winning Ecommerce Organic Search in an AI Era - #searchnstuff2025
aleyda
0
1.8k
Site-Speed That Sticks
csswizardry
13
1k
Everyday Curiosity
cassininazir
0
110
Google's AI Overviews - The New Search
badams
0
870
Believing is Seeing
oripsolob
0
15
Beyond borders and beyond the search box: How to win the global "messy middle" with AI-driven SEO
davidcarrasco
0
22
How Software Deployment tools have changed in the past 20 years
geshan
0
30k
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!!