Diary?

2008-09-02
Tue

(21:27)

新人のみなさんへの切実なお願い: 大脳新皮質を使ってください。

……どっから話を始めればいいのか皆目検討が付かないので、今日起こったことをツラツラと書いてみる。まずはちょっとソースの方から。

class Foo {
  public static void main(String[] args) {
    //とある理由により、 args[0] を char[] に変換したい
    char[] cArray = ?
  }
}

周辺の事情は省くが、コマンドライン引数として渡された文字列を文字の配列にして 1 文字単位で処理をする必要が出てきた。どうやっていいかさっぱりわからないようだったので仕方がなく「API 見ろよ」といって String クラスの API を読ませたところ、そこで toCharArray メソッドに行き着いたようだ。そしてそこからの迷走が凄かったんだな、これが。

class Foo {
  public static void main(String[] args) {
    char[] cArray = toCharArray(args[0]);
  }
}

お前この一ヶ月半以上何やってきたんだよ。まさかこんなコードを拝まされるとは夢にも思わなかったというか、いやこの時期にこれはねえだろ。当然コンパイラ様は大激怒なさっており、怒りを鎮めるためにはコードを直す他なく、そして俺が直すわけにも行かないので本人に

  • そもそも一体何をしようとしていたのか
  • なぜそれで正しいと思ったのか

といったところを聞き出そうとしてみた。とりあえず覚えている限りのやりとりがこんな感じ。


「まず一体今何てクラスの何てメソッドを呼び出そうとしているんだ?」
新人
「Foo クラスの main メソッドです」 <- この時点でかなりヤバげ
「そうじゃなくて、この cArray へ代入しようとしてる部分、ここで何を呼び出そうとしてるんだ?」
新人
「String クラスの toCharArray メソッドです」
「エラー見てみ。一体何てエラーが出てるんだ?」
新人
「toCharArray が Foo で未定義だって出てます」
「それがどういう意味かわかるか?」
新人
「呼び出し方が間違ってるんですか?」
「(そうやって聞き返すなよ……)まあ、そういうことだ。今までインスタンスメソッドをどう呼び出していたのか思い出してやってみてくれ」

この時点で相当俺はぐったりしていたのだが、追い討ちをかけたのが次のコード。

class Foo {
  public static void main(String[] args) {
    String string = new String();
    char[] cArray = string.toCharArray(args[0]);
  }
}

だから何やってんだよお前は。思わず喉笛に貫手をかましたくなる衝動をぐっとこらえ、腹の底から湧き上がってくるドス黒い感情を押さえつけながらさっきと同様に対話を試みることにした。


「もっぺん String の Javadoc を読んでみようか。 toCharArray の引数はなんだ」
新人
「ない、です」
「そうだ、引数はないんだ。お前今何してるんだ?」
新人
「args[0] を渡してます」
「それ正しいやり方なのか?」
新人
「……」 <- フリーズ
「明らかに違うだろ? だって引数の数が違うんだから」
新人
「……」 <- まだフリーズ
「最初に戻ろう。今やりたいことって args[0] を文字の配列にすることだろ?」
新人
「そうです」
「args[0] の型ってなんだ?」
新人
「String です」
「さっきから調べてた toCharArray ってどのクラスのメソッドだ?」
新人
「String です」
「よし、これでもうわかったな。ってかこんぐらいわかってくれ」

いい加減うんざりしてきたので俺は程なくして帰ったが、ちょっと気になって帰りがけにコードを覗き込んだら次のようになっていた。

class Foo {
  public static void main(String[] args) {
    String[] cArray = 
  }
}

どこまで迷走する気だ、こいつは。明日になっても事態が改善していなかったらチェックメイトだ。流石にもう数日で二ヶ月目になるのにこれというのはマズいというか、そもそもこいつそれ以前の問題じゃねえかって感じだ。

確かに俺の指導方法である「相手に自分のコードを徹底的に解説させる」というのは厳しいやり方かもしれない。何故って、自分の間違っている部分を自分の口から言わなければならなくなるからだ。だけど自分が何を間違えていたのかを認識しないままではきちんとした理解にはつながらないし、経験上は自分のやっちゃった部分を笑いの種にできるぐらいの姿勢の奴こそが伸びる。そしてこれは極めて普遍的で効果的なデバッグ手法でもあるし、コードを用いたコミュニケーションに慣れさせる意味合いもある(前にも書いたかここら辺は)。

しかしこういう全然自力でプログラムを書けそうもない奴を見てると、やっぱ向き不向きの激しい職業なのかと思う。というわけで俺はもっと採用の関門を厳しくしたいのだけど、人を集めて売っ払うというビジネスモデルでは現状の方が正しいんだよな。

なのでそこをひっくり返すために、頭数商売でない仕事の進め方のできるような環境作りを上司が主導で始めているんだが……。やはりできる技術者が足りていないという現状があるからな……。

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