Software Craftsmanship North America (SCNA) 2011では有名なCorey Haines氏、Chad Fowlers氏、Uncle Bob氏、Michael Feathers氏などの有名なスピーカーが登壇した。この記事ではこのカンファレンスのプレゼンや参加者の話などを紹介する。
SCNAを開催したのは8th LightとOptivaで、InfoQはメディアスポンサーとして参加した。カンファレンスのッ目的は開発者の間にクラフトマンシップを広めることだ。下記に参加者のブログを紹介して、参加できたかった人のためにSCNAで示されたアイディアを共有する。
Zachary Spencer氏は各スピーカーが話したいくつかのアイディアを含むマインドマップを紹介している。
C++を24時間で勉強できますか。おそらくできるでしょう。では、ソフトウエア開発は24時間で勉強できますか。いいえ、できません。
スタートアップで使われたり、スタートアップに持ち込まれたりするコードが書ける十分な技術力のある人は高いレベルで活躍できると思います。
ソフトウエア開発は大変です。私は何年もこの仕事をしていますが、まだたくさんの失敗をします。
TDD: アプリケーションを書き直した方が速い場合、TDDは必要でしょうか。TDDは優れたコードを書くのを支援してくれます。
私はしっかり作られたソフトウエアが好きです。ビジネス価値を作り出すからです。目的に合致しているからです。作り過ぎではなく、長く使い続けられるからです。
私たちが雇われるのは企業を助けるためです。私たちはパートナーになりたいと思っています。単なる契約者以上の者になりたいと思っています。ビジネスを理解したいと思っています。
現代のソフトウエア開発に必須の実践とは何か。
- 気を使う
- 本当に気を使う
- コーディングの際にまずやるべきことを知る
- 一流の人を見習う
何かソフトウエアを作るということは、誰かにサービスを提供するということです。私たちは皆、サービスを仕事にしています。世界中の誰もがそうなのです。経験を創出しているのです。
謙虚で、透明で、一貫性と感謝の気持ちを持つこと。
Spencer氏はMichael Feathers氏のセッションのマインドマップも作っている。
Eric Meyer氏はカンファレンス全体を“Doing a Good Job”という言葉でまとめている。
“冷笑は惰性だ” - Chad Fowler氏
要約: ポジティブであり続けること。冷笑は惰性であるだけでなく、周囲の人を遠ざけてしまいます。顧客にネガティブなことを言うべきではありません。ネガティブなことはさらにネガティブなことを生み出し、最終的には非礼になります。あなたがいくら賢くても、あなたは代替可能です。あなたより賢い人はどこにでもいます。皆があなたと働くことを楽しんでいないのなら、皆はもっといい人を見つけるでしょう。
“UIがアプリケーション” - Billy Whited氏
仕事のすべての側面に気を使うのが重要です。メンテナンス可能なコードを書くべきですし、書いたコードを十分にテストするべきです。さらにユーザがアプリケーションとどのようにやり取りをするのかについても気をつけるべきです。アプリケーションの見てくれが悪いと、ユーザはそのアプリケーションがどんな機能をもっていようとも優れたアプリケーションではないと判断します。
“助け求められたら常に答えること” - Uncle Bob氏
一番大事なのは、顧客の問題を気にすることです。究極的にはこの仕事は動くソフトウエアを継続的に提供し続けることです。
“コードの一行一行は負債である” - Corey Haines氏
コードは目的を達成するための手段に過ぎません。システムのユーザは直接コードを気にしません。アプリケーションが動くかどうかを気にするだけです。書いたコードのほとんどは削除されます。とりわけ、コードをリファクタリングしている時に削除されます。誰かがあなたの書いたコードを書き換えても、慌てずにその変更から学びましょう。
Bobby Johnson氏は最近書かれたコードの品質についてのCorey Haines氏のキーノートを取り上げている。
Corey Haines氏はキーノートの始めに懸念を表明しました。私たちは90年代の失敗を繰り返しているのではないか。“24時間でコーディングを勉強”という考えはたくさんの準備不足の開発者とスタートアップを生み出し、彼らが明日のレガシーコードを書いているのではないか。代わりに氏はプログラミングを独習するには10年かかるを読むことを勧めます。企業はコードを書ける人を求めています。彼らが家を建てれる人を探しているのなら、2年後にはぼろぼろになってしまう家がたくさん作られるのでしょうか。氏はGirlDevelopItとCraftsmanship Academyに期待を寄せています。一番良い例は、初心者に過去の失敗について教えてくれる専門家のコミュニティです。私たちは企業に価値を提供しますが、価値の一部は持続性なのです。
Johnson氏はMichael Feathers氏の関数型の発想についての話に言及している。
Michael Feathers氏は関数型の発想を学ぶことに投資するよう呼びかけました。氏はDSLのような関数型の手法について説明し、これらの手法を既に一般的になっているプログラミング手法と統合する時が来たといいます。従来のOOPの開発者は、関数型の手法に対して“WTFって何”という反応を示し、明晰さが欠けていると指摘します。しかし、氏はアラビア語は自分にとってはさっぱり分からないが、数百万人がアラビア語を使って毎日を過ごしているという事実を指摘します。私はこれを聞いて今年のStrange LoopでのRich Hickey氏のSimple Made Easyと題したプレゼンテーションを思い出しました。自分にとって馴染みの薄いものは物事を複雑にせず、逆に単純にしてくれる。ただ、現在の自分の文脈では理解しにくいだけだ、というプレゼンでした。理解しやすさと“賢さ”は共有されている語彙に関連します。この話についてはChris Powers氏が上手いマインドマップを作ってくれています。
Dave Mosher氏はGary Bernhardt氏の拡大と縮小と題したセッションに参加した。
思うに、Garyはタイトルを“適合性 vs 能力”にするべきだったけれど、これは素晴らしいセッションでした。私はこのセッションがこのカンファレンスで一番良かったと思います。下記にセッションの内容を紹介します。
プログラミング言語と関連する技術は定期的に興隆と衰退、拡大と縮小を何度も繰り返しています。拡大している時には、“能力”のあるソリューション、つまり問題を解決する能力はあるものの、適切ではないソリューションが現れます。 縮小期になると“適合性”のあるソリューションが現れます。
Javaは、ポストC/C++時代の拡大期に能力のあるソリューションとして現れました。時代が進み、縮小期になると、Javaは成熟して適合性のあるソリューションになりました。
Garyはセッション中に何度か、JavaScriptとNodeJSが現在、能力のあるソリューションの領域にいると言っています。これを聞いたとき、始めは誤解してしまいましたが、それは私がGaryが言っていることを客観的に聞いていなかったためです。NodeJSが能力のあるソリューションの領域にいることは間違いありませんが、それは、NodeJSを使って何か便利なものを作れないというわけではありません。
Mosher氏も、Zed Shaw氏のセッションの一番面白いと思った話題を取り上げている。
ソフトウエアクラフトマンシップに関わる人はZed Shaw氏がスピーカーとして呼ばれたことに驚いたと思います。氏は“プロパガンダ、教化、ファン、教育”について話しました。SCNA 2011で一番示唆に富むセッションだったと思います。内容を紹介します。
ソフトウエアを作るための“唯一の正しい方法”を見つけたという人は詐欺師で何かを売りつけようとします。
コードを書いていないのならプログラマではありません。プログラマはソフトウエアを作ります。その他はすべてマーケティングです。
何かを間違いない方法だと信じたときに教化が起こります。教育は選択肢を与えてくれ、選択することを許してくれます。教化されずに教育を受けましょう。
誰かがZedに質問をしました。
“単体テストと継続的統合というようなものついてどう考えていますか。”
彼の答えはかなり現実的でした。
私は過去に大きなコンサルティング企業の案件でそのようなものと一通り実施しました。テストを書いてテスト駆動で実装して、Pivotal Trackerのようなツールを使いました。悪くはありませんでしたが、このようなやり方が“唯一の正しい方法”だと喧伝する人は何かを売りつける詐欺師です。これらの手法やツールを盲信するのは、暗示にかかっている証拠です。
Shaw氏の“反アジャイル”の立場に関して言えば、確かに高品質のソフトウエアを開発するための唯一の“正しい方法”は存在しないが、より良い具体的な方法はあるはずだ。