ハッカーと画家
最近、「関数型プログラミングを学ぶ場合、教材は何がいいのか?」と考えてました。
検討する中で、Lispを推奨していたポール・グレアム氏の「ハッカーと画家」という本を思い出しました。
- 作者: ポールグレアム,Paul Graham,川合史朗
- 出版社/メーカー: オーム社
- 発売日: 2005/01/01
- メディア: 単行本
- 購入: 109人 クリック: 4,884回
- この商品を含むブログ (582件) を見る
以前読んだときは、あまりピンと来なかったけど、改めて読み直してみると、結構いいこと書いてあったんだな!と印象が変わりましたw
関数型プログラミングを学ぶときのモチベーションアップのために、本書を参考にしてみたいと思います。
英語原文と日本語訳
「ハッカーと画家」は、英語の原文がネットで公開されてました。
日本語訳も一部が公開されてました。
本に掲載されてないエッセイ(英語原文)もたくさんあったので、備忘録としてメモ。
- 無料で読めるポール・グレアムの「ハッカーと画家」+αの日本語訳のみのまとめ · GitHub
- 無料で読める「ハッカーと画家」+ α - NAVER まとめ
- Practical Scheme 翻訳文書
- PAUL GRAHAM - Essays(英語原文)
目次
第0章 メイド・イン・USA
アメリカ人が車を作るのが下手なのとソフトウェアを書くのが得意なのは、同じ理由による。だがアップルの存在は、両方を改善してゆけるヒントだ。
- (日本語訳) なし
- (英語原文) Made in USA http://www.paulgraham.com/usa.html
第1章 どうしてオタクはもてないか
彼らはゲームに乗っていない。
- (日本語訳) www.blog.net/nerds-jp.htm http://www.blog.net/nerds-jp.htm
- (英語原文) Why Nerds are Unpopular http://www.paulgraham.com/nerds.html
第2章 ハッカーと画家
ハッカーは、画家や建築家や作家と同じ、ものを創る人々だ。
- (日本語訳) Hackers and Painters http://practical-scheme.net/trans/hp-j.html
- (英語原文) Hackers and Painters http://www.paulgraham.com/hp.html
第3章 口にできないこと
異端的な考えを思い巡らせ、それをどう使うか。
- (日本語訳) What You Can't Say http://practical-scheme.net/trans/say-j.html
- (英語原文) What You Can't Say http://www.paulgraham.com/say.html
第4章 天邪鬼の価値
ハッカーはルールを破ることで勝つ。
- (日本語訳) なし
- (英語原文) The Word "Hacker" http://www.paulgraham.com/gba.html
第5章 もうひとつの未来への道
Webべースソフトウェアは、マイクロコンピュータの登場以来最大のチャンスだ。
- (日本語訳) The Other Road Ahead http://practical-scheme.net/trans/road-j.html
- (英語原文) The Other Road Ahead http://www.paulgraham.com/road.html
第6章 富の創りかた
裕福になる最良の方法は富を生み出すことだ。そしてべンチャー企業はその最良の方法だ
- (日本語訳) なし
- (英語原文) How to Make Wealth http://www.paulgraham.com/wealth.html
第7章 格差を考える
収人の不均一な分布は、広く考えられているほど問題ではないのではないか。
- (日本語訳) なし
- (英語原文) Mind the Gap http://www.paulgraham.com/gap.html
第8章 スパムへの対策
最近まで、専門家の多くはスパムフィルタは成功しないと考えていた。この提案がそれを変えた。
- (日本語訳) A Plan for Spam http://practical-scheme.net/trans/spam-j.html
- (英語原文) A Plan for Spam http://www.paulgraham.com/spam.html
第9章 ものつくりのセンス
素晴らしいものを創るにはどうすればよいか。
- (日本語訳) Taste for Makers http://practical-scheme.net/trans/taste-j.html
- (英語原文) Taste for Makers http://www.paulgraham.com/taste.html
第10章 プログラミング言語入門
プログラミング言語とは何か。それはなぜ盛んに話題になるのか。
- (日本語訳) なし
- (英語原文) なし
※この章は、ポール・グレアム氏のWebサイトに、該当記事が見当たらないみたい?
Paul Graham - Programming Languages Explained
What a programming language is and why they are a hot topic now.
第11章 百年の言語
百年後にはどういうふうにプログラミングをしているだろう。今からでもそれを始められないだろうか。
- (日本語訳) The Hundred-Year Language http://practical-scheme.net/trans/hundred-j.html
- (英語原文) The Hundred-Year Language http://www.paulgraham.com/hundred.html
第12章 普通のやつらの上を行け
Webべースアプリケーションでは、自分の使いたい言語を使うことができる。ライバルも同様だ
- (日本語訳) Beating the Averages http://practical-scheme.net/trans/beating-the-averages-j.html
- (英語原文) Beating the Averages http://www.paulgraham.com/avg.html
第13章 オタク野郎の復讐
技術の分野では、「業界のべストプラクティス」は敗北へのレシピだ。
- (日本語訳) Revenge of the Nerds http://practical-scheme.net/trans/icad-j.html
- (英語原文) Revenge of the Nerds http://www.paulgraham.com/icad.html
第14章 夢の言語
良いプログラミング言語とは、ハッカーがやりたいことをやれる言語だ。
- (日本語訳) Being Popular http://practical-scheme.net/trans/being-popular-j.html
- (英語原文) Being Popular http://www.paulgraham.com/popular.html
第15章 デザインとリサーチ
研究は独自性が必要だ。デザインは良くなければならない。
- (日本語訳) Design and Research http://practical-scheme.net/trans/desres-j.html
- (英語原文) Design and Research http://www.paulgraham.com/desres.html
第16章 素晴らしきハッカー
ほかより飛び抜けて優れたプログラマがいる。そんな素晴らしいハッカーたちはどういう人物なんだろう。
- (日本語訳) Great Hackers http://practical-scheme.net/trans/gh-j.html
- (英語原文) Great Hackers http://www.paulgraham.com/gh.html
ポール・グレアム氏
ポール・グレアム(Paul Graham、1964年 - )は、米国のLispプログラマーでエッセイスト。『ANSI Common Lisp』や『ハッカーと画家』の著者としても知られている。
人物・来歴
コーネル大学で哲学の学士号を取得し、ハーバード大学でコンピュータサイエンスの分野の修士号(1988年)と博士号(1990年)を取得した。また、ロードアイランドデザインスクールとフィレンツェの美術学校で絵画を学んだ。
1995年にロバート・モリスと最初のASPであるViawebを創立。Common Lispで書かれたViawebソフトウェアでは、ユーザーがインターネットストアを作成することが出来た。1998年、ViawebはYahoo!の45万5000株(4960万ドル相当)と交換でYahoo!に買収され、同製品はYahoo!Storeとなった。
この頃から彼は自身のウェブサイトであるpaulgraham.comでエッセイを書き始めた。彼の書くエッセイは、Lispと他のプログラミング言語を比較した「普通のやつらの上を行け」から、高校でのオタクの生活を論じた「どうしてオタクはもてないか」まで至る。彼のエッセイは『ハッカーと画家(英語版)』としてまとめられて出版されている。Googleの英語サイトで「essays(エッセイ)」と検索すると、2010年4月7日現在では彼のエッセイのリストが最初に表示される。
2005年にハーバードコンピュータ協会で行った講演は、「スタートアップの始め方」として公開された。グレアムはトレバー・ブラックウェルとジェシカ・リビングストン、ロバート・モリスと共に、スタートアップ企業(特に若い人によって開始され、とりわけ技術志向の企業)へのシードファンディングを提供することを目的としたY Combinatorを創立した。Y Combinatorは現在38のスタートアップ企業への投資を行っている。投資先の企業の中で最も良く知られている企業はredditとlooptである。
ポール・グレアム氏は「Yコンビネーター」の創設者としても有名ですね。
YコンビネータLLC(Y Combinator LLC)は、カリフォルニア州マウンテンビューのベンチャーキャピタルである。主にスタートアップ企業に対し投資している。2005年にポール・グレアム、ロバート・T・モリス、トリヴァー・ブラックウェル、ジェシカ・リヴィングストンにより設立された。
他のスタートアップファンドと比較した場合、Yコンビネータは非常に少ないお金 (2万ドル前後) を提供するのが特徴である。3カ月にわたって集中的に指導し他のベンチャーキャピタルなどから投資を受けられる状態まで育てる。これはグレアムの哲学に依るものである。2011年までに約316社に投資を行っている。
出資した企業
Yコンビネーター シリコンバレー最強のスタートアップ養成スクール
- 作者: ランダル・ストロス,滑川海彦,高橋信夫,TechCrunch Japan翻訳チーム
- 出版社/メーカー: 日経BP社
- 発売日: 2013/04/25
- メディア: 単行本
- クリック: 14回
- この商品を含むブログ (15件) を見る
Lispの教材
関数型プログラミング言語はいろいろあるけど、日本語の分かりやすい教材が揃っているものが学習しやすいですね?
という順番で練習してみたら、スムーズにステップアップできるような気がします。
Lispは、「Common Lisp」が現在の標準ですが、言語仕様が巨大なので学習コストがデカいと思います。(学習教材としては不向き?)
Lispの方言(派生言語)だと、「Scheme」や「Racket」は言語仕様がコンパクトなので=最初に覚えるべきルールが少ないので、学習教材に向いてるかも?
Racket (旧称 PLT Scheme) は、Schemeから派生したプログラミング言語である。
歴史
Racket を開発したPLT project は、1990年代中ごろに, Matthias Felleisenによってまず研究グループとして立ち上げられ、その後すぐに、プロジェクトは初心者プログラマ向けの教育用マテリアル(レクチャー、演習課題や自由課題、ソフトウェア)を製作するのに注力した。 1995年1月, グループは教育用途のプログラム環境を開発することにした。 Matthew Flatt はlibschemeのMrEdと、wxWidgets、およびいくつかのフリーなシステムをバンドルした。開発の決定から何年かかけて、Flatt, Robby Findler, Shriram Krishnamurthi, Cormac Flanaganら数多くの人々によるチームによって、 Scheme の初心者向けプログラミング環境・ソフトタイピングの実験環境DrSchemeが作られた。
同時に, PLTのチームは高校教師向けのワークショップを行い、プログラムデザインと関数プログラミングを指導した。. この場での教師や生徒とのやりとりは、 開発の方向付けについて重要な手がかりを与えた。
数年に渡って、教育用言語, algebraic stepper, 透過的なREPL, constructor-based printer, など多くの改善点が DrSchemeに加わり、アプリケーションとして十分な質を備えた教育的プログラミング開発環境が完成した。2001年には, 中心的なチーム (Felleisen, Findler, Flatt, Krishnamurthi) により、プログラミング教育の思想に基づいて、彼らの初めて教科書How to Design Programsを出版した。
- Racket 公式サイト http://racket-lang.org/
- How to Design Programs https://www.htdp.org/
Realm of Racket: Learn to Program, One Game at a Time! (English Edition)
- 作者: Matthias Felleisen,David Van Horn,Conrad Barski
- 出版社/メーカー: No Starch Press
- 発売日: 2013/06/13
- メディア: Kindle版
- この商品を含むブログを見る
関数型プログラミング
関数型プログラミングは、一言でいうと「写像をつなげてプログラムを書くこと」だと思います。(「写像」=「関数」なので、単に言い換えただけ)
写像(しゃぞう、mapping, map)とは、二つの集合が与えられたときに、一方の集合の各元に対し、他方の集合のただひとつの元を指定して結びつける対応のことである。
函数(関数)、変換、作用素、射などが写像の同義語として用いられることもある。
手続型(構造化プログラミング)と関数型の仕組み/機能を対応させると、
- 順次 → 合成
- 反復 → 再帰
- 分岐 → パターンマッチ
という具合に、同じ処理ができると分かります。
このうち、もっとも基本となる「関数の合成」は「写像の組合せ」であり、手続型でいうところの「メソッドチェーン」みたいなもんですね?
JavaScriptは、関数をデータとして扱えます。(=第一級オブジェクト)
JavaScriptでも、関数型プログラミングの書き方(合成、再帰、パターンマッチなど)ができます。
JavaScriptの関数型ライブラリーや関数型を使うフレームワークもあるので、活用する機会が増えそうですね?
JavaScript関数型プログラミング 複雑性を抑える発想と実践法を学ぶ (impress top gear)
- 作者: Luis Atencio,株式会社イディオマコムニカ加藤大雄
- 出版社/メーカー: インプレス
- 発売日: 2017/06/09
- メディア: 単行本(ソフトカバー)
- この商品を含むブログを見る
ポール・グレアム氏のエッセイは「ハッカーと画家」以外にもたくさんあります。
Essays http://www.paulgraham.com/articles.html
他にも面白そうな記事があるので、時間があったら読んでみよう。
プログラミングやスタートアップに関する知的好奇心を刺激する示唆に富んでいるので、モチベーションアップの参考にしてみたいと思います。