役に立つ記事・書籍など

一覧

ツール

ScrapBook(FireFoxアドオン)

紹介文は、↑このリンクから。

bluewind

紹介文は、↑このリンクから。

記事

Learn You a Haskell for Great Good!

略して、LYAHFGG!。Miran Lipovača氏によるHaskellのチュートリアル。後半はどんどん難しくなって理解が追いつかない。

要点を抽出した記事へのリンクが言語Tipsにあります。

訳書「すごいHaskellたのしく学ぼう!」がオーム社から2012-05-22に出版されるようです。

デザイナーが教える「快適AndroidアプリのXMLレイアウト」

(プログラマーが渇望する)デザインセンスの持ち主によるアプリUIの解説。こんなトピックを扱った記事は珍しいんじゃないかな。おまえの血を吸わせてくれ~、と言いたくなる。

Unicode surrogate programming with the Java language by Masahiko Maedera

Javaで文字列を扱う場合、unicodeの理解が不可欠だ。例えばStringオブジェクトの内部では文字列がUTF-16(実質的にUCS-2と同じ)で保持されている。UTF-16の泣き所はサロゲートペアであり、本記事を読むとサロゲートペアを考慮しつつ文字列を解析する適切な方法が理解できる。

いま気付いたが、著者は日本人だ。上のリンク先には、日本語訳へのリンクがある。

What Is Software Design? by Jack W. Reeves

何をもってソフトウェア設計と見なすか? 言い換えると、どこまでが設計で、どこからが製造か? ここに焦点を当てて、ソフトウェア開発の特殊性を解説した論文。コーディング作業を軽視する管理者層に是非読んで欲しい。

一般的には、詳細設計書(あるいはプログラム設計書)を書き上げるまでが設計で、コーディング以降が製造だろう。しかし、コーディングに必要な全ての情報を網羅した設計書が用意されるケースは極めて稀である。コーディングをオフショアに出そうとした途端に設計工程の工数が増加することからも、いかに普段の設計書作成がアバウトかが分かる。

これにはいくつかの原因があるが、その1つは、設計書をテストできないことだろう。コーディングしてみないことには設計書の正しさを確かめられない(そして多くの場合、正しくない)のだ。他の産業では様子が違う。例えば車や建物を開発する場合なら、(よく知らないけど)設計段階で、様々なテストを行うはずである。そして検証済みの設計図が完成したところで製造に入るはず。製造工程では、設計図に基づいてシュクシュクと作業が進み、設計者が考えもつかないようなシロモノが出来上がるなんて可能性は無い。

こういったことを考えると、テスト済みのソースコードの完成までをソフトウェア設計と見なすべきだろう。製造は、ソースコードをコンパイルする作業を指す。製造工程が自動化されており、設計工程との工数バランスが極端に異なるところがソフトウェア開発の(他の開発活動に対する)特殊性と言える。

The Perils of JavaSchools by Joel Spolsky

大学のコンピュータサイエンス(CS)コースのレベルが下がっていることを危惧した論文。かつてのCS授業ではLISPやC言語が使われており、学生は再帰やポインタに苦しめられ、その多くが脱落していった。生き残った、プログラミングに対する適正を持った学生を、企業は安心して採用することができた。

一方、最近のCSではJavaを使うことが多い。適当に書いても、それなりに動くので、優れた学生の選別が難しくなっている。かくして、パッとしない職業プログラマーが増えていく。

Beating the Averages by Paul Graham

ベンチャー企業が成功するには、他とは違うことをやるべき。ということで、他の企業が見向きもしないプログラミング言語LISPを使ってオンラインショッピングサイト構築システム(後のYahooShop)を開発した筆者による、LISPのススメ。

曰く、LISPは全てのプログラミング言語の中で最もパワフル。際立つ特徴の1つがマクロ機能。システムの25%にマクロ機能を使っており、この部分は他の言語では書けない(あるいは、すごく面倒くさい書き方になる)。実際、後にYahooがこのシステムをC++とPerlで書き換えたとき、LISPインタープリタを組み込んで、一部はLISPのまま残したとのこと。

Why Functional Programming Matters by John Hughes

モジュール化は、大きな問題を複数の小さな問題に砕いて解こうという試みだ。逆に見れば、複数の小さなソリューションをつなぎ合わせて大きなソリューションを形成するということ。なので、つなぎ合わせる手段(glue、糊、接着剤)が無いなら、小さく分解しても意味が無い。関数プログラミングには、特徴的な糊が2つある。高階関数と遅延評価だ。平方根の計算、微分、積分、三目並べといった問題を解きながら、2つの糊の威力を解説する。

書籍

Land of Lisp by コンラッド・バルスキ

すばらしい。今までに読んだLisp系言語の教科書の中ではベストだ(といっても母数は10未満だけど…)。

リスト操作用の関数を10個も20個も紹介するような、単調で眠くなる箇所が無い。入門書としても実践ガイドとしても適している。Learn You a Haskell for Great Good!とPractical Common Lispを足して2乗(?)したような感じ。

訳も良い。「ズッ友よ」とか「ガチで描く」とか、原文より面白くなってるかも。ソース内のメッセージが部分的にしか訳されてないのが残念。川合さんなら笑わせてくれそうなのに。nitpickingだが、「開放」→「解放」や「読んで」→「呼んで」などの誤字もある。

CODE by チャールズ・ペゾルド

懐かしのペゾルド先生がコンピュータの仕組みをボトムアップでじーっくり解説した本。全25章。数回の放置期間を経て結局6ヶ月かけて読み終えた。

社会人になってプログラミングを(例えばJavaとかVB.NETとかで)始めた人は、こういう本を読めば、基礎知識不足を少し補えるんじゃないかな。

22章(OS)、24章(プログラミング言語)、25章(マルチメディア)は、それまでのペースが嘘のように淡白な解説になってしまった。ボトムアップで積み上げて、一般のパソコンユーザに馴染みの世界(WindowsとかWebとか)までつなげたかったのかもしれないが、ちょっと無理だったみたい。今頃「続・CODE」を執筆中かも。

プログラミングClojure by ステュアート・ハロウェイ

オススメ。本も良いがClojureという言語自体が気に入った。関数型プログラミングやLispのマクロ機能に興味があって、(例えば)デスクトップアプリ開発に使ってみたいなら、Clojure+Swingは最適解かもしれない。

Haskell、Erlang、Common Lisp、Scheme、Gaucheなどは、いずれも興味深いが、勉強しつつも、心のどこかで、実践で使うことは無さそうに感じていた。でもClojureなら、JDKにjarを1つ追加するだけで使え、まともな(ダサくない)GUIフレームワークも手に入るのだ。

本書では、言語仕様を学びながら、Antベースのビルド管理アプリを作る。これはデスクトップアプリではないが、マクロの威力やJavaライブラリとの接続性の良さを示す好例だ。

また、デスクトップアプリ(ゲーム)も作る。こちらでは、ピュアな(参照透明な)レイヤと副作用のレイヤとを分離した設計例を示している。

構成も良く、訳もまずまず安定しており(訳者はGaucheの発明者)、Clojureのコードがコンパクトに書けるおかげで同じコードが繰り返し掲載されても気にならない。

ただし、古いバージョンのClojureをベースにしている点は注意が必要。書籍の方も既に改訂版が出ている。

[2013-08-29]訳注に「Clojure1.1では、^ リーダマクロが非推奨になった」とある。しかしClojure1.2以降は、このリーダマクロで正解だ。1.1では「#^ を ^ で置き換える予定だけど、まだ正式採用じゃないよ」といったニュアンスで非推奨にしていたが、結局1.2で「^ が正式採用」となった。GitHubのchanges.txtに書いてある。

[2013-10-27]訳注に関するコメントは的外れだった。1.2で正式採用になったのは、(def ^:dynamic foo "hello")のように、メタデータの前に付けるリーダマクロのことだ。しかし訳注の意図は、(meta obj)のシンタックスシュガーとしての ^objが非推奨ということだった。1.1より前では、^objなんて書き方が使えたのね…。

リバースエンジニアリング by ジャスティン・サイツ

Pythonによる実行バイナリの解析ノウハウ解説。

興味深い。理論的にはできるけど、いざやろうとすると大変だよなぁ、ってことを実際にやってみせてくれる。今の自分には教養として知っておくだけで十分だけど、いずれ役に立つときが来そうな気もする。

プログラミングの基礎 by 浅井健一

電車で読むには、ちと恥ずかしいタイトルですが良い本でした。大学で受けたデータ構造とアルゴリズムの授業を思い出します。自分のときはPASCALでしたがこちらはOCaml。関数型言語らしさを前面に出し、副作用を避けるアプローチを採用しています。専門的な教育を受けずにプログラマになってイマイチ自信が持てない人は、これを読むといいでしょう。「リーダブルコード」より役に立つかも。ただシグネチャと赤黒木のとこは分かりにくい気がしました。

The Little Schemer by Daniel P. Friedman他

Scheme/LISPによる再帰と無名関数の入門書。後半のmultirember&coからが難所で、じっくり取り組まないと理解できない。続く第9章ではYコンビネータを導出し、最後の第10章ではSchemeインタープリタを実装する。

いくつか疑問が残るものの、何とか最後まで食らいついた。お腹いっぱい。続編(The Seasoned Schemer)に進むのは当分先で。

英語の難易度は高くない。唐突に話題が変わって戸惑うことは多かった。対話形式は嫌いだが、先生と生徒の会話に仕立てようとはしてないので、まぁ許せる。

プログラミングErlang by ジョー・アームストロング

これがバイブルみたい。Erlangの教科書にはあんまり選択肢がないから責任重大ですね。でも十分期待に応えてると思う。3年前に公式ホームページのチュートリアル読んだっきりだけど、やっぱErlangは面白そうだなぁ。何か新しい言語の仕事をするとしたら、HaskellかErlangがいいなぁ。

プログラミングHaskell by グレアム・ハットン

Haskellに対する知的好奇心はLYAHFGG!で満たされたが、定番の入門書が図書館にあったので借りてみた。

パーサへの応用や+++など、LYAHFGG!には登場しなかったアイディアにも触れることができたので収穫はあった。また製本がすばらしく、手を離しても開いたページが閉じない。->の代わりに→を使うなど、(賛否はともかく)編集にもこだわりを見せる。

Haskell本では、いかにモナドを説明するかが気になるところだが、本書の、>>=のネストからdo構文へ展開は少し飛ばしすぎと感じた。逆にLYAHFGG!はモナドにたどり着く前に息切れしてしまう。ちょっと自分でも、最短経路でモナドを説明することに挑戦してみようかな。

The Ruby Way by ハル・フルトン(第一版)

同じことをやるにも、Rubyらしいやり方というものがあるわけで、C++やJavaならこう書いてしまうところを、Rubyならこう書く、そういう事例がたくさん載ってる本かとタイトルから想像していたが、実際は奇をてらわず、もっと地に足をつけてRubyや標準ライブラリの機能を解説した本だった。

短時間でRubyを知るなら「初めてのRuby(Yugui著)」、実践的要素も含めてじっくり学ぶなら本書って感じ。ただ、第一版はRuby1.8すら出てない時代に書かれたものみたいなので、できればRuby1.9対応の第二版を。

Rubyによるデザインパターン by ラス・オルセン

GoFのパターンも、Rubyでやると、C++やJavaとは少し違った実装になる。ダッグタイピングのおかげで親クラスが不要だったり、ブロック(無名関数)のおかげでクラス自体が不要だったり。中でもオープンクラスやBasicObject#method_missing()を使った委譲系パターン(AdapterやProxyなどの)の実装は衝撃的だ。「メタプログラミングRuby」は更に衝撃的なので、その前に本書でウォーミングアップを。

メタプログラミングRuby by パオロ・ペロッタ

著者の優れた文章センスのおかげで、扱ってる内容の割には楽に読み進めることができた。Rubyのスキルがまだ定着してない自分には学ぶことが満載。読み返したい箇所に貼った付箋の数は100を超えた。

無駄なコードの引用が無いし、注目すべき箇所に印が付いているのが親切。分厚くない(300ページ)のも、心理的に読み易くしてくれている。2800円という価格も、まぁ安い方だ。翻訳も良かったが、「SymbolのProc変換」でto_procを省く所だけは解釈できなかった(原文のせいかも知れない)。

本書を参考に、Rubyのクラスモデルに関する記事を書きました。

リファクタリング: Rubyエディション by ジェイ・フィールズ他

名著の誉れ高い「リファクタリング」をrubyベースで書き直したもの。リファクタリング自体についてはもちろん、rubyの使いこなしに関しても学ぶところが満載。リファクタリングの切り口の多くはオリジナル版と重複するようだが、そのサンプルでは、rubyでこそ可能と思われる高い抽象度を追求している。

ページ数(全447ページ)と、掲載ソースコードの重複具合(beforeとafterを両方載せる)を考えると、値段(4800円)が高すぎるのが難点。

Hibernate(開発者ノートシリーズ) by ジェイムス・エリオット

Hibernateのイロハをコンパクトにまとめて解説した良書。文体、分量、構成、例題の選び方など、多くの点で教科書作りのお手本になりそうな一冊。Hibernateに興味がない人でも、気持ちよく読めると思う。

ソフトウェア開発者採用ガイド by ジョエル・スポルスキー

著者のwebサイトのコラムからプログラマ採用プロセスに関するネタを集めて再編集したもの。もう自分が採用する側になることは無いかもしれないが、採用される側の立場で読んでも面白かった。

以下は、プログラマのパフォーマンスをコーディング量やバグ数で測定しようとすることが無意味だと説く第7章のくだり。「知識労働者に対してはメトリクスが単に機能しないにしても、開発者の中にはすごい開発者と、まともな開発者と、お粗末な開発者がいるというのは確かだ。興味深いことに、みんな誰がどれに当たるのかを分かっている。単に測定できないだけなのだ。」

本書を読むと、こう考えずにはおれない。自分なら、ジョエルの会社の採用面接をパスできるだろうかと。たぶん無理だろう。しかしパスできたら誇りに思うだろう。

JavaScript: The Good Parts by ダグラス・クロフォード

プロトタイプベースのオブジェクト指向をサポートするという点で際立っているプログラミング言語JavaScriptの良いパーツのみを集めて、その良さを解説した本。褒める一方で、悪いパーツに対してはケチョンケチョンにこき下ろしている。その辛口ぶりから著者の力量が伺える。 面白い発想やクールなデザインが提案された良い本。ただ自分としては、プロトタイプベースについて開眼するまでには至ってない。

達人に学ぶSQL徹底指南書 by ミック

正確な文章と適切な論理展開で、SQLの使いこなしを解説した本。 理解しているだけでなく、他人に(ちゃんと)説明できる人というのは貴重な存在。 安心して読める。

入門 正規表現 by 岩谷宏

プログラマーにとってgrepは欠かせないツールだが、()も[]も^も$も使わずにgrepしているとしたら、とんだお笑い草である。 grepに限らず、検索にも置換にも、正規表現は役立つ。 この本で、(?<=)くらいは使えるようになっておきたい。

初めてのRuby by Yugui

Rubyを網羅的に最短時間でマスターするには、この本がいい。 著者の技術レベルの高さは疑う余地が無いので、全面的に安心して吸収して良い。

デザインパターン by エリック・ガンマ他

デザインパターンを日本に紹介した最初の本だと思う(日本に限らないか…)。 OOP向け設計カタログ。 ぶらっと立ち寄った新横浜駅前の本屋で見つけて、感動のあまり、その場で買って帰った。

ソフトウェア開発のダイナミズム by ジム・マッカーシー

Visual C++の開発を率いた著者が、リーダーシップについて書いた本。 細かい内容は覚えてないけど、「優れたソフトウェアを開発するということは、優れたソフトウェア開発チームを開発することにほかならない」と気付かせてくれたのがこの本だった。 間違いなく、リーダーとしての自分に最も大きな影響を与えた一冊。

Effective C++ by スコット・メイヤーズ

C++を覚えたてで、オブジェクト指向プログラミングが楽しくてしょうがなかった頃に読んだ。 C++が提供する機能を正しく使いこなすための指針を与えてくれる本(どんなときにメソッドをvirtualにすべきか、またはすべきでないか、とか)。 この本以降、「Effective ××」というタイトルの本が続出した気がする。 自分が読んだのは初版の岩谷宏訳だけど、第二版以降は訳者が変わったようなので質が落ちたかも。

Last modified:2013/09/29 22:14:31
Keyword(s):
References:[SideMenu]
This page is frozen.