やる気がストロングZERO

やる気のストロングスタイル

Unixという考え方と読んで思い出したことなど

Unixという考え方を読んだ。

電子書籍なかったので久々の紙の書籍で読んだ)

自分もプログラミングに接してからUnix(というかLinuxUnixLinuxの厳密な違いとか認識できてないので以降自分の体験について書くときはLinuxと書きます。)にも触れて、その良さについて漠然と認識してたけど読んで「そうだよな、Unixはいいよなぁ」と改めて思った。

Unixの考え方のいい部分はプログラミングする際にも適応できるところ多いと思っていて、読みながら以下のことを考えたりしていた。

定理2:一つのプログラムには一つのことをうまくやらせる

一つのことをうまくやるっていうのは依存が小さいってことだと思う。
依存がないと応用が効きやすい、身動きがしやすい。
Unixのコマンド類が様々な組み合わせで様々な用途に使えるのはこのおかげである。
僕らが普段組むプログラムもこのように小さなプログラムで用意しておき、それの組み合わせで要求仕様動作をするように作っておけば、ちょっとした仕様変更や追加にはすぐ対応(グルーコードの追加変更だけで済むような)できる柔軟な構造にできる。

今までなんども複数のことをやるプログラムに触れてきた。
それは例えば、DBからユーザーデータを取得し、加工し、テーブルに保存するという3つの事を行う一つの大きなプログラム。

その要求仕様をやるには全く問題無いんだが、すこしだけ違うことをしようと思うと途端にできない。

  • 検証用に用意したユーザーダミーデータを加工してみて結果を見たいが、DBからしか受け取ってくれないので一度DBにデータを入れなければならない。
  • 加工結果は標準出力に出してくれれば十分なのに、DBに入れられてしまう。

こういうのはテストコードを用意しようとしたときに「いろいろやりすぎていてテストが書けない。。」ってなる。

定理9:すべてのプログラムをフィルタにする

自分がプログラミングに触れ始めてどこかの時点でデータフローダイアグラム(DFD)を知った時、この考え方が身についたと思う。
プログラムとは、データストア(データが保持されている場所)とデータを加工する処理の存在で構成されるデータの流れである。

※以下のイメージ
データストア -> 加工処理 -> データストア -> 加工処理 -> データストア

このように見ると、加工処理とはフィルタに見える。

この考え方は普段の生活や仕事でも活きる考え方になった。

たとえば仕事で判断に悩んだとする。
上記プログラムのデータの流れに照らし合わせてみると、自分は判断する処理(フィルタ)であるが、入力されているデータが不足しているので判断できない状態に陥っていると考えられる。
DFDで考えるとその情報はどこから提供されるべきものかイメージできる。

不足データを持っている人や場所(データストア)はどこかを考える。
そのデータを持っている人や場所にそれを求めれば得られる場合もあるし、その他もろもろの事情で得られない場合もある。
得られない場合はそれ以上考えても答えがでないので、時間を使うだけ無駄でエイヤで決めるしか無い状況だと素早く認識することができる。

効率より移植性

以下内容になるほどど思った。

  • 効率はマシンの性能アップが勝手に実現してくれる。
  • マシンの性能アップの恩恵が受けられるように、移植性を優先しておくとよい。

だから、移植性を落とすようなチューニングには注意すべし。

WindowsよりもUnix(Linux)を好む理由

これはこの本に書かれていた内容ではないし、Unixどうこうじゃなく、CUIGUIの差な気もするが本を読みながら思い出したので書いてみる

Windowsは基本GUI操作で、CUIから操作されるための口が用意されていない場合が多い(ように思った。詳しくないのでなんか方法あるのかもしれないが)
たとえば、なにかしらの設定を変えたい場合、Linuxだとたいてい特定のファイルの内容を編集するだけですむ。
それを人に共有したい場合はこの設定ファイルを共有するだけで済む。

Windowsの場合は、設定できる画面を探して、マウスでポチポチ設定を変更する。
画面は不安定で、Windowsのバージョンによってはその設定が配置されている画面が変わったり、設定値の名称が変わっていたりする。
以前設定したのでわかっていると思っても、数年経ってもう一度設定しようとするとその画面がなかったりする。 ググっても古い画面の情報しかなく、新しいバージョンでの設定方法がなかなかわからなかったりする。
なぜかこういうのは公式情報でも探し出せない。。(あと、Windowsの設定まわりの情報はWeb上でかなり汚染されていてまともな情報になかなかたどり着けない)

これを人に共有したい場合は、操作手順を文章とスクショで用意して、相手の「〇〇という項目がないです」という質問に対応しないといけない。 手間がすごい。