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
Shuma Yoshioka
February 15, 2021
Education
0
110
ダブルスタンダードで挑むプログラミング学習 〜 高校生の為の学習手引
星槎国際高等学校での講義にて使用した資料。SpeakerDeckの仕様により文字が読みづらくなっている場合、ダウンロードして利用してください。
Shuma Yoshioka
February 15, 2021
Tweet
Share
More Decks by Shuma Yoshioka
See All by Shuma Yoshioka
HTTPを喋ってみよう
s64
0
130
シェルスクリプト簡単レシピ: 計算機を作ろう
s64
0
190
対話型シェルスクリプトを作ってみよう
s64
0
300
バッチ処理をしてみよう
s64
0
71
ショートカットキーの世界
s64
0
170
スクリーンショットを極めよう
s64
0
150
予約実行するプログラム
s64
0
180
"データの種類" という概念
s64
0
130
Hello JavaScript! / JavaScriptことはじめ
s64
0
380
Other Decks in Education
See All in Education
ニュースメディアにおける生成 AI の活用と開発 / UTokyo Lecture Business Introduction
upura
0
230
1030
cbtlibrary
0
340
複式簿記から純資産を排除する/eliminate_net_assets_from_double-entry_bookkeeping
florets1
0
300
Sähköiset kyselyt, kokeet ja arviointi
matleenalaakso
1
18k
HCI Research Methods - Lecture 7 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
850
Use Cases and Course Review - Lecture 8 - Human-Computer Interaction (1023841ANR)
signer
PRO
0
870
1216
cbtlibrary
0
270
Informasi Program Coding Camp 2025 powered by DBS Foundation
codingcamp2025
0
150
2024年度秋学期 統計学 第12回 分布の平均を推測する - 区間推定 (2024. 12. 11)
akiraasano
PRO
0
120
生成AIと歩むこれからの大学
gmoriki
0
920
1127
cbtlibrary
0
180
BrightonSEO, San Diego, CA 2024
mchowning
0
120
Featured
See All Featured
Fantastic passwords and where to find them - at NoRuKo
philnash
51
3k
Side Projects
sachag
452
42k
Creating an realtime collaboration tool: Agile Flush - .NET Oxford
marcduiker
27
1.9k
Testing 201, or: Great Expectations
jmmastey
41
7.2k
Building Your Own Lightsaber
phodgson
104
6.2k
CoffeeScript is Beautiful & I Never Want to Write Plain JavaScript Again
sstephenson
160
15k
RailsConf 2023
tenderlove
29
1k
The Success of Rails: Ensuring Growth for the Next 100 Years
eileencodes
44
7k
YesSQL, Process and Tooling at Scale
rocio
171
14k
Helping Users Find Their Own Way: Creating Modern Search Experiences
danielanewman
29
2.4k
ピンチをチャンスに:未来をつくるプロダクトロードマップ #pmconf2020
aki_iinuma
114
50k
Designing Experiences People Love
moore
139
23k
Transcript
令和3年2⽉ 星槎国際⾼等学校 ⼋王⼦学習センター プログラミングゼミ 合同会社キガニックス 吉岡 ⾼校⽣の為の学習⼿引 ダブルスタンダードで挑む プログラミング学習
※ この領域はスピーカーノート機能の代替です。当該機能に対応していないビュアーでも後⽇受講者各⾃で講義内容 を振り返り可能にする⽬的で確保しています。 講師は基本的にここに記されている内容を話しているので、講義中に無理にメモを取ったり、プロジェクション中にこ の領域を無理に読もうとする必要はありません。 プロジェクションされるスライドは お⼿元のデータと同じ内容です links.kiganix.com/2021-02-15_learn_with_doublestandard
プログラミングを学習中の⽅からたまに頂く質問として「何を学習すればアプリを作れるか?」「あとどのくらい学習 してから始めればいいですか?」などがあります。 Q. どこまで勉強して始めればいい?
この質問について、吉岡としては「明確なゴールはないので今始めればいい」と答えるようにしています。 A. 勉強しながら始めればいい
ソフトウェアエンジニアリングに関わる領域はとても広いものです。これらは⼤学でも独⽴して存在する領域で、4年 間掛けて専攻する場合もあります。 また多くのプログラムというのは商業的な⽬的で作るものですから、なんらかの有限リソースを消費しながら運⽤しま す。実務ではその考慮も含まれますから、それぞれを完全にマスターするのは途⽅も無い時間が掛かるでしょう。 • ソフトウェア⼯学はかなり広い • 計算機科学もかなり広い • ビジネスやUIデザインも⼊れるとまるで無限
→ “全てのすべて”を学ぶには何年も掛かる
たとえばWebサイトやWebアプリの開発を考えてみます。まずはブラウザ上でデータを表⽰する⼿段としてマークアップ⾔語や スタイルシート⾔語の知識が必要です。ここにインタラクティブな機能を与えるJavaScript等のクライアント技術、これらの データを⽣成したり制御するバックエンド側の技術などがあります。 通常アプリケーションではデータを保管する必要がありますから、データベース技術等の知識は事実上必須です。さらにこれら が実⾏される環境の知識が何かしらは必要でしょう。 技術的な部分が解決されていても、それを⼀般のユーザに使ってもらうにはプロダクトデザインなどの知識が必要になるかもし れません。 • マークアップ技術(HTML +
CSSなど) • クライアント技術(JavaScriptなど) • バックエンド処理(PHP, Java, Ruby, etc...) • データストア技術(MySQL, PostgreSQL, etc...) • ホスティング部分(Linux系OSやPaaS) • UIデザイン • 運転資⾦を稼ぐビジネス Webサイトを作るには?
スマートフォン向けアプリ、具体的にはiOSやAndroidをはじめとする環境向けにアプリケーションを作る場合、それぞれの環境 ごとに考慮が必要と考えたほうがよいでしょう。こういった制約はWebアプリケーションにも無いわけではありませんが、モバ イルアプリでは特に顕著です。 それぞれの環境には技術的制約があり、機能の検討をする上では各環境で実現可能な範囲の考慮が必要です。通常、アプリケー ションとしては完全に別々のプログラム(コード)として同じ振る舞いを⽰すアプリを開発することになります。差異を吸収し 単⼀のコードでアプリを開発するツールもありますが、常時利⽤される程成熟したジャンルではありません。 • 各OSに適した⾔語(SwiftやKotlin) • 各OS固有の仕様や制約
• 各OSにおける画⾯の構築⽅法 • 各OSにおける機能の呼び出し⽅ • バックエンド処理 • ホスティング部分 • データストア技術 • UIデザイン • 運転資⾦を稼ぐビジネス モバイルアプリを作るには?
ゲーム開発の場合、モバイルアプリと同じかそれ以上に多くの環境で動作するように作ることになると思います。その ため環境ごとの差異を吸収する「ゲームエンジン」を利⽤する⽅が⼀般的です。 しかしモバイルアプリやWebサイトのような⽣産性よりもアート性やエンターテイメント性が重視される為、プログラ ミング技術だけでなくアートデザイン等に重きを置く傾向が近年は特に顕著です。 • ゲームエンジン固有の仕様や制約 • ゲームエンジンに適した⾔語 • 各プラットフォーム固有の仕様や制約
• バックエンド処理 • ホスティング部分 • データストア技術 • ゲームデザイン(UIデザイン) • 3Dモデル?2Dイラスト?⾳楽? • 運転資⾦を稼ぐビジネス ゲームを作るには?
ここまでの例で挙げたとおり、世に出ている製品の裏側をでは様々な技術領域が組み合わさっています。 未経験の⼈間が製品レベルの成果を出すまでには多くのステップが待ち受けており、決して誰しも今すぐ何か作ること ができるわけではありません。 完パケの裏には膨⼤な知識がある
でも安⼼してください。みなさんは「全ての領域の全てができます」となる必要はありません。通常は「この領域のこ れができます」で⼗分です。たとえば「バックエンド処理が得意なので、アプリでもゲームでも裏側は⼤体できます」 でも「モバイルアプリの中のAndroidが得意です」でもいいわけです。 実務において「全ての領域で完璧にこなせます」という⼈材は滅多に居ませんから、現実は「全ての領域で簡単な領域 なら卒なくこなせます」か「特定領域がめちゃくちゃ得意なので、それだけは完璧にこなします」のどちらかがほとん どです。 「全てのすべてができます」ではなく 「此れのこれができます」でいい
とはいえ「特定領域だけ勉強して他は知らない」ではほとんどの場合何かを作ることはできませんし、もっと⾔えば各特定領域 すらもあまりに深く、学び切るのは無理です。ですからそもそも「知らないことを⾃覚しながら歩む」ことが重要になります。 幼児は⾃ら学ぶことの達⼈です。不可解なことを⾒つけるとまずは真似てみて、⾃分がどう感じるか、周囲がどう影響を受ける かを知り、経験として記憶していきます。それでも家庭環境等の外部要因により個々の経験は変わりますから、教育はその差異 を埋めるのに有効です。 不完全ながらも真似事を重ねて本物になっていくのが⼈間の得意技ですから、まずは⾃ら⼿を動かしてみるとよいです。 • 幼児は⼩学国語より前から会話する • 真似して経験化し定着させる
• → 真似事を繰り返してプロになろう • → ⾼度化の為に教育を受けよう
たとえば吉岡の場合ですが、⾃分は特に専⾨教育を受けたことがありません。ソフトウェア開発については完全に独学で、それ に相当する学校や授業に参加したことがありません。 なのでのちほどお話するとおり、独学で作ったアプリで技量を測ってもらい、そこから仕事の中で不⾜する知識を吸収し、キャ リアもそうして得たものを使って築いてきたものです。 キャリアというのはたしかにその時々の巡り合わせによるものも多く、必ずしもコントロールできるものではありません。しか しながら⾃⾝の⽴ち位置はその時持ち合わせる能⼒により⼤きく変わりますから、必要な知識を持つ努⼒によりキャリアアップ の機会を得られる、すなわち確度を⾼くすることができるはずです。 • 吉岡の場合... •
専⾨教育は受けていない • 独学から現場でキャリア形成 • キャリアは運? • 教育や努⼒で確度を上げられる
真似事をしながらといっても具体的なイメージができないかたも居るかと思いますし、せっかくなので実例を⾒てみま しょうか。⾃分の学習⽅法が全てではありませんから、あくまで参考として捉えてください。 ⾃分が最初に作りたかったのはウェブサイトだったのですが、それを実現するための技量もお⾦もありませんでした。 なので共⽤のPCで実現可能な範囲として、⼿でHTMLを打ってウェブサイトを作りCDに焼いて友達に配ったりしてい ました。またレンタルWikiやブログなんかも全盛期の頃で、無料の範囲で⾊々情報発信をしていました。 • HTMLでテキストサイト • リンク集や “隠しページ探しゲーム”
など • CD-Rに焼いて友達に配る • Wikiシステムを使って⾃分のサイト公開 • ブログを開設して情報発信 吉岡の場合: 簡単な情報発信
そこから少し発展し、⽉々数百円で使えるレンタルサーバを借りてフリーで配られているチャットを設置したりしまし た。この挙動がいまいち気に⼊らなかったので、これをカスタマイズする為にPHPという⾔語を学んでいます。 これが少しずつ⾼じていって、レンタルしていたブログを⾃作のプログラムに置き換えたり、⾳楽ゲームの成績をウェ ブサイトで表⽰可能にするサービスをオープンしたりと「やりたいこと」を広げていきました。当然データを効率的に 保存したり参照する⼿段が必要なので、ここでデータベースの取扱を勉強しています。 このページに書かれているのが⼤体中学⼊学から卒業までくらいでしょうか。 • レンタルサーバにチャットを設置 • カスタマイズの為にPHPをかじる
• ブログを⾃作したり • ⾳楽ゲーム成績を掲載するサービス作ったり • データ保存の為にMySQLの勉強 吉岡の場合: Webアプリ
このページの内容が⼤体中学の終わりから⾼校卒業までです。スマートフォンが流⾏り始めた頃で、同級⽣達はウェブ サイトを作っても⾒てくれない時代になってくんですね。なのでウェブサイトの代替としてアプリを作り始めてます ニュースアプリのGunosyなんかもこの期間中に⽣まれたんですが、似たようなニュース推薦エンジンを作ったりもし ました。⾼校1年だったか2年だったかに作った⾳楽ゲーム⽤のデータ配信アプリがけっこう⼤きくヒットして、この成 果などをアピールしたり、在学中にスタートアップ企業のインターンに参加したりして就職に⾄ります。 • スマホだとWeb⾒てくれないのでアプリを作る • アプリで通信できるようWeb技術を応⽤する •
ニュースアプリの真似したり • ⾳楽ゲーム⽤データ配信アプリ作ったり 吉岡の場合: クライアントサーバモデル
就職とは能⼒の⾼低こそあれど「それを仕事として対価を貰う」状態になったことを指しますから、ここまでで⼀旦は プロとして成⽴したと捉えましょう。それに⾄るまででやってきたことをまとめるとこのとおりです。 基本的にはどのタイミングでも「今持っている知識では次のやりたいことを実現できない」という理由、すなわち向上 ⼼などといった⾼尚なものというよりは好奇⼼で何かしら新たな領域を開拓しています。そしてこういった領域はべつ に今まで全く関与しなくてよかったわけでなく、使わずにどうにか回避したり、使うとしても何かに丸投げすることで 知ることを回避してきただけです。 1. やりたいことを⾒つける 2. やりたいことの解決策を探す
3. 公開して検証する → ⼩さい真似事の繰り返し
さて、さきほどまで話していた⾃分のやりかたですが、これは必ずしも理想的な学習⽅法ではありません。少なくとも 効率だけ考えるならかなりムダな時間の使い⽅をしています。例えば専⾨学校なら2年、⼤学なら4年といった期間が⼀ 般的ですが、多くのソフトウェアエンジニアはそういった⾼等教育機関に⼊学してから学習をはじめ、その期間中に就 職先の内定を獲得するわけです。 それに、実際のところ実務においてはアプリを1本すべて作り切れる必要は必ずしもありません。⾃分の場合はそれ以 外に能⼒を⽰す⽅法が単になかっただけです。 • 1⼈でアプリを作れたから仕事を貰えた • 8年以上の独学期間がある
→ 決して楽な道ではない
そこで、これからプログラマーを⽬指す⽅に実践いただきたい学習ルートはこのようなものです。 1. ⾃分のやりたいことを決める 2. 適切なガイドさんを⾒つける 3. ガイドで知ったことを実践する 4. 不⾜する知識を都度⾃分で解決する
まず、教育機関というのは学⽣の能⼒を保証できる場合が多いです。教育機関は所属する学⽣が新たな知識や経験を得て成⻑す ることを⽬的としていますから、卒業する学⽣の評判が悪ければ教育機関⾃体の信⽤低下にも繋がります。そのため卒業にはあ る基準以上の能⼒が備わっていることを条件とするわけです。 ただし、あくまで教育というのは技術習得における⽔先案内でしかないことも認識して頂きたいところです。どのようなことを 知るべきか⽰し、知るべきことを噛み砕いて理解しやすくしてくれても、実際にそれを学び取れるかはあなた次第です。 すなわち、教育期間は能⼒を保証する準備があるけれど、実際にその保証を勝ち取れるかはあなた⾃⾝に掛かっています。 • 教育機関は能⼒を証明できる • 能⼒がなければ証明できない
• 教育は技術習得のガイドさん • 学ぶのはあなた⾃⾝
さて、さきほどガイドで知ったことを実践してほしいと⾔いましたが、ここにおける注意を挙げていませんでした。 たとえば簡単なネットショップが開発できるような知識を得たとしても、そのまま公開してよいとは限りません。⽇本 の場合は特定商取引法というのがあり、ここに規定される条件を満たさなければ取引をしてはなりません。 また法律等では規制されていなくても、倫理的にあまり許されないこともあります。このへんは線引が難しいです。 • 実践(公開)には責任が伴う • 法令での規定等、禁⽌事項もある • 倫理的に許容され難い事もある
実践における注意
ですので、実践する前段階としてまずはみなさん⾃⾝が「利⽤者」になり、コミュニティの⼀員になることをおすすめ します。このスライドで冒頭から述べているとおり、この世の全てを知ってから何かを始めるには⼈⽣は短すぎます。 ですから「⾃分が始める前に必要な情報が⼊ってくる状態」を作るとよいでしょう。 特に規制関係は「知らなかった」では済まされませんが、具体的な調査をしないと知り得ないような場合がかなり多い です。⾃⾝が利⽤者でありコミュニティの1員であれば、様々なシーンで必要な事柄に出会うことができます。 また倫理⾯についてはいわば「⽂化」ですから、コミュニティの中で感覚を養うしか⽅法がない事もあります。 • 利⽤者(消費者)になろう • コミュニティに参加しよう
いろんな話をしましたが、まとめるとこうです。ここまでで話してきた内容は実のところライトで、こう読めば実現し やすい内容であると感じられるのではないでしょうか。 • 学びながら実践し、実践しながら学ぼう • ⾃⾝が学びの主体になろう • 効率化の為に教育を受けよう • ⾃⾝もコミュニティの⼀部になろう
まとめ
Copyright 2021 Kiganix, G.K. Twemoji by Twitter, Inc and other
contributors licensed under CC-BY 4.0. irasutoya.com by Takashi Mifune