30歳からのプログラミング

30歳無職から独学でプログラミングを開始した人間の記録。

『UNIXという考え方―その設計思想と哲学』を読んだ

UNIX やそのツールはどのような考えに基づいて作られているのか解説した本。
UNIX が開発されていくなかで培われていった文化や考え方について書かれている。

www.ohmsha.co.jp

UNIX が具体的にどのように動いているのかではなく、 UNIX はなぜそのように動いているのか、ということが主題。
そのため、 UNIX に限らずソフトウェア開発全般に適用できるような内容になっている。ソフトウェアだけでなく「ものを作る」こと全般に応用できる内容も多いかもしれない。
私も、現時点では UNIX そのものに対する熱意や探究心はあまりないので、 UNIX について知るためではなく開発の参考になる考え方がないかと思って読んだ。

9 つの定理が紹介されているのだが、まず思ったのは、「言うは易く行うは難し」という感じの定理ばかりだなということ。
例えばシンプルに保て、小ささを維持しろ、というのは単純な定理だし、ほとんどの開発者が賛同するはず。
しかし実践するのが難しい。気が付けば余計なことをしているし、いつの間にかなぜか肥大化し複雑になっている。

目の前のタスクに追われているうちに定理を忘れがち、という側面もあるだろうが、単純な定理であっても実践するのは難しいという話なのかもしれない。
プログラムや関数は、たったひとつのやるべきことに専念するべきなのだろうが、その「やるべきこと」が何かを決めるのがまず難しい。
やりたいことを適切に抽象化して「やるべき」ことを導き出すのは、とてつもなく難しいことのように思える。

一つのことをうまくやるようにプログラムを作れないのであれば、恐らく問題をまだ完全には理解していないのだろう

と本書にも書かれているが、まさにそういう話だと思う。適切に設計するためにはまず、解きたい課題を正しく理解しないといけない。

アジャイル開発との共通性も印象に残った。
「できるだけ早く試作する」という定理は、何を作るべきか事前に判断するのは難しい、だからこそ実際に動くものを早く作って顧客からフィードバックをもらえ、試行錯誤を繰り返せ、という内容であり、アジャイル開発そのものだった。
そして本書の最後に、 UNIX の考え方とは変化し続ける世界で未来に向かっていくアプローチだ、という話が出てくるが、これも変化を受け入れるという意味でアジャイル開発の考え方と近いと思う。

それ以外だと、データを作るのはコンピュータではなく人間である、という話が面白くて印象に残った。
ワードプロセッサは自力では何も書けず、書くべき内容は人間の頭の中から生まれる、という話で、確かにという感じだった。
この話の少し前に書かれていた「コンピュータを使って積極的に処理の自動化を行うべきだ、処理に人間を介在させると人間の処理能力がボトルネックになってしまう、それではせっかくのコンピュータの能力を活かせない」という内容と合わせて考えると、コンピュータが得意なことはコンピュータに任せ、人間は人間にしか出来ないことに注力すべき、という話なのかもしれない。
近年はコンピュータが文章やイラストを自動生成してくれるが、あれもあくまでも人間がこれまで積み上げてきたデータを利用して生み出しているだけ、とも言えるかもしれない。
それでも構わない、むしろそのほうが望ましいというケースも当然あるだろうから、そういう分野ではコンピュータの利用が進むのだろうし、一方で人間でなければ生み出せないデータや人間が生み出すことに意味のあるデータも存在するはずなので、人間はそういったデータの生成に注力するようになっていくのだろう。