Save 37% off PRO during our Black Friday Sale! »

cocone Teck Talk Vol.2 -クソコードをシンプルにする

7ed7c8dbd917b000d5eb633e3519c123?s=47 cocone
August 17, 2021

cocone Teck Talk Vol.2 -クソコードをシンプルにする

プログラムを書いているとき、複雑に絡み合ったコードを目の当たりにし、苦しんだ経験はないでしょうか? スパゲッティーコード、クソコードと呼ばれているものです。 今回は、そのようなクソコードがなぜ生まれてしまうのか? そして私たちは、どのようにこのコードに立ち向かえばいいのか?をお伝えします。

7ed7c8dbd917b000d5eb633e3519c123?s=128

cocone

August 17, 2021
Tweet

Transcript

  1. クソコードを シンプルにする ポケコロツイン サーバー開発 尹舜真

  2. 自己紹介 • 尹 舜真(ユンスンジン) • 出身: 広島 • 年齢: 25

    • ポケコロツイン サーバー開発 • Javaを2年, Goを1年半 • 趣味 • お昼にそば屋飲み
  3. 経緯 逮捕 クソコード実装の疑い 尹 舜真 容疑者 (25)

  4. 目次 •なぜシンプルなコードが必要か? •どうやってシンプルにするか? •なにをシンプルにするのか?

  5. なぜシンプルなコードが必要か? ポケコロツインのクソコード を見てみましょう!

  6. 一つの関数が めちゃくちゃに長いコード なぜシンプルなコードが必要か? ノミネート理由 ・画面に収まりきらない ・でかいif文がある ・変数が長生き 183 行

  7. 関数名と、変数名の不一致 なぜシンプルなコードが必要か? ノミネート理由 ・MapかListかわからない ・関数名で何が返ってくるか、いまいちわかない

  8. なぜシンプルなコードが必要か? if文地獄 ノミネート理由 どこの処理を実装しているのかわからなくなる 変数が可変になってわかりづらい if文の if文の if文の if文

  9. 引数で渡した変数を変更するもの なぜシンプルなコードが必要か? ノミネート理由 引数が変更されるので、処理がものすごく追いづらい 変更されたということが気づきにくい 他のところで追加されたデータを上書きしがち 私が作りました!

  10. どうでしたか? 誰が見ても複雑なコードだったと思います しかし、このコードたちは、間違ってはいません 動いているコードが正解です ただ人間から見て複雑なだけです では、なぜ私たちは 複雑なコード == クソコード と認識するのでしょうか?

    なぜシンプルなコードが必要か?
  11. 人間の限界 •人間の脳は2つの仕事を同時にすることが限界 • ※Science誌: 「人間の前頭葉における同時目標の分割表現」より引用 なぜシンプルなコードが必要か? これ以上持てない ムリ

  12. だから人間は… なぜシンプルなコードが必要か? プログラムへの悪影響 プログラマへの悪影響 わかりづらいけど 速く終わる実装 急いで直す

  13. ではどうすべき? •「人間」の生産性を上げるため •「人間」がプログラムの変更を可能にするために •ソースコードをシンプルにする必要がある。 なぜシンプルなコードが必要か?

  14. どうやってシンプルにするのか? シンプルなコード 人間にとって理解しやすいコード 人間に複数のことを同時に考えさせないコード

  15. なにをシンプルにするか? • 誰が見ても理解できる名前にする • 2つ以上のことを一度にしない • 一度作成した変数は、できるだけ中身を変更しない

  16. 誰が見ても理解できる名前にする なにをシンプルにするのか? 俺でもわかる!

  17. 2つ以上のことを同時にしない なにをシンプルにするのか? 一つのforで2つの 仕事をしている 2つの処理が絡んでいるので、 関数にしづらい

  18. 2つ以上のことを同時にしない なにをシンプルにするのか? 一つのforで一つの仕事 のみ行っている 2つの処理が別々になって いるので 関数にしやすい

  19. 一度作成した変数は、できるだけ中身を変更しない • immutableなコードにすること • メリット • コードが単純になり、また性能の改善にもつながる • スレッドセーフ •

    実装時に変数の変更を考える必要がなくなる なにをシンプルにするのか? 変更させねえ
  20. mutableなコード なにをシンプルにするのか? どこで、どんなデータが追加されて いるかがぱっと見わからない 値を上書きしてしまう 可能性もある

  21. immutableなコード なにをシンプルにするのか? どんなデータが追加されているか 一目でわかる

  22. どうだったでしょうか? • 誰が見ても理解できる名前にする • 2つ以上のことを一度にしない • 一度作成した変数は、できるだけ中身を変更しない

  23. 誰かのためのコードを書くこと シンプルにする上で一番大切なことがあります

  24. 最後に • 複雑なコードは人間の生産性を下げる • 人間が理解しやすいコードを書くことが クソコードをシンプルにするということ • 一番大切ことは 誰かのためにコードを書くこと

  25. 以上です ありがとうございました

  26. 参考文献 • シンプルさの必要性 • 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