35
香川研究室の紹介 香川 考司 [email protected]

Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

  • Upload
    others

  • View
    1

  • Download
    0

Embed Size (px)

Citation preview

Page 1: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

香川研究室の紹介

香川 考司[email protected]

Page 2: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

香川研の研究テーマ

1. プログラミング言語の型システムの研究

(理論)

2. プログラミング学習支援システムの研究

(実践)

2

Page 3: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

プログラミング言語の型システムの研究

究極のプログラミング言語を求めて

3

Page 4: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

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

Page 5: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

様々なプログラミング言語

Fortran, C, C++, Java, C#, Haskell, Scala, O’Caml, CommonLisp, Scheme, Prolog, Perl, Ruby, Python, Smalltalk, JavaScript, VB, PHP, Closure, Go, …

• パラダイムによる分類命令型、オブジェクト指向、関数型、論理型

• 型付けによる分類静的型検査、動的型検査、他

• 実行方式による分類コンパイラー方式、インタプリター方式

現状では、万能の言語はない

Page 6: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

型あり vs. 型なし**ほんとうは「型なし」という言い方は語弊がある

柔軟

危険 安全

コンパイル時型検査なし

コンパイル時型検査あり

理想

epicurean?快楽主義

stoic?禁欲主義互いに影響

窮屈

C, C++, Java, ML, Haskell, …

Lisp, JavaScript, PHP, Ruby, Perl, Python, …

Page 7: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

関数型 (FPL) vs. OOPLOOPL

(が得意)

FPL(が得意)

GUIなど

文字列・記号処理など

複数のデータ型を扱う処理を

定義することが得意という点は同じ

C++, Java, …

ML, Haskell, …

理想

用途に特化したデータ型

クラス(データ型)の増加

汎用のデータ型関数(メソッド)の増加

7

Page 8: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

純関数型 vs 命令型(OOPを含む)

Simon Peyton Jones: “Caging the effects monster: the next big challenge” より引用・和訳

有用

役立たず 危険 安全

任意の副作用あり

副作用なし

理想

プランA(着実)

プランB(過激)

純関数型

命令型言語

8

Page 9: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

関数型プログラミング言語

Haskell, O’Caml, F#, Scala, など

• 本質的に単純な構造

• 高度な型システム … 型推論など• OOPL とは異なる方向の拡張性• 副作用撤廃、または強く制限

メジャーな言語とは、まったく違う方向から理想に近づく!

9

Page 10: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

プログラミング学習支援システムの研究

魔法使いの弟子を育成

10

Page 11: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

ここからの話

• プログラミングの学習の問題点

• 香川研究室での研究テーマの例

– WappenLite について

• WappenLite の構成

• まとめ

– その他

Page 12: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

“The camel has two humps”by Saeed Dehnadi & Richard Bornat 2006

• プログラミングの学習者の成績は良い/悪いに二分され、中間がない。

(論文自体はプログラミングの素質のテスト法の提案)

Page 13: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

プログラミングの学習の問題

• 学習者側の問題

– 時間の割に多種の言語を学ぶ必要がある

– 処理系のインストール・使用法や詳細な文法規則に煩わされる

– 統合開発環境は初心者向けに設計されたものではなく、時折不可解な状態になる

13

Page 14: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

プログラミングの学習の問題

• 教育者側の問題

– ドキュメントを用意しても、コンパイラなどと連動しないため学生が利用しづらい

– 学習を支援するためのカスタムツールを用意しても、今度はその使用法が煩雑になる

– 他の教師が用意した教材は、カスタマイズしないと利用しにくい

Page 15: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

なぜ複数のプログラミング言語を学ぶのか

• 汎用、領域特化を含め多くのプログラミング言語があるC, C++, Java, C#, Haskell, O’Caml, F#, CommonLisp, Scheme, Prolog, Perl, Ruby, Python, Smalltalk, JavaScript, VB, PHP, Yacc(Bison), Lex (Flex), assembler, …

• 「井の中の蛙大海を知らず」にならないよう、別の世界の存在を知る

• 将来の新しい言語に備える

Page 16: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

大目標

• 「特定のプログラミング言語、慣用の計算機システム、ルーティン化したプログラム作成の手順などに規定される閉じた世界から解き放ち、次元の異なった抽象的な視点からプログラミング言語やプログラムを眺める機会を与える」

中島玲二 著「数理情報学入門」

Page 17: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

マイナーな言語の場合の問題

• その言語専用の開発環境など期待できない➨ あったとしてもそれはそれで大変かも

• エディタの syntax highlight (色分け)機能なども期待できない➨ スペルミスなどつまらないミスで苦労する

• 手軽なグラフィックスライブラリがないか、あっても情報が少ない➨ つまらない。教師にとっては、魅力的な例題・課題を作ることが難しい

Page 18: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

Wappen とは?

• Web-based applications for programming paradigms enlightenmentプログラミング学習用Webアプリケーションのための EclipseRCP ベースのフレームワーク

• 学習者は Web ページ上のリンクのクリックだけで学習用のプログラミング環境を起動可能

• 教師は Wappen のプラグインとして、複数の言語処理系や学習者の理解を支援するツールを提供

➨ プログラミング学習の取っ掛かりを良くする

http://guppy.eng.kagawa-u.ac.jp/Wappen/

18

Page 19: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

Wappen の欠点

• サイズ が 大きく、(キャッシュはされるが)

学外で利用するには重い

• Eclipse のツールキット SWT が pure Javaでなく、配備に手間がかかる

• Eclipse プラグインのプログラミング自体が情報が少なく難しい

Page 20: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

• より軽量の Web アプリフレームワーク

• 通常のWeb アプリとして作成する

– UI は HTML などを使って記述する

– 非 UI 部は、Java Servlet として作成する

• 対象プログラミング言語に依存する部分は、一つのクラスにまとめられる

http://guppy.eng.kagawa-u.ac.jp/WappenLite/

Page 21: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

WappenLite の構成

Starter applet

Jetty (Web app. container)

invoke download

configBack-end

Client host Serverhost

Front-end

invoke

Browser

Page 22: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

より詳細な構成

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

Page 23: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

WappenLite スクリーンショット

Page 24: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

Ajax による Front-end

• エディタ部には CodeMirror などの既存の Ajax ベースエディタを使用

• コンソール部は プログラム出力の読込みに WebSocket を使用

• コンソール部は普通の HTML なので、プログラム出力中に HTML タグ などを使うことができる➨ より魅力的な例題・課題の可能性

Page 25: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

画像の使用例(WappenLite for Scala)

Conal Elliot: “Functional Images” (in The Fun of Programming)の作品を使用

Page 26: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

WappenLiteのまとめ

• 簡単な配備・格段に速い起動それでもアプレットが遅いけど

• かゆいところに手が届く UI➨ よりきめ細かいカスタマイズの可能性

• 拡張のための情報が豊富 (HTML, Ajax)

Page 27: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

今後の研究テーマ例

• Scratch や Alice のようなLego ブロック風エディタ

• C, Java, Bison/Flex などに対する高機能な Web ベースエディター(emscripten などを使用)

• プログラム可視化システム・デバッグ支援システムの構築(WebSocket, WebGL などを使用)

Page 28: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

研究紹介

Page 29: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

研究紹介

Page 30: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

研究紹介

Page 31: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

その他の研究テーマ例

• スマホ・タブレット向けのフロントエンドとコンテンツ

• Web 上で C, Haskell などのプログラムを安全に実行できる環境の構築

• 課題提出用サーバーシステムの改良(自動採点・リアルタイムメッセージ・教師用可視化システムなど)

Page 32: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

研究紹介

Page 33: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

卒研ゼミについて

Page 34: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

ゼミのやり方深夜にやったりはしません

3年生

• 主に輪講Haskell, アルゴリズム(英語の本), etc

4年生以上

• 進捗報告

• 論文紹介

Page 35: Webベースプログラミング学習支援環境 Wappen と WappenLite …guppy.eng.kagawa-u.ac.jp/2014/InternshipForCollege... · 関数型プログラミング言語 Haskell,

最後に

こういう人を求めています

• プログラミングが得意に興味がある

• 新しい技術に挑戦するのが好き

• 英語が得意に拒否反応がない