2021年2月18日木曜日

初学者にやさしいデータ入出力の抽象化とは

かなり昔の話になるが,SSS2015という学会で「初学者向けプログラミング教育に関する意識調査 ― GUIとCUIのどちらがよいか? ―」という発表をした.これは2つのプログラムについてGUIベースのものとCUIで提示したものとどちらが教育的であるかを検証したものであった.


その議論はかなり盛り上がり,示唆に富む意見もいろいろと頂戴することができた.SSS2015での発表と議論,皆さんから寄せられた自由回答でのコメントを踏まえてじっくり考えてみたところ,結局,GUIとCUIという対立軸はややミスリーディングであり,本質的な違いはもっと別のところにあるのではないかという結論に至った.すなわち,提示した2つのプログラム,その違いはGUIとCUIではなく,プログラム実行環境の違いにすぎないというものである.

さらにいえば,この実行環境の違いをどう捉えるか,そして,どちらを先に教示したほうが理解が進むか,という問題設定と理解すべきであった.もちろん,近年のWebシステムエンジニアになるのであれば比較的初期の段階でいずれも理解しておくべき概念であり,実際のWebシステムを実装するためにはいずれも求められる知識である(前者はフロントエンジニア,後者はサーバサイドエンジニア,という大まかな役割分担はあるかもしれないとはいえ).

インタフェースの違いをどう教えるか

ある処理X(先の論文で提示した例では「文字列の反転」)という処理を考える.プログラミング教育のごく初期段階では,プログラム内部にハードコードして変数に値を与える例で説明しても問題はなかろう.しかし,実際のシステムでは,外部とのデータ入出力が不可欠である.そこで,古いタイプ(ここでは便宜上,UNIXerを「古いタイプ」と類型する)は「標準入力」「標準出力」というインタフェースの理解を求めた.

これらのインタフェースは,データを全て文字列のストリームとして表現するという抽象化をひとたび理解すれば,ごく自然に理解できると信じられているインタフェースである.しかし,「|」(パイプ)でコマンドを結びつけることやリダイレクトの概念,あるいは,キーボードからの入力やシェルが動作している端末エミュレータへの出力が暗黙のうちに標準入出力に結び付けられているといった抽象化を理解しなければならないというハードルが存在する.

一方,Webインタフェースで示されたプログラム(新しいタイプ)では,その部分はHTMLで表現されたGUI部品で,若干ではあるが具体化されている.なぜなら,テキストエリアという目に見える「入力する場所」「出力される場所」があり,それらがプログラムの中に示されているからである.

しかし,処理Xには本質的には関係ないはずのHTMLを理解しなければならず,また.JavaScriptで記述された処理Xの本体部分とそれらのGUI部品とを結びつけるためには,DOMの概念も正しく理解していなければならない.やはり,ここにもHTMLやDOMで表された入出力インタフェースの理解が求められるているだけであり,結局のところ新しいタイプでも入出力インタフェースの理解が不可欠ということである.

まとめ

以上を整理すると,この問題は,以下の3つの観点からの比較という側面を持つといえよう.

  • 入出力インタフェースに関する抽象化レベルが,1. 高いか,2. 低いか
  • ブラックボックス化されている入出力機構は,1.「標準入出力(Unix技術)」か,2.「HTML/DOM(Web技術)」か
  • プログラムから入出力インタフェースに関する記述を,1. 極力排除するか,2. ある程度明示的に示すか

いずれも前者が古いタイプ,後者が新しいタイプである.以上を踏まえたうえで,改めて皆さんのご意見を伺いたいところ.なお,上記2つの他に,データベースに対するデータの入出力なんかも考えられるかもしれないが,いきなりそれはちょっと難しいだろう.皆さんはどうお考えになるだろうか?

参考文献

飯尾 (2015) 初学者向けプログラミング教育に関する意識調査 ― GUIとCUIのどちらがよいか? ―, 情報処理学会 コンピュータと教育研究会 情報教育シンポジウム Summer Symposium in Sakaiminato 2015 (SSS2015), IPSJ Symposium Series Vol. 2015, pp. 17-22, 鳥取 境港

0 件のコメント:

コメントを投稿