最近、職場でクソコードが話題になっている。
なんでも、名探偵コ〇ンの殺人トリック並みにトリッキーなソースコード(プログラム)のようで、しかも開発した担当者が諸事情で職場からいなくなることが既に決まっている。
「クソコード」という言葉からは、それを引き継ぐことになったエンジニアたちの悲痛の叫びが感じ取れる。
今回はそんな忌み嫌われる存在である「クソコード」について、僕の持論を書いてみようと思う。
目次
クソコードとは?
一般的には次のようなソースコードをクソコードと呼ぶことが多い。
この言葉は、効率が悪く、理解しにくく、保守が困難なコードを指す俗語であり、その存在は単なる技術的な問題を超えて、企業の生産性や成長に重大な悪影響を及ぼす可能性があります。
出典:クソコードは会社を滅ぼす
本記事でも上記の意味で「クソコード」という言葉を使う。
クソコードはなぜダメなのか?
「クソコードとは?」で引用したように、クソコードを書いたエンジニアがいなくなったら誰もそのソースコードを保守できなくなるリスクがあるからだ。
「保守」とは、顧客からの機能追加要求や不具合指摘に対応するということ。
しかしクソコードに対し、中途半端な理解のまま手を加えると、それが不具合の原因になり得る。
そのためクソコードは秘伝のタレとしてブラックボックスのまま代々引き継がれることになりがちだ。
そしてハリボテのようにクソコードの周囲を埋めていく作業が行われる。
それが更に、効率が悪く、理解しにくく、保守が困難なクソコードとして、雪だるまのように膨れ上がっていく。
某銀行で「システム障害」が繰り返されるのも、きっとこんな感じで改修不可能なクソコードとして膨れ上がってしまったのが原因だろう。
このようにクソコードは、企業の生産性や成長に重大な悪影響を及ぼす可能性があるというわけだ。
クソコードに対する僕のスタンス
ここまでの説明からエンジニアでなくてもなんとなく
クソコードは悪である
クソコードなんてトイレに流してしまえ!!
と思ったことだろう。
実際、クソコードの保守を自分から喜んで買ってでるエンジニアは少ない。
だが僕はクソコードに対して少し違った捉え方をしている。
クソコードは成長のチャンスである
僕はクソコードが生まれる要因は大きく以下の3つだと思っている。
①機能を実装するために求められる専門知識が高度かつ広範囲に及ぶこと
②無茶な納期
あるいは外資系コンサルが大好きな「時間単位でのアウトプット」という考え方(君はこの1hでどんな貢献をした?)
③ソースコードを書いたエンジニアの能力不足
余談だが、日本企業のソフトウェア開発能力が諸外国と比べて低いと言われる主要因は②である。
なので、小学校からプログラミング教育を導入したところで改善しないと断言できる。
②をもっと突き詰めれば別の要因も見えてくるが、ここでは省略する。
話が脱線したが、これらのうち②か③が要因でクソコード認定されたコードには価値がない(自身の成長という観点で)。
見なかったことにして、そっと案件から手を引こう。
しかし例え②か③、あるいはその両方が要因で生み出されたクソコードであっても、①も要因に含まれるのであれば、それはクソの中に埋もれたダイヤの原石かもしれない。
トイレに流してしまうには惜しい。
クソコードを踏み台にして専門知識を身につけろ!
こういった「ダイヤの原石が埋もれたクソコード」をひも解くのは一筋縄ではいかない。
その困難さのニュアンスを分かりやすく伝えると、こんな感じだ。*1
- クソコードに使われる「数式(アルゴリズムとも呼ぶ)」が難解である
- 数式を理解するには「専門知識」を学ぶ必要がある
- 専門知識は本やネットに体系的にまとまってるとは限らない
- 本やネットに体系的にまとまっていても、大学学部レベル(場合によっては大学院レベル)の専門知識は最低限ないと理解できないこともある
- 上記のような背景があるにも関わらず、ソースコードに実装された数式に説明がない(あったとしても理解するのに専門知識が要求される)
- また、様々な制約条件から数式が省略形式で実装されている場合がある
しかし見方を変えれば、そのクソコードを理解し使いこなせるようになる頃には、これら専門知識が(実務に応用できる形で)身に付いているということでもある。
もちろんそれ相応の覚悟と実力が必要になる。
少なくとも業務中にクソコードと単に向き合っているだけでダイヤの原石が自分のものになりました、なんて夢みたいなことはない。
おわりに
このような理由から、僕はクソコードというのはすべてが悪だとは考えていない。
良いクソコードは人を育てるのだ
もちろん仕事である以上、理解して使いこなせるようになったら終わりではない。
むしろそこからが本当の始まりである。
クソコードを理解できなかった多くのエンジニアたちに対し、しばしの優越感に浸った上で、それを多くの人が理解できる形式知に変換すること。
クソコードの救世主であること
これがエンジニアとしての僕の美学である。
ばいちむ
*1:これはエンジニアの職種によっても異なる。ここで紹介したようなことは「組み込みエンジニア」や「ゲームエンジンの開発エンジニア」なんかに多いんじゃないかな。