Slide 1

Slide 1 text

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

Slide 2

Slide 2 text

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

Slide 3

Slide 3 text

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

Slide 4

Slide 4 text

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

Slide 5

Slide 5 text

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

Slide 6

Slide 6 text

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

Slide 7

Slide 7 text

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

Slide 8

Slide 8 text

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

Slide 9

Slide 9 text

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

Slide 10

Slide 10 text

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

Slide 11

Slide 11 text

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

Slide 12

Slide 12 text

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

Slide 13

Slide 13 text

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

Slide 14

Slide 14 text

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

Slide 15

Slide 15 text

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

Slide 16

Slide 16 text

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

Slide 17

Slide 17 text

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

Slide 18

Slide 18 text

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

Slide 19

Slide 19 text

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

Slide 20

Slide 20 text

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

Slide 21

Slide 21 text

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

Slide 22

Slide 22 text

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

Slide 23

Slide 23 text

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

Slide 24

Slide 24 text

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

Slide 25

Slide 25 text

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

Slide 26

Slide 26 text

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