Upgrade to Pro — share decks privately, control downloads, hide ads and more …

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

cocone
August 17, 2021

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

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

cocone

August 17, 2021
Tweet

More Decks by cocone

Other Decks in Programming

Transcript

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

    View Slide

  2. 自己紹介 • 尹 舜真(ユンスンジン)
    • 出身: 広島
    • 年齢: 25
    • ポケコロツイン
    サーバー開発
    • Javaを2年, Goを1年半
    • 趣味
    • お昼にそば屋飲み

    View Slide

  3. 経緯
    逮捕 クソコード実装の疑い
    尹 舜真 容疑者 (25)

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  19. 一度作成した変数は、できるだけ中身を変更しない
    • immutableなコードにすること
    • メリット
    • コードが単純になり、また性能の改善にもつながる
    • スレッドセーフ
    • 実装時に変数の変更を考える必要がなくなる
    なにをシンプルにするのか?
    変更させねえ

    View Slide

  20. mutableなコード
    なにをシンプルにするのか?
    どこで、どんなデータが追加されて
    いるかがぱっと見わからない
    値を上書きしてしまう
    可能性もある

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

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

    View Slide

  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

    View Slide