Feb 01, 2012

より良いコード

自分で自分の書くプログラムが(道具として使って目的を達成できるかどうかという評価ではなくて、プログラムコードそのもの綺麗さとかそういう意味で)良いかどうかっていうのは正直よくわかんない。もちろん「良いコードを書こう」と思って意識はしてはいるけど、他の人から見たら「全然駄目じゃん」って言われるんじゃないかって思ってる。ただ、それでも、過去(数年単位に限らず、下手したら数ヶ月単位で)の自分が書いたコードは確かに悪かったのだなということは、今なら分かる。

良くなってる点があるとしたら、一言で言うと、「独り善がりさが減った」って事なんじゃないかなーと思う。属人性が減って、普遍性が増したというか。

過去の僕は、今よりずっと多くの時間を趣味のコーディングに費やせていたし、作っていた物の規模も今より小さかった。だから、傍目にはスパゲッティコードにしか見えないようなコードであっても、その時の僕の頭の中にはプログラムの全体像が入っていて、問題があったらどこを直せば良いのか、新しい機能を付け加えるにはどこに手を入れればいいのか、把握できていたのだと思う。そういう状況では、モジュールの分割であるとか関数の分割であるとか変数・関数の命名であるとかに気を遣う必要性が薄いから、自分の頭の中にモヤモヤとあった物がそのまま形になったような、そういう物ができあがるんじゃないかと思う。

でも、作る物の規模がだんだん大きくなっていったり、抱え込む物の数が増えて関心があちこちに分散したりして、全てのプログラムの全体像を常時完全には把握しきれなくなってくると、だんだんボロが出始める。また、費やせる時間もだんだん減ってきて、力業でも補えなくなってくる。そうなってきて初めて、「良い設計」とか「良いコード」とかいうものが身に染みて分かってきた気がする。

それまでも一応知識として「どういう設計になってるのがいいのか」とかいう事は知っていたし、元々完璧主義者な所もあって、頭でっかちなりに「良い設計」とか「良いコード」とかいう事は考えてはいたと思うんだけれども、実感は伴ってなかったんじゃないだろうか。

最初は誰かの受け売りだった「1ヶ月後や1年後の自分が見ても分かるコードを書く」という方針は、そういう事があって、今自分の中に実感を持って染み着いている。初めてその言葉を聞いた時の僕にとっては、「1ヶ月後の自分」「1年後の自分」とは、「昨日も今日もその事に没頭し続けていて、そのように連続した開発が1ヶ月間、1年間と続いた先にいる自分」という意味にしか受け取れなかったと思う。だから「1ヶ月後の自分なんてもう完全に他人」なんて言われてもピンと来なかった。でも今はよくわかる。なんだかんだで時間を取れなかったりやる気を維持できなかったりして1ヶ月くらいプロジェクトから離れてしまうというのは、実によくある事なのだ。毎日毎日同じ好きな事ばかりやっていられるとは限らないのだ。そうして久しぶりに触れた時に愕然とするのだ。1ヶ月前の自分が何を考えていたのか、まるで思い出せないという事に。

ましてや本当に他人だったら、「思い出す」ための手がかりすら無い。他の人がやっているプロジェクトに共同開発者として参加したり、誰かからプロジェクトを引き継いだりした時に、独善的で属人的なコードがあるとどういう事になるか。複数人で1つの物を手がける時、将来的には誰かに引き継がなければならない物を作る時に、自分自身が何に気をつけなければいけないのか。

クラスやらモジュールやらが分けられているとか、名前空間がどうであるとか、関数が小さいとかコメントが豊富とか、そういう個別の「テクニック」が駆使されている「から」、「良いコード」である、という事ではない。毎日毎日「今の自分」のためにしかコードを書いていないような人間には欠けている、1ヶ月後の自分やあるいは全くの他人でもスムーズに開発を継続・継承できるような状態を保とう、自分という人間がいなくても勝手に生き残って生き続けてくれるようにしておこうという、美学とか哲学とか信念とか言われるようなもの、未来を見ている姿勢。少なくともそれがあるのが「良いコード」なのではないかと、僕は思ってる。

1ヶ月前に自分が書いたっきりのコードを読み返してみて、ちゃんと分かるかどうか。良いコードなのかどうかは、時間が証明してくれると思う。

エントリを編集します。

wikieditish message: Ready to edit this entry.











拡張機能