プロフィール
| |
- Author:あろは (alohakun)
- 若槻俊宏 (WAKATSUKI toshihiro)
連絡先 : alohakun ___at___ gmail.com mixi : http://mixi.jp/show_friend.pl?id=182927 twitter : http://twitter.com/alohakun
abstract
プログラミングという人間の知的行為を体系化し,単なる職人芸ではなく,サイエンスにするための研究をしています.
具体的には,等価変換計算モデルに基づいた,仕様記述からのプログラム合成の研究をしています.
もっと噛み砕くと,プログラムの正しさをどのように定式化し,どのような枠組みで,どのように変換を進めていけば,正しさを保証したまま,効率的なプログラムを手に入れることができるのか,ということについて研究しています.
キーワード : equivalent transformation, computation model, programming paradigm, formal specification, program synthesis





|
FC2カウンター
| |
|
ブロとも申請フォーム
| |
この人とブロともになる
|
|
初心者にプログラミングを教える際の難しさ
| 2008/07/16(水) 13:36:46
|
今のプログラミング言語は,アルゴリズム (計算手順) を書き下す (だけの) ものなんですよね.
なので,初心者にプログラミングを教える際 「どうやってアルゴリズムを作れば良いのか ?」「熟練者は,どのように発想しているのか ?」 ということを教える際には,向きません.これがプログラミング教育の本質的な難しさです.
アルゴリズムを作るための方法論と,それを表現できるプログラミング言語が無いから,結局はたくさん本読ませて,問題解かせて,自分で勉強してがんばってね,数こなせば自然とわかってくるから,という前時代的な教育しかできないのです.これでは脱落者がたくさん出てしまっても無理はありません.
amachang さんががんばってます.執筆中のマインドマップを引用するってのは,ちょっと申し訳ない気もするのですが,面白い一文を発見.
IT 戦記 2008-07-15 プログラミング未経験者が JavaScript でプログラミングをするために必要なこと 僕はプログラミングというものをこういう風に思っています。
「状態と機能をたくさん持ったモノ」(例えば、パソコン)に、「こうだったら(状態)、こうする(機能)」という「ルール」を書いていって「便利なモノ」(例えば、ゲーム)を作る作業がプログラミングである。
これは全くその通りなのだと思いますけど,現在のプログラミング言語は,こういう人間の自然な思考(?)を素直に書き下すようにはできてないんですよね.
我田引水ですけど,僕は北大の一般教養で,今 TA やってます (問題解決プログラミング/人工知能プログラミングの両クラス合同演習).
# 人工知能とか大仰な講義名ですけど,学部一年レベルの講義なので,ようするに,ちょっと高度なアルゴリズムのことです.全学共通科目なので,工学部や情報系以外の学生もウェルカムな講義ですし (まぁ,ほぼ全員が理系だと思いますけど)
プログラミングどころか,パソコンのタッチタイプすらおぼつかない大学新入生相手に,いきなり ET という変なプログラミング言語を使って,アルゴリズムの作り方 (発想法) を教えています.
よくある「プログラミング」を教える講義,すなわち,アルゴリズムの書き下し方 (コーディング) を教えるのではありません.アルゴリズムの作り方,考えるための方法論を教えている (つもりの,ことを目指している) 講義です.
それは,例えばプログラミング言語 Ruby は,(いろいろ理由があると思いますが)学生が学習しやすい,とかいうレベルの話ではありません.
ET 言語は,ルールベースなので,通常のアルゴリズムを書き下す言語とは,根本的に異なるのです (もちろん,普通に,アルゴリズムを書き下すこともできますが.それは清書用で,むしろどうやって考えるか,考えるための道具の方が重要)
ルールというのは,amachang の定義を借りれば,
状態,{条件} --> こうする.
という,まさしく自然な発想をそのまま書き下すような表記になっています.
そして,具体例をたくさん書き並べていくだけで,それもある種のプログラムとして実行可能です (算術演算アトムの記法が,Lisp というか,S 式ライクで微妙ですが… まぁ,全くの初心者の場合,こう書くんだよ,と言うと,案外素直に覚えてくれるものです.逆に,脳が C とか VB とかに汚染されている子(笑)の場合は,ちょっと戸惑ったり苦労しているみたいです).
(factrial 0 *x) --> (= *x 1). (factrial 1 *x) --> (:= *x (x 1 1)). (factrial 2 *x) --> (:= *x (x 2 (x 1 1))). (factrial 3 *x) --> (:= *x (x 3 (x 2 (x 1 1)))).
いろいろルールを書いていくうちに,何らかの法則性が見えてきたら,より一般的なルールを書くと.
(factrial *n *x) --> (:= *n1 (- *n 1)), (factrial *n1 *x1), (:= *x (x *n *x1)).
# ちょっとトリビアルすぎる例ですが… 実際の講義では,非常に簡単で具体的な例題 (長さ 3 のリストの 2 番目を取り出すルールを書け,とか) から,徐々に一般的で複雑な例題に (任意の長さの整数リストの各要素の値を n 倍したリストを作るルールを書け,のように) 発展していきます.
実際には,D ルールには優先順位がある (同じ状態と条件に対して適用可能なルールが複数存在する場合,先に定義されたルールが,後に定義されたルールよりも優先的に採用される) のですが,条件を順序に依存しないようにちゃんと書けば,順番さえ任意です.
ルールベースのプログラミング言語は,条件を工夫したり,効率化するためのルールを追加していくことで,試行錯誤しながら,自然とルールを積み上げ,アルゴリズムを構築していくことが可能な枠組みになってます.
|
雑談|TB:0|CM:0|
|

▲
| |
|
コメント
| |
|
コメントの投稿
|
|
|
トラックバック
|
トラックバックURLはこちら
http://alohakun.blog7.fc2.com/tb.php/955-2d14d3f5
| |
|
|
最近のコメント
| |
| リンク
| |
このブログをリンクに追加する
| 最近のトラックバック
| |
| 人生の残り日数
| |
日本人男性の平均寿命は 28700日.
| RSSフィード
| |
| カテゴリー
| |
|
|