香川研究室の紹介
香川 考司
kagawa.koji@kagawa-u.ac.jp
香川研の研究テーマ
- プログラミング言語処理系の研究
- プログラミング学習支援システムの研究
プログラミング
言語処理系
の研究
プログラミング言語の歴史
今後も新しいプログラミング言語が誕生するのは間違いない!
さらに、個々のプログラミング言語にも新しい構成要素が導入される。
様々なプログラミング言語
Fortran, C, C++, Java, C#, Haskell, Scala, OCaml, CommonLisp, Scheme,
Prolog, miniKanren, Perl, Ruby, Python, Smalltalk,
JavaScript, VB, PHP, Clojure, Kotlin, Go, Swift, Rust, …
- パラダイムによる分類
命令型、オブジェクト指向、関数型、論理型
- 型付けによる分類
静的型検査、動的型検査、他
- 実行方式による分類
コンパイラー方式、インタプリター方式
現状では万能の言語はない
関数型 (FP) vs. OOP
静的型付け vs. 動的型付け
Pure vs. Impure
Simon Peyton Jones: “Caging the effects monster: the next big challenge” より引用・和訳・変更
関数型プログラミング言語
Haskell, OCaml, F#, Scala, など
- 本質的に単純な構造
- 高度な型システム ⋯ 型推論など
- OOPL とは異なる方向の拡張性
- 副作用を撤廃、または強く制限
メジャーな言語とは、まったく違う方向から理想に近づく!
cf.)
programming languages influence network(外部リンク)
ここからの話
- プログラミングの学習の問題点
- 香川研究室での研究テーマの例
“The camel has two humps”
by Saeed Dehnadi & Richard Bornat, 2006
- プログラミングの学習者の成績は良い/悪いに二分され、中間がない。
(論文自体はプログラミングの素質のテスト法の提案)
プログラミング言語の学習の問題
学習者側の問題
-
時間の割に多種の言語を学ぶ必要がある
-
処理系のインストール・使用法や詳細な文法規則に煩わされる
-
統合開発環境は初心者向けに設計されたものではなく、時折不可解な状態になる
- 🏊 🚴
プログラミング言語の学習の問題
教育者側の問題
- ドキュメントを用意しても、コンパイラーなどと連動しないため学生が利用しづらい
- 学習を支援するためのツールを用意しても、今度はその使用法が煩雑になる
- 他の教師が用意した教材は、カスタマイズしないと利用しにくいクセがスゴイ
なぜ複数の
プログラミング言語を学ぶのか
- 汎用型、領域特化型を含め多くのプログラミング言語がある
C, C++, Java, C#, Haskell, OCaml, F#, CommonLisp, Scheme, Prolog,
miniKanren, Perl, Ruby, Python, Smalltalk, JavaScript, VB, PHP, Go, Swift, Rust,
Bison, Flex, assembler, …
- 「井の中の蛙🐸大海を知らず」にならないよう、別の世界の存在を知る
- 将来の新しい言語に備える
大目標
特定のプログラミング言語、慣用の計算機システム、
ルーティン化したプログラム作成の手順などに規定される閉じた世界から解き放ち、
次元の異なった抽象的な視点からプログラミング言語やプログラムを眺める機会を与える
中島玲二 著「数理情報学入門」より借用
ただし、もともとはプログラミング言語意味論に関する文章
マイナーな言語の場合の問題
- その言語専用の開発環境など期待できない
🡆 あったとしても慣れるのが大変かも
- エディターの色分け機能なども期待できない
🡆 スペルミスなどつまらないミスで苦労する
- 手軽なグラフィックスライブラリーがないか、
あっても情報が少ない
🡆 学習者にとってはつまらない
教師にとっては、魅力的な例題・課題を作ることが難しい
Wappen とは?
- Web-based applications for
programming paradigms enlightenment
プログラミング学習用 Web アプリケーションのためのプロジェクト
-
学習者は Web ページ上で学習用のプログラミング環境を起動する
-
教師は、複数の言語処理系や学習者の理解を支援する Web ベースのツールを提供する
🡆 プログラミング学習の取っ掛かりを良くする
WappenLite
-
WappenLite は軽量で Web ベース、つまり、
- UI 部は HTML, CSS, JavaScript で記述する
- 非 UI 部(バックエンド)は、Java で記述する
さらに…
スクリーンショット
その他の研究テーマ例
-
教師・TA への質問システム
- 学習データの収集・解析システム
- 教師側支援システムの改良
自動作題/採点・教師用可視化システムなど
-
算数・数学の学習とプログラミングを結びつけるシステム(?)
ゼミのやり方
3 年生
- 主に輪講
Haskell, アルゴリズム(英語の本), etc
4 年生以上
こういう人を求めています
- プログラミングが得意に興味がある
- 新しいものに挑戦するのが好き
- 英語が得意に拒否反応がない