香川研究室の紹介


香川 考司

香川研の研究テーマ

 

  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(外部リンク)

研究テーマ例

  • Haskell の型システムの拡張の提案と実装
  • 教育用ミニ言語・領域特化言語 (DSL) の実装
    • パーサーの実装は得意
  • ソースコード解析・変換システムの実装
    • 構文木の操作も得意

主に Haskell を使って実装する

研究テーマ例 (1)

島川

研究テーマ例 (2)

木村

研究テーマ例 (3)

大橋

研究テーマ例 (4)

有若

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

“The camel has two humps”

by Saeed Dehnadi & Richard Bornat, 2006

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

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

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

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

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

Web ベースのプログラミング学習支援システム

プログラミング言語の学習の問題
最近の小中高の学習者の問題

  • Scratch などでプログラミングの楽しさに目覚めても、その後が続きにくい
  • ロボットなどのハードウェアを用いると、学ぶ側は楽しいが、準備する側は負担が大きい

研究テーマ例

  • Fibonacci number in Blocky Blockly アプリの改良
    Scratch 風のエディター作成のためのライブラリー
    • オブジェクト指向を採り入れる
    • タブレットやスマートフォンのセンサーを活かす
    • パッケージ管理システムを採り入れる
  • プログラム可視化・デバッグ支援システム
    • JavaScript 上の処理系や Docker 利用

研究テーマ例 (1)

佐野

研究テーマ例 (2)

研究テーマ例 (3)

末友

研究テーマ例 (4)

西山

研究テーマ例 (5)

久保

研究テーマ例 (6)

朝野

研究テーマ例 (7)

小田
cf.) Human Resource Machine

その他の研究テーマ例

  • 数学のイメージ 算数🧮・数学📏📐・理科🌏🧬の学習とプログラミングを結びつけるシステム
  • タブレット教師側支援システムの改良
    自動作題/採点 システムなど

卒研ゼミについて

ゼミのやり方

3 年生

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

4 年生以上

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

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

 

  • プログラミングがもっと得意になりたい
  • プログラミング言語自体のことを知りたい
  • (Web 関連などの)新しい技術について調べたい

The End

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