プログラマに質問して聞いてみたいこと

プログラマの採用面接でFizz Buzz解いてもらうのもいいかもしれないが、個人的にはそういう正解があるものよりかは正解がなくその人の個人的な経験、知識、考え方などをしゃべってもらうような質問が良いと思っている。というか僕が面接官ならしてみたいかな。まあこれは別に面接の場じゃなくてどっかのビアバーでプログラマ同士でビール飲んでいるときに聞いてみるとかでいいんだけどね。というわけで僕ならこんな質問をしようかなというのをあげてみた。回答もつけてみます。まあ実際にこんなやりとりはしないかもしれないけどひとつのネタとして書いておきます。


質問:
「あなたが今まで読んだソースコードで一番感動したソフトウェアは何ですか?どの辺に感動したかも含めて語ってください。」


オレの回答:
「ソフトウェアはTracですね。ソースを読んだバージョンは0.11系だったと思います。理由はフレームワークを使わずにオレオレプラグインアーキテクチャを構築していてその割に構造がわかりやすかったためです。Wiki機能だったらWikiModuleというプラグインで実装しておりフォルダも分割されていました。ただコア部分は黒魔術な感じでした。RedmineだとRails使ってたりしますが、TracはテンプレートエンジンにGenshiを使っているなどライブラリは使っていてもフレームワークは独自でしたね。あとはSQL文がControllerにべた書きでJavaでいうDAOが無かったりと特色あるなあと思ってました。あと蛇足ですがソースを読んでいたのは0.11系ですがTracって0.12のリリースが結構遅れたんですよね。プロジェクト管理を支援するツールなのに自分のプロジェクトの管理はうまくいってないのかな(笑)とか余計なこと思いましたけどその辺はまあご愛敬というかツンデレなソフトウェアなんだなあと思いました。Tracに限らずAという問題を解決するためのソフトウェアが実は内部的にはAという問題を抱えているというのはそんなに珍しくない気がします。開発プロセスが素晴らしくてコードも綺麗でテストも完璧でドキュメントもしっかりそろっていて機能的にもすごいという完璧なソフトウェアって世の中に存在しないと思います。パーフェクトソフトウェアは存在しない。パーフェクトなプログラマが存在しないようにね。なんちって。」


質問:
GoFデザインパターンについて、どれかひとつのパターンでもいいですし、全体を通した印象でもいいですし、何でもいいので経験談なり感想なりを語ってください。」


オレの回答:
GoFデザインパターンについては結城さんの本で勉強しました。実は原典である英語の原書を見せられたこともあるんですけど読まなかったですね。デザインパターンは有用だと思うしプログラマが会話する際に共通の語彙があるのはいいですよね。JUnit 3.8なんかはデザインパターンの宝庫として紹介されていた気がします。ただ最近はどちらかというとマイナス面もあるのかなあという気がしてきました。例えばシングルトンパターンというのは要するにグローバル変数ですしユニットテストしにくいですよね。あとテンプレートメソッドパターンもコードが読みにくい気がするんですけど気のせいですかね。そういえばCoders at Workでデザインパターンは言語の不完全さを表しているみたいなことが書かれていてなるほどなーと思った記憶があります。どういう言語仕様にすればどのデザインパターンが不要になるのかまでは追い切れてないですが興味深いですね。」


質問:
「今まで読んだ技術書で面白かったもの、印象に残ったものについて語ってください。」


オレの回答:
「面白かったもの、印象に残ったものは何冊かあります。例えばレガシーコード改善ガイドはいいですね。テストが無いのがレガシーコードだと言い切っていてレガシーコードをどうリファクタリングしていくかが書かれています。内容もいいんですが、それよりもこの本って賞味期限が長いだろうなと。たしか原書も結構前に出てた気がしますけど内容は古びていないですね。技術書って内容の陳腐化が早いと思うんですが、この本は扱っているテーマがテーマだけに賞味期限は長そうですよね。」