本書について

本書は Architecture of Open Source Applications シリーズの第四巻である。シリーズで初めて、タイトルに「オープンソースアプリケーション」が含まれていない。

本シリーズではこれまで大規模なプログラムが直面する大規模な問題を議論してきた。ただ、キャリアの浅いエンジニアが数千行を大きく上回る巨大なプログラムを理解してそこから何かを学ぶのは難しい可能性がある。そのような人々にとって、大きな問題に関する議論は興味深い読み物であるものの、学習用の素材としては十分でない。

本書「500 行のコードで作るプチアプリケーション」は新しいアプリケーションを作るときにプログラマーが迫られる小規模な設計判断に焦点を当てる。本書で解説されるプログラムは全て本書のためにゼロから書かれている (著者が過去に取り組んだプロジェクトから着想を得たプログラムも一部ある)。

各章を読み始める前に、一旦立ち止まって自分なら問題をどう解くかを考えてみることを勧める。今から読む文章の著者は、どのような設計上の懸念事項や制約を重要だとみなすだろうか? どのような抽象化を用いるだろうか? 問題をどのように分割するだろうか? その上で、章を読むときは自分が考えつかなかった発想を意識して見つけるようにするとよいだろう。そうすることで、各章を単に最初から最後まで読むよりも多くの事項を読者が学ぶことが私たちの願いである。

500 行未満のソースコードで ── 行数を抑えるテクニックを使わずに ── 役に立つプログラムを書くことは、それ自体が難易度の高い課題である。教育用の書籍として刊行される文書で使うためのプログラムとなれば、書くのはさらに難しい。このため、ソースコードを文章中で参照するときに編集者の判断でフォーマットを変更した箇所がある。オリジナルのソースコードはプロジェクトレポジトリにあるプロジェクトフォルダの code ディレクトリから確認できる。

各章の著者が経験したことを追体験することで読者がプログラミングにおけるコンフォートゾーンから抜け出し、プログラマーとして成長することを願っている。

── Michael DiBernardo

コントリビューター

Michael DiBernardo (編集): Michael DiBernardo は Wave でエンジニアとデリバリーディレクターを務める。彼が書いた文章は mikedebo.ca で公開されている。

Amy Brown (編集): Amy Brown は科学や学術研究に関する文章の編集を専門とするトロント在住のフリーランス編集者であり、現在は自費出版を行う著者を相手に仕事をしている。彼女は Greg Wilson と共に Architecture of Open Source Applications の編集を担当した。

Dethe Elza (Blockcode): Dethe は父親であり、ギークであり、美的感覚の鋭いプログラマーであり、メンターであり、そしてビジュアルプログラミングツール Waterbear の開発者でもある。彼は Vancouver Maker Education Salons の主催者の一人であり、折り紙製のウサギロボットで世界を満たしたいと考えている。

Malini Das (継続的インテグレーション): Malini はソフトウェアエンジニアであり、開発を高速 (かつ安全) にすること、そして部署を横断する問題を解決することに特に興味を持っている。彼女は Mozilla で働いた経験があり、現在は Twitch で自身の腕を磨いている。

Dustin J. Mitchell (クラスター): Dustin はオープンソースソフトウェア開発者であり、Mozilla ではリリースエンジニア務める。彼が関わってきたプロジェクトは Puppet (Flask ベースのウェブフレームワーク) 用のホスト制御システム、ファイアウォール設定に対するユニットテスト、Twisted Python を使った継続的インテグレーションフレームワークなど多岐にわたる。

Daniel Rocco (contingent): Daniel は Python、コーヒー、物作り、スタウト、オブジェクトとシステムの設計、バーボン、教育、木、そしてラテンギターを愛している。仕事で Python を書けることを嬉しく思いながら、彼はコミュニティの他のメンバーから新しいことを学んだり、他のメンバーと知識を共有することでコミュニティにコントリビュートしたりする機会を常に探している。PyAtl で頻繁に登壇し、入門的な話題、テスト、設計について発表している。意外で美しいアイデアを紹介したときに人々の目が輝くのを見ることが彼の楽しみである。Daniel はアトランタで微生物学者と四人のロケット研究者の卵と共に生活している。

Brandon Rhodes (contingent): Brandon Rhodes は 1990 年代の終わりに Python を使い始め、アマチュア天文学者のためのライブラリ PyEphem を 17 年にわたってメンテナンスしている。彼は Dropbox で働いており、企業クライアント向け Python プログラミングコースの教師、New England Wildflower Society の "Go Botany" という Django サイトのコンサルタント、2016 年と 2017 年に開催された PyCon カンファレンスの議長を務めた。Brandon は上手く書かれたコードは文学の一形式であり、美しくフォーマットされたコードはグラフィックデザインの作品であり、正しく動作するコードは最も直接的な思考の表現だと考えている。

A. Jesse Jiryu Davis (ウェブクローラ): Jesse は MongoDB のスタッフエンジニアであり、現在はニューヨークに住んでいる。彼は Python 向けの非同期 MongoDB ドライバ Motor を開発した。また、Jesse は MongoDB の C ドライバの主任開発者、そして PyMongo チームのメンバーでもある。彼の書いた文章は https://emptysqua.re/blog/ から確認できる。

Guido van Rossum (ウェブクローラ): Guido はウェブの内外で使われる主要なプログラミング言語の一つ Python の生みの親である。Python コミュニティは彼を BDFL (Benevolent Dictator For Life, 優しい終身の独裁者) と呼ぶ。これは Monty Python から取られた称号である。

Dann Toliver (dagoba): Dann の趣味は物作りである: 例えばプログラミング言語、データベース、分散システム、賢くてフレンドリーなコミュニティを構築すること、そして二才の息子とポニーキャッスルを作ることを楽しんでいる。

Taavi Burns (DBDB): Countermeasure における新人のバス (ときにはテノール) として、Taavi は熱意をもって型を破ろうとしている ... ときには単に型の存在を無視することで。これは彼がキャリアの中で経験してきた様々な職場で間違いなく正しかった: IBM では C と Perl を書き、FreshBooks ではありとあらゆることを行い、Points.com では Python を書き、現在は PagerDuty で Scala を書いている。これ以外のとき ── それも Brompton 製の折りたたみ自転車に乗っていないとき ── は息子と Minecraft を遊んだり、妻とパルクール (あるいはロッククライミングなどのアクティビティ) をしたりしている。彼の編み方はコンチネンタルである。

Leo Zovic (イベント駆動ウェブフレームワーク): Leo (オンラインでは inaimathi という名前の方が知られている) は回復途上のグラフィックデザイナーであり、プロとして Scheme, Common Lisp, Erlang, JavaScript, Haskell, Clojure, Go, Python, PHP, C を書いた経験を持つ。彼はプログラミングに関するブログを書き、ボードゲームを遊び、オンタリオ州トロントにある Ruby ベースのスタートアップで働いている。

Dr. Christian Muise (フローショップスケジューラ): Dr. Muise は MIT の計算機科学人工知能研究所のモデルベース組み込み・ロボットシステムグループの特別研究員である。彼は AI、データ駆動プロジェクト、マッピング、グラフ理論、データ可視化、そしてケルト音楽、彫刻、コーヒーに関心を持っている。

Yoav Rubin (CircleDB): Yoav は Microsoft の上級ソフトウェアエンジニアである。その前は IBM 研究所で研究スタッフメンバーを務めており、Master Inventer だった。彼は現在クラウド上のデータセキュリティの分野で働いており、過去にはクラウドベースおよびウェブベースの開発環境に関する仕事をした経験がある。Yoav は神経科学分野における医学研究の修士号、情報システム工学の学士号を持つ。

Cate Huston (画像フィルタ): Cate はモバイルを得意とする開発者および企業家である。彼女はイギリス、オーストラリア、カナダ、中国、アメリカに移り住みながら、Google のエンジニア、IBM の Extreme Blue インターン、そしてスキー講習インストラクターとして働いてきた。Cate はモバイル開発に関する国際的なカンファレンスに登壇した経験があり、彼女の記事は Lifehacker, The Daily Beast, The Eloquent Woman, Model View Culture といった様々なサイトで公開されている。彼女はTechnically Speaking のキュレーターの一人であり、Accidentally in Code というブログを運営している。Twitter のアカウントは @catehstn である。

Allison Kaptur (Python インタープリタ): Allison は Dropbox のエンジニアであり、Python クライアントから構成される世界最大規模のネットワークを管理する手助けをしている。Dropbox に入社する前、彼女はプログラマー向けの「缶詰」施設 Recurse Center でファシリテーターを担当していた。Python の内部機構について PyCon North America で発表したこともある。彼女は奇妙なバグを愛している。

Erick Dransch (3D モデラー): Erick はソフトウェア開発者であり、2D および 3D のコンピューターグラフィックスに特別な興味を抱いている。彼はゲーム、3D 特殊効果ソフトウェア、CAD ツールに取り組んだ経験がある。現実世界のシミュレーションが関係することなら、彼がそれを学びたいと思う可能性は高い。彼は http://erickdransch.com で見つけられる。

Carl Friedrich Bolz (オブジェクトモデル): Carl はキングス・カレッジ・ロンドン所属の研究者であり、あらゆる種類の動的言語の実装と最適化に広く興味を持っている。彼は PyPy/RPython の中心的開発者の一人であり、Prolog, Racket, Smalltalk, PHP, Ruby の実装に取り組んだ経験がある。

Marina Samuel (OCR): Marina は Mozilla で働くエンジニアであり、トロント大学で学ぶ応用コンピューティング (人工知能) の修士学生でもある。彼女は地球を征服するロボットを作ることを夢見ている。

Dessy Daskalov (歩数計): Dessy の本業はエンジニア、情熱は起業家、心は開発者である。彼女は現在 Nudge Rewards の CTO および共同創設者を務める。自身のチームと共にプロダクトを作るのに忙しい時間を除けば、彼女は他の人にプログラミングを教えたり、トロントのテックイベントに出席 (あるいは主催) したりしている。彼女はオンラインでは http://dessydaskalov.com@dess_e で見つけられる。

Eunsuk Kang (同一オリジンポリシー): Eunsuk は MIT のソフトウェア設計グループに所属する Ph.D. 候補生である。彼は計算機科学の修士号を 2010 年に MIT で、ソフトウェア工学の学士号を 2007 年にワーテルロー大学で取得した。彼の研究プロジェクトはソフトウェアのモデリングと検証に用いるツールと手法の開発、そしてセキュリティとセーフティに関してクリティカルなシステムにおける応用に関するものだった。

Santiago Perez (同一オリジンポリシー) Santiago は MIT のソフトウェア設計グループに所属する Ph.D. 候補生である。彼は計算機科学の修士号を 2015 年に MIT で、学士号を 2011 年に ITBA で取得した。以前は Google に所属し、エンジニアの開発効率を向上させるためのフレームワークやツールを開発していた。現在はデザインやバージョンコントロールについて考えることに時間を使っている。

Daniel Jackson (同一オリジンポリシー): Daniel は MIT で電気工学・計算機科学科の教授を務め、計算機科学・人工知能研究所のソフトウェア設計グループを主導している。彼は物理学の修士号を 1984 年にオックスフォード大学で、計算機科学の修士号と博士号をそれぞれ 1988 年と 1992 年に MIT で取得した。1984 年から 1986 年まで Logica UK Ltd. でソフトウェアエンジニア、1992 年から 1997 年までカーネギーメロン大学で計算機科学の助教を務め、1997 年から現在までは MIT に所属している。彼はソフトウェア開発に広く関心を持っており、特に開発手法、設計と仕様の記述、形式手法、そしてセーフティクリティカルシステムに注目している。

Jessica B. Hamrick (サンプラー): Jess は UC バークレーの Ph.D. 候補生であり、機械学習で用いられる確率的モデルと認知科学で用いられる行動実験を組み合わせることで人間の認知能力を研究している。空いた時間では IPython と Jupyter のコアコントリビューターを務めている。彼女は計算機科学の学士号と修士号を MIT で取得している。

Audrey Tang (スプレッドシート): 独学のプログラマーそして翻訳家である Audrey は、クラウドサービスのローカライズと自然言語技術に関して Apple で独立コントラクタとして働いた経験を持つ。過去に Audrey は世界初の動作する Perl 6 実装の設計と開発を主導し、Haskell, Perl 5, Perl 6 の言語開発委員会に参加した。現在 Audrey は g0v のフルタイムコントリビューターであり、台湾で初となる電子法案作成プロジェクトを主導している。

Leah Hanson (静的解析): Leah Hanson は Hacker School の誇りある卒業生であり、人々が Julia を学ぶのを手助けすることに熱意を持っている。彼女のブログは http://blog.leahhanson.us で、Twitter は @astrieanna である。

Ned Batchelder (テンプレートエンジン): Ned は長いキャリアを持つソフトウェアエンジニアであり、現在は EdX で世界中の人々に教育を提供するオープンソースソフトウェアを開発している。彼は coverage.py のメンテナ、Boston Python の主催者であり、PyCon に何度も登壇した経験がある。彼のブログは http://nedbatchelder.com である。Ned はホワイトハウスで開かれた夕食会に参加したことがある。

Greg Wilson (ウェブサーバー): Greg は科学者とエンジニア向けのコンピューティングスキル速習講座 Software Carpentry の創設者である。彼は産業と学術界の両方にわたる 30 年以上のキャリアがあり、コンピューティングに関する数冊の書籍で著者あるいは編集者となった経験がある。例えば The Architecture of Open Source Applications シリーズの最初の二巻や、2008 年の Jolt 賞を受賞した Beautiful Code に彼は関わった。Greg は計算機科学の Ph.D. を 1993 年にエディンバラ大学で取得している。

謝辞

Amy Brown と Greg Wilson による多大な尽力が無ければ、この Architecture of Open Source Applications シリーズは存在しなかった。シリーズ第四巻の本書は、次に示す大勢の技術レビュアーの素晴らしい貢献が無ければ実現しなかった:

Chris Seaton, John Morrissey, Natalie Black は特別な謝辞に値する技術レビューの域を超えた大きな助力を提供した。彼らのレビューの質と量は本書の作成の行き詰まりを打破する上で重要な役割を果たした。

資金的な援助を提供した PagerDuty に我々は非常に感謝している。

その他の情報

[英語版の] カバーのフォントは Jos Buivenga 制作、exljibris foundry 所有の Museo である。

[英語版の] 表紙の画像は時計のギアを写した 23 枚の写真を多焦点合成したものである。Kellar Wilson によって撮影・作成された。

[英語版の] 本書は (表紙を除いて) オープンソースソフトウェアを使って作成された。LaTeX, Pandoc, Python といったプログラムは特に有用だった。

広告