[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[jfriends] Re: Javaの生産性



Ichiro KAWAMURA wrote:
> 他言語(C/C++)とJavaでの生産性の違いを調べているのですが、何か良い情報
> お持ちの方いませんか?

統計ではなく、個人的な感想で良ければ。

概略設計フェーズ:
C++とJavaで生産性に差はない。
業務分析、クラス・データ構造は言語に依存しない。

詳細設計フェーズ:
C++とJavaで生産性に差があるが、どちらが有利かは開発対象による。
基本的には標準ライブラリが提供している機能の差、低レベル操作の
可能性、多重継承、ガーベジコレクションの有無による差である。
標準ライブラリの差については、どちらもサードパーティのライブラリ
を利用することで、欠点を補完できる。

例外処理は、双方とも癖があるが総合すれば互角。

Javaにはガーベジコレクションがあるので単純なメモリ管理は圧倒的に優勢。
C++にはデストラクタがあるので、外部リソースに関連する処理では優勢。
よってこれについては痛み分け。

多重継承が自然な場合には、JavaではInterfaceで代用できるが、所詮は代用
であり不便である。逆にclassとinterfaceを明確に分離したことで、Javaでは、
設計が明快になる場合が多い。C++ではすべてをclassで行うため、不自然な
設計になる場合がある。

文字列操作は、JavaのStringとC++のstringは互角。

コレクション機能は、Java1.2のjava.utilより C++のSTLの方が優勢。
Java1.1のjava.utilは問題外(その場合はJGLを使う)。

ネットワーク処理は、Javaの方が標準ライブラリが揃っており優勢。

コーディングフェーズ:
定型的な開発では、言語の違いよりも開発環境(RADツールなど)の
出来具合により生産性が異なってくる。
ダイアログ画面設計ツール、エディタと提携するオンラインヘルプ、
構文対応エディタ等。

デバッグフェーズ:
メモリリークとポインタ操作が無い分、Javaの方が効率が良い。
標準ライブラリ(コアパッケージ)に例外処理が組み込まれて
いるため、不具合が早期に発見されやすい。
ただし、現時点では Javaは開発途上でありコアパッケージその
ものに不具合が沢山あるため、解決不能な不具合を生じやすい。

移植フェーズ:
"write once, run anywhere" を掲げるJavaの方が圧倒的に優位に
見えるが、実際には細かい機能が JDK バージョン毎に異なり、
JVMのバグやインプリメントの違いにより、OS毎・ブラウザ毎に
動作が異なることもあり、現時点では宣伝されるほどの優位はない。

> ところでみなさんのところでは、設計含めてJavaだと1人月何ステップぐらい
> の生産性ですか?

ステップ数で秤売りするような仕事は最近していないのでなんとも言えません。
開発ツール上でマウスをクリックするだけでプログラムコードが出力される
時代に、ステップ計算は無意味(仕事量を測る客観的な基準となりえない)
ではないかと思います。

-- 
/** 久野 浩 - Hiroshi Kuno
 * @xxxxxxxxxx       mailto:hkuno@xxxxxxxxxx
 * @xxxxxxxxxx ISO C9X, ISO C++, Java and astronomy
 */