質問: いつもお世話になります。 長文になってしまいましたが、皆様の意見をお聞かせください。 (本当は他にもお聞きしたいことがあるのですが、長くなってしまったので分けて質問します。) ### 質問事項 現在社内で新製品の開発が始まろうとしています。 機能仕様以外のことで決まっていることとしては、 * アプリの種類:デスクトップアプリ * ターゲットOS:Windows Embedded Standard 7 (WES7) ということくらいです。 当社では、現在までWindows用のデスクトップアプリをC言語でWin32APIを使用して作成してきました。 これには自社製品に組み込みソフトが多く存在することも関係していると思います。 正直、今時Cでデスクトップアプリを作成している時点でありえないと思っており、私より下の若手の間では不満に感じている者も多くいます。 そこで、新製品ではC#での開発を提案したいのですが、上層部(あまりソフトに詳しくない方々)からは反対されることが予想されます。 予想される主な反対理由は > > 新たな開発言語の採用による学習コストと、スケジュール(納期)の関係 > > > です。 これを説得するためには、C#で開発することが何故Cで開発することよりも良いのか、学習コストをかけてまで採用するメリットは何なのか、といったことを説明する必要があると思っています。 しかし前述したとおり、私達は今までCでしか開発してこなかったため、C#やJavaどころか、オブジェクト指向プログラミングすら実務経験がない者ばかりです。 C#による生産性の高さや、アンマネージコードによる危険性などは理解しているつもりですが、特に納期を引き合いに出されると説得できる自信がありません。 結局のところ私の勉強不足ではあるのですが、皆様ならどのように説得されるかご助言いただければと思います。 また、そもそもC#以外の選択はどうか、といった観点からの意見でも構いません。 以上、宜しくお願いいたします。 ### 補足事項 質問とは関係ないかもしれませんが、一応状況としては * 製品の特性上、一度リリースしたら10年〜20年程度は機能追加を含め保守を継続していく必要がある * 現在組み込みソフトとしてあるものが、WES7にプラットフォームを移すイメージ * WES7自体は既に他の製品で実績あり * アプリケーションの規模はそれなりに大きい (現在の組み込みソフトはコードが数十万行ある、ただし古いコードをコメントアウトするなどレガシーなコードが多く残っている) * 納期は約2年 * 開発チームのメンバーは5〜10人程度 といったことが挙げられます。
回答: もう回答が出揃っており蛇足とはなりますが...。 ### メリット・デメリットの整理 先ずはC、C#それぞれのメリット、デメリットを整理しましょう。 Cはネイティブに近い言語なのでメリットの例は下記の感じ。 1. 実行効率が良い 2. 上記のためリアルタイム性の高いシステムに強い → 組み込みシステムで採用されやすい理由かも? 3. 言語的制約が少ない 逆にデメリットとしては、 1. 自作ライブラリの作りこみが薄いと開発効率が悪い 2. 自由度の高さ故個々人のプログラマのスキルが高くないと罠にはまりやすい C#のメリットは、 1. 既存のライブラリが充実しており開発効率が良い 2. オブジェクト志向言語のためしっかり作ればその後の保守性・再利用性が高い 3. メモリ管理などの煩わしさからは解放される デメリットとしては、 1. 実行効率はCより悪い 2. オブジェクト指向の初期学習コストがかかる 3. 言語的な制約がかかるためCでは気にせず書けることも回りくどく書かなければならない可能性が高い ### 上記を踏まえた上で妥協ポイントを探る 組み込みソフトとの連動も多いとのことなので、 スケジュールに余程の余裕がない限り、完全シフトリスクが高いので避ける方が良い気はします。 可能なら段階的にシフトし、 将来的に全移行することも考えてみてはどうでしょうか。 当然その場合はC#に移行する分、しない分の判断という余分な仕事は付属しますが...。 ただ特殊要件のない一般的なGUIを作るのであればC#の方が楽でしょうね。 VSデバッガの優秀さ、かつ.NET標準ライブラリの充実っぷりは目を見張るものがありますので^^ 補足ですがオブジェクト志向系の言語は、 開発工程終盤や保守工程になって真価が出るものなので、 言語の選択にはシステムのライフサイクルも念頭に置くと良いかもしれませんね。