『ハッカーと画家』
https://gyazo.com/e737938bd909ddb98627ac61a0a08a92
第0章 メイド・イン・USA
アメリカ人が車を作るのが下手なのとソフトウェアを書くのが得意なのは、同じ理由による。だがアップルの存在は、両方を改善してゆけるヒントだ。
第1章 どうしてオタクはもてないか
彼らはゲームに乗っていない。
11歳のコミュニティが作る蝿の王の世界: 11
蠅
蝿
第2章 ハッカーと画家
ハッカーは、画家や建築家や作家と同じ、ものを創る人々だ。
論文の数を増やす誤った方法: 25
論文の数を増やす最良の方法は、間違った仮定から出発することだ。人工知能の研究の多くがこれに当てはまる。知識は抽象概念を引数に取る話論理式の離列で表現できる、と仮定して始めれば、それを動かすためにたくさんの論文を書くことになるだろう。
今風にいえば人工知能の説明はどうなるんだろう?あんも.icon
楽な作業を少し残しておく: 33
どこかにこれを引いたものがあるので探すあんも.icon*3
プログラミングに関しての引用文句: 35
プログラムは、人々がそれを読むために書かれるべきである。
たまたま、それが計算機で実行できるにすぎない。
第3章 口にできないこと
異端的な考えを思い巡らせ、それをどう使うか。
主張を封殺するためのレッテル: 42
不敬・冒涜・異端
無作法・不道徳
敗北主義者
不適切
対立主義的
第4章 天邪鬼の価値
ハッカーはルールを破ることで勝つ。
第5章 もうひとつの未来への道
Webベースソフトウェアは、マイクロコンピュータの登場以来最大のチャンスだ。
第6章 富の創りかた
裕福になる最良の方法は富を生み出すことだ。そしてベンチャー企業はその最良の方法だ。
第7章 格差を考える
収入の不均一な分布は、広く考えられているほど問題ではないのではないか。
第8章 スパムへの対策
最近まで、専門家の多くはスパムフィルタは成功しないと考えていた。この提案がそれを変えた。
第9章 ものつくりのセンス
素晴らしいものを創るにはどうすればよいか。
第10章 プログラミング言語入門
プログラミング言語とは何か。それはなぜ盛んに話題になるのか。
言語戦争: 154
自分の使っている言語以外はダメ派
どれも一緒派
あなたがどこへ行ってもマクドナルドで食事をするなら、食事はどんな国でも同じようなものだという結論に達するだろう。 バッファオーバーフローアタック: 156
ハイジャック犯は乗客であるが、コックピットに侵入することで航空機のコントロールを得る データ(乗客)からコード(操縦者)に変身する
シートベルトか手錠か: 156
プログラマがやりたいことはなんでも許すか
プログラマの愚かな行いを防ぐか
小さな議論に分解すると
静的型付けor動的型付け
etc
第11章 百年の言語
百年後にはどういうふうにプログラミングをしているだろう。今からでもそれを始められないだろうか。
未来のプログラミング言語: 172
(a)100年後の言語は、原理的には、現在でも設計できる。
(b)そのような言語は、もし存在すれば、現在でもプログラムを書くのに良い言語かもしれない。
第12章 普通のやつらの上を行け
Webベースアプリケーションでは、自分の使いたい言語を使うことができる。ライバルも同様だ。
エリック・レイモンドのエッセイ: 173
ほげ言語のパラドックス: 178
ちょうど真ん中程度の抽象度をもつプログラミング言語ほげを考える
ほげより力の弱い言語は明らかに力が弱い
慣れ親しんだ機能がないから
ほげより強力な言語を見たとき
見上げていることに気づかない
へんてこりんな言語に見える
ふわふわしたおまけがついているだけ
より抽象度の高いほげ2を仮定したとき、この議論が繰り返される
第13章 オタク野郎の復讐
技術の分野では、「業界のベストプラクティス」は敗北へのレシピだ。
当時ユニークだったこと
条件式
関数型
再帰
動的型付け
式でプログラムが構成されること
シンボル型
シンボルと定数の木によってコードを表現すること
言語のすべてが常にあること
なにを指しているのかがよくわからない?あんも.icon
アキュムレータ生成関数を実装することによる言語の比較: 198
言語仕様を比較するのによく使われるらしいあんも.icon
各言語が関数をどのように定義し、呼び出すか
変数のスコープとクロージャの扱い
クロージャ
外部スコープの変数を参照する関数
アキュムレータ生成関数は、現在の累積値を内部状態としてもつ
lexical scope
関数をデータと同様に扱うか
生成・代入・演算・受け渡しができるか
各言語が不変性と変更可能性をどのように扱うか
アキュムレータ生成関数は、内部状態である累積値を更新していくから
Common Lisp
code:accumulator.lisp
(defun make_accumulator (n)
(lambda (i) (incf n i)))
Ruby.icon
code:accumulator.rb
def make_accumulator(n)
lambda {|i| n += i}
end
Perl 5
code:accumulator.pl
sub make_accumulator {
my $n = shift;
return sub { $n += shift }
}
Python.icon
code:accumulator.py
def make_accumulator(n):
def accumulator(i):
nonlocal n
n += i
return n
return accumulator
Julia.icon
code:accumulator.jl
function make_accumulator(n)
i -> (n += i; n)
end
JavaScript
code:accumulator.js
function make_accumulator(n) {
return function(i) {
n += i;
return n;
}
}
いかなるプログラムもどんな言語を使っても書ける: 201
すべての言語はチューリング完全であるので、力の弱い言語でもLispインタプリタを書くことで解決できる
より強い言語を選択すべき理由でもある
第14章 夢の言語
良いプログラミング言語とは、ハッカーがやりたいことをやれる言語だ。
第15章 デザインとリサーチ
研究は独自性が必要だ。デザインは良くなければならない。
悪いほうが良い原則: 222
何か新しい物を作るときはできるだけ早くプロトタイプをユーザーの前に出すべき、ということがアイデアの中心
芸術分野では普遍的に見られる
油絵が、15世紀に広まった時に熱狂的に受け入れられたのは、プロトタイプからそのまま最終的な作品を作ることができたからだった。もちろん下書きを書くことはできるが、そこで止める理由はない。完成するまでどんどん詳細化してゆくことができるし、大きな変更を加えることだってできる 第16章 素晴らしきハッカー
ほかより飛び抜けて優れたプログラマがいる。そんな素晴らしいハッカーたちはどういう人物なんだろう。
用語解説
遠くのコンピュータに安全に接続できるプログラム
Web上で安全にデータを転送できるプロトコル
ある言語で書くことのできるすべてのプログラムがチューリングマシンのプログラムへと変換可能で、すべてのチューリングマシンのプログラムがその言語のプログラムに変換可能である
すべてのプログラミング言語はチューリング完全である
非常に単純な構造を持つ仮想的なコンピュータ
計算に関する理論を証明するのに使われる