スパゲッティソースコードに愚痴って何が解決するの?できることをできる単位でやるしかないんだよ

f:id:hrmch-ioii:20170420004454j:plain

元プロの社畜 @nabeemichi です。

僕は今フリーのエンジニアとして企業に常駐して働いてる。

どんな企業でも難解なソースコードはあるものだ。

それはリリースを優先させた結果なのかもしれないし、

人がたりなくて、新人に任せっきりにしたのかもしれない。

でも、所詮人が作ったものだ。

人間がつくったのだから、同じ人間が理解できないわけがない。

理解するための工夫と努力はしないで愚痴っていても何も進まないのだ。

どんなプロダクトにも闇のソースコードは存在する。

ぼくは開発者としてIT企業で6年ほど働いてた。

その企業もそこそこ歴史のあるプロダクトを持っていたりしたのだが、

なんじゃこりゃ?誰が理解できんの?

ってソースコードはある。

スパゲッティのように絡み合っていて、どこがどうなっているのか解きほぐすことができないソースコードだ。

そんなソースコードはだいたい不具合がある。

机きれいに片付けれないやつがミスが多いのと同じように、

整理されてないソースコードは不具合も多い。

そんなソースコードを修正しないといけない。

愚痴っても、バカにしても、笑いものにしても何も意味はない

闇のソースコードを見つけたエンジニアがやることはだいたい決まってる。

そんなソースコードを作ったやつを特定して、バカにしたり笑い話を作る。

隣のエンジニアに、面白くその話をして悲劇のヒロインになったつもりになる。

基本はそれだ。

そして、闇のソースコードを作ったやつに責任をなすりつけたりして、

成果を上げれないことは自分のせいじゃないって雰囲気をつくる。


そんなのはどうでもいい。

さっさとその不具合で困ってるユーザーを救ってあげることが最優先なのに、

人をバカにすることが最優先になってる。

エンジニアってやつは、インテリなやつが多いからなおさら。

ちなみに、ぼくは自称不良開発者なので、技術とかどうでもいいし、すこぶるバカだ。

エンジニアが大好きな最新技術なんてどうでもいいし、かっこいい難しいエンジニア用語は全く知らん。

もっとわかりやすい言葉で説明してね。技術大好きエンジニアさん。


エンジニアの仕事は、かっこいい技術を使うことでもキレイなソースをかくことでもない。

ユーザーに価値を届けること。

ただこれだけ。

だから、人をバカにして悲劇のヒロインぶってるやつは仕事してない。

さぼってるんだ。

だから仕事が遅いんだよ。

あなたの仕事は、その不具合という問題をさっさと解決することなんだ。


ユーザーは、ソースコードにも技術にも興味はない。

どうだっていいのだ。

ただ、自分の仕事が早く確実にストレスなく簡単に終わるようになればいいだけ。

そこにしか興味はないんだ。

理解できないソースコードを作ったのは人間だ。どうにかなる。

f:id:hrmch-ioii:20170420004556j:plain

どんなソースコードだって、しょせん人間が作ったものだ。

同じ人間である僕達が理解できないわけはない。

ただ時間がかかるのと、頭を使う量が半端ないだけだ。

ソースコードが隠蔽されたライブラリとかが原因じゃないなら

ソースコードが全て見れる範囲でおこってることなら、必ずスパゲッティソースコードは解ける。

どんなに難しい数式や発見だって、

誰かが一回解いていれば、絶対にとけるのだ。

なぜなら、参考になるものがあるから。

だから、人間が作ったものは、絶対に人間が理解できる。

解決するには、理解できる単位に分けるしかない。ただそれだけだ。

問題を大きくとらえすぎなんだ。

めちゃくちゃなソースコードが大量にあったり、スコープが広すぎるから理解できないと思ってしまう。

大きな難しい問題の大本は、

小さい問題なんだ。

小さい問題が沢山積み重なって、絡み合って大きくなったから難しい。


小さい問題は簡単に解ける。

だったら問題を小さくすればいい。

問題を小分けにして、理解できるレベルにしちゃえばいい。

これを繰り返せば、大きな難しい問題だって

いつの間にか小さくなって簡単になってる。


スパゲッティなソースコードも理解できる部分から小さく切り出して、ちっちゃなメソッドにすればいいだけ。

そうやってきりだせばいいじゃないか。

デザインパターンなんて気にする必要なんてない。とにかく小さくしていけばいいだけだ。


修正範囲が多すぎる?

そんなこと言ってたって、理解できなくて不具合解決できないよりましだ。

テストすりゃいいだけだろ!


テストする時間がない?

そんなスパゲッティなソースコードをリリースしてるときに、十分なテストできてたと思うの?

どうせできてないよ。

テストできてないんだから、主要なパターンのテストを黙ってしてたほうがマシな結果になるよ。

さっさと自分ができることをやるんだ。愚痴っても何もおきないぞ

きみが頭がよくて、すごい技術があるのはわかった。

でも、結局何もしてないよね?

人をバカにして喋ってるだけだ。

その時間を、できることに費やせばいい。

ただそれだけだろ?

間に合わなかったら、やったことを説明すればいいじゃないか。

こんだけあって、こういう方法でやったんですけど、無理でしたって。

なので時間もう少しください。

って言うだけだろ。

どうせ人は足りないんだ。

君ができなかったからといって、誰かが引き取って一瞬で終わらせることもない。

でも確実に前進させることはできる。

やれることを少しずつやった君ができなかったら、

その期間では誰もできなかったってことだよ。

責められる責任はない。終わらなかったことに対して、でもこれだけやったってドヤ顔すればいいだけだ。