nikkie-ftnextの日記

イベントレポートや読書メモを発信

「あってもなくても同じなら捨てる」という片付けの考え方が(こんまりメソッドと)プログラミングに通じていました

はじめに

生まれたときめき。あの日から世界は、変わり始めたんだ! nikkieです。
片付けについて自分のスタンスを人に説明する機会がありました。
それをきっかけに脳内で技術ネタもそれ以外も繋がったので、アウトプットしてみました。

目次

片付けのスタンス:あってもなくても同じなら捨てる

新卒入社した会社の社長が「あってもなくても同じなら捨てる」を徹底していた影響で、私もこのスタンスです。

「あってもなくても同じなら捨てる」を貫くのは大変で、「後で使うかもしれないから取っておこう」という道が絶えず誘惑してきます。
特にプライベートは念のため取ってあるものが多く(片付け後回しにしがちなんです🙈)、年末は「取ってあったけど結局使ってないよね」というものを発掘しながら捨てていました。

片づけと言ったらこんまり

私のこんまりメソッドの認識は「ときめかなかったら捨てる」というものです。
海外ではkondo, konmariが片付けの意で使われているそうですね1

年末の発掘では「取ってあったけど結局使ってない」ものは「ときめきもしないから」とガンガン捨てました。

言い換えるなら、オッカムの剃刀

「あってもなくても同じなら捨てる」は、「オッカムの剃刀」にも通じると思います。

Wikipediaによると

「ある事柄を説明するためには、必要以上に多くを仮定するべきでない」とする指針

私の理解ですが、

  • XとYを仮定して、Aが導ける
  • Xを仮定して、Aが導ける

この場合、後者の方が仮定が最小限なので、好ましいことになります。

仮定Yはあってもなくても(Aが導けるという点では)同じなので、捨てられるわけですね2

さらに関連してKISSの原則

Keep It Simple, Stupid または Keep it Short and Simple

オッカムの剃刀とKISSの原則の関連は『プリンシプル・オブ・プログラミング』より。

Wikipedia によると

その意味するところは、設計の単純性(簡潔性)は成功への鍵だということと、不必要な複雑性は避けるべきだ、ということである。

例えば人に何かを説明するとき、仮定が多くなると説明は複雑になっていきますよね。
KISSの原則を適用すると、オッカムの剃刀を指針にするときと同様に、仮定は少なく、説明は単純・簡潔になると思います。

先人もシンプルさをかく語りき

KISSの原則で言及されるシンプルさは、『プログラマが知るべき97のこと』にもエッセイがありますね。

美しいコードとは、突き詰めれば、シンプルなコードのことです。システムを構成する各部分が全てシンプルで、個々の部分が担う責務も最小限に抑えられていて、部分どうしの関連もシンプル、そんなコードです

「こんなコード、私も書けるようになりたい!」とときめきます。

コードはシンプルなものであるべきです。変数や関数、宣言といった構成要素はできる限り減らすべきです。余分な行、余分な変数…、ともかく余分なものが少しでもあれば、即座に消すようにします。残るべきは、アルゴリズムを完成させ、必要な演算をすべて処理するための、必要最小限の要素だけです。

使わなくなった変数やモジュールが見つかったら「あってもなくても同じ」でもあるので、すぐ消しますね。

Pythonでキーワード引数の渡し方の好み

※これは好みの話です。

Pythonでは関数の引数はいくつかの指定方法が許されています。
(※ドキュメントの言葉を使うと、位置またはキーワード引数の話です)

def parrot(voltage, action='voom'):
    pass
parrot(1000)                                          # 1 positional argument
parrot(voltage=1000)                                  # 1 keyword argument
parrot(voltage=1000000, action='VOOOOOM')             # 2 keyword arguments
parrot(action='VOOOOOM', voltage=1000000)             # 2 keyword arguments

私は位置引数voltageをあえてvoltage=1000と指定するのを好みません。
「キーワード引数として渡した方があとでコードを読む人にとって分かりやすい」という意見も聞きますし、チームで書く中で取られた選択だとしたら納得感もあります。
ですが、私としては「この位置の引数が何を受け取るかはドキュメントを見れば分かるから、わざわざ書く必要はない」という考えです。
この考え方にも「あってもなくても同じなら捨てる」が現れているかもと今回気づきました。

終わりに

「あってもなくても同じなら捨てる」というスタンスがプログラミングにも通じるという気付きがあったのでまとめました。

P.S. 人の気持ちは例外!

「あってもなくても同じなら捨てる」は人の気持ちには適用されないようです。
その例が『四月は君の嘘』。
主人公 公生は、あってもなくても同じならある方を選んでいます!3

いてもいなくても一緒なら
一緒にいるよ

片付けとは評価軸が異なるってことですね😜


  1. 「こんまり」が米国でブレイク!片付け番組がNetflixで大ウケの理由 | 海外セレブウォッチャーさかいもゆるの セレブ胸キュン☆通信 | mi-mollet(ミモレ) | 明日の私へ、小さな一歩!(1/2) より。ときめきは海外では「Spark joy」だそうです

  2. オッカムの剃刀」は機械学習の分野では、精度指標に対して同程度のスコアの2つのモデルがあるとき、パラメタ数の少ない単純な方を選ぶべきという指針としても聞きますね。ref: Occamの剃刀 - 機械学習の「朱鷺の杜Wiki」

  3. 「あってもなくても同じなら捨てる」立場からすると、公生の選択は不合理なのですが、不合理ゆえに愛が示されていることになるのかなと(そして椿は愛として受け取ったのだと)思いました ref:『世界は贈与でできている』(4章)(この本についてもまたの機会にアウトプットしたいです)