Webベースプログラミング学習支援環境 Wappen と WappenLite...
Transcript of Webベースプログラミング学習支援環境 Wappen と WappenLite...
香川研究室の紹介
香川 考司[email protected]
香川研の研究テーマ
1. プログラミング言語の型システムの研究
(理論)
2. プログラミング学習支援システムの研究
(実践)
2
プログラミング言語の型システムの研究
究極のプログラミング言語を求めて
3
1949 (EDSAC)
プログラミング言語の歴史
1954 FORTRAN
1958 LISP1958 ALGOL
1967 Simula
1970 Pascal
1972 C1972 Prolog
1974 ML
1980 Smalltalk
1983 C++
1987 Perl
1990 Python1990 Haskell
1995 Java1995 Ruby
2003 Scala
※ ただし, 誕生(公開)と流行には大きなズレがある場合が多い
今後も新しいプログラミング言語が誕生するのは間違いない!
1975 Scheme1959 COBOL
様々なプログラミング言語
Fortran, C, C++, Java, C#, Haskell, Scala, O’Caml, CommonLisp, Scheme, Prolog, Perl, Ruby, Python, Smalltalk, JavaScript, VB, PHP, Closure, Go, …
• パラダイムによる分類命令型、オブジェクト指向、関数型、論理型
• 型付けによる分類静的型検査、動的型検査、他
• 実行方式による分類コンパイラー方式、インタプリター方式
現状では、万能の言語はない
型あり vs. 型なし**ほんとうは「型なし」という言い方は語弊がある
柔軟
危険 安全
コンパイル時型検査なし
コンパイル時型検査あり
理想
epicurean?快楽主義
stoic?禁欲主義互いに影響
窮屈
C, C++, Java, ML, Haskell, …
Lisp, JavaScript, PHP, Ruby, Perl, Python, …
関数型 (FPL) vs. OOPLOOPL
(が得意)
FPL(が得意)
GUIなど
文字列・記号処理など
複数のデータ型を扱う処理を
定義することが得意という点は同じ
C++, Java, …
ML, Haskell, …
理想
用途に特化したデータ型
クラス(データ型)の増加
汎用のデータ型関数(メソッド)の増加
7
純関数型 vs 命令型(OOPを含む)
Simon Peyton Jones: “Caging the effects monster: the next big challenge” より引用・和訳
有用
役立たず 危険 安全
任意の副作用あり
副作用なし
理想
プランA(着実)
プランB(過激)
純関数型
命令型言語
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 とは?
• Web-based applications for programming paradigms enlightenmentプログラミング学習用Webアプリケーションのための EclipseRCP ベースのフレームワーク
• 学習者は Web ページ上のリンクのクリックだけで学習用のプログラミング環境を起動可能
• 教師は Wappen のプラグインとして、複数の言語処理系や学習者の理解を支援するツールを提供
➨ プログラミング学習の取っ掛かりを良くする
http://guppy.eng.kagawa-u.ac.jp/Wappen/
18
Wappen の欠点
• サイズ が 大きく、(キャッシュはされるが)
学外で利用するには重い
• Eclipse のツールキット SWT が pure Javaでなく、配備に手間がかかる
• Eclipse プラグインのプログラミング自体が情報が少なく難しい
• より軽量の Web アプリフレームワーク
• 通常のWeb アプリとして作成する
– UI は HTML などを使って記述する
– 非 UI 部は、Java Servlet として作成する
• 対象プログラミング言語に依存する部分は、一つのクラスにまとめられる
http://guppy.eng.kagawa-u.ac.jp/WappenLite/
WappenLite の構成
Starter applet
Jetty (Web app. container)
invoke download
configBack-end
Client host Serverhost
Front-end
invoke
Browser
より詳細な構成
editor.js
console.js
Front-end (UI)Login
Servlet classes(language-independent)
LoadSave
RunWriteRead
View
TimeoutListener
start()
load()save()
run()write()read()
stop()…
Back-end (non-UI)
AuthFilter
Client host
Context class(language-dependent)
Serverhost
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年生以上
• 進捗報告
• 論文紹介
最後に
こういう人を求めています
• プログラミングが得意に興味がある
• 新しい技術に挑戦するのが好き
• 英語が得意に拒否反応がない