Diary?

2008-07-31
Thu

(22:04)

……まあ、適当にはめ込んだ後に扉と接する部分(ここって何て言う名称なんだ?)を締めれば、とりあえず元通りにはなるんだが。最初に取れたときは結構ビビった。

(23:05)

今回の新人にまず教えなきゃならんことは何かと考えてみたら、俺をイラつかせない質問の仕方と態度という結論に達した。いや、半分以上マジで。

それにしても高等教育、それも俺の出身大学よりも遥に高いランクの大学を出ていて、それでこの程度というのは如何に日本の教育が形骸化しているのかというささやかな証拠になるな。とりあえず今日あったトホホな事例を一つあげてみよう。

まずは次のようなコードがある。

class Foo {
  static int x;
  static int y;
  
  static void someMethod() {
    ...
  }
  
  public static void main (String[] args) {
    ...
  }
}

中身は適当に想像してくれ。とりあえず static 変数と static メソッドだけで何かやってると思えばいい。実際にはコマンドラインから単純な数式を受け取るプログラムで、まあそれにも結構難儀したんだがその話はどうでもいいや。それでまあ main メソッドの中で自身をインスタンス化してインスタンスメソッドとインスタンスフィールドを使って処理をするように書き換えさせたんだが、まさかというところで何度も引っかかった。

まずは俺が雛形として書いたのが次のコード。

class Foo {
  private int x;
  private int y;
  
  private void someMethod() {
    ...
  }
  
  private void exec(String[] args) {}
  
  public static void main (String[] args) {
    ...
  }
}

ぶっちゃけ main の中身を exec にコピペすればほぼ終了なんだが、とりあえず自分の作ったクラスをインスタンス化するというのを体感してもらえればそれでいいや程度の話なんでな。それで「main では Foo のインスタンスを作って exec を呼ぶだけにしろ」というように指示を出しておいた。

ところがどうも勘違いをされたらしい。出来上がって来たのが次のコード。

class Foo {
  private int x;
  private int y;
  
  private void someMethod() {
    ...
  }
  
  private void exec(String[] args) {
  
  //public static void main (String[] args) {
    ...
  }
}

なんで俺の書いたテンプレをぶっ壊すんだよ。それで書いた本人からは「何でこれ動かないんですか?」とかすっとぼけた反応が返ってきたが、そりゃそうだろう。 main メソッドがないんだから。あと俺 main で Foo のインスタンスを作って exec を呼べって言ったよな。全然違うっつーの。

というわけで書き直しをさせた結果が次。

class Foo {
  
  private void exec(String[] args) {
    private int x;
    private int y;
  
    private void someMethod() {
      ...
    }
  }
  
  public static void main (String[] args) {
    ...
  }
}

俺こんな指示出してねえよ。俺が出したのは「main 相当の処理は exec に書け」「main では Foo のインスタンスを作って exec を呼び出すだけにしろ」って指示なんだけど、全然違うじゃねえか。それで「コンパイルが通りません」って、お前それ以前の問題だって。

それでまあ、仕方がないから壊滅的に間違ってる部分とかを指摘しつつ、まずは main の処理をインスタンスを作ってメソッドを呼ぶだけの形にさせてみた。

public static void main (String[] args) {
  Foo foo = new Foo();
  ...
}

うん、そういうことだ。じゃあ exec を呼び出してみようか。

public static void main (String[] args) {
  Foo exec = new Foo();
  ...
}

だからなんでそうなる? それ変数名変えただけだろ。っていうかお前、下の方で args[0].indexOf(...) とかいうコード書いてるだろ。それがメソッド呼び出しだって教えただろ。それと同じだっつってんだろ。何でそっから普通に類推出来んのじゃ。下手な鉄砲も数撃ちゃ当たるかもしれんが、その前に仏の顔も三度という言葉を覚えとけ。

俺はここ最近やたら咳が出るようになって喋るのが結構しんどくて、ぶっちゃけくだらんことを延々と説明させるなと思いつつ、可能な限り噛み砕いて説明してからしばらく放置して書き上がったのが次のコード。

class Foo {
  
  private void exec(String[] args) {
    private int x;
    private int y;
  
    private void someMethod() {
      ...
    }
  }
  
  public static void main (String[] args) {
    Foo foo = new Foo();
    foo.exec(x, y);
  }
}

お前、俺の話聞いてないだろ。というか渡した本はちゃんと読んでるか? もう一ヶ月ほど経つんだから、いい加減この辺の基本的なヘマで俺を呼びつけるとか勘弁してほしいぞ。そもそもさっきダメ出ししたコードをそのままにして、そのダメなコードを元に適当ぶっこいてるんじゃねえよ。

かといって一から十まで説明しすぎるのもよくねえから、そこは我慢しつつやってるけどよ。でもこれ、本当に学習してるのかかなり怪しいぞ。何か適当に総当たり戦術で書けそうなコードを書いて、それでまぐれ当たりのコードを何も考えずに動かしてるだけって気がしなくもない。

もう一人の研修生も強烈なものがあるが、そっちまで書いてると本気で明日会社に行きたくなくなるからやめておく。

ってか俺、何のためにこの会社入ったんだっけ……

Creative Commons
この怪文書はクリエイティブ・コモンズ・ライセンスの元でライセンスされています。引用した文章など Kuwata Chikara に著作権のないものについては、それらの著作権保持者に帰属します。