Web ベースプログラミング学習支援環境 Wappen と Wap

香川研究室の紹介
香川 考司
[email protected]
香川研の研究テーマ
1. プログラミング言語の型システムの研究
(理論)
2. プログラミング学習支援システムの研究
(実践)
2
プログラミング言語の
型システムの研究
究極のプログラミング言語を
求めて
3
プログラミング言語の歴史
※
1949 (EDSAC)
ただし, 誕生(公開)と流行には大きなズレがある場合が多い
1967 Simula
1954 FORTRAN
1958 LISP
1958 ALGOL
1959 COBOL
1980 Smalltalk
1970 Pascal
2003 Scala
1983 C++
1972 C
1972 Prolog
1974 ML
1975 Scheme
1987 Perl
1990 Python
1990 Haskell
1995 Java
1995 Ruby
今後も新しいプログラミング言語が誕生するのは間違いない!
様々なプログラミング言語
Fortran, C, C++, Java, C#, Haskell, Scala, O’Caml, CommonLisp, Scheme,
Prolog, Perl, Ruby, Python, Smalltalk, JavaScript, VB, PHP, Closure, Go, …
• パラダイムによる分類
命令型、オブジェクト指向、関数型、論理型
• 型付けによる分類
静的型検査、動的型検査、他
• 実行方式による分類
コンパイラー方式、インタプリター方式
現状では、万能の言語はない
型あり vs.
柔軟
*
型なし
*ほんとうは「型なし」という言い方は語弊がある
コンパイル時
型検査なし
理想
epicurean?
快楽主義
Lisp, JavaScript, PHP,
Ruby, Perl, Python, …
stoic?
互いに影響
C, C++,
Java, ML,
Haskell, …
窮屈
危険
禁欲主義
コンパイル時
型検査あり
安全
関数型 (FPL) vs. OOPL
OOPL
GUIなど
ク用
ラ途
スに
(特
デ化
ーし
タた
型デ
)ー
のタ
増型
加
理想
(が得意)
C++, Java, …
複数のデータ型を
扱う処理を
定義することが得意
という点は同じ
ML, Haskell, …
文字列・記号処理など
汎用のデータ型
関数(メソッド)の増加
FPL
(が得意)
7
純関数型 vs 命令型(OOPを含む)
有用
任意の
副作用あり
命令型
言語
理想
プランA
(着実)
プランB
(過激)
純関数型
役立たず
危険
副作用なし
安全
Simon Peyton Jones: “Caging the effects monster: the next big challenge” より引用・和訳
8
関数型プログラミング言語
Haskell, O’Caml, F#, Scala,
など
• 本質的に単純な構造
• 高度な型システム … 型推論など
• OOPL とは異なる方向の拡張性
• 副作用撤廃、または強く制限
メジャーな言語とは、まったく違う方向から
理想に近づく!
9
プログラミング
学習支援システムの研究
魔法使いの弟子を育成
10
ここからの話
• プログラミングの学習の問題点
• 香川研究室での研究テーマの例
– WappenLite について
• WappenLite の構成
• まとめ
– その他
“The camel has two humps”
by Saeed Dehnadi & Richard Bornat 2006
• プログラミングの学習者の成績は
良い/悪いに二分され、中間がない。
(論文自体はプログラミングの素質のテスト法の提案)
プログラミングの学習の問題
• 学習者側の問題
– 時間の割に多種の言語を学ぶ必要がある
– 処理系のインストール・使用法や詳細な文法
規則に煩わされる
– 統合開発環境は初心者向けに設計されたもの
ではなく、時折不可解な状態になる
13
プログラミングの学習の問題
• 教育者側の問題
– ドキュメントを用意しても、コンパイラなど
と連動しないため学生が利用しづらい
– 学習を支援するためのカスタムツールを用意
しても、今度はその使用法が煩雑になる
– 他の教師が用意した教材は、カスタマイズし
ないと利用しにくい
なぜ複数の
プログラミング言語を学ぶのか
• 汎用、領域特化を含め多くのプログラミング言
語がある
C, C++, Java, C#, Haskell, O’Caml, F#, CommonLisp, Scheme,
Prolog, Perl, Ruby, Python, Smalltalk, JavaScript, VB, PHP, Yacc
(Bison), Lex (Flex), assembler, …
• 「井の中の蛙大海を知らず」にならないよう、
別の世界の存在を知る
• 将来の新しい言語に備える
大目標
• 「特定のプログラミング言語、慣用の計
算機システム、ルーティン化したプログ
ラム作成の手順などに規定される閉じた
世界から解き放ち、次元の異なった抽象
的な視点からプログラミング言語やプロ
グラムを眺める機会を与える」
中島玲二 著「数理情報学入門」
マイナーな言語の場合の問題
• その言語専用の開発環境など期待できない
➨ あったとしてもそれはそれで大変かも
• エディタの syntax highlight (色分け)
機能なども期待できない
➨ スペルミスなどつまらないミスで苦労する
• 手軽なグラフィックスライブラリがないか、
あっても情報が少ない
➨ つまらない。
教師にとっては、魅力的な例題・課題を作ることが
難しい
Wappen とは?
http://guppy.eng.kagawa-u.ac.jp/Wappen/
• Web-based applications for
programming paradigms enlightenment
プログラミング学習用Webアプリケーションのため
の EclipseRCP ベースのフレームワーク
• 学習者は Web ページ上のリンクのクリックだけで
学習用のプログラミング環境を起動可能
• 教師は Wappen のプラグインとして、複数の言語
処理系や学習者の理解を支援するツールを提供
➨ プログラミング学習の取っ掛かりを良くする
18
Wappen の欠点
• サイズ が 大きく、(キャッシュはされるが)
学外で利用するには重い
• Eclipse のツールキット SWT が pure
Javaでなく、配備に手間がかかる
• Eclipse プラグインのプログラミング自体
が情報が少なく難しい
http://guppy.eng.kagawa-u.ac.jp/WappenLite/
• より軽量の Web アプリフレームワーク
• 通常のWeb アプリとして作成する
– UI は HTML などを使って記述する
– 非 UI 部は、Java Servlet として作成する
• 対象プログラミング言語に依存する部分
は、一つのクラスにまとめられる
WappenLite の構成
Client host
Back-end
Front-end
Server
host
config
Jetty
(Web app. container)
invoke
invoke
Starter applet
Browser
download
より詳細な構成
Server
host
Client host
Back-end (non-UI)
Context class
Servlet classes
(language-independent)(language-dependent)
Login
Front-end (UI)
console.js
AuthFilter
editor.js
Load
Save
Run
Write
Read
View
Timeout
Listener
start()
load()
save()
run()
write()
read()
stop()
…
WappenLite スクリーンショット
Ajax による Front-end
• エディタ部には CodeMirror などの既存
の Ajax ベースエディタを使用
• コンソール部は プログラム出力の読込み
に WebSocket を使用
• コンソール部は普通の HTML なので、プ
ログラム出力中に HTML タグ などを使う
ことができる
➨ より魅力的な例題・課題の可能性
画像の使用例
(WappenLite for Scala)
Conal Elliot: “Functional Images” (in The Fun of Programming)の作品を使用
WappenLiteのまとめ
• 簡単な配備・格段に速い起動
それでもアプレットが遅いけど
• かゆいところに手が届く UI
➨ よりきめ細かいカスタマイズの可能性
• 拡張のための情報が豊富 (HTML, Ajax)
今後の研究テーマ例
• Scratch や Alice のような
Lego ブロック風エディタ
• C, Java, Bison/Flex などに対する
高機能な Web ベースエディター
(emscripten などを使用)
• プログラム可視化システム・
デバッグ支援システムの構築
(WebSocket, WebGL などを使用)
研究紹介
研究紹介
研究紹介
その他の研究テーマ例
• スマホ・タブレット向けのフロントエン
ドとコンテンツ
• Web 上で C, Haskell などのプログラム
を安全に実行できる環境の構築
• 課題提出用サーバーシステムの改良
(自動採点・リアルタイムメッセージ・
教師用可視化システムなど)
研究紹介
卒研ゼミについて
ゼミのやり方
深夜にやったりはしません
3年生
• 主に輪講
Haskell, アルゴリズム(英語の本), etc
4年生以上
• 進捗報告
• 論文紹介
最後に
こういう人を求めています
• プログラミングが得意に興味がある
• 新しい技術に挑戦するのが好き
• 英語が得意に拒否反応がない