見出し画像

偉大なプログラマになるための指標 『UNIXという考え方―その設計思想と哲学』

UNIXという考え方』を読み終え、久々に「ハッカーになろう」を読んだ時の衝撃を受けた。

著者曰く、本書は「なぜUNIXを使う必要があるのか?」という問いに答えるものとして制作したとのこと。

しかしその役割を大きく超え、プログラマとして持つべき考え方やフレームワークを伝授し、偉大なプログラマになるための指標を示す本だった。

もともとは軍事理論書であった『孫子』が、ビジネスや株取引のバイブルとして使われているのと同じ印象を得た。

全部で148ページと短い構成だが、むしろ余計なものが削ぎ落とされ、より本質的で読みやすい。

本書の中ではUNIXの定理(物事の道理)が9個と、UNIXの考え方が10個が紹介されているが、重要箇所を3点にしぼってお伝えしたい。

① One Program, One Solution

一つのプログラムには、ただ一つの問題を解決させる、ということが重要だ。

プログラムを小さく保つことにはさまざまな実に多くのメリットが存在し、以下に一覧をまとめてみた。

・分かりやすい。→大きな何かよりも、小さい何かのほうが分かりやすい 。
・理解しやすいことは保守のしやすさにつながる。→費用対効果が大きい。 
・システムリソースをあまり使わない。→プログラム自体の稼働効率が高まる。 
・他のツールと簡単に結合でき、再利用できる。→短時間で新しいアプリを作れる。→ 予測不可能な未来に対応しやすい 。
・できることとできないことを明確にする。→大きなプログラムにありがちな曖昧さを排する。
・分業する際に、担当する範囲がわかりやすい 。
・プログラムの不要な部分をなくせる。

42 Tokyoには「ノーム」と呼ばれる、一種のスタイルガイドのようなものが存在し、提出するコードもこのスタイルガイドに沿っていなければ0点をつけられてしまう。

それほど42 Tokyoでは大切にされている「ノーム」だが、本書を読んで、「ノーム」がプログラマ育成のためにいかに役立っているかということを理解した。

「ノーム」の具体例を出すと、一つのファイルに関数は5つまで、一つの関数は25行以内、一つの関数に渡せる引数は4つまで、といったもので、これらの規則が学生を縛り付けるというよりは、小さなプログラムを書くための矯正ギブスみたいなもので、良いプログラマになるためには必要なものだ。

② 大至急プロトタイプを作る

プロトタイプとは、100%ではなく90%の解を目指して作成され、ユーザーが試すことができるプログラムのことを指す。

さっさと作ることが重要な理由は、すぐにユーザからフィードバックをもらえることと、それにより、製品リリースを早めることができる。

他にも、プロトタイプを作ることによって何がうまくいき、何がうまくいかないかが自然とわかるようになり、早いうちから誤りを取り除けることにある。

「プロトタイピング」と聞くと、デザインシンキングで有名な「IDEO社」が思い出される。

「IDEO社」は新しい発想で、ショッピングカートをたった5日間でデザインし直していた。

この仕事の進め方はもしかしたらプログラマの仕事のやり方から拝借したのかもしれない。

また、もう一つプロトタイピングを早めるメリットがあり、それは、製品サイクルを早め、ユーザーにとって最適な商品をいち早く作ることができるからだ。

製品サイクルには大きく分けて三段階あり、第一段階では、締切などに追い詰められたプログラマが「人間の想像力を刺激 」するような商品を作り上げる。

この段階では、正しくプログラムを書いている時間はないので、色々と必要な機能が足りていない。

第二段階では、専門家が第一段階のプログラムで証明されたアイディアを用いて、より多機能でアップデートした製品を作る。

開発は遅いが世間は歓迎して迎え、最も商業的に成功するのもこの第二段階だ。

そして最後の第三段階は、第一段階と第二段階のいいところどりだ。

つまり、もっとも効率的で、必要な機能だけにしぼりこまれた製品ということになる。

この第三段階こそが目指すべき場所で、そのためには第一段階と第二段階をたどらなければならない。

第一段階と第二段階を駆け上がり、いち早く第三段階に到るために必要なのが、最速でプロトタイピングを作ることだ。

③ テコの原理を使う

本書で勧められていたのは、「シェルスクリプト」を活用することだ。

「シェルスクリプト」はソフトウェアのテコを活かすと同時に移植性も高め、たった一行のシェルスクリプトで、1000行以上のソースコードを実行することが可能となる。

42 Tokyoでも、コードを書くのに、コンパイルや、実行結果の比較などを自動で行ってくれるシェルスクリプトはとても役に立っている。

本当はもっと「シェルスクリプト」について勉強したいと思っていたが、課題も進めなければならずなかなか手を出せなかった。

しかし本書を読み、毎日少しずつ「シェルスクリプト」専用に時間を割いて学習していこうと思う。

手元に『1日1問、半年以内に習得 シェル・ワンライナー160本ノック』が届いたので、早速明日から学習を初めていく。

テコの原理に話を戻すと、良いプログラマはよいコードを書くが、偉大なプログラマはよいコードを借りてくるという事実も、偉大なプログラマがテコの原理を使っているからにほかならない。

ソフトウェアは偉大な共有資産なので、 彼らはうまく他人が書いたプログラムを活用しているに過ぎない。

もちろん、ただ借りてくるだけではなく、偉大なプログラマはすでに存在するプログラムにクリエイティブな付加価値をつけることができる。

アイデアをみんなで分かち合うことと、「ソフトウェアの再処理屋」になることが重要だ。

おまけ:UNIXとは


そもそもUNIXとはなんだろうか。

一言でいうとOSで、多くの人が使っているAppleのMacOSXや、人気のUbuntuもUNIXの派生となるOSだ。

UNIXの系譜については、以下の記事の中の「UNIXとは?」という項目にまとめた。

UNIXという考え方』は、今後プログラマとして生きていくの際し、折に触れて自分を振り返るためにも何度も読み返していこうと思う。

コメントお待ちしています~☕ mondでは匿名の質問・メッセージを募集しています。なんでも送ってね👍 https://mond.how/ja/hovinci_jp