プログラムを書いているとき、複雑に絡み合ったコードを目の当たりにし、苦しんだ経験はないでしょうか? スパゲッティーコード、クソコードと呼ばれているものです。 今回は、そのようなクソコードがなぜ生まれてしまうのか? そして私たちは、どのようにこのコードに立ち向かえばいいのか?をお伝えします。
クソコードをシンプルにするポケコロツイン サーバー開発尹舜真
View Slide
自己紹介 • 尹 舜真(ユンスンジン)• 出身: 広島• 年齢: 25• ポケコロツインサーバー開発• Javaを2年, Goを1年半• 趣味• お昼にそば屋飲み
経緯逮捕 クソコード実装の疑い尹 舜真 容疑者 (25)
目次•なぜシンプルなコードが必要か?•どうやってシンプルにするか?•なにをシンプルにするのか?
なぜシンプルなコードが必要か?ポケコロツインのクソコード を見てみましょう!
一つの関数がめちゃくちゃに長いコードなぜシンプルなコードが必要か?ノミネート理由・画面に収まりきらない・でかいif文がある・変数が長生き183行
関数名と、変数名の不一致なぜシンプルなコードが必要か?ノミネート理由・MapかListかわからない・関数名で何が返ってくるか、いまいちわかない
なぜシンプルなコードが必要か?if文地獄ノミネート理由どこの処理を実装しているのかわからなくなる変数が可変になってわかりづらいif文の if文の if文の if文
引数で渡した変数を変更するものなぜシンプルなコードが必要か?ノミネート理由引数が変更されるので、処理がものすごく追いづらい変更されたということが気づきにくい他のところで追加されたデータを上書きしがち私が作りました!
どうでしたか?誰が見ても複雑なコードだったと思いますしかし、このコードたちは、間違ってはいません動いているコードが正解ですただ人間から見て複雑なだけですでは、なぜ私たちは複雑なコード == クソコードと認識するのでしょうか?なぜシンプルなコードが必要か?
人間の限界•人間の脳は2つの仕事を同時にすることが限界• ※Science誌: 「人間の前頭葉における同時目標の分割表現」より引用なぜシンプルなコードが必要か?これ以上持てないムリ
だから人間は…なぜシンプルなコードが必要か?プログラムへの悪影響 プログラマへの悪影響わかりづらいけど速く終わる実装急いで直す
ではどうすべき?•「人間」の生産性を上げるため•「人間」がプログラムの変更を可能にするために•ソースコードをシンプルにする必要がある。なぜシンプルなコードが必要か?
どうやってシンプルにするのか?シンプルなコード人間にとって理解しやすいコード人間に複数のことを同時に考えさせないコード
なにをシンプルにするか?• 誰が見ても理解できる名前にする• 2つ以上のことを一度にしない• 一度作成した変数は、できるだけ中身を変更しない
誰が見ても理解できる名前にするなにをシンプルにするのか?俺でもわかる!
2つ以上のことを同時にしないなにをシンプルにするのか?一つのforで2つの仕事をしている2つの処理が絡んでいるので、関数にしづらい
2つ以上のことを同時にしないなにをシンプルにするのか?一つのforで一つの仕事のみ行っている2つの処理が別々になっているので関数にしやすい
一度作成した変数は、できるだけ中身を変更しない• immutableなコードにすること• メリット• コードが単純になり、また性能の改善にもつながる• スレッドセーフ• 実装時に変数の変更を考える必要がなくなるなにをシンプルにするのか?変更させねえ
mutableなコードなにをシンプルにするのか?どこで、どんなデータが追加されているかがぱっと見わからない値を上書きしてしまう可能性もある
immutableなコードなにをシンプルにするのか?どんなデータが追加されているか一目でわかる
どうだったでしょうか?• 誰が見ても理解できる名前にする• 2つ以上のことを一度にしない• 一度作成した変数は、できるだけ中身を変更しない
誰かのためのコードを書くことシンプルにする上で一番大切なことがあります
最後に• 複雑なコードは人間の生産性を下げる• 人間が理解しやすいコードを書くことがクソコードをシンプルにするということ• 一番大切ことは誰かのためにコードを書くこと
以上ですありがとうございました
参考文献• シンプルさの必要性• https://eed3si9n.com/ja/simplicity-matters• イミュータブルプログラミングのすすめ• https://blog.oliva.co.jp/index.php/2019/06/07/236/• いいコードとは何か• https://note.com/cyberz_cto/n/n26f535d6c575#HPZ6C• Go slice ベストプラクティス• https://qiita.com/imoty/items/bb18fb50d526474d2d10• 人間の脳はデュアルタスクが限界• https://science.sciencemag.org/content/328/5976/360.abstract