2013/04/29[book] コーディングを支える技術「コーディングを支える技術」という本を読みました。著者の西尾さんは、未踏ソフトウェアの関連でお会いしたことがあって、また、ブログにもいつも面白いことが書かれています。 この本も実に西尾さんならでは、という感じです。プログラミング言語そのものにこれだけの興味を持って、色々な言語に関する知識を貪欲に吸収し、そして一冊の本を書いてしまうというのは中々普通の人にはできないと思います。脱帽です。 この本はプログラミングの初級者よりも、多分中級者向けに書かれた本なのでしょう。プログラミングを最初に覚える時は、多分みんな写経(本書のキーワードの一つです)から始めることでしょう。とりあえず決まり事は深く考えずに受け入れて先に進み、知識と知識が繋がって密な知識のネットワークができてからようやっと決まり事の意味を立ち返って理解を深めることができるわけですから。制御構造にしろ型にしろ、プログラミング言語の基本となる概念というのは、ある程度自分で使ってみないとまずは始まらないものです。 そう割りきって、ぜひ西尾さんには初級者向けの説明は割愛して、本は薄くてもいいので内容を濃くした本を書いて欲しかった、と個人的には思うのですが、やはり書籍という媒体だとあんまりニッチすぎる内容はできないのかな...。
コーディングを支える技術 ~成り立ちから学ぶプログラミング作法 (WEB+DB PRESS plus)
さて、この本の帯には、色々な言語を比較するとか、言語に共通の知識を身につけるとか、そういう風に書かれています。でも、僕はそういった視点はこの本の本質を捉えていないように思います。 というのも、仕事でプログラミングをしている人達の間では、言語の選択の自由は限られているでしょうし、言語の技術的な仕様というのはその決定に際しての要素の一つに過ぎないからです。そして、よくできた概念というのはその成り立ちを学ばなくても理解できるものです。ちょうどアラビア数字の記法を覚えるためにローマ数字を覚える必要がないように。 じゃあ、僕に言わせればこの本は断然何が面白いかというと、普段は当然だと思って気にも留めていない事が実は全然当たり前じゃなかったとわかる、という足元に穴が開く感を体験するところです。その点、第七章の名前の話なんかは白眉です。だって変数に名前をつけるとか、みんな当然だと思っているでしょう。 日常を構成するものを分解して再構築するという体験が面白いのは、海外暮らしが面白いのにも共通するところがありますよね。食器をつかってご飯を食べるのは全然当たり前じゃない!とか。 プログラミングに話をもどすと、僕にとって一番「当たり前のことが実は当たり前でなかった」体験は、なんといってもメモリモデルです。僕はアセンブラ→C++と進んだので、僕にとってはメモリというものは0から順番に番号が振ってあって、その番地を使ってMOV AX,[BX+3]などとアクセスするものだったわけです。ハードウェアの仕組みといいCPUの仕組みといい、メモリに番地が振ってあるのは天地開闢以来の当然の決まり事だと思っていました。 ところが、Javaを学んでみると、メモリに番地がある、という決まり事はどこかにいってしまい、それどころか番地を数字として取り扱ったり任意の番地のメモリにアクセスする機能は存在しないわけです。そして、この単純な機能を取り除くことによって、アクセス制御だのバッファオーバーフローの阻止だの、プログラミング環境としてとても優れた幾つかの性質を得ることができます。当時の僕にとってはそれなりの「発見」でした。 大人になってからはこういった「発見」に感動する機会は減りましたが、こういう「発見」を面白いと思う人はぜひ本屋さんでチラ見してみたらいいと思います。 2013/03/14電子立国日本の自叙伝は本当に素晴らしい子供の学校の古本市をちらちらみていたら、電子立国日本の自叙伝が全巻セットでたった1$で売られていたので、買ってきました。
僕はソフトウェアの人なのですが、中学校の頃ちょっとだけ電子工作をやっていたこともあって半導体の話は少しはわかるし、何よりもここに登場する技術者達の生き様があまりに格好良くて、毎晩深夜になるまで読みふけっています。DVD全巻セットも2万円くらいで買えるみたいなので、買おうか悩んでいるところです。プロジェクトXも嫌いではないけれど、ちょっとドラマ仕立てが過ぎることもなくはありません。その点、この本は本当に素晴らしい。
NHKスペシャル 電子立国 日本の自叙伝 DVD- BOX 全6枚セット
あまりに素晴らしいので、Sunも潰れたことだし、誰かJavaの世界の興亡もこうした本にまとめてくれないかな...と思ったので早速インターネットで探してみたら、 なんと! ありました! 民明書房刊、タイトルは「Java、その歩み」。著者は不詳で、中古本で第3巻だけをかろうじて入手できました。一部を紹介します。
Mavenのところを読んでいたらAntのところも気になったのでちょっとページをめくって見ました。
ね、面白そうでしょ。全部で何巻あるのか、他の言語のもあるのか、全くわかりませんが、他の巻を (念の為、この本はフィクションで、実在の人物とは何ら関係がありません。) 2012/12/26JenkinsとGerritによるコードレビュー今月号のWEB+DB PRESSの特集はコードレビューです。(ちなみに、特集3を書いているのはリアルJenkinsさんことikikkoさんです。Cacooは僕の同僚も使っていて「世界で通用する」というのは本当です。) 特に第二章はまるまるGerritというGit向けのコードレビューツールについて書かれています。Gerritは、こちらでも周りで使っている人が多い、ポピュラーなツールです。 この特集ではJenkinsについては一行だけさらっと書かれているだけですが、Gerritを使うならば、Jenkinsを使わない手はありませんね。特にGerrit Trigger pluginを使うと、サブミットされたコードレビューが自動でテストされてそれがレビューに反映されるという仕組みが実現できます。これによって、メインのブランチにマージされるコードがテストに失敗しないということが保証出来ます。 GerritとGitの組み合わせについては、実にタイムリーなことにこないだ日本語の本が出ています。 この本は「入門」と書いてありますが、実際はむしろ入門的な内容は最初の一割で終わり :-)、残りは発展的で高度な内容を取り扱った本になっています。Gerritの他にも、Ruby on Rails、Androidアプリの開発など、特定の状況に向けてプラグインを組み合わせる話などになります。著者の一人、太田さんは前回のJenkins勉強会でこの内容について発表をしてくれました。 Gerrit+Jenkinsの組み合わせはこちらでもポピュラーです。英語ですが、R. Tyler CroyのJUCでの発表ビデオがあります。 2012/11/23Pyrhon Professional Programmingこの本は、Jenkinsコミュニティでいつもお世話になっているさぼてんさんから頂戴した本です。会社はPythonがメインだそうで、ここでの開発方法をまとめたのがこの本、ということみたいです。
Pythonに詳しい人にとっては多分当たり前の事が書いてあるのだと思うのですが、僕自身はあまりPythonでプログラムを書く機会はないので、まさに対象読者層にぴったりです。 なるほど、rvmの代わりにvirtualenvでbundlerの代わりにpipね...という感じで、知っている環境と比べるとスムースに頭に入ります。それにしても、この種のツールの類似性の高さは言語間の垣根を下げるので素晴らしいですね。Javaでも同じような感じのツール群を書いたら面白いんじゃないかと思ってしまいます。いつか暇があったらやるぞ...。 また、Jenkinsの中の人としては、Python開発者がどういう風なツールを使ってどういう風に作業しているかわかるので、「なるほど、こういうツールをサポートすればいいわけね、フムフム」という具合にメモを取りまくりです。これも暇があったらPythonの自動インストーラとかvirtualenvによる環境の自動切り分けとか、ぜひやりたいです。 パッケージの作り方とチーム内での共有の仕方、みたいな話にスペースが割かれているのも大変素晴らしいです。Python入門本というとprintln "Hello world!"とか変数とかみたいな言語仕様の話が多くて、「そんなの仕様書を読めばいいでしょ!」という気になるのですが、この本みたいにウェブ上に散在している部品をどうやって繋ぎ合わせて一人前の環境を作るかというのは、特に他言語からくるプログラマには価値が高いです。 長いこと積んだままでレビューできずにすいませんでした。 2012/11/22JUnit4実践入門の感想JUnit4実践入門を献本してもらったので感想など。
JUnit実践入門 ~体系的に学ぶユニットテストの技法 (WEB+DB PRESS plus)
恥ずかしながら、僕はJenkinsでは未だにJUnit3でテストを書いています。JUnit4の新しい機能も一応は知っているつもりでしたが、こうやって系統だってまとめられていると参考になります。思わぬいい勉強をしてしまいました。 目次を見てみるとわかりますが、この本はJUnitの使い方だけではなくて、DbUnitとかAndroidのテストの話とか、MavenやJenkinsでテストをどう使うかという話にも多くの紙面が割かれていて、広範な分野に手を広げている印象です。それでいて、それでもカバーされていない話が色々あります(この点に後で少し触れます)。JUnitというかテストの分野が如何に巨大なエコシステムになっているか、改めて思い知らされます。 こういう風に巨大なフィールドでは、やれHtmlUnitという面白いライブラリがあるよとか、どうやって複雑なデータのマッチングをしたかとか、各論的な話が面白くなってきます。こういう事を議論できるメーリングリストと言うかコミュニティがあるとよいと思うのですが、そういうのはないんでしょうかね。http://junit.org/にもないのがとっても残念なところ。実にもったいない。こういうコミュニティから色々な面白いサブプロジェクトが育っていくのに。 さて、カバーされていない話があるという話をしましたが、その筆頭に挙げたいのがGroovyの話。コラムでちらっと触れられてるだけです。が、僕に言わせれば、JUnitのテストをGroovyで書かないなんてもはやありえないです。なぜなら、
もう一つ、JUnit4について思うのは、無意味にアノーテーションを使いすぎってところです。例えば、@Testアノーテーション。今までみたいにテストはtestという名前から始まる...でよかったんじゃないでしょうか。その方が短いし、import文を書く必要もないし。@Test(expected=...)みたいに書きたいから一貫性のために、というのはわからなくもないですが。@Beforeと@Afterも同様。基底クラスにメソッドがあってオーバーライドする方式の方が、見つけやすいですよね。JUnit4でテストを書く時、僕は未だに習慣でsetUpとtearDownって名前にするし、この本でもそうするように勧めていますし。せっかく静的型付けがある言語なんだから活用すればいいのに。 Groovyのpower assertの方が優れているHamcrest matcherといい、なんか努力の方向が違っているように思える機能が散見されます。ruleとかいい機能もたくさんあるのですが。 冒頭の話に戻りますが、何でJenkinsで未だにJUnit3を使っているかというと、public abstract class HudsonTestCase extends TestCaseというユーティリティーコード満載のベーステストクラスがあって、これを使って書かれたテストがわんさかとあるからなんですね。このテストを全部JUnit4で書き直すわけにもいかないし。これをルールで書き直すと同じコードが2つできてしまうし。そういうわけで、JUnit3形式のテストの上に新しいruleを足す、とか、HudsonTestCaseみたいなクラスをルールとしてそのまま使えるようにするとか、そういう方向の話がぜひ聞きたいです。こういう悩みをもっている人は多そうです。 JUnitの本の話からJUnit自体の話になってしまったので話を戻します。 Jenkinsの宣伝を日本ですると、結構な数の「でもテストがないんで」という人に出会います。そういう人達にテストを書いてもらうための敷居がこの本でまた一つ下がったかな、と思います。 |








