香川研究室の紹介


香川 考司

香川研の研究テーマ

 

  1. プログラミング言語処理系の研究
     
  2. プログラミング学習支援システムの研究
     

プログラミング
言語処理系
の研究

プログラミング言語の歴史

歴史

今後も新しいプログラミング言語が誕生するのは間違いない!
さらに、既存のプログラミング言語にも新しい要素が導入されていく。

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

Fortran, C, C++, Java, C#, Haskell, Scala, OCaml, CommonLisp, Scheme, Prolog, miniKanren, Perl, Ruby, Python, Smalltalk, JavaScript, VB, PHP, Clojure, Kotlin, Go, Swift, Rust, …

  • パラダイムによる分類
    命令型、オブジェクト指向、関数型、論理型
  • 型付けによる分類
    静的型検査、動的型検査、他
Pieter Bruegel the Elder - The Tower of Babel (Vienna) - Google Art Project - edited

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

関数型 (FP) vs. OOP

FP vs. OOP

静的型付け vs. 動的型付け

static vs. dynamic

純粋 (pure) vs. 不純 (impure)

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

  • プログラミングの学習者の成績は良い/悪いに二分され、中間がない。 (論文自体はプログラミングの素質のテスト法の提案)
2011 Trampeltier 1528

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

  • 汎用型、領域特化型を含め多くのプログラミング言語がある
    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 で記述する

さらに…

スクリーンショット

スクリーンショット

プログラミング言語の学習の問題
学習者側の問題

  • 時間の割に多種の言語を学ぶ必要がある
  • 処理系のインストール・使用法や詳細な文法規則に煩わされる
  • 統合開発環境は初心者向けに設計されたものではない
🏊 🚴

プログラミング言語の学習の問題
教育者側の問題

  • ドキュメントを用意しても、コンパイラーなどと連動しないため学生が利用しづらい
  • 学習を支援するためのツールを用意しても、今度はその使用法が煩雑になる
  • 他の教師が用意した教材は、カスタマイズしないと利用しにくいクセがスゴイ

研究テーマ例

  • Fibonacci number in Blocky Blockly(ブロックエディター)の改良
  • C, Java, Python などに対するプログラミング支援システム
  • プログラム可視化・デバッグ支援システム

研究テーマ例 (1)

末友

研究テーマ例 (2)

西山

研究テーマ例 (3)

島川

研究テーマ例 (4)

大橋

研究テーマ例 (5)

仁科

研究テーマ例 (6)

佐野

研究テーマ例 (7)

木村

研究テーマ例 (8)

久保

研究テーマ例 (9)

朝野

研究テーマ例 (10)

有若

研究テーマ例 (11)

小田
cf.) Human Resource Machine

研究テーマ例 (12)

西村

その他の研究テーマ例

  • タブレット教師側支援システムの改良
    自動作題/採点・教師用可視化システムなど
  • Haskell などによる、領域特化型言語 (DSL) の実装
  • 数学のイメージ 算数・数学📏📐の学習とプログラミングを結びつけるシステム(?)

卒研ゼミについて

ゼミのやり方

3 年生

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

4 年生以上

  • 卒研に関連する論文紹介
  • 卒研プロジェクト進捗報告

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

 

  • プログラミングが得意に興味がある
  • 新しいものに挑戦するのが好き
  • 英語が得意に拒否反応がない

The End

ご清聴ありがとうございました。