2003年02月07日(金) |
レポートコピーの代償 |
2003.02.08 (Sat) 1:30 Access: 5908 Viewer: 29 Letters: 4890 ようやく追いついた。 ずっと1日遅れで日記を更新していたから…。
今日はコーヒーを少し多めに飲んだので ちっとも眠くない。 もう1時半になるが、頭がさえ渡っている。
朝、目覚ましの音にまったく気づかなかった。 昨日もまったく同じだったので、 これは何らかの原因が考えられる。 対策を練る必要があるだろう。 明日は休みだが、 目覚ましで起きてみることにする。 これで今日のように、まるで記憶すらないようだったら、 PHSの目覚ましは不十分ということになる。
今日、2月8日は知人の誕生日だ。 いったい何ができるだろう…? 僕にできることなんて、本当に限られている。 こういうとき、しみじみと思ってしまう。
朝、起きられなかったので、 2限には出席できなかった。 3限から出席したのだが、 この3限の講義、実は結構おもしろい。 先週休んでしまったことが悔やまれる。 先週は、今週よりもひどく、 起きるのがあまりに遅かったため、 すべての講義に出席できなかったのだ。 気にはならないが、やはり目に見えないところで、 疲労が蓄積しているのかも知れない。 少なくとも、冬休み直後と比べると、 だいぶ余裕がない…。 ああいう長い休みも、時には必要ということか。
3限の講義は流通政策論。 今日は、流通政策の面から見た環境問題についてだった。 主にモーダルシフトの必要性について、 …話をしたかったらしい。 が、石原都知事の外形標準課税など、 あまり関係のない話へどんどん逸れて、 メインの話はそれほど多くなかった。
4限は人間工学。 この講義の主眼は、当初から 多角的な視点というのが中心だった。 人間を中心とした、独創的な発想が求められていた。 だがこれ、求める方も難しい。 実際、ちゃんと講義が成立しているとは 言いがたかったような気がした。 所詮、教官の能力には限界があるのだ。
そう言えば、 火曜日の2限、計算物理学というおもしろい授業があるのだが、 僕のいる大学では、ほとんどの学生がプログラムを書けない。 だが、この講義はプログラムが単位取得の条件になっている。 はっきり言って、僕には余裕のプログラムなので Javaアプレットで図示などをして遊んでいるのだが、 他の学生はとてもそんなことはしていられないので、 結果として、何とかしてプログラムを入手しようと動く。 ここで現れたのが、前から何度か書いている彼女だ。
自分で言うのも変だが、 僕はもともと態度が大きく、能力以上に口が回るので、 僕のプログラミングの能力は、 事実以上に高く評価されている。 だが、彼女は僕の上を行く。 …卒論で1年間取り組んできたのだから、当然と言えば当然だが。 で、まあ、 ここで普通だったらみんな僕の方に来そうなものだが、 上にも書いているとおり、僕はJavaアプレットを使った。 この大学では、Javaはカリキュラムに組み込まれていない。 従って、他の学生はJavaを書くどころか、判読すら不能だ。 しかも、わざわざアプレットにして提出するような 奇特なことを何十人もの人がしたら コピーしたことがすぐに分かってしまう。
そこに、至極真っ当なプログラムを書く彼女が現れた。 しかも、彼女は僕と違って、いちいちやることが早い。 期限の遥か前に、レポートを完成させてしまった。 そして、僕と違って、いちいち人を疑ったりしない。 その結果、彼女は自分のレポートを人に見せてしまったわけだ。
そこから、爆発的な速さで彼女のレポートは駆けめぐった。 もともと、彼女のレポートは非常によく書けている。 少なくとも、僕には書けないレベルだ。 論文を経験しているからか、そもそも努力の積み重ねが桁違いだからなのか、 そのあたりはよく分からない。 しかし、僕だって文章力にはそれなりの自信がある。 自慢にもならないようなことだが、 僕はすべての論述の試験を、ほとんど勉強などせずに、 文章力だけで優を取ってきた。 ちゃんと勉強をしたが文章が得意でない、 という人よりも、勉強なんてろくにしていない僕がよい成績を取っているのだ。 従って、僕の文章がよいかどうかは知らないが、 ある程度の評価をされていることは、成績を見れば分かる。 で、勉強なんてしなくても優を取れる僕よりも、 明らかに優れたレポートを目の前に示された人はどうするか?
…残念ながら、ここからの行動は自明と言わざるを得ないだろう。 論旨は明確、プログラムも完璧。 それ以上、何ができると言うのか?
要するに、彼女とほとんど同じレポートを出した人が、 大量に現れたわけだ。 その数、実に受講者全体の3分の2! いや、まあ、よく書けているのは確かに分かる。 誰だって、それを見れば、それを自分のレポートにしたくなるだろう。 しかし、3分の2もの人が誘惑に負けたってのは いったいどういうことだと言いたい…。 プログラムだけならまだしも(それだってひどいが)、 説明から考察まで、ほとんどまる写しだったと言うのだ。 コピー防止のために手書きを義務づけているような 大規模大学ではないのだから、 そんなことをしたら、さすがにバレるだろう…。
さすがにこれは異常事態だ。 結果、その3分の2の人たちは、 全員単位認定されないことに決まった。 …彼女も含めて。 自分のレポートを少し見せてしまったという 小さな過失から、単位を失うところまで行ってしまったわけだ。 彼女の場合、単位を1つ2つ落としたところで 他の科目を余裕で取れるので、たいした問題ではないようだが…。 それにしたってひどすぎる。
結果的に、Javaを使うことにした僕の判断は、 もうひとつの効果を生むことになった。 すなわち、コピー防止だ。 Javaを使っている限り、Javaを知らない人にコピーされることはない。 変数などの形式はCと似ているから、 ある程度Cの知識があればJavaのプログラムもいじれるはずなのだが、 Javaの変数には、Cと少々違った命名規則がある。 絶対ではないが、あまり略称を使ったりしない、など、 いくつかあるのだ。 僕は偶然ではあるが、クラス名と同じ名前の変数を使ったり、 初めからJavaに組み込まれている変数名なのかどうか 判別しにくいような変数名を用いたりしている。 例えば、Dimensionというクラスがある。 これは、アプレットの領域サイズをカプセル化したものだ。 Dimensionクラスのインスタンスは、 widthとheightというフィールドを持ち、各々が幅と高さに相当する。 …たぶん、知らない人が見ても分からないだろう。 Cしか知らない人に、あえてこのような分野に 足を踏み入れさせるような変数名をつけているのだ。 ちなみに、作った変数名はdimensionで、 頭文字が大文字か小文字か、という点が異なる。 こんなこと、知らない人には分からないだろう。 もちろん次元を表すのだが、 C言語の場合、こういう変数はdとかdimとかにするのが普通だ。 円などの半径も、C言語だったらrと表記する場合が多い。 だが、Javaではradiusが一般的だろう。 少なくとも、僕が見たテキストではそうだった。 このように、極力略称を避ける傾向にあるのだ。 その理由はもちろん、可読性の向上のためだ。 もともとJavaのソースコードは、 述語論理の応用と言っていいくらい、自然言語に近い。 英語と述語論理の分かる人なら、 何をやっているのかだいたい読みとれるほどなのだそうだ。 もちろん、優れたプログラマが、適切な配慮をしたソースの場合は、だが。 変数名なんて適当につけたって、動かないことはない。 だが、それでは読んだときに読みにくくなるおそれがあるのだ。
さらに僕は、アプレットを使っている。 しかも、AWT、Abstruct Window Toolkitも使っている。 これは、チェックボックスやテキストフィールド、テキストエリア、 スクロールバー、などをまとめた、 ウインドウ表示のためのパーツだ。 これには、テキストリスナ、アクションリスナなどのインタフェース、 および、そのインタフェースで定義されたメソッドの実装が必要で、 自慢じゃないが、このプログラムを理解できるのは、 大学中を探しても、教官と彼女くらいだろうと思う。 いや、もともと簡単にプログラムを作るための機能なので たいして難しくはないのだが、「見た目」は難しい。
最初の1行、 public class SphereVolume extends Applet implements TextLister, ActionLister{ という文を見ただけで、 知らない人は逃げたくなるのではないだろうか? 僕だって正確に理解しているわけではないが、 「パッケージ外からもアクセス可能なクラス”SphereVolume”は、Appletクラスを拡張し、 TextListerインタフェース、およびActionListerインタフェースを実装する。」 という意味になる。 最後の中カッコはこのSphereVolumeクラスのスタートを意味し、 終了するときにはこの中カッコを閉じる。 ちなみに、”Applet”のあとに”and”という一文を挟めば、 文法的に、一応英語として読めることになる。 classのあとにカンマがないとダメかな…?
これ以上説明しても、 分かっている人は初めから分かっているし、 分からない人にはどうせ分かるわけもないのだが、 TextListerインタフェースには、textValueChanged(TextEvent)という 抽象メソッドが定義されていて、 ActionListerインタフェースには、actionPerformed(ActionEvent)という 抽象メソッドが定義されている。 従って、TextListerインタフェースとActionListerインタフェースを使用する際には、 これらのメソッドを実装しなければならない。 実装しない限り、このソースコードをコンパイルすることはできず、 動作させることができない。 これらのメソッドを実装している、ということを 明示的に示したのが冒頭の一文だ。 要するに、こういう機能があるってことを、 最初の一文だけで分かるようにしているのだ。 なぜか? それは、さっきも書いたように、可読性向上のためだ。 ソースコードは、暗号のようになりやすい。 100%論理的な文章なんて、 人間にはそもそもそぐわないのだ。 これを、少しでも扱いやすくしようと様々な工夫がなされているのだ。
まあ、いいか。 やっぱり、ある程度物事に対する思い入れというのがないと なかなか文章は書けないようだ。
ところで、何かのテレビで見たのだが、 きれいに歩くためには、 まるで操り人形のように、頭の上から釣られている イメージを持つといいらしい。 確かに、そういうイメージを持つと、 背筋を伸ばしてきれいに歩くことができる気がしてきた。 しかし、それと同時にそのイメージは、 まるで自分が操り人形にでもなったかのような連想を抱かせた。 誰かの手の内で踊るマリオネット。 東京駅を歩く多くの人が皆、 誰かの操り人形のように見えてきた。
…もうひとつ。 僕はゼミでJavaを学んでいるわけだが、 もともとPCに触れる機会が多いこともあり、 今のところ、僕が一番Javaに慣れていることは 自他共に認める事実と言っていいようだ。 だが、一緒にやっている人と話していて思った。 その人は「がんばる」と簡単に言う。 確かに、見ているといつもがんばっている。 これが、僕にはできない。 どんなに僕に適性や才能があって、 その人に負ける要素などないとしても、 ただこの一点、がんばれるかどうかという点でだけ劣るのならば、 僕はその人に勝つことはできないだろう。 不器用でも、努力を積み上げていけば、 口先だけの人間に負けるようなことなど、あり得ないだろう。
久しぶりに結構書いた気がする…。 それでも4400字程度か。 一時期、毎日8000字も書いていた時期があったが、 今になってみると、そのときの自分が信じられない。 やはり休みの時期は、何かと余裕があるのだろう…。
2003.02.08 (Sat) 3:30
|