期間: 2007
テストに関する懸念
私のキャリアがフルタイムの執筆へと移行したことで、日々のソフトウェア開発の実情から遠ざかることをしばしば心配しています。他の著名な人物が現実との接点を失っているのを見て、私も同じ運命をたどるのではないかと危惧しています。この懸念に対する最大の抵抗はThoughtworksであり、それは現実との接点を保ち、地に足をつけた状態を維持するための定期的な現実確認として機能しています。
Thoughtworksはまた、現場からのアイデアの源泉にもなっており、同僚が発見し開発した役立つことについて書くことを楽しんでいます。通常、これらは役立つアイデアであり、読者の皆様の一部が利用できることを願っています。今日のトピックはそれほど楽しい話題ではありません。それは問題であり、私たちにはまだ答えがありません。
書籍のコード
最近はあまりプロダクションコードを書いていませんが、それでもかなりの時間をコードの記述に費やしています。このコードは特定の形式のコードであり、書籍の中でアイデアを説明することを目的としています。書籍のコードは実際のコードとは少し異なり、コードを書く際には考慮すべき点がいくつか異なります。
GroovyまたはJRuby
現在、Java仮想マシン上で動作するスクリプト言語としてのGroovyとJRubyの相対的なメリットについて、活発な議論が行われています。好奇心旺盛な人々は知りたいと思っています - これらの言語のどちらが今後の言語戦争で勝利するのでしょうか?人々は、プロジェクトにどの言語を選択するか、または学習にコミットする言語をどの言語にするかを知りたいと思っています。
Alt.NETカンファレンス
先週末、Alt.NETカンファレンスに参加しました。これは、私が長い間ブログ圏で見てきた人々のグループの、初めての名前が付けられた集まりでした。長年マイクロソフトテクノロジーを使用してきたグループで、彼らの開発哲学がレッドモンドからの認識されている正統性と同期しなくなっていると感じる人々のグループです。一部の人々は離れることを検討していますが、このグループは留まり、マイクロソフトの世界に影響を与えようとしています。
銀の弾丸はもうない―再考
OOPSLA 2007カンファレンスは、フレッド・ブルックスの有名な論文「銀の弾丸はもうない」の発表20周年を記念して開催されました。そこで、ブルックス氏自身を含む回顧パネルディスカッションが行われました。私はパネルに招待され幸運でしたが、私が最終的に貢献することになった内容を彼らは予想していなかったでしょう。
ローラーブレード実装
アジャイル開発の重要な特性の1つは、機能の小さなサブセットでシステムを稼働させる方法を見つけることです。ビジネス価値を提供するためにソフトウェアを構築します。より早く稼働すれば、少なくともそのビジネス価値の一部をより早く得ることができます。
タイムゾーンの不確実性
私はボストンにいて、カルガリーのオフィスに飛ぼうとしていました。会議があるかどうかを確認するためにカレンダーを見ます。最初の会議は午前10時30分です。朝は急いで起きる必要はありません。
顧客ロイヤルティソフトウェア
先週、カルガリーのオフィスにいて、私たちで最も信頼できるテクニカルリードの1人であるジョン・コーデバックと良い話をしました。彼は多くの旅行ロイヤルティソフトウェアシステム(マイレージプログラムなど)に取り組み、掘り下げており、それらの性質と、より実りある方法でそれらについて考える方法について話しました。
インターフェースの変更はリファクタリングか?
コードの一部インターフェースの変更はリファクタリングですか?
設計ペイオフライン
DesignStaminaHypothesisでは、設計ペイオフラインは、市場投入までの時間と引き換えに設計品質を犠牲にすることができる機能量です。
単一言語
開発作業では、単一の言語を使用することに努めるべきでしょうか?
設計スタミナ仮説
ソフトウェアを適切に設計する価値はありますか?
デュプレックス本
先週、私の代表シリーズの最新の本を入手しました。ゲラード・メザロス著のxUnit Test Patternsです。私は数年間、オンとオフでゲラードと協力してきましたので、その内容にはかなり精通していますが、何らかの形で物理的なコピーを見ることでかなりの衝撃を受けました。何となく、この本の大きさがどれほど大きいかは分かりませんでした - 883ページで、私のシリーズの中で間違いなく最大の書籍です。
Rubyとマイクロソフト
RailsConf2007では、JRubyについて多くの興奮がありました。この小さなチームは、不活発なプロジェクトを引き継ぎ、JVM上でRubyプラットフォームのファーストクラスの実装のように見えるものに変えました。彼らは多くの称賛を受け、それらすべてに値しました。
したがって、JRubyがほぼ完成したことで、スポットライトは他の一般的なマネージコードランタイムである.NETに移ります。マイクロソフトのRubyに対する意図は、現在でははるかに不明瞭です。彼らはRubyをSilverlightのスクリプト言語として発表しましたが、それでも多くの未解決の問題が残っています。これはRuby言語の完全な実装でしょうか、それともRuby++のような拡張されたRubyのサブセットでしょうか?
アルファギーク
「アルファギーク」という用語は、ティム・オライリーの講演とオンラインエッセイを通じて、その通貨の大部分を獲得しました。この講演で彼は、アルファギークが何をしているかを監視することで、テクノロジー業界全体の未来がどうなるかが分かるようになる、と言っています。
RailsConf 2007
以前ほど多くのカンファレンスには行きませんが、その利点は、自分の好みに合ったカンファレンスに参加する時間があることです。私は長い間Rubyコミュニティに特別な愛情を持っていたので、今年のRailsConfに出席者として参加しました。
Hello Cup
外部ドメイン固有言語のパーサージェネレータツールを調べているので、HelloAntlrとHelloSableccを試してみました。パーサージェネレータを長時間調べていると、古い堅実なlexとyacc(またはそのGNU対応のflexとbison)を見ないでいることはできません。lexとyaccの動作方法を調査したいのですが、私のCの知識は錆び付いています。エリック・ガンマが言ったように、私は自分のゴミを捨てるのが面倒になりました。幸いなことに、Java用のyacc風のシステムの実装があり、まさに私が必要としていたものです。
翻訳
このブログを読むのに生産的な時間を無駄にするのは一つのことですが、それを翻訳する人もいます。そこで、ウィー・ウィッタワスクル氏が率いるチームによって行われているタイ語翻訳を歓迎したいと思います。約15年前、私は典型的なバックパッカーの西洋人観光客としてタイを訪れました。バンコクの川バス、パイ近くのハイキング、コ・ピピでのシュノーケリング、そして素晴らしい料理など、楽しい思い出があります。ラルフ・ジョンソン氏と共に働いていた時に初めてウィー氏に会いました。彼は現在、Thoughtworksで私と一緒に働いています。
出力ビルドターゲット
ここ数日、私の同僚であるジュリアン・シンプソンのAntファイルのリファクタリングに関する記事のレビューを行っていました。ジュリアンは、私たちの「デプロイ担当者」の1人で、アジャイル指向の作業習慣をシステムのデプロイに適用することに責任がありました。これを行う中で、ジュリアンは厄介なAntビルドスクリプトをかなり多く経験しました。彼の記事は、彼が混乱を解消するためのいくつかの好きな方法の良い説明です。
タッチファイル
makeを使用してビルドを行う場合、出力ファイルと入力ファイルの変更日を比較することで、作業を行う必要があるかどうかを判断します。コンパイルなど(`a.out`は`foo.c`に依存)の場合、これはうまく機能しますが、出力を見つけるのが難しい場合があります。
保留中のヘッド
私は継続的インテグレーションの熱心な支持者です。これは比較的簡単なプラクティスですが、ほとんどの開発チームにとって大きな違いをもたらす可能性があります。しかし、ほとんどのプラクティスと同様に、欠点^H^H^H^H^H改善の機会があります。ポール・デュヴァル(このトピックに関する間もなく標準的な書籍の著者)は、最近指摘しました。コミットビルドが壊れると、チーム全体に影響が及ぶ可能性があり、修正されるまで潜在的に遅れる可能性があります。
柔軟なANTLR生成
外部DSL向けに様々な代替言語と文法を探ってきました。主なツールの一つはAntlrです。この探求において、複数の似たような文法ファイルを持つプロジェクトがあり、異なる文法で基本的に同じ処理を実行したいと考えています。現時点では数個の文法ファイルしかありませんが、数十個になる可能性も十分にあります。
ネット上の嫌がらせ
キャシー・シエラへの脅迫に関する最近の騒動は、私が読んでいるブログで話題になっています。私がこれを書いているということは、それが私自身の考えを促したことを示しています。
埋め込みヘルパー
ここ数週間、コンパイラコンパイラツールをいじったり、調べてみたりしていました。これらのツールの共通の特徴として、そのコアが言語の文法の生成規則の説明である文法ファイルを持っていることが挙げられます。ファイルには文法の説明だけでなく、パーサーが言語要素を認識する際に言語を処理する方法に関する情報もパーサーに提供されます。ほとんどのコンパイラコンパイラツールでは、これらの指示は文法内のアクションとして表現されます。多くの場合、これらのアクションは高級言語のコード断片としてエンコードされます。
トランザクションレス
数年前、eBayで仕事をしている二人の友人と話をしました。大規模サイトで使用されている技術について話を聞くのはいつも興味深いことですが、おそらく最も興味深い情報の1つは、eBayがほとんどデータベーストランザクションを使用しないということです。
Antlr入門
HelloSableccについて述べた後、Java空間向けのもう一つのコンパイラコンパイラであるAntlrも試してみることにしました。そのエントリと同様に、これは非常に単純な「Hello World」スタイルの文法でAntlrを動作させることについてです。
破滅の巨大な裂け目
同僚のDan Northと共に行ったQCon 2007の基調講演です。私たちは、開発者と顧客/ユーザー間のギャップをソフトウェア開発における最大の課題と考えています。(私たちはそれを断崖絶壁と呼ぶこともできますが、その言葉は使いすぎです。)ここでは、このギャップ、それが重要な理由、そしてそれを克服するために何をする必要があるかについて説明します。特に、従来の仲介者であるビジネスアナリストの役割はフェリーとして機能するのに対し、私たちが本当に必要としているのは、開発者と顧客(そしてアナリストはそれを構築・維持できます)との直接的な接触を可能にする橋であると主張します。これは、トピックが非常に重要であること、そしてDanが非常に刺激的な共同講演者であることから、私のお気に入りの共同基調講演の1つです。
修正可能性:アジャイルにデザインはあるのか
QCon London 2007の主催者から、アーキテクチャの修正可能性に関するカンファレンスセッションを行うように依頼されました。私の話を聞くよりも、聴衆は私が通常再パッケージ化するThoughtworksのアーキテクト、Dave Farley、Ian Cartwright、Fred George、Erik Doernenberg、Daniel Terhorst-Northのアイデアを聞いた方が良いかもしれません。InfoQはセッションのビデオを公開しました。
言語指向プログラミングと言語ワークベンチ
Neal Fordと共に行ったThe Server Side Java Symposiumの基調講演です。ドメイン特化言語への動きが拡大していること、どのような種類の言語が存在し、なぜそれらが興味深いのかについて考察します。このトピックに関する1つの講演を探しているなら、私の好みはJAOOのビデオですが、これはいくつかのテーマを展開しており、Nealの存在によりよりエンターテイメント性があります。オーディオストリームを抽出する方法があれば、オーディオのみでも問題なく機能します。
Sablecc入門
最近、SableCCを少しばかり試してみました。「Hello World」スタイルのパーサーを動作させるのに少し苦労したので、動作させるために私が行ったことをここにメモしておこうと思いました。これが最善の方法だとは言いませんが、試してみる際に役立つかもしれません。
JRuby Velocity
昨日、テンプレートとマクロに関するいくつかのものを探求するために、Velocityをいじくる必要がありました。Velocityのシンプルなテンプレート言語が好きですが、これはJavaや.NETのコンテキストで使用していなかった時の一つでした。その場合、Velocityを使用するのは少し面倒になります。なぜなら、Javaでコンテキストを設定し、プロセッサを実行する必要があるからです。
型インスタンス同音異義語
「戦争と平和」は素晴らしい本です。
「見てみましょう…この本は表紙がこんなにボロボロなのが残念です」
2つの文があり、それぞれ「本」という言葉を使用しています。「本」という言葉がそれぞれの文で全く異なる意味を持っていることに気づかずに、私たちは毎日このような組み合わせを見過ごしています。
クラスインスタンス変数
オブジェクトについて学ぶとき、通常は2種類のデータ、インスタンスとクラスをキャプチャできることを学びます。インスタンス変数は最も一般的なケースであり、データはオブジェクトの各インスタンスによって異なります。クラス変数は、静的変数と呼ばれることも多く、クラスのすべてのインスタンスで共有されます。すべてのインスタンスは同じ値を指し、変更はすべてに反映されます。クラス変数はインスタンス変数、特に可変クラス変数よりもはるかに一般的ではありません。
Atomフィード
(Sam Rubyが日付に秒精度を使用するように説得したので更新しました。)
モックはスタブではない
「モックオブジェクト」という用語は、テストのために実際のオブジェクトを模倣する特別なケースのオブジェクトを説明するために人気のある用語になっています。ほとんどの言語環境には、モックオブジェクトの作成を容易にするフレームワークがあります。しかし、しばしば認識されていないのは、モックオブジェクトは特別なケースのテストオブジェクトの一形態であり、異なるスタイルのテストを可能にするということです。この記事では、モックオブジェクトの仕組み、動作検証に基づいたテストをどのように促進するか、そしてそれらを取り巻くコミュニティがそれらを使用してどのように異なるスタイルのテストを開発するかを説明します。