何某日和

「カメラ」のち「ハンダゴテ」ところにより「プログラミング」 ── そんな私“かめきち”のウェブサイト

第1回 中間発表 [2012.06.27]

目次

  1. はじめに
  2. 今日に至った経緯 ─ 研究室配属前から今まで
  3. 理想的目標と現実的目標
  4. 達成に必要な事項と今後の見通し
  5. さいごに
  6. 発表後のご意見・ご感想など
  7. 添付資料

はじめに

表紙・表題の提示

行事名コンピュータ理工学特別研究 第1回 中間発表
発表場所京都産業大学 第2実験室棟 65実験室 青木研究室
発表日時2012年06月27日(水) 15時00分-18時15分
題名「スパゲッティを題材としたソフトウェアプログラム可視化に関する研究」中間発表(1)
発表者コンピュータ理工学部 ネットワークメディア学科 4年 宮崎 雅文

目次

※既に上の項目で記載したため省略。

今日に至った経緯 ─ 研究室配属前から今まで

研究室配属前の「研究へのスタンス」

 ここでは、「研究」だとか「研究室」などを考える以前の自分が、研究に対してどのような印象を持っていたかを述べることにします。 まず第一印象から述べると、研究とは...

発想力のない人間には苦痛でしかない、陰気で、面倒で、泥臭い、半強制的、理系大学生の義務。

満更間違っていないとは言え、今にもお叱りを受けかけない発言ですね。しかしながら、これまで受動的な学びを中心として取り組んできた自分からしてみれば、 何をすべきかよくわからない漠然とした「研究」に対して不信感が拭えなかったのでしょう。 とかく「研究」に対する好印象など、何一つ無かったと言って過言ではありません。

 されど、この後に待ち構える「就職活動」を通して、モノの見方が大きく変わり、それが自らの研究に対して良い作用を働きかけることになってゆきます。

研究室配属後の煩悩と苦闘

 幸いにして志望研究室への配属となった2011年夏。覚束ぬ足取りのまま「研究活動」への第一歩を歩み始めることになります。
企業出身の担当教員ならではの、夏の集中講義(通称「青木塾」)に奔走する夏休みを過ごし、気が付けば秋学期が始まり、追って就職活動まで。 やりたいこと、やるべきこと、やらねばならぬこと。全てが目の前に山積して身動きが取れなくなってしまったのです。 これまで、障害物のない野っ原をニコニコしながら散歩していたのが、突如自らが火ダルマと化して慌てふためいている、と言ってご想像頂けるでしょうか。

 目前のタスクを消化したい、けど、集中力も保たず一向に消化しない... そんな状況を受けて、元々ありもしなかった自信をさらに喪失し、爆弾のような問い[1]を自らに投げかけるようになります。 研究ミーティングと称した「人生相談」を毎週繰り返すことになったのは、まさにこのことによるものです。 「研究活動しなきゃいけない」という気持ちだけが先走りして、とかくテーマを模索して。 一つ上の先輩が取り組んでいた言語処理系への憧れを持っていたこともあり、その先輩と同じ道を進みたいなと考えてみるものの、 「それが本当に自分のやりたいことなのか」「テーマ選択を目的にしているのではないか」と自問し、結局手を付けることができませんでした。

今思えば、こうした葛藤があったからこそ、今のテーマに「コレだ!」と感じられたのでしょう。そう考えれば無意味な苦闘ではなかったなと思います。


[1] 爆弾のような問い : 中高生の国語科で扱った作品に使われていた表現。その人の根幹を揺るがすような疑問。「人は何故生きるのだ」など。 ここでは「研究とは何だ、何故研究をするのだ」だとか「自分の興味とは何だ」などという類のもの。ある程度は追求すべきですが、行き過ぎるとミイラになるので要注意ですね。。。

先輩の研究発表と就職活動の効用

 12月から始めた就職活動が終盤戦に差し掛かっていた翌年2月頃、先輩方の研究発表が執り行われました。 結局「大学生の研究」が行き着く先は、この研究発表だ...と知って、ようやく「研究」の大まかなイメージが掴めたのだと思います。 いつぐらいには何をしておいたほうがよい、この時にはこうでなくてはならない、など、少し具体的な研究計画を描けるようになったのがこの頃です。

 肝心の研究テーマを決定できていなかったのは問題ですが、それでも就職活動があったおかげで「研究の方向性」までは割り出すことができました。 実は、就活のエントリーシートや面接の中で「あなたが取り組んでいる研究について説明してください」という趣旨の質問がなされることもあるため、 “言い訳程度”であっても説明せねば...と思い「こんなことをやりたいと考えています」という趣旨の文章を用意したのです。それは以下のようなもの。(一例)

「ソフトウェアメトリクス(ソースコードの品質計測)に関する研究」
実体が無いために触ることもできない"ソフトウェア"について、様々な側面で捉えて数値化することで、その品質を計測するものです。 特に今回は、プログラミング初学者を対象とした計測結果提示に関する研究を行います。どれほど豊富な指標があれど、 初学者にとってみればその数値の意味するところすらわからないものです。こうした、"メトリクスの効用"と"初学者の理解力"の差を埋めるべく、 提示方法の改善・わかりやすい指標の提案について検討します。

実は担当教員のテリトリーに「ソフトウェアメトリクス」が入っていたために、この類のテーマに決めたのですが、もちろん、それ以前に「自発的な動機」もあります。

  • 実用的なもの・誰かの役に立つものを云々したい
  • 言語処理系に興味がある
  • 教育に関することに興味がある

 保育園児だった頃の父の日に手作りプレゼントを贈ったことがあります。普段は厳しく寡黙だった父も、その時は笑顔で喜んでくれたものです。それが嬉しくて嬉しくて... ── そうした経験によって幼少期からモノ作りが好きだったのですが、やはり「誰かの役に立ちたい・誰かに喜んで欲しい」という意欲が強いのでしょう、 「実用的なものを作りたい」という気持ちが無意識のうちに現れるようです。[2]  これら全てを満たすことができれば万々歳なのですが、発想力の乏しい私には「アイデア」など簡単には見つからず。就活と並行して苦闘を続けてゆきます。

一方、特別研究Iという科目では、師から様々な手解きを受け、様々な視座を会得することができたようです[3]が、 それはおそらく師が我々学生に対して、多様な実例を開示してくださったことによるものでしょう。 数学かと思えば文法の話が出てきて、グラフィックスかと思えば哲学チックな話さえ出てきて。聴きながら理解はできるものの「果たしてこの学びが意味を成すのだろうか」と感じることもしばしばありました。 しかし、発想力の乏しい私だからこそ、その「視座の会得」による効用は大きかったのです。 示された実例の一つ「ソフトウェアプログラムを都市として可視化する研究」は、その最たる例でしょう。


[2] 私自身はそのつもりが無かったのですが、友人に「おまえさんの作るものは全部が実用指向。面白さがない!」などと指摘を受けたことがあって。 言われてみれば確かにその傾向は強いですね。端的な例で言えば、面白さを追求する「ゲームの製作」にはあまり興味が向かなかったりします。

[3] 人ごとのように書いていることには理由があります。 「視座を得た!」という実感はその場では得られず、その後に何か別の事案について思考を巡らせている時に、会得した視座が「はっ!!」と現れて、思考を別の次元へといざなってくれる... その瞬間に初めて「あの時、視座を得ていたのか...」と実感するのです。

現在のテーマ名の紹介・そこに至った由縁

 まずは、自ら定めた研究テーマ(暫定名)を改めてご紹介します。

スパゲッティを題材としたソフトウェアプログラム可視化に関する研究

先にご紹介した、ソフトウェアプログラム可視化に関する先行研究。 そこでは、「ソフトウェアプログラム」という実体の無い抽象的存在を「都市」という具体的存在に射影することで、プログラムの存在感を感覚で訴えています。 しかし、何故「都市」なのか、もっと他に無いだろうか...と考えあぐねていました。

「都市」から連想 → 「道路」? → 似たようなものなのでヤメ! → 食べ物は? → 「納豆」 → ダメ[4] → 「スパゲッティ」 → ?!

そういえば「スパゲッティプログラム」という言葉を耳にしたことがあります。複雑なプログラムを「スパゲッティ」と表現するものですが、確かによくできた巧みな比喩です。 それならば可視化の対象は「スパゲッティ」に決まりだ!という具合に、ひらめき任せで研究テーマを決定したのでした。(2012年6月11日のこと。)

そんな思いつき程度のテーマで活動を始めたわけですが、この中間発表(1)の資料を作成する中で、ある重大なミスに気が付くのです...。


[4] 納豆は粘り気が命。ネバネバしているほうが高品位!(と個人的に考えているだけです。) 「プログラムにおける粘り気」って何だろうと考えた時、実はプログラムの複雑さに写像できるのではないかと思い至ったのです。 例えば「ある変数が様々な場所で使われていたら、複雑でゴチャゴチャしている」=「ネバネバしている」という具合に。 納豆はネバネバして良い、されどプログラムはネバネバされたら困る...つまり「ネバネバ度」という指標が表す意味が逆転していたため「こりゃ使えん...」と思ったのです。 なので「互いに複雑な関係をしている方が良い」という場面であれば、納豆を用いた可視化も一案になりましょう。例えばプログラムの難読具合など。

勘違いで青ざめて、工夫で開き直る

 当のこのページを作成している時、あることに気付いてしまいました。
「スパゲッティプログラム」は「複雑なプログラム」(「悪いプログラム」とも)を表す比喩表現。 複雑であればあるほど「スパゲッティ」に近づき、複雑でない綺麗なプログラムであるほど「スパゲッティ」から離れるはずです。 つまり「良いプログラム」を「良いスパゲッティ」に写像しようとしていたにも関わらず、そもそも「良いプログラム」は「スパゲッティ」にすらならないのではないか、ということです。 これには青ざめました。研究テーマ自体が誤っていたということでしょうか...。

 しかし、少し捉え方を変えてみたのです。
本当に「スパゲッティのようなプログラムは複雑で品質が悪い」と言えるのでしょうか。 実は最近、研究の一環として少々値の張るスパゲッティを食べに行ったのですが、そこで食べたスパゲッティは絡まっているように見えて、さほど絡まっていなかったのです。 フォークで持ち上げれば、フォークに掛かった麺のみが引き上げられるのです。 ところが、(これもまた研究の一環として)スーパーで購入したカップ麺タイプのスパゲッティは、見た目に相応しい絡み具合だったのです。 フォークで持ち上げようものなら、余分な麺まで引っ付いてくるったら...。

つまり、一言に「スパゲッティ」と言えど、プログラムと同様に品質の良し悪しがあるのです。 そう考えれば「良いプログラム→良いスパゲッティ」「悪いプログラム→悪いスパゲッティ」と写像することは間違いではなさそうです。 これで研究テーマを揺るがす重大な問題を回避することができました。

ただし、世界中で使われている「スパゲッティコード(Spaghetti Code)」という言葉は、やはり悪い意味で罷り通っているよう[5]で、 この研究では、世界における定義と相反する定義を取ることになります。現在のところ、このスタンスを維持しようと考えています。

世界中のイタリアンシェフを敵に回すような表現は言語道断である。プログラムと同様にスパゲッティにも良し悪しはあるのだ。

...なんて主張できるまでに研究を仕上げることができれば、なんだか良い感じですよね。


[5] 要文献!! 論文にしてまとめる時までに、この件に関連する文献を参照し、調査すること。用語辞典が良い?(自分へのメモです...)

理想的目標と現実的目標

テーマの詳細(理想的目標)

 前節でもご紹介しました「スパゲッティを題材としたソフトウェアプログラム可視化」に関する研究。この研究が何を目的として、また何を対象とするのかを明らかにし、将来的な展望(理想的目標)を述べてゆこうと思います。

まずは目的から述べることにしましょう。

「プログラム」という実体のない抽象的存在を、「スパゲッティ」という具体的存在として表現する事で、プログラムの実在感を向上させること。 また、その実在感の向上によって、プログラミング操作に対する敷居を下げる(プログラミング行為に余裕を生む)こと。 さらに、その余裕により、動作本位の低品質な開発ではなく、正しい設計に従った高品質な開発に意識を移せるようになること。 つまり、世界に高品位なソフトウェア製品を提供できるようになること。

随分と大げさなことを列挙していますが、大事なことだと思います。 仮に「実在感の向上」という目的を果たしたとして、もし「それがどうした」と言われて何も言えないようでは、それは実用的研究とは言い難いでしょう。 「実用的なものについて云々したい」と述べるからには、そのことが「何を意味するのか」「何の役に立つのか」ということを幾段か考えておきたかったのです。 そうすることで、どのようなドメインを持つ人であれ、この研究の意義について何かしらの説明が付くようになります。

次に研究の対象を簡単に述べます。

本研究では、「初学者っぽいプログラム」と「玄人っぽいプログラム」について各々の傾向を分析・調査し、 さらにスパゲッティ(或いはパスタ)についても同様の分析・調査を行います。(但し、その「品質」を重点的に検証する。) その上で、プログラムとスパゲッティとの間にある写像関係を明らかにし、定式化します。(特に「複雑さ」に注目する。) さらに、写像関係を利用して可視化・可触化・可食化を行い、プログラミング初学者や一定水準以上の職業プログラマなどを被験者とした実験・考察を行うことで、研究の成果について検証します。 なお「初学者」「玄人」「複雑さ」などの曖昧な表現については、後々の研究活動において定義するものとします。

対象を限定するには、相応のデータに対する分析・調査を行った上で熟考しなければならないため、上記の通り現段階では対象を絞り込むことができません。 今後の研究活動で調査・検討を重ね、絞り込む予定です。

最後に本研究の理想的目標を掲げます。

  • プログラミングの「初学者」と「玄人」との差異をソースコードから検出するため、その指標を確立する。
  • プログラム(抽象的存在)をスパゲッティ(具体的存在)に写像することで、プログラムの実在感を高める。
  • 写像した(仮想空間上の)スパゲッティを、ハプティックデバイスを用いて可触化する。
  • プログラムを本物のスパゲッティに写像し「プログラムの可食化」を実現する。
  • 可視化・可触化・可食化の効用について検証を行い、これらの可能性を追う。
  • 解析の対象とする言語は数種類対応できるように実装する。
  • ...

次節でも触れますが、これら全ての項目を学士研究として仕上げなければならないという制約はありません。

大学時代に済ませておきたいこと(現実的目標)

「理想的な目標」で挙げた項目のうち、次の5点は学士研究内で成果を出したいと考えています。

  • プログラミングの「初学者」と「玄人」との差異をソースコードから検出するため、その指標を確立する。
  • プログラム(抽象的存在)をスパゲッティ(具体的存在)に写像することで、プログラムの実在感を高める。
  • プログラムを本物のスパゲッティに写像し「プログラムの可食化」を実現する。
  • 当研究における可視化・可食化の効用について検証を行い、その可能性を追う。
  • 解析の対象とする言語は数種類対応できるように実装する。

達成に必要な事項と今後の見通し

必要事項

上記の目標を達成するために必要となる事項を列挙します。

  • 先行研究に関する調査を行う。(「スパゲッティプログラム」「可食化」について)
  • スパゲッティの性質を調査する。何が良いのか、何が悪いのかを知る。
  • プログラムの性質を調査する。特に初学者と玄人における差異を明らかにしたい。
  • 既存のソフトウェアメトリクスについて調査・検討し、新たな視点を探る。また解析プログラムの試作を行う。
  • 実験のための解析・計測システムを構築し、被験者に協力を仰いで実験を実施して検証する。

現在の取り組み:スパゲッティ(パスタ)の調査

現在はスパゲッティ(パスタ)の調査を行なっています。 文献「パスタの歴史」を参考にしたり、はたまた実際にパスタ料理を食してみたり。 食したパスタに関しては「研究企画 パスタを食べる!」にて記録を残しています。

直近の取り組み:プログラムの良し悪しの調査、解析部の試作

学生のプログラム、担当教員のプログラム、オープンソースのプログラムなどを見比べ、既存のメトリクスツールで計測することはもちろん、 初学者と玄人との違いを検出するための指標について検討します。 また、特にメトリクスに拘るわけではありませんが、字句解析に慣れておくために「解析部の試作」に取り組みます。

今後の取り組み:中間発表(2)~(4)をマイルストーンとして

今後の中間発表で、どのような地点まで辿り着いているべきかを定めておきます。今後の活動の目安になるものです。

  • 中間発表(2) : 先行研究・スパゲッティの性質・プログラムの性質の調査を終え、また指標の検討や、解析部の実例作成を終えていること。
  • 中間発表(3) : 可視化・可食化の完成の目処が立てられていること。
  • 中間発表(4) : 作成したメトリクスツールを用いた実験を行い、その調査結果をまとめ終えていること。

さいごに

あとがき

結局最後まで資料作成を後回しにしてしまったがために頭でっかちの資料と相成りまして、反省する他ありません。 まずは、現状一番やるべきだった「過去の記録」を済ませることができたという点においては、評価に値すると考えています。 今後はこのページを振り返りつつ、研究活動を円滑に進めることができるはずです。きっと...。

調査協力のお願い

本研究では「初学者っぽいプログラム」や「玄人っぽいプログラム」の比較検討を行わなければならず、今回は是非、学生の皆様にご協力いただけないかと考え、ここにお願い申し上げます。 1,2年次のプログラミング演習科目における提出課題を私にご提供いただけないでしょうか。研究に使用する際には、決して個人が特定されることの無いよう、細心の注意を払って取り扱います。 どうぞ宜しくお願い致します。

発表後のご意見・ご感想など

麺を持ち上げる可視表現

 お一方のご質問より至った「麺を持ち上げる可視表現」。
結局、「初学者っぽさ」や「玄人っぽさ」をどのようなスパゲッティに写像するのか、という類の質問だったと思いますが、 その質問に応答しようとする中で、次のことに気付かされたのです。

「良いスパゲッティも悪いスパゲッティも見た目が変わらない」というのであれば、「初学者っぽさや玄人っぽさの可視化」云々の話ではない!

様々なプログラムを可視化したところで、それらに差異がなければ、可視化の意味を成しませんし研究にならないのでは...これは参った...。

そこで頂いた助言が「麺を持ち上げる可視表現」を利用すること。 一皿のスパゲッティを見て差異を感じなかったとしても、その麺のコンディション(オイル、ゆで時間(水分量?)など)によって明らかに違いは存在するのです。 それを上手く可視化できるのが「麺を持ち上げる」という構図なのです。ひと度フォークで麺を持ち上げてみれば、コンディションの違いがひと目で明らかになります。 (良い物は最小限の麺のみが持ち上がり、悪いものは余分な麺まで持ち上がってしまう。)
そのため、可視化に関しては「麺を持ち上げる可視表現」ないしは、これに準ずる一工夫が必要になりそうです。

「研究発表の体裁が整っていながら「スパゲッティ」について本気で語るってww」

 最高の褒め言葉をありがとうございます!(笑)
面白くないことは面白くないことでしかないので、面白いと思えることに取り組みたかったのです。 人生一度の学部生研究ゆえに楽しく取り組まねば勿体無いと考えているので、若干「奇抜」とは感じつつ、自身でも「こりゃ変だw」と思えるこのテーマを採択することにしました。 「プログラムの可食化」という、一風変わったアプローチをお楽しみいただければ幸いです。

「パスタにも種類はあるけど、他のパスタについて検討はしているの?」

 現段階では検討していませんでした。しかし「パスタ」たるものの構造を知る意味でも、その種類の調査をせねばならないとは感じていましたし、文献も図書館にて探し出しました。 が、実はその点をあまり重視していないため、文献も放ったらかしの状態でした。
しかし、そう言われてみると「スパゲッティを用いた可視化」に限定せず、様々なパスタ、様々な麺類に写像すれば更に面白みが増すように思います。 「これはもはや、うどんプログラムです」「そばを作ったのですね」といったユニークな表現を用いることも一興ですよね。 単なる数値では伝わらない「ニュアンス」を感覚で訴える、面白いメトリクス指標に仕上がりそうな気がしてきました。

麺の長さ

直上の質問に引き続き「麺の長さ」も指標になりうるのではないか、という趣旨のご意見を頂戴しました。まさにその通りだと思います。
今回の発表では「麺の絡み具合」を中心にお話しましたが、上の「麺の長さ」はもちろん「麺の太さ」なども指標として使えそう、ということを考えていました。 麺の長さを「プログラム上の時間軸」に写像し、ある変数が使われるスコープの範囲を示してはどうだろう、とか、 麺の太さを「データの大きさ」や「参照度数」に写像し、プログラムの切りやすさ(分離可能性:Separability)を示すなど。 先に麺の種類に関する議論がありましたが、パスタの種類によっては非常に短いものになります。 つまり、麺の長さを指標として取り扱う時には、他のパスタも充分に検討の余地があるということですね。

「具の種類によっても絡み方が異なると思うけど」

「全体的にドロドロとした絡みやすいパスタもあれば、スープに浸っていて絡まりづらいスープパスタもあるよ」と言われて「確かに」と感じました。 そして、この指摘を頂戴してから考えたのは、

ソフトウェアプログラムをスパゲッティに可視化する際には、プレーン(素)のままのスパゲッティとして提示する。

というものです。プログラムを可視化すると、具を抜きにした素のスパゲッティを得ることになるのです。 そして、そこで現れた「麺」に合う具やレシピを別途紹介・推薦できるようにできれば良いですよね。

添付資料

発表に用いた資料類をご覧いただけます。