自分は結構、現実世界をプログラムで考えることがあります。
今日は電車に揺られながらプログラマの仕事について考えてました。
こんな感じです。
「プログラマに必要なインターフェースは何だろう。うーん、とりあえず仕事が出来て、進捗を教えてくれればいいかな」
public interface IProgrammer
{
void Work(object workInfo);
double Progress { get; }
}
「いやでも、こっちが進捗を確認するだけだったら仕事の成果を受け取れないからダメか。仕事が終わったらちゃんと結果をもらわないと」
public interface IProgrammer
{
void Work(object workInfo);
double Progress { get; }
object WorkResult { get; }
}
「これでいいかな。あ、待て、こっちが進捗を確認するんじゃなくて、むしろプログラマが教えてくれた方がいいんだから、終了したら呼んでもらえるようにしよう」
public delegate void ProgramWorkEndDelegate(IProgrammer programmer);
public interface IProgrammer
{
void Work(object workInfo);
double Progress { get; }
object WorkResult { get; }
ProgramWorkEndDelegate ProgramWorkEnd { get; set; }
}
「で、まずプログラマの面接だよな。多分面接官はこんな風に見てるよな。」
public bool Interview(IPerson person)
{
return person is IProgrammer;
}
「これでよし。さあ次はプログラマを働かせよう。programmer1 に仕事を依頼してみるかな」
programmer1.ProgramWorkEnd = programmer1_ProgramWorkEnd;
programmer1.Work(programWorkInfo);
WaitWithWork(1);
WaitWithWork(1);
WaitWithWork(1);
WaitWithWork(1);
WaitWithWork(1);
「……programmer2 に仕事を依頼しよう。あと、ちゃんと進捗も聞くようにしないとダメだな。」
programmer2.ProgramWorkEnd = programmer2_ProgramWorkEnd;
programmer2.Work(programWorkInfo);
WaitDayWithWork(1);
progress = programmer2.Progress;
Console.WriteLine(progress);
WaitDayWithWork(1);
progress = programmer2.Progress;
Console.WriteLine(progress);
WaitDayWithWork(1);
progress = programmer2.Progress;
Console.WriteLine(progress);
WaitDayWithWork(1);
progress = programmer2.Progress;
Console.WriteLine(progress);
「…………programmer3 だけが頼りなんだ」
programmer3.ProgramWorkEnd = programmer3_ProgramWorkEnd;
programmer3.Work(programWorkInfo);
WaitDayWithWork(1);
progress = programmer3.Progress;
Console.WriteLine(progress);
「おお、さすが programmer3、仕事が速い。明日には終わりそうだな」
WaitDayWithWork(1);
progress = programmer3.Progress;
Console.WriteLine(progress);
WaitDayWithWork(1);
progress = programmer3.Progress;
Console.WriteLine(progress);
WaitDayWithWork(1);
progress = programmer3.Progress;
Console.WriteLine(progress);
WaitDayWithWork(1);
progress = programmer3.Progress;
Console.WriteLine(progress);
「ゼノンのパラドックスかよ!」
とか勝手に一人で考えて楽しんでたりします。
みなさんもこういうことやったりしませんか?
……しませんよねそうですよね自分だけですよね……。