技術顧問先で、一生懸命コードに向き合っているプログラマーになりたての方から、次のような質問をもらいました。
最初に面談した時、1年後にいいコードが書ける、上手に書けることを目標にしましたが、 先日スクール時代の同期(それぞれRubyの会社で働いている)と話したところ、会社ごとにレビューの仕方やコードに関する基準がさまざまなようで、良いコードとはなんなのか疑問に感じました。「いいコード」とは、みたいな部分で島田さんの考え方をお聞きできたら嬉しいです。
この質問にぼくは次のような回答をしたのですが、「この質問が来たら他の人はどんな回答するんだろうな」に興味があるので、ここにしたためておきます。もしよかったら「若者にこれを聞かれたら自分ならこう答える」をコメントなどで残していってもらえたら嬉しいです。
とても大事な疑問を見つけられたんだなあと思います。
「良さとは何か」ということに向き合う必要のある質問だと思って考えています。 ものの良さ=質というものには、大きく
- 主観としての良さ: 自分として良いと感じる
- 客観としての良さ: 誰かや何かの基準に照らして良いと感じる
の2つが存在しますよね。 たとえば、映画(音楽でもアニメでも小説でも、なんでも自分のイメージしやすいものに置き換えてもらって大丈夫です)を例にとると、次のような感じです。
- 主観としての良さ: この映画すごく面白い!自分にとって特別な映画だ!
- 客観としての良さ: XX賞受賞、動員数XX突破、〜〜が絶賛
ここで、難しいのは、この「主観としての良さ」と「客観としての良さ」というのは、常に一致するわけではないというところにあります。
「自分は良いと思っても、世間では評価されていない」「世間ではとても評判だけど、自分にはイマイチ良さがわからない」
そして、世間の中でも、あるところでは絶賛されているけど、あるところでは問題視されている、なんていう風に評価がぶれていることも多々あります。
こうしたギャップが生じるの起きるのは、「良さ」は、その良さを測るシチュエーション(何を評価する場面なのか)と誰が評価するのか変わってきてしまうからだと考えます。
さらに、自分自身の評価も、対象に関する知識が増えたり経験によって変わっていったりします(例:映画をたくさん見ることで、映画の見方がわかってくる)。
今回、Sさんが感じた「よくわかんなくなった」は、この辺りがこんがらがってしまったんじゃないかなと想像します。
スクール時代の同期の話や今の仕事で書いているときに求められるコードの質は「客観としての良さ」についてのことで、「1年後にいいコードが書ける、上手に書ける」というのは「主観としての良さ」についてのことに当てはまると思ったからです。
そうだとして、どうしたらいいの?という話なんですが、客観の良さについてはシチュエーションや相手によって変わるのは仕方なく、良さを評価される立場にいる場合には、そのシチュエーションで求められる品質を満たすコードを書いていくしかない、ということになるかなと思います。
求められているのが自分がクリアするのが厳しい品質である場合には、主観の良さを鍛える良い機会になるでしょうし、逆に主観の良さを超えないものであった場合には、その仕事の制約の中で自分が満足できるコードにどれだけ到達できるかがポイントになってくると考えます(仕事でコードを書く場合には、期限という大きな制約があるので、完全に自分として納得のいかないコードの場合でも、要求される品質は少なくとも満たす、というところで先に進む必要が出てくるという感じです)。
いずれにしても、Sさんが立てた「1年後にいいコードが書ける、上手に書けること」に進むためのアプローチとしては、許された制約の中で、自分として精一杯のコードを書き続ける、そしてその結果がどんなコードだったか(満足いくものになっているか、何かたどり着けなかった部分があるか、制約がなかったらどうやれるか)をちゃんとふりかえっておく、ということになるんじゃないかなと思います。可能であれば、コードや設計についての勉強も続けられるとより良いです。
上記を継続していく過程で、間違いなく、少しずつ「こういったコードが良いコードだ」というのが自分の中に積み重なっていくはずです。