読者です 読者をやめる 読者になる 読者になる

Still life

web系エンジニャー @yui_tang の備忘録等々

「ハッカーと画家」を読んだ

読書 Lisp

はい。

 

自前サーバでWPを運営するの、定期的にOS入れ替えたりするし、面倒くさくなったのでこちらにお引っ越し。

 

今回は読み物系を読みたくなったので、「ハッカーと画家」 

 

ハッカーと画家 コンピュータ時代の創造者たち

ハッカーと画家 コンピュータ時代の創造者たち

 

恐らく過去にwebで公開されている何章かを読んでいたこともあり、

そこまでショックは受けなかったものの、 

それでも、とてつもなく純粋なパワーを感じた。

 

以下、印象に残ったフレーズを書き連ねました。

 

私の知る限り、私が大学で教わったプログラミングのやり方は全部間違っていた。作家や画家や建築家が作りながら作品を理解してゆくと同じで、プログラマはプログラムを書きながら理解してゆくベきなんだ。

 四の五の言わずにコード書けと。 

絵を描くことは、絵を描きながら学ぶ。

 四の五の言わずにコード書けと。 

 「画には終わりがない。ただ描くのを止めるだけだ」

このあたりはタイトルの元となった内容。

根本的に、会社とか仕事とかで作ってる(作らされてる)プロダクトを想像するとちょっとピンとこないかもしれない。

四の五の言わずにコード書けと。 

会社とは、人々が集まって他の人々が欲することをやる集団にすぎない。

 

 "プログラムは、人々がそれを読むために書かれるべきである。たまたま、それが計算機で実行できるにすぎない。"

 「Lispを激推ししておいてそんなっwww」って思ったけど、後半を読んでくと自然と納得できてしまうんだな、この言葉が。

もの創りが学ぶもうひとつの方法は先例から学ぶことだ。画家にとって美術館は技法の先例の宝庫だ。偉大な画家の作品を模写することは、何百年もの間、画家の教育過程の一環となってきた。模写する事で、絵がどのように書かれているのかを詳しく見るようになるからだ。

新しい道具(言語)を学ぶんだったら、車輪の再発明もありでしょう。

出来る人のgithub覗いたら、車輪の再発明ばっかですし。

四の五の言わずにコード書けと。 

Javaのプロジェクトで働くために雇われるプログラマは、 Pythonを使うプロジェクトで雇えるプログラマほど 賢くはないだろう。そして、雇えるハッカーの質は、たぶん言語の選択よりもずっと重要だ。もっとも、正直に言えば、良いハッカーJavaよりPythonを好むという事実が、これらの言語の相対的な利点について何かを暗示していると思う。

 ハッカー入門にはPythonを推しているポール。確かにこの後の説明にも、Pythonを選択する理由には納得できる。

 

そして後半の怒涛のLisp推し。

Lispのユニークさ

  1. 条件式。if-then-elseという構造だ。
  2. 関数型。データ型のひとつだ。リテラル表記を持ち、変数に代入できて、引数として渡したり、いろいろなことができる。
  3. 再帰
  4. 動的型付け。Lispではすべての変数は実質的にポインタだ。変数ではなく値の法に型がついており、代入や束縛は実質的にポインタのコピーで行われ、ポインタがさしているものには作用しない。
  5. ガベージコレクション
  6. 式でプログラムが構成されること。Lispプログラム式の木であり、それぞれの式が値を返す。これはFortranとそれを引き継ぐ多くの言語とは対称的だ。それらの言語は式と文を区別している。
  7. シンボル型。シンボルは実質的にはハッシュテーブルに格納された文字列へのポインタである。これによって、文字を一つひとつ比較しないでもポインタの比較だけで済む。
  8. シンボルと定数の木によってコードを表現すること。
  9. 言語のすべてが常に在ること。読み込み時、コンパイル時、実行時が明確に分離したステップになっていない。読み込み時にコンパイルしてコードを走らせることもできるし、コンパイル時にコードをよんだり走らせたりすることもできるし、実行時にコードを読んだりコンパイルしたりすることができる。読み込み時にコードを走らせることにより、ユーザがLispの構文を変更することができる。コンパイル時にコードを走らせるというのはマクロの基本だ。実行時にコンパイルするというのはLispEmacsのようなプログラムの拡張言語として使うことを容易にする。そして実行時に読み込みができるというのは、プログラム同士がS式を使って通信できるということだ。最後のアイディアは最近XMLとして再発明された。

 

Lispが奇妙に見えるのは、奇妙な構文を持っているからというより、構文をもっていないからと言ったほうがよいだろう。 普通の言語なら舞台裏で構文解析して作られるような構文木Lispプログラマは直接書いてプログラムを表現する。その構文木はリストで表現され、それはLispのデータ構造だ。

 

今、わたしがやっている仕事で求められている立場はエンジニア。

だけど、プログラマになるという目標が有る人は、すべての人が読むべき本だと思う。