プログラムを書くためにやってること


概要

流行ってるので。

http://cside.hatenablog.com/entry/2014/05/19/021253

http://qiita.com/voluntas/items/f8eceda58f1bdfd33905


といいつつ俺のはポエムです。



記憶しなければいけないことを減らす

忘れてもいいように、情報は「それが必要になる箇所にできるだけ残す」ことにしてる。


情報とその情報が必要な物事の間に距離とか時差とかがあると、その間が原因で情報が無駄になる。


減らす効能として、次がある。

・覚えておくべき事が少なくできる = 無駄な努力の削減ができる

・一度に複数のことに関わっても何してたか思い出すロスが減る(そもそも覚えてない確信がある



ルールを作って毎回悩んでいる物事を減らす

たとえばメモを残すときに、タイトルについて悩む事は無いだろうか。


自分はあって、毎回あって、面倒くさくなったので、一貫性と時事性を求めて、 2014/05/20 22:59:11 とかタイムスタンプを使う。

ショートカットにしておくと楽。


毎回悩む事を減らすと、その悩みが永遠に消える。


また、メモのフォーマットを決めたりすると、これまた悩み事が減る。

覚えてられなければ覚えてられる範囲のルールを策定すれば良い。



100%誰かの為のものは作らない

最低でも自分のために%が割り当てられるものを作る。


誰かのため、だと、自分がその誰かのニーズを見誤っている場合、即ゴミが完成する。

完成してもゴミ。ツラい。


また、最低でも自分がニーズの一翼を持った方が、「ああ、このニーズとこの労働は割にあわないな」とかなって、諦められて良い。


価値を生まないものを作り上げることに価値はない。

作って使って利益を得る事に価値がある。


自己満足ならそれはそれで。



習慣を作る

作れる。試して長続きすればそれはもう習慣。

長続きしなかったらアレンジして試す。



自分のケツを蹴る方法を習慣にする

例えばタイマーをセットして時間に追われるごっこしたり、

images.jpeg


何でも良いけど、自分を急がせる手法を用意しておくと捗る。

捗らなくても手が打てる。



自動的に禁止する

自動化の最も良いところは、何度自分がルール違反をしても、飽きる事無く注意してくれるところ。

人だと飽きちゃう。あきれ(られ)てしまう。


また、ルールは自動的に守れるようにしておくと楽。



選択肢を増やす

今までやってない事を試し、選択肢を増やす。

一辺倒になると硬化/老化してヤバい。


トンカチを持ったら全てが釘に見える、みたいなのを避けるには、工具をいっぱい用意すれば良いと思う。

今まで単なる釘に見えてたものが、何かを知った事で違った見え方になることを期待する。



そうやって増やした選択肢の結果で、

全然関係ない物事が考え方に影響を与えたり、人と会わせてくれたりする。


コードを書く時には、選択肢を多く持っておく事は、文脈を実現する手段として使える。これは例えば次の話。



いろんな疎結合をデザインに利用する

いろんな疎結合を組み合わせることで、意図を表象したりできる。

例えばなんらかのアプリケーションを作ったとき、


コード外とコード内にはそれぞれ別の種類の疎結合が有り得ると思う。

コード外の世界が持つ疎結合の特性と、コード内の世界が持つ疎結合の特性は大きく異なる。


コード外での疎結合というと、

ありもののプロトコルで繋ぐとか、ファイルで読むとか、プロセスを繋ぐとか。

一般性が高く、なんらかの方法で結合の手段の明示が必要なものら。


コード外での構成に使える手段はめっちゃ多いが、多用しすぎると誰にも解らないパーツ群になってしまう。

主に明示性、凝集性、あとで見てワンセットに見えるかどうか、Purgableに見えるかどうか。

(これらを結びつけられるのはドキュメントだけだ。ドキュメントの「まとめる力」がどれだけ強いか、知ってる人は無茶はしないと思いたい。)



コード内では、疎結合の手法とバリエーションによって「パーツ単位」や「考え方」の単位を、あとからコードとかAPI見た人に、より強くアピールする事が出来る。

手段を明示的に使い分けることで、コードに文脈を与えられる。

特に手段が多い言語とかで楽。

ただし、パターンに見せるためには、パターンに見せられるだけのプレゼンテーションが必要。

4種類の柄を使って着物デザインしました、って言っても、相手に近過ぎたら1種類にしか見せられない。

どうやって一歩ひかせて俯瞰させるか、みたいなのもデザイン。


部分あるいは全体で捨てられるようにする

疎結合性はこのための条件。

固執するのは良くない。いろいろ試して、「あ、こっちのほうがいいや、これもういらねーや」ってなったら捨てようと思ってる。


疎結合での切り口がうまくマッチすれば、もしかしたら再利用できるかもしれない。


捨てられないものは腐る。ゴミは捨てれば良い。



身軽さを保つ

環境を移動するときに、毎回持ち歩かなければいけない重い荷物が多かったりしない?


それって結構邪魔じゃない? みたいな思考で、


・頻繁に使わないツールは入れない

・使わなくなったツールは捨てる

・デフォルトで使って動作が良いツールを使う


などを守ると、あとはDropboxの2GBに入るだけの質量のデータと、Githubとかが有ればOKなのでは。


もっといい制約を探す

最高の制約は、最高のゲームになる。

懲りずに改良するとしたら、制約の部分が良いと思う。