コミュニティ

2009/06/05

【公開】ETWest2009講演資料「TestLinkでアジャイルにテストする」

ETWest2009の講演資料「TestLinkでアジャイルにテストする」を公開します。
CC Attribution ライセンスとします。


上記の講演で、TestLinkを半年間運用してみて、経験したこと、理解できたこと、そして確信したことは全て書いた。

一番言いたい事は、TestLinkがアジャイル開発の弱点の一つである受入テストを補強してくれることだ。
テスト駆動開発や継続的インテグレーションのプラクティスで単体テストの品質は保証できるが、結合~受入テストの品質を確保するのは、ウォーターフォール型開発だけでなくアジャイル開発でも難しい。

その問題の本質は、二つある。
一つは、受入テストの自動化は難しいこと。
もう一つは、手動の受入テストの生産性が悪いこと。

TestLinkの導入によって、手動の受入テストを効率化できると確信している。
だが最終的な目標である受入テストの自動化は、TestLinkだけでは足りない。

それを実現するには、テスト環境の仮想化と並行ビルドの技術が鍵を握ると思う。
そのアイデアは下記に書いた。

プロジェクト管理やテスト工程をクラウド化する: プログラマの思索

RedmineやTestLink、Hudsonなどのツールを駆使してソフトウェア開発していくに従って、問題の難易度が上がってきた気がしている。

ソフトウェア開発に銀の弾丸はないけれど、プロセスのレベルが上がるに従って、ソフトウェア開発の本来の問題点に少しずつ近づいてきたような気がしている。

ソフトウェア開発は、製造業や営業とは異なる本質的な特徴とそこから生じる根本問題がやっぱりあるのだ。

| | コメント (2) | トラックバック (0)

2009/05/30

Redmine勉強会

IT 勉強会カレンダーに登録されている「Redmine勉強会@東京」が気になっている。

【元ネタ】
6/12 Redmine勉強会は決行の方向で - yandodの日記

RedmineのCakePHP移植版「candycane」の話もあるらしい。
最近はRedmineのプラグインも充実して、チケットの一括インポートやチケット集計結果のグラフ表示、タスクかんばんなど色んな機能も追加できる。

でも一番知りたいのは、他の人がどのように運用しているのか?という実際の運用例だろう。

トラッカー(チケットの種類)はどれだけ作ってる?
ステータスとそのワークフローはどれだけ作っている?
インシデント管理や要件管理は、どのように運用すればいい?
チケットを放置したり、乱発しないように運用するための解決策は?

疑問はたくさんあるから、皆でノウハウを共有できれば、プロジェクト管理をもっと手軽にIT化できるようになるだろう。
その運用ノウハウに、従来のSW工学の知識を当てはめれば、もっとブラッシュアップできるに違いない。

| | コメント (2) | トラックバック (0)

2009/05/03

【告知】TestLinkでアジャイルにテストする

ETWest2009のTEF関西のコミュニティセッションでTestLinkについて話します。
TestLink+アジャイル開発の運用経験を熱く語る予定です。

【概要】
名  称 Embedded Technology West 2009/組込み総合技術展 関西
会  期 2009年6月4日(木)、5日(金) 10:00~17:00
会  場 インテックス大阪 5号館
大阪市住之江区南港北1-5-102  TEL: 06-6612-8800

【内容】
2009年6月4日 (木) 12:30~14:30 6号館2F 会議室F
TEF関西勉強会 てふかん in ETW2009

13:40~14:30
TestLinkでアジャイルにテストする

【講演概要】
近年、システム開発のプロジェクトマネジメントが重視されるが、要件定義、設計、プログラミングまでの工程に注力する一方、開発工数の半分以上を占めるテスト工程が軽視される傾向にある。
これに対し、XPを代表とするアジャイル開発手法は単体テスト工程にテスト駆動開発を導入したが、結合テスト工程以降には適用し辛く品質保証が難しい。
本セッションでは、これらの問題に対し、テスト管理ツールTestLinkを効果的に運用した実例を体験談を交えて解説する。

| | コメント (0) | トラックバック (0)

2009/02/25

XP祭り関西2009の講演資料リンク

XP祭り関西2009の講演資料をリンクしておく。

XP祭り関西2009詳細 - XpjugWestWiki

他にもありましたらご連絡下さい。

| | コメント (0) | トラックバック (0)

2009/02/21

【公開】XP祭り関西2009講演資料「チケットファーストでアジャイル開発!~チケットに分割して統治せよ」

XP祭り関西2009講演資料「チケットファーストでアジャイル開発!~チケットに分割して統治せよ」を公開します。
CC Attribution ライセンスとします。

【元ネタ】
チケット駆動開発 … ITpro Challenge のライトニングトーク (4) - まちゅダイアリー(2007-09-07)

プログラマの思索: 【公開】KOF2008講演資料「Redmineでチケット駆動開発を実践する~チケットに分割して統治せよ」

まちゅさんはTracのチケット管理を元に「チケット駆動開発(Ticket Driven Development)」を提唱された。
僕は、Redmineによるプロジェクト運営でプロジェクト管理が劇的に改善した経験を昨年のKOFで話してみた。

KOF講演後、興味を持ってくれた人達からのフィードバックを受けて、更にそのアイデアを用いて、アジャイル開発を補強する方向へ持っていけないか、自分なりに思索してきた。
XP祭り関西2009の講演資料は、KOF講演資料の内容と重複部分は多いですが、チケット駆動開発を定義してみる等ブラッシュアップした内容にしています。

XP祭り関西2009の講演後、初対面の人達からたくさんの質問やフィードバックをもらって刺激を受けました。
更にチケット駆動開発のアイデアを洗練させていきたい。

コメントがあれば嬉しいです。

【補足】
関西でTiDD勉強会を開催しています。
興味がある方はどうぞ。

TiDD勉強会 | Google グループ







| | コメント (0) | トラックバック (1)

2008/12/20

【告知】XP祭り関西2009でチケット駆動開発を講演します

XP祭り関西 2009』 の概要

■開催日時
 2009年1月24日(土曜日)
 10:00~17:00

■開催場所
 兵庫県伊丹市 生涯学習センター「ラスターホール

 所在地 〒664-0865 兵庫県伊丹市南野2-3-25

 交通  阪急伊丹駅より 伊丹市バス「稲野町8 丁目」
      阪急神戸線塚口駅より 伊丹市バス「ラスタホール前」
      阪急稲野駅より 西へ徒歩600 メートル

■内容
 ▼ホール(2F多目的ホール)―先着120名

*※ 基調講演(10:30 - 12:00)
o 「Agile 2008 報告」 平鍋健児氏
o 株式会社 チェンジビジョン 代表取締役社長
o 株式会社 永和システムマネジメント 副社長
o オブジェクト倶楽部 主宰

* 講演①(13:00 - 13:15)
o 「XP寺子屋」 西 丈善氏
o 日本XPユーザーグループ関西

* 講演②(13:15 - 13:45)
o 「マネジメントから自律へ」 土屋 秀光氏

* 講演③(13:45 - 14:15)
o 「名古屋アジャイル勉強会奮闘記~勉強会を立ち上げて楽しむ7の方法~」(仮)
     o 名古屋アジャイル勉強会

* 講演④(14:30 - 15:00)
o 「ゼロ機能リリースのもうひとつの側面
o ~ ワーキングスタイルを変える開発基盤をまず構築しよう ~」 中西 庸文氏

* 講演⑤(15:00 - 15:30)
o 「チケットファーストでアジャイル開発!~構成管理を見直そう」 あきぴー氏

 XPを代表とするアジャイル開発は広く知られてきましたが、実際の現場では運用のハードルが高いため普及しているとはいえません。
 しかしながら昨今、プロジェクト管理機能を持つBTS(バグ管理システム)をITS(課題管理システム)として運用してアジャイルに開発する手法が一部で注目されています。
 一部で提唱されている「チケット駆動開発(TiDD)」は、このBTSの運用フローをアジャイル開発の一プロセスとしてフレームワーク化を試みたものです。
 今回は、チケット駆動開発を実践して気付いたこと、考えたことについてお話します。

 ▼会場1(2F視聴覚室)―先着30名
* ワークショプ①(13:00 - 15:30)
o 「組込み開発におけるテスト駆動開発実践講座」 日本XP ユーザグループ関西

 ▼会場2(1F学習室)―先着30名
* ワークショプ②(13:00 - 15:30)
o 「プロジェクトファシリテーション入門」 Project Facilitation Project関西

 ※ 「基調講演」は、全員参加となっております。

=============================================================

詳しくは、XPJUG関西のホームページをご覧下さい。

| | コメント (0) | トラックバック (0)

2008/06/01

【感想】Kansai.pm第9回ミーティング

Kansai.pm第9回ミーティングに行ってきた。
その感想を書く。

【1】Naoyaさんの話~Hadoop Streaming で MapReduce

はてなのNaoyaさんの話。
一番興味があったが、期待通りすごく面白かった。

MapReduceとは、GoogleLabの論文に書かれた分散処理の高速アルゴリズムの一つ。
並列計算アルゴリズムの一種で、Googleが使っている。
Googleはこのアルゴリズムを使って、大規模データを多数のサーバーで並列処理させている。
つまり、バッチ処理を高速化したものと言える。

MapReduceのアルゴリズムのイメージは下記のようにすごく簡単。

入力ファイル→map()→シャッフル→reduce()→出力ファイル

つまり、計算モデルは、関数型言語の特徴である「map:写像」「reduce:畳込み」の2個の関数を組み合わせただけ。
これは、UnixのPipe and Filterと同じ発想だ。

但し、並列処理させるために、分散ファイルシステムが必要。
Googleは、独自の分散ファイルシステム(GFS)を持ち、これが強力。
特に、冗長性に特徴がある。

例えば、1テラバイトのバッチ処理のために、1テラバイトのデータをネットワーク転送するのは、非常に不安定。
ネットワーク転送するだけで1日以上かかるだろう。
GFSというGoogleの分散ファイルシステムは、1 TBを64Mbにchunkして、その単位でワーカーに処理させている。
また、壊れたノードは、別のノードが引き継ぐなど、フォールトレランス機能もあるらしい。

詳細は下記を見よ。

http://www.radiumsoftware.com/0608.html

ここに興味深い一文がある。

関数型プログラミングを会得しない限り, Google に強大なスケーラビリティをもたらしたアルゴリズム ― MapReduce を発明することはできないだろう。 -- Joel Spolsky [Joel]


MapReuceの利点は、計算アルゴリズムがmap, reduceだけでいいという簡単さ。
つまり、巨大なデータを細かい処理に分割し、透過的に処理させる。
その実装プログラムは、ストリーム的な処理で解けるため、関数型言語でなくとも、大抵のプログラミング言語で実装しやすい。

MapReduceで解ける問題としては、検索エンジンのインデックス作成、ソート、検索結果のPageRankの計算、ドキュメント内のリンク参照回数の計算からWebページの有用度計算、など非常に応用範囲が広い。

つまり、Googleは、このアルゴリズムを使って、検索エンジンのインデックス作成を高速化しているのだ!

例えば、MapReuceを使うと、DVD1枚をGrepするのにわずか0.2秒で処理できるらしい!!!
(ただしタスク分散のオーバーヘッド有り)

Naoyaさんは、MapReduceという分散処理の高速アルゴリズムを使って、Perlで実現したらしい。
話した内容の詳細は下記と殆ど同じ。

http://d.hatena.ne.jp/naoya/20080511/1210506301

※講演資料が下記で公開されています。

http://d.hatena.ne.jp/naoya/20080531/1212245982

Naoyaさんは、Googleの論文を読んで、Perlで独自実装したらしい。
使い道としては、巨大なApacheログ解析や検索インデックス作成など。
膨大なテキストファイルを1日ぐらいかけて読み込んでバッチ処理するのを高速化するのに向いている。

後で聞いたら、MapReduceには結構バッドノウハウがあるそうで、分散ファイルシステムだけでなく、シャッフルやReduceなどの処理で色々アレンジするらしい。

【2】バッチ処理の高速化が意味するもの

バッチ処理は業務システムの基本アーキテクチャだ。
特に金融系システムでは、毎日数万~数十万のトランザクションデータをバッチで一括処理するのも稀ではない。
この処理の実装は簡単であろうとも、テストして品質を確保するのは非常に難しい。

何故なら、高負荷な環境でしか再現できないバグは結構あるのに再現させにくい。
また、バッチ処理が異常終了した時、全件ロールバックさせると更に負荷がかかる。
だから、100件おきにチェックポイントを区切り、途中までCommitを実行し、途中から再開できるような仕組みを作る必要がある。

つまり、バッチ処理は、高負荷な環境のシステムテストや異常処理の設計がかなり難しいのだ。
しかし、Googleが適用しているMapReduceモデルでは、GFSというGoogle独自の分散ファイルシステムを使って、壊れたノードは別のノードが引き継ぐという冗長性を確保している。
並列処理なので、プロセスが死んでも他プロセスが引き継げばいい。

Naoyaさんも言っていたが、バッチ処理は冗長性が非常に大事。
いわゆるフォールトレランスが大事なのだ。

【3】日本のSIerの現状

上記の話を聞いて、非常に驚いた。
関数型言語の計算モデルがバッチ処理を抜本的に変えたとも言える。

日本の大手SIerのプログラマ、プロジェクトリーダーは、マンパワーでシステム開発し、マンパワーで品質を確保しようと懸命になっている。
Googleは、システム開発の前提条件そのものをひっくり返して、画期的アーキテクチャで作り直している。
当然、品質確保のやり方も日本のSIerと全く違う。

はてなのNaoyaさんは、少なくとも、Googleの論文を読んでいる。
日本の大手SIerにいるプログラマ、プロジェクトリーダーで、Googleの論文を読んでいる人はいるだろうか?
皆、残業に追われて、デスマーチに追われているうちに、Googleが生み出した技術などに取り残されている。
自分の技術が古くなっている事実にも気づかずに。

はてなは日本のGoogleみたいだ。

| | コメント (0) | トラックバック (0)

2008/05/19

【告知】モデル検査

モデル検査の話がSEA関西プロセス分科会で出てくるので展開する。

Wikipediaによると、、

モデル検査(Model Checking)とは、形式システムをアルゴリズム的に検証する手法である。
ハードウェアやソフトウェアの設計から導出されたモデルが形式仕様を満足するかどうか検証する。

モデル検査を使う状況は、特に組み込み系プログラムの設計・テストフェーズが多い。
つまり、プログラムや設計図から状態遷移図を作り、状態遷移図からバグになりそうなアルゴリズムを探し出すというスタイル。
この手法は10年以上前から研究されており、最近のコンピュータ性能の向上から、一部で注目されているらしい。
とはいえ、モデル検査について知見のある技術者は数少ないだろう。


実は、4月のソフトウェア開発技術者試験の午後問題にも、モデル検査が出た。
正直びっくりした。

http://www.jitec.jp/1_04hanni_sukiru/mondai_kaitou_2008h20_1/2008h20h_sw_pm1_qs.pdf


~~ 第34回 SEA関西プロセス分科会のご案内 ~~

テーマ:動きの設計と検証、さらに自動化

講師 :藤倉 俊幸 (イーソル株式会社)

主催 :ソフトウェア技術者協会 関西支部 プロセス分科会
     
日時 :2008年05月30日(金) 18:30~21:00

会場 :大阪市立大学文化交流センター
    〒530-0001 大阪市北区梅田1-2-2-600
    大阪駅前第2ビル6階 ホール
    Tel 06-6344-5425 / Fax 06-6344-5524
    http://www.ado.osaka-cu.ac.jp/BUNKO/   


周辺略地図     http://www.media.osaka-cu.ac.jp/Toshi/yoteiti.html

    ※会場の部屋が通常(大セミナー室)とは異なりますので、
     ご注意ください。(同じビルの同じフロアです。)

内容 :
  ソフト開発においてはタスク設計が重要です。セミナーでは、
  モデル検査ツールLTSAについて説明した後、動作要求の仕様化と
  検証、タスク動作への変換について説明します。手順の概要は、
  以下の様になりますが、基本的に小難しい話は無しで進めます。

  1) 動作要求をマインドマップによって表現し、動作仕様を抽出します。
  2) 各動作仕様をFSP式に変換しLTSAによって実現可能な動作要求セットを作成します。
  3) 動作要求セットをタスクに分割し、同期構造の設計検証を実施し、タスク設計仕様を作成します。

  UMLを使用している現場への適用では、動作要求表現として
  シーケンス図や状態図を利用することで、これらの図からFSP式を
  自動生成することが可能になります。UMLへの適用に関する詳細は
  以下のURLを参照してください。

http://www.esol.co.jp/rcs/uml_tool.html

参加費用:
  SEA正会員:1,000円,SEA賛助会員:1,000円,
  学生:500円,一般:2,000円

  定員 :120名

申込方法:
以下のペ‐ジからお申し込みの受付を行っております。
http://www-ise4.ist.osaka-u.ac.jp/K-SPIN/application.html
### 05/28(水)までにお申し込みください ###

 ご注意)
 ・受付は先着順で,定員になり次第〆切とさせていただきます.
  申込受付後のキャンセルは原則としてお断りします.
 ・メール,FAXなどWebページ以外からの申し込みは受け付けて
  おりません.
 ・お申し込みの受付け後,確認メールが自動的に返送されます.
  確認メールを印刷し,当日受付時に持参ください.
 ・申し込み手続きについて不明点などございましたら,下記まで
  ご連絡ください.
  seakansai-office2007@media.osaka-cu.ac.jp
 ・参加費は当日会場受付にて現金でお支払いください
  領収書が必要な方は,申し込み時に「領収書要」にチェック
  してください.


| | コメント (0) | トラックバック (0)

2008/04/13

【感想】第25回Ruby勉強会

大阪国際大学で開かれた第25回Ruby勉強会の感想を書く。

【1】JavaEEでRailsを動かす

紅月さんの講演
一番興味があった。

理由は、ファウラーの下記の記事「ファウラーがRubyに抱く感慨」が気になっていたから。


(前略)若いテクノロジーには新しくて重要な特筆すべき点がいくつもある。だが、私にとって最も重要なのは、JRubyだ。現在、JRubyは最終的なRCの段階だ。 Java VM上で動くスクリプティング言語を提供するだけでなく、 Rubyプラットフォームの完全な実装をJVM上で行おうとしている。 ThoughtWorksで我々が行っていること、そして、多くのRuby/Rails開発者たちにとって、(たとえ"include java"をしたことがなくても)これはかなり重要なことである。

我々のRubyチームが開発中に直面した最も大きな問題はデプロイだ。 Rubyのアプリケーションを実践投入するには、非常に多くの新しいテクノロジーが必要となる。それに、データセンターはこういったことに保守的だ。我々のRubyWorksもこの点をシンプルにしようと努力している。 JRubyはこの点について、Javaコンテナにデプロイすればよいので、 Railsアプリケーションもwarファイルとして簡単にデプロイできると主張している。これにより、Ruby on Railsが多くのエンタープライズ環境における選択肢となる得るのではないかと私は思っている。(後略)


Rubyはスクリプト言語なので、プログラムそのものがアプリケーション。

でも、本来、プログラムの目的は、実行可能なバイナリモジュールを作ることにある。
Cobol、C/C++からJava、C#へ至るプログラミングの歴史と同じぐらい、ビルドの歴史も長い。

例えば、Windowsアプリは、小さな実行モジュールであるexeファイルと、複雑な業務ロジックや共通ライブラリを分離した複数のDLLから構成されるのが普通。
その思想は、プログラムを論理的に分割するだけでなく、物理的にも分割し、複雑性を制御しようとする所にある。

同様に、JavaのWebアプリも、war/earファイルという一つのWebアプリをAnt/Mavenでビルドして作る。
warファイルの構成は、JSPなどのViewがrootの直下に配置される。
Controllerが含まれるWEB-INF。
そして、複雑な業務ロジック、共通ライブラリは複数のjarファイルへ分離する。

Windowsアプリと同じく、この設計思想も、複雑なプログラムを物理的にjarファイルへ分割するやり方に受け継がれている。

だから、RubyやRailsの弱点はビルド&デプロイにあるのではないか?というファウラーの指摘は的を得ている気がする。

紅月さんが紹介してくれたやり方の発想は、下記の仕組み。

Rails(warファイル)

JRuby

RailsServlet

Servlet Container(Tomcat等)

JVM

つまり、RailsServletがRailsをServletコンテナにラッパーして、Tomcat上で動かせるようにする。

RailsをTomcatで動かす利点は、JavaのWebアプリケーションサーバーは枯れた技術で性能もいいから。
Tomcat上でRailsが動けば、JBossを初めとして、WebSphere、WebLogicのような大規模なJavaのWebアプリケーションサーバーでも動作可能になるだろう。
そうなれば、より大規模で複雑なWebアプリをRailsで作ることが容易になるだろう。

紅月さんのデモはうまく動作しなくて残念だったけれど、この思想はファウラーの指摘以外にも、もう一つの重要な指摘を含む。

それは、JVMがインフラであること。
JDK6以降では、JRubyだけでなくJavaScriptのような殆どのスクリプト言語がJVMで動作可能になっている。
つまり、JVMさえあれば、RubyもPythonもJavaScriptも動いてしまうのだ。

最近は、Scalaのような関数型言語さえJVMがあれば動作する。
このScalaは、Liftという興味深いWebフレームワークもあるようだが。

実際はパフォーマンスもあろうが、特にWebシステムはスケールアップしやすいので、近い将来、JVM上でRailsを動かすのも実用的になるだろう。

まだ、Tomcatの上でRailsを動かすのは不安定だが、要注目の技術だと思う。

【2】角谷さんのRSpecライブコーディング

 角谷さんは本来、関西人だったそうで、ライブコーディングでは関西弁が随所に出て、聞いていて楽しかった。
 僕自身はJUnitに慣れているので、RSpecよりもRubyのTestUnitの方が理解しやすい。
 yu-yaさんに尋ねたら、TestUnitの方がassertEqualsだけで書けるので簡単ですから、と言っていたのが印象的だった。
 
 角谷さんが、ユニットテストのプログラミングの重要性を下記の図で説明した。
#縦軸:ソースの綺麗・汚い
#横軸:プログラムが動く・動かない

┌─────┬───┐
│       │     │
│ お花畑  │理想  │
│       │     │
├─────┼───┤
│       │     │
│ 終了   │現実  │
│       │     │
└─────┴───┘


 つまり、理想は、綺麗で動くプログラム。
 でも、現実は、動くけれど汚いプログラム。
 
 綺麗だけれど動かないプログラムは、お花畑。
 汚くて動かないプログラムは、既に終了している。

 角谷さんによると、リファクタリングとは、終了→現実→理想へのルート。
 
 池上さんは、終了→お花畑→理想 のルートもないだろうか?と質問していた。
 角谷さんによる明示的な回答はなかったけれど、数学者である池上さんらしい指摘。
 Haskellはまさに、コンパイルが通れば確実にバグなしで動く。
 Haskellは、終了→お花畑→理想 のルートなんだろうな。

 今日のRuby関西は、Flexユーザーグループ関西の夜桜と重なり、ちょっと人が少なかったのが残念。
 でも、懇親会、2次会も盛り上がって楽しかったです。

 ちなみに、角谷さんの本にサインしてもらいました。
 角谷さんの本は下記が有名かなぁ。


| | コメント (0) | トラックバック (0)

2008/03/22

【感想】Kanasan.JS prototype.js CodeReading#4

Kanasan.JS prototype.js CodeReading#4へ行ってきた。
今日はわずか13人だけ。
歩く仕様書のnanto_vi先生もおらず、正直物足りない面もあったけれど、ソース解読そのものは結構面白かった。

今日コードリーディングしたprototype.jsのL1652~L2472 は、ブラウザ依存やCSS依存の部分を汎用的に使えるように苦労している所。

IEはバグそのものが多いのか、ラップしたり、苦労している部分が多い。
FireFoxもVer1.8.0のみ特別な処理がある。
Safariは、バグFixしたプログラマが丁寧なのか、コメントしてくれて親切。

それらのソースは、正直綺麗じゃない。
たくさんの人の手が入ったのだろう、コーディングルールが徹底されておらず、インデントや変数名に統一性がない。

okkezさん曰く「バグレポート駆動」なのでしょう、と。
つまり、 バグレポートが上がるたびに、各人が勝手にバグFixして積み重ねたソースなのだ、と。

この状態は、システム開発の結合テスト以降のフェーズに似ている。
仕様書に従ってプログラミングしても、結合テストやシステムテストで、たくさんのバグ修正や仕様変更に伴って、プログラムは本来のあるべき綺麗な構造から少しずつズレていく。
一度、バグ修正したソースへ再び手を入れるのは、誰もが嫌がる。

今日コードリーディングしたprototype.jsも同じように思える。
実際のソースはそんなに綺麗じゃない。
でも、ブラウザやCSSにも依存しないように汎用的なライブラリにしてくれているので、AjaxのようなリッチUIを実装できる。

以前、lapis25さんが、フレームワークの内部のプログラムは、どう書いてもやっぱり汚い部分が残るんですよ、と言っていたのを思い出す。

汎用的で使いやすいライブラリを作るための泥臭いプログラミング。
それも、プログラミングの一側面。

| | コメント (0) | トラックバック (0)

より以前の記事一覧