プログラミング教育用言語の設計
プログラミングシンポジウムにおける明治大学の宮下先生のHMMMMLについての発表で、参加者全員に火がついた。
http://www.youtube.com/watch?v=HJH3q3E3ab0
去年のプロシンで発表された原田康徳さんのviscuitもそうだったが、プログラミング教育というのはみなすごく困っているらしい。
http://www.youtube.com/watch?v=HJH3q3E3ab0
去年のプロシンで発表された原田康徳さんのviscuitもそうだったが、プログラミング教育というのはみなすごく困っているらしい。
その結果、夏のプロシンはまだ発表されてないけど「みんなが使えるみんなのためのプログラミング」ということになった。
自分も火がついたうちの一人だ。
なので、夏のプロシンに出してみようと思う。
そのためにプログラミング教育に何が必要か考えてみる。
なので、夏のプロシンに出してみようと思う。
そのためにプログラミング教育に何が必要か考えてみる。
現状の教育の問題点をいろいろと考えたけど、おおよそはこんな感じだと思う。
俺すげー感
Hello Worldだとか、そんなのを今更やっても何にも面白くない。
自分は自分が書いたコードで円が表示されたときは、飛んで喜んだ。
これでなんでもできると思って、すごくうれしかった。
これでなんでもできると思って、すごくうれしかった。
昔のコンピュータはできることが少なかったから、プログラムを書かなきゃ何にもできなかった。
今のコンピュータはマウスクリックひとつでなんでもできちゃうから、今更Hello Worldをやっても何にも面白くない。
Hello Worldやりたきゃ、Hello Worldってキーボードでタイプすりゃいいじゃん。
なんでわざわざプログラム書かなきゃだめなの?
何が楽しいの?
今のコンピュータはマウスクリックひとつでなんでもできちゃうから、今更Hello Worldをやっても何にも面白くない。
Hello Worldやりたきゃ、Hello Worldってキーボードでタイプすりゃいいじゃん。
なんでわざわざプログラム書かなきゃだめなの?
何が楽しいの?
プログラミングの時系列
プログラムは時系列を伴うが、高校までの数学教育は時系列を伴わない。
a=a+1 という書き方は数学ではありえないため、
プログラムには時系列があるという概念を獲得しないといけない。
a=a+1 という書き方は数学ではありえないため、
プログラムには時系列があるという概念を獲得しないといけない。
しかしHello Worldだとか、forループを回して0~10まで表示するだとの初めの第一歩は時系列を含んでいない。
そしてこのようなことをやった次に、バブルソートだとか、時系列の塊が必要なものを教えられる。
そしてこのようなことをやった次に、バブルソートだとか、時系列の塊が必要なものを教えられる。
そのため、時系列の概念を獲得しないままに次に進んでしまうため、挫折してしまう。
構造化プログラミングの必要性
学生に構造化プログラミングを教えても全く理解されないと嘆く先生が多かった。
いくら素晴らしさを伝えても、それを理解してくれないと。
いくら素晴らしさを伝えても、それを理解してくれないと。
そもそも、構造化プログラミングってなんで素晴らしいの?
構造化プログラミングって、スパゲッティコードにならないように書けるから素晴らしいんでしょ。
スパゲッティコード書いたことない学生にどうやって構造化プログラミングを教えるの?
構造化プログラミングって、スパゲッティコードにならないように書けるから素晴らしいんでしょ。
スパゲッティコード書いたことない学生にどうやって構造化プログラミングを教えるの?
オブジェクト指向を教えるって言っても、構造化プログラミングで大規模コードを書いてグチャグチャになった経験がないと利点がわからんでしょ。
プログラミング言語の設計方針
以上のようなのを踏まえたうえで、夏のプロシン用に教育用言語を作ろうと思う。
- 俺すげー感
- 少しのコードでエキサイティングなことができる。
- 多少の構文エラーは吸収する
- 時系列を含むモノを取り扱う
- 音楽
- 料理
- ロボット制御
- その他いろいろ
- コピペ推奨でスパゲッティコードを誘発させる
- gotoを使いやすくする
- forやwhileは後から教えてもいいようにする
大体はこんな感じかなー。
方針は定まったけど、言語仕様の設計とか、何を題材にするかとか、スパゲッティの誘発方法だとかを考え中。
方針は定まったけど、言語仕様の設計とか、何を題材にするかとか、スパゲッティの誘発方法だとかを考え中。
カテゴリ: [日記] -
TrackBack(0)
- 2010年01月17日 03:21:57
迷路を解くやつを書いてみた
アルゴリズム考えるのに10分、書くのに25分。
ダイクストラっぽい何かで実装。
ダイクストラっぽい何かで実装。
#coding: utf-8 import copy import sys inputdata = '''************************** *S* * * * * * * ************* * * * * ************ * * * * ************** *********** * * ** *********************** * * G * * * *********** * * * * ******* * * * * * **************************''' def solve(data): #データ構造を作る start = None goal = None y = 0 field = [] for linedata in data.splitlines(): x = 0 field.append([]) for w in linedata: if w == ' ': w = 100000 if w == 'S': start = (x, y) w = 0 if w == 'G': goal = (x, y) w = 100000 field[-1].append(w) x += 1 y += 1 #距離の算出 searchList = [start] def check1(x, y , step): if field[y][x] != '*': if field[y][x] > step: field[y][x] = step searchList.append((x,y)) step = 1 while searchList != []: temp = copy.copy(searchList) searchList = [] for (x, y) in temp: check1(x+1, y, step) check1(x-1, y, step) check1(x, y+1, step) check1(x, y-1, step) step += 1 #ゴールから逆順にたどる x, y = goal step = field[y][x] def check2(x, y, step): if type(field[y][x]) == str: return False if field[y][x] < step: field[y][x] = '$' return True while step >= 0: if check2(x + 1, y, step): (x, y) =(x + 1, y) elif check2(x - 1, y, step): (x, y) =(x - 1, y) elif check2(x, y + 1, step): (x, y) =(x , y + 1) elif check2(x , y - 1, step): (x, y) =(x, y - 1) step -= 1 #表示する field[start[1]][start[0]] = 'S' field[goal[1]][goal[0]] = 'G' for linedata in field: for w in linedata: if type(w) == int: sys.stdout.write(' ') else: sys.stdout.write(w) sys.stdout.write('\n') solve(inputdata)
出力
**************************
*S* *$$$$ *
*$* *$ *$ ************* *
*$*$$$* $ ************ *
*$$$ * $$$$$$$ *
**************$***********
* $$$$$$$$$$$$$ *
**$***********************
* $$$ *$$$$$$$$$$$$$$G *
* *$$$$$ *********** * *
* * ******* * *
* * *
**************************
追記
なんかおかしいと思ったらprint文だと勝手にスペースが挟まるのか。
stdoutにwriteして修正。
なんかおかしいと思ったらprint文だと勝手にスペースが挟まるのか。
stdoutにwriteして修正。
最短性の検証は、ゴールから山登り法っぽいことしているので最短のはず。
コードが汚いのは仕様。
コードが汚いのは仕様。
カテゴリ: [日記] -
TrackBack(0)
- 2010年01月12日 01:39:51
ハイスペックなグラフィックカードを刺す時のバッドノウハウ
あまりの寒さにGefoce GTS 250っていう暖房を買ったんだけど、
それをちゃんと動かすのにちょっと手間取ったのでメモ。
それをちゃんと動かすのにちょっと手間取ったのでメモ。
結論から言っちゃうと、ハイスペックなグラフィックカードを刺したときは、ATX電源に商用電源を入力してからしばらく放置してからPCの電源を入れろ。
商用電源をATX電源に入力してからしばらくしないと、電圧安定化用のコンデンサにチャージが貯まらない。
ハイスペックなグラフィックカードは、カード自体に大量のコンデンサが積まれており、電源投入時の突入電流が非常に大きい。
そのため、突入電流>ATX電源のコンデンサのチャージ という状態になると電圧降下が起こり、グラフィックカードが正常に起動しなくなる。
ハイスペックなグラフィックカードは、カード自体に大量のコンデンサが積まれており、電源投入時の突入電流が非常に大きい。
そのため、突入電流>ATX電源のコンデンサのチャージ という状態になると電圧降下が起こり、グラフィックカードが正常に起動しなくなる。
オシロで電圧を見たわけじゃないけど、たぶんこういう現象だろう。
商用電源を刺す、PCの電源を入れてもPCが起動しない。
商用電源を抜いて、メモリを抜いてみる
商用電源を刺す、PCの電源を入れてもPCが起動しない。
商用電源を抜いて、CPUを刺しなおしてみる
商用電源を刺す、PCの電源を入れてもPCが起動しない。
以下略っていう感じで4時間以上を無駄にした。
商用電源を抜いて、メモリを抜いてみる
商用電源を刺す、PCの電源を入れてもPCが起動しない。
商用電源を抜いて、CPUを刺しなおしてみる
商用電源を刺す、PCの電源を入れてもPCが起動しない。
以下略っていう感じで4時間以上を無駄にした。
長いこと自作やってたけど、ハイスペックビデオカード刺したの初めてだから、こんな現象知らなかったよ。
カテゴリ: [日記] -
TrackBack(0)
- 2010年01月04日 01:10:38
Howitzer C77 抽選漏れ版
C77には出す予定はないですが、三月くらいまでには店舗に出す予定。
効果音と演出のテスト中。バランス調整はこれから。
効果音と演出のテスト中。バランス調整はこれから。
C76版用のバージョンアップパッチ出します。
カテゴリ: [同人] -
TrackBack(0)
- 2009年12月17日 23:59:04
このwikiの更新情報RSS