- ベストアンサー
どのプログラミング言語を使う?(基幹システム)
社内の基幹システムを構築しようとしています。 やりたいことは出退勤など一般的なものから特殊なものまで多岐にわたるのですが、1年程度以内で完成を目指しています。 今後10年以上使うシステムだという想定でJavaかC#か(あるいはその他)を使うとすれば、どちらがおすすめですか?生産性、メンテナンスのしやすさ、今後の動向など含め、皆さんの意見をお聞かせください。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
ネットのC#講座や書店で売られているC#の専門書を読むと、その著者たちは、Java、Ruby、C++など、さまざまな言語による開発経験をされています。 それらの経験に基づいて、JavaやC++ではなくて、C#を選ばれています。 私もJavaとC++やC#の開発経験がありますけど、生産性、メンテナンスのしやすさを考えるとC#がお勧めです。 以前の派遣先で、C#経験が豊富な技術者がちょっと次のような愚痴を言っていました。 「C#は、生産性が良い。だから開発期間の見積もりが短くなりがちである。私はC#は好きだし、開発作業は楽になったけど、全体の開発期間が短くなれば、やっぱり仕事は楽にならない・・・」 ちなみに、先日まで働いていた職場では、C++が開発言語のメインだったようですが、開発しやすさを考えて、開発言語をC#メインに変更していました。 ただ、C#を使って生産性をアップするには、それなりの勉強が必要になります。 自転車よりも、自動車のほうが目的地につく時間は短くなりますが、自動車の運転には免許証が必要になります。 そして、免許証を取得するには、勉強と運転の練習が必要になります。 飛行機は、自動車よりも、もっと速いスピードが出ますが、パイロットの免許証は、自動車よりも、ずっと取得が困難で、多大な勉強と時間が必要となります。 上記に書いたこととは反しますけど、あるプログラマさんは、「C#は難しい・・。今までC#のプロジェクトをいくつか見たけど、すべて失敗していた。」なんて話されていました。
その他の回答 (2)
- catpow
- ベストアンサー率24% (620/2527)
ちょっと年末年始で忙しくて、追加の回答が遅くなりました。 >>最後のコメントのC#は難しいとのことですが、言語自体が難解なので、一定以上のスキルの技術者の確保が難しくて失敗したいうことでしょうか? 失敗の原因については、その方と話す時間が限られていて、十分に聞くことができませんでした。 自分が参加した失敗プロジェクトの経験では、そのときの言語はC#ではなくC++だったのですが ・オブジェクト指向言語だから、開発が楽になるはずである。 ・オブジェクト指向は、ひな型を作り、それを継承してバリエーション展開すれば、修正があっても、ひな型を直せば、継承したコードもすべて修正されるし、修正するコードが少なくてすむ。 という考え方でプロジェクトが進められていたんです。 ただ、現実の開発では、ひな型を継承して、目的の画面を作ろうとすると、当然ながらひな型コードの完全理解が必要になり、そのひな型が多重継承されていると、ひな型を含めて、いくつものクラスの理解が必要で、さらにそれらに渡すパラメータを修正しないと目的のものが作れないってことが多発しました。 そうなると、各クラス(モジュール)内部での各命令がお互いに深く関連しあうこととなり、複合設計でいう「モジュール強度」「情報隠匿の度合い」がどんどん低下していったわけです。 でも、そのプロジェクトが失敗した最大の原因は、システム開発が既存システムより、どんな部分を強化しようとしているのか、つまりは、「目玉機能は何か?」という要件定義を十分に検討しないままに、「オブジェクト指向言語を採用したから、開発工数が減り、修正も簡単になるし、使いやすいシステムになる」という安易な考え方でスタートしたからだったと思っています。 システムがほぼ完成した段階で、ユーザ部門にデモしたところ、ユーザ部門が一斉に「こんなのダメだ!、前のほうが使いやすい」って反発を食らい、数億を費やした、そのシステムはお蔵入りってことになりました。 本来は、もっと早い段階でユーザ部門にデモをすべきだったのでしょうけど、彼らに見せられるレベルのものになかなか仕上がらなかったことも、デモが遅れた原因だったようです。(できそこないでも、早めに見せておけば良かったはずなんですけどね) まあ、それなりにユーザ部門がデモをみて納得していたとしても、そこで出てくる追加・修正への対処は、とても困難なものになった気がしますから、プログラマとしては、「ボツになって、ほっとした・・」という気分ではありました。 もしかすると、その方が言うプロジェクトの失敗は、言語がC++でなくC#に代わっていても、同じように、変な「オブジェクト指向言語」への信仰を守っていたからかもしれませんね。
- weavaest
- ベストアンサー率15% (157/1020)
一般的な業務であれば、その手のパッケージソフトを導入して、使えない、使いづらい部分はカスタマイズで対応するのが一般的だと思います。その場合の開発言語はパッケージソフト依存になります。 全てを作るのであれば、開発者に相談して決めれば良いと思います。稀にですが、依頼元が、開発ツールや言語を予め決めてくる場合があります。それでも開発が出来なくはないですが、ベストな選択でない場合が多々あります。そうなると、開発にも運用にも無駄な予算を投資することにも成りかねないと思います。 質問は開発言語は何が良いかとのことですが、規模やメンテナーによりけりなので、部外者の意見はあまり参考にはならないと思いますよ。
補足
ご回答ありがとうございます。特殊な部分が多く、更に拡張していく可能性が高いため、パッケージをカスタマイズしていくのは無理があると思っています。C#とJavaの開発要員が既にいるため、そのどちからになるだろうと思っています。
補足
ご回答有り難うございます。やはり生産性を考えると、C#のほうがいいかなと思っていますが、例えば10年後もそのシステムを使い続けていることを想定した場合、果たしてC#の選択でいいのだろうかという不安があります。ごそっと仕様がかわって、システムを大きく作り変える必要が出てくるとか、あるいはC#自体が使われなくなってしまう可能性はないのかとか・・・。 その点、scalaなどJVM上で動く言語が新たにできていることを考えると、Java自体がなくなることはないと思うし、現状Javaで作っておいて将来的に必要があれば他の言語に移植ということもできるのではないかと思ったりもしています。 また最後のコメントのC#は難しいとのことですが、言語自体が難解なので、一定以上のスキルの技術者の確保が難しくて失敗したいうことでしょうか?