以前に比べてOpen Source Software (OSS)を目にすることが多くなったように思います。 いくつかのOSSを開発した経験から、OSSやフリーソフト全般の開発に必要なものに関して、 自分なりの考えをまとめてみました。
ところで、フリーソフトって、一般的にはどの程度認知されているのでしょう。 Windowsなどが普及している現在、ソフトウエアは買うものだという認識を持っている人が 大多数のようで、同級生にGimpを勧めたら、
大丈夫?ウイルスとか怖いし、Photoshopでいいよ。
と言っておもむろにコピーしたソフトを取り出したりするのを見て、 複雑な気持ちにならざるを得なかったりします。
とか書くとブログ用の人寄せ用の題名みたいですね。内容とあまり噛み合っていない気もしますが。
やはり、まず、一番必要になるのが、時間です。情報収集、コーディング、アルゴリズム設計、 コンパイル、開発環境整備等、本当にたくさんの時間が飛んでいきます。ある意味湯水のごとく 使うことになるでしょう。それにもめげずに開発するのに必要になるのが、ボランティア精神かもしれません。
ないものは自分で作るというのがUNIXの世界の精神ではないかと思います。
OSSにしろただのフリーソフトにしろ、開発を始めるきっかけは、必要なものがないので、自分で作り、 それを他の人に公開して使ってもらおうという助け合いの精神によるのでしょう。 ところで、以前、空港でのボランティアに関する話題で、 オーバーブッキング(余分に予約を取ってしまったために乗れない人が出ること) の際に、数便遅く乗ってもよい人を探すことがあり、その人は多くの場合、お金をもらえるのですが、それでも ボランティアというと聞いたことがあります。要は、自分の時間を他人のために使わせてあげることを ボランティアと呼ぶんだよということではないかと思ったのですが、 特にそんなことを意識していなくても、大事な精神だとは思います。
ちなみに、拘束力はありませんから、OSSのプロジェクトで個人の都合で開発から抜けるのは、 引き継ぎ等で大きな問題が起こらない限り(そもそもOpenなので起こるはずもないのですが)、 全く問題ない行動とされていますので、そんなに肩肘張ることではないでしょう。
更に、自分の書いたコードが他の人のマシンで動いていることにワクワク感を感じることも 大切かもしれません。仕事でなくてそれをやれるというのにはそれなりのモチベーションが 必要になりますからね。
特にWindows APIに関しては、MSDNを購読していて、開発に必要な文書がすべて手に入るという特殊な場合を除けば、 様々な文書・情報はインターネットから得るしかありません。あるいは、オンラインのMSDNでは最新の 情報を手に入れられるので、特に購読する必要はないかもしれません。 もちろん、ローカルのmanやinfoにもかなり重要な情報が掲載されているので、目を通す必要がありますし、高速です。 UNIX系なら、printfやscanfなどstdio.h系の関数やシステムコール等に関してはローカルの文書(man/info) で十分な場合もあります。
開発に必要な時間のかなりの部分が実は処理待ちの時間だったりするのは意外と盲点です。 情報検索の時間、環境整備・インストール、コンパイル等、眺めて待つ時間を別のことをしながら過ごす という手もありますが、やはり、高速なマシンを使うのがよいでしょう。現在自分が開発している プログラムのバイナリは全てビルドするのにAthlon X2 2.4Gで15分程度かかるので一部自動化していますが、 やはり速いのは大事です。
ECCメモリに関しては、賛否両論あるかもしれませんが、ボード上の二次キャッシュのエラーや 普通のメモリのエラーに泣かされてきた自分にとっては、やはり使うべきだという立場に立ちたいと思います。 特にコンパイルの作業は比較的複雑なメモリアクセスパタンになるので、たまにビルドが失敗することがあるのです。 また、デバッグ中に原因不明のSegmentation Faultを起こす現象がある場合に、原因の切り分けが 非常に難しくなります。たまにコンパイラの最適化等のバグだったりすることもありますが、 原因がメモリのせいとわかるまでにかなりの時間を要することが多いのです。
ローカルのmanやinfoは英語であることがほとんどであるし、多くのインターネット上の情報が 英語で書かれていることからもわかるように、ないと困る技能であるようです。
始めて間もなくはそれほどでもありませんが、開発が進むに従って、使っている人からの フィードバックが重要になってきます。自分一人では気づかないことも多く、複数人数で 開発している場合はもちろん、重要になるでしょう。
sourceforge.netや sourceforge.jpに代表されるソースコードリポジトリは、 ある程度のプロジェクトには必須となります。特に複数人数で開発している場合は、CVSやSVNなどで バージョン管理しながら作業しないとやっていけません。幸い、これらの多くのサイトは だれでも使わせてもらえるので、非常に便利です。
開発したものは、実際に使ってもらわないことには始まりません。上記サイトでも告知等が できますが、使ってほしい人の集まるニュースサイト、掲示板等に書き込んだりといった 積極的な行動が必要になります。そうでないと、いつまでたっても使用者が増えず、バグもとれず、 なかなか発展しないことになってしまいます。
プログラミング能力は必要ないのかとか、他にもっと必要なものがあるはずだとか いくらでもいえるかもしれませんが、10個を決めるというのもちょっとした面白みがあったり。 実際に始めてみると、色々と大変なことが多いですし、少々枝葉末節に捕らわれた内容ですが、 これから開発を目指そうという人の助けになればうれしいかもしれません。
『FREE』は、本屋で平積みされていたくらいよく売れた本であるが、
基本的には、Long tailの話と同等である。どこかでお金を生み出さなければいけないが、
それがサービスの対価である時は、お金の生じる瞬間が見えにくく、
物と交換できることと異なり、従来の考え方ではとらえにくいので
解説書が出たりするのだろう。以前は料金を払っていたサービスがどんどん
無料になっていくと、いったいどうなっているのだろうという疑問は
自然にわいてくるはずだ。
実装・コーディングするにも色々な方法があるが、上達はかなり経験にたよったものである。
○○学の本を読めば身につくというものではないが、啓蒙書は
色々とあるので、参考にできる。『珠玉のプログラミング』は、ステップアップを目指す
開発者には必読の書で、最適化や実装方法における手法の例が掲載されている。
英語の原書(初版[PDF])もおすすめ。
Alarm clock: A device to wake people without small kids. -- One of Nadav Har'El's Email Signatures. In Soviet Russia, XSLT codes you. Badly! -- Shlomi Fish -- XSLT Facts by Shlomi Fish and Friends ( http://www.shlomifish.org/humour/bits/facts/XSLT/ )