programming seminar#1

126
プログラミングの学び方 伏見遼平

Upload: ryohei-fushimi

Post on 19-Jun-2015

655 views

Category:

Documents


7 download

DESCRIPTION

5/21 駒場で行われたプログラミング講座の補助資料

TRANSCRIPT

Page 1: Programming seminar#1

プログラミングの学び方

伏見遼平

Page 2: Programming seminar#1

最初に大切なこと

なぜ プログラミング?

Page 3: Programming seminar#1

最初に大切なこと

ラクして仕事ができる

Page 4: Programming seminar#1

最初に大切なこと

複雑な計算もラクチン

Page 5: Programming seminar#1

最初に大切なこと

まったく違う世界の 言葉を知り、

書けるようになる

Page 6: Programming seminar#1

最初に大切なこと

その言葉で 世界と通じ合える

Page 7: Programming seminar#1

最初に大切なこと

なにより楽しい

Page 8: Programming seminar#1

最初に大切なこと

プログラマ= プログラムを書いて

お金をもらう人

Page 9: Programming seminar#1

最初に大切なこと

なんでみんな やらないの?

Page 10: Programming seminar#1

最初に大切なこと

答 : むずかしいから

Page 11: Programming seminar#1

最初に大切なこと

ひとりでプログラムを 始めるのは遠回り

Page 12: Programming seminar#1

最初に大切なこと

自転車

Page 13: Programming seminar#1

最初に大切なこと

自転車 •  熟練者の動きを見る •  やってみる •  コケる (フィードバックを得る) •  少しできるようになる •  達成感!!

Page 14: Programming seminar#1

最初に大切なこと

プログラミング •  周りに熟練者がいない •  やってみるまでがタイヘン •  フィードバックがない (どこでエラーが起きてるのか分からない) •  できるようにならない •  できても達成感がない

Page 15: Programming seminar#1

プログラミング言語

•  いきなり一人でプログラミングを勉強する

•  自転車に乗ってる人を見たこと  ないまま自転車を練習する

•  ロシア語の教科書を一冊持って  ソビエトに乗り込む

Page 16: Programming seminar#1

プログラミング言語

あなたが最初に学ぶべきなのは、 「フョードルの子供は何人いますか?」でも 「彼の名前はスメルジャコフです」でもなく、

「辞書の引き方」「文法間違いの探し方」  = 学び方

Page 17: Programming seminar#1

プログラミング言語

•  学び方が分かると、先に進めるはず!

Page 18: Programming seminar#1

最初に大切なこと

まず、学び方を学ぶ

Page 19: Programming seminar#1

プログラミング言語

•  あなたが最初に学ぶべきなのは、 「フョードルの子供は何人いますか?」でも 「彼の名前はスメルジャコフです」でもなく、

「辞書の引き方」「文法間違いの探し方」です

Page 20: Programming seminar#1

プログラムとは 「こんにちは、と表示しろ」

•  「こんにちは」とは何か? •  「、」とは何か? •  「表示しろ」とはどのような命令か? •  どのようなフォントで、どこに表示すれば良いのか?

Page 21: Programming seminar#1

プログラムとは

自然言語はすごく曖昧

Page 22: Programming seminar#1

翻訳

自然言語

機械語

「こんにちは」と表示しろ!!

「0010 1101 0011 0111 …」

翻訳

Page 23: Programming seminar#1

翻訳

機械語に翻訳するのは すごくめんどくさい

Page 24: Programming seminar#1

翻訳

自然言語

プログラミング言語

「こんにちは」と表示しろ!!

「0010 1101 0011 0111 …」 機械語

print “こんにちは”;

機械が担当

人間が担当

Page 25: Programming seminar#1

バイナリ 001010010010100101010001010101011 0010101001010010010100101010001010 0101100101001001010010101000101010 0110010101001010100101001001010010 0100010101010110010101001010010010 001010100010101010110010101

-> Hello, World

Page 26: Programming seminar#1

バイナリ 0000 : 0 0001 : 1 0010 : 2 0011 : 3 … 1001 : 9 1010 : A 1011 : B 1100 : C 1101 : D 1110 : E 1111 : F

0111 0000 0000 1101

0000 0000 0000 0000

0111 11110010 0000

7 0 0 D

0 0 0 0

7 F 2 7

Page 27: Programming seminar#1

機械語 •  7001 0000 7002 0000 •  1210 800D 1220 800C •  F000 0002 7120 7110 •  000C •  0048 0065 006C 006C •  006F 0020 0077 006F •  0072 006C 0064 0021

-> Hello World!

Page 28: Programming seminar#1

アセンブリ •  OUT TEXT,LEN •  LEN DC 12 •  TEXT DC “Hello World!”

-> Hello World! ちょっと読めるかも…?

Page 29: Programming seminar#1

プログラミング言語 C #include <stdio.h> main(){ printf("Hello World\n"); }

Page 30: Programming seminar#1

プログラミング言語 Java public class HelloWorld { public static void main (String[] args) { System.out.println("Hello World !!"); } }

Page 31: Programming seminar#1

プログラミング言語 Ruby

print “Hello, world!”

Page 32: Programming seminar#1

プログラミング言語 JavaScript

Document.write(“Hello, world!”);

Page 33: Programming seminar#1

プログラミング言語

同じ処理を表すのに複数の表記法がある

Page 34: Programming seminar#1
Page 35: Programming seminar#1
Page 36: Programming seminar#1

まず基礎知識

前提 お作法 道具

Page 37: Programming seminar#1

前提

• 今回扱うのは「JavaScript」 – Webブラウザの中で動く – Webサイトの中で使われる – 覚えやすくて、奥が深い – 最近注目されている

Page 38: Programming seminar#1

前提

• 他のプログラミング言語とはちょっと違う点も – C,Java – php,Ruby

Page 39: Programming seminar#1

前提

• テキストエディタで編集

Page 40: Programming seminar#1

前提 •  JavaScriptのファイルを、  テキストエディタで編集 → 保存

Page 41: Programming seminar#1

前提 •  そのJavaScriptを読み込むように指定した  HTMLを、Safariで実行

Page 42: Programming seminar#1

前提 •  ウインドウ開きっぱなしでいったりきたりする

Page 43: Programming seminar#1

前提 •  基本的には全部「半角」で書く! カッコ()とか、&<>{}とか

 もちろん、スペース (空白) もダメ

特にスペースは見えないので分かりにくい

Page 44: Programming seminar#1

前提

Page 45: Programming seminar#1

前提

Page 46: Programming seminar#1

前提 •  コンピュータは神経質

– カッコをひとつ閉じわすれる – ひとつスペルミスする – セミコロンをわすれる

     →絶対に動きません!!

•  でも、動かない理由を教えてくれる

Page 47: Programming seminar#1

前提 •  テキストエディタのつかいかた

Page 48: Programming seminar#1

前提 •  コピペしまくろう

– プログラマはコピペが大好きです – ショートカットは必ずおぼえよう

•  Ctrl + X … キリトリ, カット (コピーして消去) •  Ctrl + C … コピー •  Ctrl + V … 貼り付け, ペースト • これだけでなんかカッコイイ ←これ重要

Page 49: Programming seminar#1

お作法

実践

Page 50: Programming seminar#1

道具

package/0_basic/main.js

idiom/basic.js

Page 51: Programming seminar#1

お作法 •  ダウンロードしよう http://bit.ly/

•  画面に「こんにちは!」と表示させる

Page 52: Programming seminar#1

道具

• 覚えるのは4つ – 数字 – 文字 – 関数 (?) – オブジェクト (??)

Page 53: Programming seminar#1

数値 •  そのまんま書くだけ •  カンタン

number = 1; money = 10000; height = 176.5;

number = 3000 + money;

Page 54: Programming seminar#1

文字列 •  ひとつの文字列は “” で囲います •  じゃないと、プログラムと見分けがつかない

name = “ふしみ”; string = ‘こんにちは’;

str = ‘私の名前は’ + name + ‘です’

Page 55: Programming seminar#1

関数

f(x) = 3x + 2

Page 56: Programming seminar#1

関数 •  基本的には一緒

f(x)  =  3x  +  2

f(x)  =  3x  +  2

8

f(x)  =  3x  +  2

2

3 11

5y 15y + 2

Page 57: Programming seminar#1

関数 •  プログラミングにおける関数は 「手続きを定義するもの」と拡張して扱われる

f(x)  =  3x  +  2

function f(x){ var result = 3 * x + 2; return result }

Page 58: Programming seminar#1

関数 •  何かを受け取ったり、渡したりしなくても良い

– 「叫ぶ」という手続きを関数にしてみる

function shout(){ alert(‘ahhhh !!’);

}

shout();

Page 59: Programming seminar#1

関数 •  「名前を名乗る」という手続きを関数にする

function say(name){ alert(‘私の名前は’ + name + ‘です’);

}

say(“伏見”); say(“田中”);

Page 60: Programming seminar#1

関数 •  関数は「動作を束ねたモノ」

function 関数の名前 (受け取るモノ) { やること やること return 返すモノ; }

Page 61: Programming seminar#1

関数

覚える必要は ありません

Page 62: Programming seminar#1

関数

コピペでOK 慣れたら覚える

Page 63: Programming seminar#1

関数 • 数値… そのまんま • 文字列 … そのまんま • 関数 … 「手続きを束ねたモノ」

• オブジェクト … ?

Page 64: Programming seminar#1

オブジェクトとは

Object : 物体

Page 65: Programming seminar#1

オブジェクトとは

Object : 物体 ????

Page 66: Programming seminar#1

オブジェクトとは

•  ここがプログラミングのキモ

•  最近の言語は「オブジェクト指向」 •  とにかくオブジェクトがみんな大好き

Page 67: Programming seminar#1

オブジェクト

昔々あるところに 田中くんがいました

Page 68: Programming seminar#1

オブジェクト var name = “たなかたろう” var money = 1000 var height = 170 var weight = 60

function say(str){ document.write (“わたしは” + str + ”です”) }

Page 69: Programming seminar#1

オブジェクト

そこに鈴木君がやってきました

Page 70: Programming seminar#1

オブジェクト var TANAKAname = “たなかたろう” var TANAKAmoney = 1000 var TANAKAheight = 170 var TANAKAweight = 60

function say(str){ document.write (“わたしは” + str + ”です”) }

Page 71: Programming seminar#1

オブジェクト var SUZUKIname = “すずきいちろう” var SUZUKImoney = 3000000 var SUZUKIheight = 180 var SUZUKIweight = 70

function say(str){ document.write (“わたしは” + str + ”です”) }

Page 72: Programming seminar#1

オブジェクト

そこに花子さんが…

Page 73: Programming seminar#1

オブジェクト

無理

Page 74: Programming seminar#1

オブジェクト

田中君の身長 鈴木君の名前

「の」が必要

Page 75: Programming seminar#1

オブジェクト

あるオブジェクト (ex. 鈴木君, 田中君) に属する 変数や関数をひとまとめにするもの

オブジェクト

Page 76: Programming seminar#1

オブジェクト

鈴木君 を表す suzuki というオブジェクトを用意

suzuki.money = 10000 suzuki.name = ‘すずきいちろう’ suzuki.height = 160

…ちょっとスッキリ?

Page 77: Programming seminar#1

オブジェクト

「suzuki」はオブジェクトなので、代入もできる var suzuki2 = suzuki

alert(‘私の名前は’ + suzuki2.name + ‘です’);

Page 78: Programming seminar#1

オブジェクト

関数はオブジェクトも受け取れる

function sayName(person) { alert(‘私の名前は’ + person.name + ‘です’); }

sayName (suzuki); sayName (tanaka);

Page 79: Programming seminar#1

オブジェクト

オブジェクトを変更する関数

function giveMoney(person) { person.money = person.money + 100;

}

giveMoney (fushimi);

Page 80: Programming seminar#1

オブジェクト

関数も束ねられる

tamura.shout = function () { alert(‘ahhhhhh!!!!!!’);

}

tamura.shout()

Page 81: Programming seminar#1

オブジェクト

いろいろ できる

Page 82: Programming seminar#1

オブジェクト

あとは慣れです

Page 83: Programming seminar#1

道具 • 数値… そのまんま • 文字列 … そのまんま • 関数 … 「手続きを束ねたモノ」

• オブジェクト …  「変数とか関数を束ねたモノ?」

Page 84: Programming seminar#1

道具

実践

Page 85: Programming seminar#1

道具

自分の オブジェクト

を作ろう

Page 86: Programming seminar#1

道具

package/1_object/main.js

Page 87: Programming seminar#1

道具

var fushimi = {}

Page 88: Programming seminar#1

構造

•  次にやるのは 「10回繰り返す!!」とか 「もし○○ならこれをやる!」とか

Page 89: Programming seminar#1

構造

1. 条件分岐 2. ループ

Page 90: Programming seminar#1

構造

idiom/basic.js を見ながらでも良いかも

Page 91: Programming seminar#1

道具

• 条件分岐

if (条件) {  やること }

Page 92: Programming seminar#1

道具

if (条件1) {  やること }else if (条件2) { やること }else{  やること }

Page 93: Programming seminar#1

道具

whileループ

while (条件) {  やること }

Page 94: Programming seminar#1

道具

forループ

for (初期化; 継続条件; ループ処理) {  やること }

Page 95: Programming seminar#1

構造

結論 コピペしろ

Page 96: Programming seminar#1

道具

実践

Page 97: Programming seminar#1

道具

ループを使って 何か作ろう

Page 98: Programming seminar#1

道具

お題: 3の倍数と、

3のつく数字だけ バカになるプログラム

Page 99: Programming seminar#1

道具 •  3の倍数と3のつく数字だけ「!」をつける

–  1 2 3!!! 4 5 6!!! 7 8 9!!! 10 11 12!!! 13!!! …

•  素数を数え上げる •  フィボナッチ数列を延々と列挙

ヒント 3で割った余り … number % 3 3で割り切れるとき… if ( number % 3 == 0 ) 3で割った商 … Math.floor( number / 3 )

Page 100: Programming seminar#1

道具

package/2_loop/main.js

Page 101: Programming seminar#1

実践

Page 102: Programming seminar#1

実践その3

電卓を つくろう

Page 103: Programming seminar#1

実践その3

一気に難しい 課題!!

ヒョエー

Page 104: Programming seminar#1

実践その3

電卓は どう動くのか?

Page 105: Programming seminar#1

実践その3

変数は 何がいくつ必要か

Page 106: Programming seminar#1

実践その3

プログラムを 書く前が難しい課題 =モデリングの部分

Page 107: Programming seminar#1

実践その3

電卓として動けば、 どう動いてるかは関係ない

電卓に何を求めるのか??

Page 108: Programming seminar#1

実践その3

•  株価の値動きをシミュレートする •  10ヶ月後の生存個体数を予測する •  RPGの戦闘でダメージを計算する

モデルを作る

Page 109: Programming seminar#1

実践その3

まず考えてみよう!

Page 110: Programming seminar#1

実践その3

まず考えてみよう! そのあと作ってみよう!

Page 111: Programming seminar#1

実践その3 •  HTML部分は用意しました

– 押しても何も動きません…

Page 112: Programming seminar#1

実践その3 •  ボタンを押すと何か関数を呼びます •  関数の名前は「index.html」の中に書く

 … onclick = “myfunc(1)” >

訳:クリックしたときにmyfunc(1)を実行してね

Page 113: Programming seminar#1

実践その3

やってみよう

Page 114: Programming seminar#1

実践その3

できたかな?

Page 115: Programming seminar#1

実践その3

sample/calc/index.html

Page 116: Programming seminar#1

実践その3 13 + 26 = ? [1][3] … 「13」を覚える [+] … 「13」をどこかによけて、「+」を覚える [2][6] …「26」を覚える [=] … 「+」なので、「13」と覚えた「26」を足す

•  表示する数字 •  よけておく数字 •  演算の種類 3つの変数が必要

Page 117: Programming seminar#1

実践その3 number … オモテの数字 stack … ウラの数字 operator … 演算の種類

input … オモテの数字を変更 setOperator … 演算の種類を指定 calc … 計算する clear … ぜんぶ消す

Page 118: Programming seminar#1

実践その4

最終課題

Page 119: Programming seminar#1

実践その4

ゲームを つくろう

Page 120: Programming seminar#1

実践その4

なぜゲームか

Page 121: Programming seminar#1

実践その4

•  作る過程が楽しい・人を楽しませられる •  条件分岐・ループ・数学計算・グラフィック処理とか、いろいろ使う

•  プログラミングの学習には最適!

Page 122: Programming seminar#1

実践その4

ただし

ゲームは複雑

Page 123: Programming seminar#1

実践その4

そこで、サンプルを いくつか用意しました

Page 124: Programming seminar#1

実践その4 bear.addEventListener('enterframe', function(e) {

if (game.input.up) {

this.y -= 3;

} else if (game.input.down) {

this.y += 3;

}

if (game.input.right) {

this.x += 3;

} else if (game.input.left) {

this.x -= 3;

}

}

);

Page 125: Programming seminar#1

実践その4

サンプル参照

Page 126: Programming seminar#1

プログラミングの学び方 おわり 伏見遼平