「ハッカーと画家」から学んだこと。
概要
- 著作: 「ハッカーと画家」
- 著者: Paul Graham
- 監訳: 川合史朗
- 著者経歴:
コーネル大学卒業、ハーバード大学でコンピューターサイエンスの博士号を取得。美術学校の卒業経験もある。Yahoo!Store の前身である Viaweb を設立。
要約
ポール・グレアムの Web サイト paulgraham.com に公開されているエッセイを書籍化。題名の「ハッカーと画家」とはそのエッセイの中の1つであり、それに限らず「富の創り方」、「ものつくりのセンス」などについてもまとめられています。
面白かった章とその理由
第 2 章 「ハッカーと画家」
筆者によるとハッカーと画家があらゆる人種の中でも最も似た人種であるらしく、画家の特性を挙げなからハッカーに対する考えを述べています。自分にとっては画家も同様に奇妙な人種なので対比表現に関してはわからないことも多かったですが、筆者のハッカーに対する考えやハッカーとしての生きる工夫は気付きや学びを多く得られた章でした。
理解できなかった章とその理由
第 8 章 「スパム対策」
数式が全く理解できませんでした。また深く理解するためには違う参考文献で学習する必要がありそうです。 また、
ソフトウェアから法律まで、スパムと戦うすべてのアプローチのうち、ベイジアンフィルタリングは最も効果的なものであると私は思っている。
と述べられていますが、現在では(本書でまとめられているエッセイは 2001-2004 年に書かれたものである)フィルタリングによるスパム対策だけではなく、SPF、DKIM、DMARC などのメール送信元のドメイン認証 による対策との併用が効果的なようです。以下参考文献です。
仕事に活かせそうな知識、活かせそうな状況と活かし方
- 好きなことを書いて腕を上げる。昼間の仕事とは別の時間で美しいソフトウェアを書く。(多くの企業はハッカーにやりたいことをやらせてくれないから。書くのが面白いソフトウェアがビジネスになることは滅多にないから。)
- プログラミングスキルを上げるために OSS のソースコードを読む、貢献する。
- エンストしてしまいそうな時のために楽にこなせる作業を残しておく。
- ユーザ視点で(何も知らない人が使うという前提で)ソフトウェアを書く。
- パワフルな言語を使うために、Lisp に限らず異なる言語を勉強する。興味があるのは Golang。
プログラミング言語の分類
10 章「プログラミング言語入門」でのコンパイラ言語とインタプリタ言語、静的型付けと動的型付けの比較をしていましたが、何が違うのか少し混乱したのでメモとして整理します。
-
機械語
2進コードで記述された言語。そのまま実行でき言語プロセッサが不要。 -
アセンブリ言語
機械語を記号化した言語。アセンブリ言語を機械語に変換する言語プロセッサをアセンブラという。機械語とアセンブリ言語の変換は基本的に1対1である。 -
高級言語
数式や英語などより人間が読みやすい記号で記述された言語。プログラム実行時の機械語変換方法やオブジェクトの構造の整合性チェックのタイミングによって分類されることがある。-
コンパイラ言語とインタプリタ言語
- コンパイラ言語
与えられたプログラムを一括して機械語に変換して実行する。コンパイラ言語を機械語に変換する言語プロセッサをコンパイラという。機械語とコンパイラ言語の変換は1対多であるため、アセンブラ言語に比べ処理効率が劣る。 - インタプリタ言語
与えられたプログラムを一括して機械語に変換して実行するのではなく、実行時にプログラムを一行ずつ機械語に変換する。コンパイラ言語に比べ処理効率が劣る。
- コンパイラ言語
-
静的型付け言語と動的型付け言語
- 静的型付け言語
コンパイル時に型の整合性をチェックする。バグを防ぎ、またコンパイラがより速いコードを生成できる。速度や安全性が求められるシステム開発に向く。 - 動的型付け言語
プログラム実行時に型の整合性をチェックする。自由度の高いコードが生成でき可読性が高い。開発速度が求められるシステム開発に向く。
- 静的型付け言語
-
まとめてみて、コンパイラ言語と静的型付け言語、インタプリタ言語と動的型付け言語は対応するように思え、なぜこういった分類をしているのかわかりませんでしたが、例えば Java のようにコンパイラとインタプリタの両方の側面をもつ言語もあるみたいです。以下は参考文献です。
Discussion