日本語と設計

研究室で作業していたら、後輩が言霊のソースコードを覗き見してきました。するとわらわら集まって「この日本語はおかしいなぁ」「ここはこういう表現じゃないっすか」「この表現のほうが自然ですよ」などと議論になりました。

その時にディスプレイに映っていたソースコードがこちら。

生徒型とは{
  名前(文字列型)を持つ。
  学籍番号(整数型)を持つ。
  次(生徒型)を持つ。
	
  出力するとは{
    「名前:」を単出力する。
    名前を単出力する。
    「 学籍番号:」を単出力する。
    学籍番号を出力する。
  }である。
}である。

岡田は生徒型である。
岡田の名前に「岡田 健」を入れる。
岡田の学籍番号に1320を入れる。
岡田が出力する。

大岩は生徒型である。
大岩の名前に「大岩 元」を入れる。
大岩の学籍番号に1111を入れる。

中鉢は生徒型である。
中鉢の名前に「中鉢よしひで」を入れる。
中鉢の学籍番号に1122を入れる。

岡田の次に大岩を入れる。
大岩の次に中鉢を入れる。

岡田の次が出力する。
岡田の次の次が出力する。

そんなに考えず書いたテストコードだったのですが、後輩どもは即座に「このコードの設計がおかしいから不自然な日本語になるんですよ」と指摘してきました。彼らはプログラム教育の研究をやっているから、そういうことに非常に鋭い。

問題があるのは「岡田が出力する」というコード。普通に読めばどこか不自然さが残る表現ですよね。普通は「出力する」の主語はシステムであり、生徒である「岡田」ではないわけです。だからより自然に書くなら「システムが岡田の文字列表現を出力する」というコードになって然るべきです。

ですから生徒型クラスが「出力する」手続きを持つのはおかしい。むしろ「文字列表現」という手続きにして、生徒型の情報の文字列表現を返すような設計の方が望ましい、という事になります。


議論後、後輩達がこんな事を言っていました。「日本語で書くとプログラムの設計の間違いに気づくって凄い」「やっぱ日本語でプログラム教育したいですよ」

研究冥利に尽きますね。さぁ、頑張りますか。