今年も学生エンジニア向けインターンの季節がやってきて、数十人の学生たちとプログラミングについて話をする時期となりました。去年の今頃を振り返りながらまた、新しい知識と発想をもった子たちと話すと毎年新鮮な思いになります。
仕事をしていると様々な事が起きます。人との関わりあいのなかで起こること。他のひとの書いたコードで起きること。プラットフォームが大きな流れによって変わっていくこと。プロダクトにまつわるものごとは様々で、自分が想像もしていなかった変化がたくさん起きます。自ら起こした変化がうまく働くこともあれば、想定していなかったものごとが起きることもあります。このようにするとおそらく良くなるだろうと自分を信じて変更をし続けることで、変化を起こし続けます。こうすれば絶対にうまくいくだろうと思ったことでも、ある領域では意図しない振る舞いをすることもあります。うまくいくと大きな良いインパクトをもたらすと考えているものほど、ふとした状況の変化によって部分的にうまくいかなくなることがあります。
何か悪い部分があるなら、私たちは何かを変え、前に進むことでしかそれを変えることはできません。
---
プログラミングを教えつつ、ものをつくってもらうと、私が前に失敗したのと同じような失敗が目の前で繰り返されます。ああ、その失敗は前に私もしたことがあるなと思い返します。あるものごとやあるアプローチが失敗することを知っているのは、そこを一回経験したときのみになりがちです。ある抽象を用いるとこちらはうまくいくけど、別の部分が立ち行かなくなる。じゃあうまく両方を成り立たせるにはどうしたらいいかということを、経験のあるプログラマは知っています。
経験によってしか失敗は知り得ないのでしょうか。失敗がしづらいことというのはたくさんあります。人に関すること。生活を大きく変えてしまうこと。後戻りのできないことほど、人は失敗しづらくなります。経験していないものについて、失敗したときのリスクを多めに見積もってしまいます。これでは失敗しづらいことは学びづらいという結論になります。そうではなく、人の失敗から学ぶ方法が文章であり、知見と呼ばれるものであり、それこそが教えることのメリットであると考えています。
教えることの大きな役割の一つは、経験したことのないことをパターン化し、相手に学んでもらうことなのだと最近改めて捉えなおしています。失敗したことがないものでも、過去のパターンから失敗する方法を教えることはできます。でも具体的な事例を同じように相手が経験するわけではなく、あくまで1つのケースとしてそれを捉え、抽象化し、まだ経験していないケースに適用する。学びというのはそういうものだと思います。
---
「一日生きることは、一歩進むことでありたい」。湯川教授の有名な言葉にもあるように、私はこれを噛み締めています。エンジニアリングの仕事を好きであり続け、楽しみ、問題を解き続けるにはどうしたらいいか。悩む方法はいくつもあれど、どれをとっても歩みを進めるしかありません。こんなミドルウェアがでてきた。こんな言語がでてきた。こんなサービスがでてきた。いくつものアプローチや技術的な進歩とも言えるものを目にして焦りを覚えつつも、つまるところ目の前のキーボードにどんなプログラムを書くかでしかプログラマは自分の仕事を表現できないのだと思っています。いろんな人達の思想を感じて、いろんな技術の背景にある深さと狙いを見て、新しいアプローチの素晴らしさに胸を躍らせて、そしていろんな環境を噛み締めながら目の前のコードを書く。
それが毎日働くことなのだと思っています。