銀行員からのRailsエンジニア

銀行員からのRailsエンジニア

銀行員から転身したサービス作りが大好きなRailsエンジニアのブログです。個人で開発したサービスをいくつか運営しており、今も新しいサービスを開発しています。転職して日々感じていること、個人開発サービス運営のことなどを等身大で書いていきます。

当ブログではアフィリエイト広告を利用しています

【技術書まとめ13】UNIXという考え方―その設計思想と哲学

毎週1冊技術書を読んでブログでアウトプットすることを目標にしており、今回は第13弾です。

今回は、UNIXという考え方―その設計思想と哲学  を読んでまとめました。

50年近く使われ続けているOS、UNIXの設計思想と哲学を分かりやすく解説している技術書です。

有名な起業家 けんすうさんもオススメされています。

プログラミングの知識がなくてもサクッと読めるので、UNIXの設計思想・哲学について興味がある方は是非読んでみてください!

UNIXという考え方―その設計思想と哲学

UNIXという考え方―その設計思想と哲学

 

f:id:ysk_pro:20181028193356p:plain

第1章 UNIXの考え方:たくさんの登場人物たち

  • UNIXの考え方の定理
    • スモール・イズ・ビューティフル:小さいものは、大きいものにはない利点がいくつもある。小さいもの同士なら、簡単に独特の便利な方法で組み合わせることができる
    • 1つのプログラムには1つのことをうまくやらせる:1つのことに集中することで、プログラムに不要な部分を無くせる。不要な部分があると、実行速度が遅くなり、不必要に複雑になり、融通が効かなくなってしまう
    • できるだけ早く試作する:あらゆるプロジェクトにおいて試作は重要。一般的に、試作は設計全体のうちのほんの一部として扱われているが、UNIXにおいての試作は、効率的な設計に欠かせない重要な一部である
    • 効率より移植性を優先する:現代のソフトウェア設計では、プログラムに移植性があることは当たり前のこととなっている。これはUNIXの考え方のうち、他のシステムにも広く取り入れられているものの一つである
    • ソフトウェアを梃子(てこ)として使う:再利用可能なモジュールの重要性について、たいていのプログラマは表面的にしか分かっていない。プログラムの再利用は、ソフトウェアの梃子を最大限に利用した強力な考えである。UNIXの開発者たちは、この考え方にしたがって、非常に多くのアプリケーションを比較的短期間に開発してきた
    • 過度の対話的インタフェースを避ける:いくつかのコマンドは、ユーザーを拘束するインタフェースを持つ。そのコマンドを実行してしまうと、実行中に他のコマンドを実行することはできない。つまり、そのコマンドの実行中は、ユーザーはそこを離れられなくなってしまう。そのため、この類のものは拘束的ユーザーインタフェースと呼ばれる
 

第2章 人類にとって小さな一歩

  • プログラムには、過多にならないように適切にコメントを付ける。サブルーチンを短く保つ必要最小限のコードだけにまとめる。このような努力をして初めて、保守しやすい小さなプログラムとなる
  • 作ったときには予期できなかったことに対しても、小さなプログラムなら直ちにそれに対処することができる
 

第3章 楽しみと実益をかねた早めの試作

  • 最初の仕様から変更がないプロジェクトなどは稀である。最初からうまくやろうとするより、最初はうまくいかないと考えて対処した方が賢明である。後で大幅な変更に取り掛かるよりは、開発の初期段階で変更を行う方がはるかに安上がりとなる
  • 「ソフトウェア開発に終わりはない。あるのはリリースだけだ」
 

第4章 移植性の優先順位

  • よいプログラムは死なず、ただ新しいハードウェアに移植される
  • 効率と移植性の二者択一を迫られた時、UNIXプログラマなら、十中八九後者を選択する。結果的に、UNIXプログラマのアプリケーションが、新しいハードウェアが登場したとき真っ先に動作するアプリケーションになることが多い
  • プログラムを移植しやすく、データを持ち運びやすくしておくことで、ソフトウェアに長期的な価値が生まれる。移植性を最優先に設計するべき
 

第5章 これこそ梃子の効果!

  • よいプログラマはよいコードを書く。偉大なプログラマはよいコードを借りてくる。ソフトウェアを大量に書く一番よい方法は、借りてくることである。ソフトウェアを借りるということは、他人のモジュールやプログラム、設定ファイルを自分のアプリケーションで使うということ。自分の仕事に他人の成果を取り込むことで、先人の努力を活かし、コードの有用性を一段と高めることができる
  • 既存のアプリーションをゼロから設計し直すことは、模倣ではあっても創造とは言わない。むしろこれを避けることで、新しい、わくわくするような設計世界への扉が開かれる
  • ある作業を自動化すると、そこに梃子の原理が働く
 

第6章 対話的プログラムの危険性

  • 拘束的プログラムは、どこかで人間と対話することを想定しているため、ソフトウェアの梃子の効果を利用できない
  • プログラムから発生するデータの受け取り手が人間ではなく、別のプログラムかもしれないことを念頭に置いておく
  • プログラムに何ができるかという内向きのことばかり考えず、プログラムがどういう場所に入り込めそうかを考える。そうすれば、そのプログラムを一部とする大きな全体が見えてくる
 

第7章 さらなる10のUNIXの考え方

  • UNIXコマンドは、入力データが与えられなかったり、出力するデータがなかったりしてもエラーを返さないものが多い。UNIXコマンドはパイプ機構(|)で繋がれた際に、エラーメッセージでおかしな挙動になることを防ぐための設計となっている
  • 90%の解を目指す。90%の解とは、難しい部分を故意に無視することを意味している。難しい部分とは、問題の中で高くつく部分、時間のかかる部分、実装しにくい部分である。一番難しい10%を無視してよいのであれば、世界中のほとんどの問題はすぐにでも解決できる。これがUNIXの成功の一因である
  • UNIXの考え方とは、常に将来を見据えながらオペレーティングシステムとソフトウェアの開発にアプローチすることである。そこでは、常に変化し続ける世界が想定されている。将来は予測できない。一日ごとに今日が昨日になっていく日々を過ごしながら、将来に適応し、前進し続けなければならない。UNIXの理念とは、将来に向かうアプローチの一つである。その本質は柔軟であり続けることである。嵐が何度やってきても、風に揺れる木は折れることはない

 

おわりに

ここまで読んでいただきありがとうございます。

UNIXに関わらず設計思想全般に関する内容だったので、とてもいい勉強になりました。

本書自体140ページ程度でサクッと読めてしまうので、興味を持った方は是非お手に取って読んでみてください!(Kindle版が無いのは残念...) 

UNIXという考え方―その設計思想と哲学

UNIXという考え方―その設計思想と哲学

 

次は、Team Geek ―Googleのギークたちはいかにしてチームを作るのか を読む予定です。

Googleのマネージャーによる、チームで働くノウハウについての本です。

評判のいい本なので読むのが楽しみ!

来週も頑張ります。