開発現場における最適な言語/技術の選び方について
IT系専門学生です。
現場での開発について教えてください!
タイトルの通り、開発の現場において、
プロジェクトごとに言語/技術を選ぶときにどうやって最適なものを選んでいますか?
学校では、様々な言語やフレームワークなどを教わっていますが、
開発目的に合わせた技術の選び方がわかりません。
漠然とした質問ですが、お答えいただけるとありがたいです。
IT系専門学生です。
現場での開発について教えてください!
タイトルの通り、開発の現場において、
プロジェクトごとに言語/技術を選ぶときにどうやって最適なものを選んでいますか?
学校では、様々な言語やフレームワークなどを教わっていますが、
開発目的に合わせた技術の選び方がわかりません。
漠然とした質問ですが、お答えいただけるとありがたいです。
フリーランスのことは分からないので個人開発の領域には触れないですが…
フロントなのか、バックなのか、組込なのか、それとも全く別なのか、から始まり、
顧客の要件(どのくらいの規模なのか、やりたいことは何か、開発資金は~)や
開発効率、言語の将来性、導入コスト、その後の保守性(現在だとCI/CD対応など)
などなど、技術選定にも様々な観点があるので、一概には回答しきれないです。
(何をもってして最適と言えるのか、から既に難しい問題なので)
更に細かく言えば、組織に所属している前提の話であれば、
「ベンチャー企業」や「新規事業部立ち上げ」などの開拓パターンでなければ
パッケージのカスタマイズ・改修や二次請け以降の開発になるので(おおよそ)
そもそも、余程の役職や立場でないと「技術選定」に携わることすらできません。
質問が「漠然とした」ということなので、「漠然とした」回答しかできないです。
私が最重視するのは開発の目的です。必要最低限のシステム要件を満たせなければ意味を成しません。
その上で、納期に間に合うか、費用は予算内に収まるかを考慮し、選択肢を洗い出します。
その中から例えば新しい技術を選択する場合、メンバー集めに苦労し、習熟度の低いメンバーで挑むと多くのケースで生産効率は落ちます。また、どこからもサポートが得られず、技術情報が少ないものを選択してしまうと、問題発生時にとても苦労することになります。
しかし、扱い慣れた古い技術ばかり扱っていると、折角作ったばかりのシステムのライフサイクルが短くなってしまったり、新たな要件への対応ができないシステムになってしまいます。また、これを続けてしまうと開発メンバーのスキルが陳腐化してしまい、企業(開発者)としても対応力が無くなってしまいます。
そのあたりのバランスを見極めながら、お客様と私たち開発者にとって最も価値がある選択を考えています。
お客様にとっての価値は、費用(初期コスト、ランニングコスト)やシステム性能、今後の拡張性、長期的に安定してシステムが稼働できることなどとなります。
私たちにとっての価値は、開発を通して得られた知見の市場価値や新しい事業への発展性などとなります。
基本的には、開発メンバーがある程度習熟しているものを用いますが、案件によって変わってくるので、一概に言えません。納品先が自分でソースを保守するという事で、納品先から開発環境を指定される事もありますし、保守を全く考えなくて良いものなら、自分が一番得意なものでサクっと作ります。(私はC#)
しかしながら、基本的には作った後には保守が必要なものと思ってください。保守が必要=自分以外にも理解出来て引き継げる状態にしておく必要があります。
新しい技術や開発手法を導入したい場合は、事前に先行調査を行い、十分開発可能であるという確信を得た上で、
等を行い、ある程度開発メンバーが資料やサンプル読み進めながら作れば出来る程度の下地を作ってからやります。
ただ、言語やフレームワーク等は考える事の一部にすぎないですし、そもそもプラットフォームによっては選択肢が殆ど無かったり、開発の規模によって、サーバ構成、DB、使用機材、それぞれをどう連携させるか等、考える事は山ほどあります。
結局は、自分が考えたり経験してきたことの積み重ねの範囲内でしか提案出来ないので、色々経験積んでください。知識を増やしていくことで、こういう物作りたいんだけどって話を聞いた時に、自然と組み合わせるピースが頭の中に浮かんでくるようになります。
現役だったのが結構前なので、最近は違うのかもしれないのと、私は小さなプロジェクトを請負でやっている会社の社員だったのでその辺の事情もあるかもしれませんが、通常、あまり冒険はしないようなものが選ばれる傾向にある気がします。
私の時代はJavaとかC#でした。というのも、請負とかだと、意外と前は違うところが担当していたりで、そこを引き継ぐケースが多いからです(そもそも選択権がないケース)。また、同じ仕事で、新しくアプリやら何やらを開発するケースでも、基本、なるべく普及しているものを選ぶのではないでしょうか?同じ会社にいても、担当が変わるというのは、ままあることですから、引継ぎなどのことを考えても、あまり誰も知らないようなフレームワークや言語を選ぶと詰むということがあると思います。
技術力の高いエンジニアばかりで新規のプロジェクトをやっているベンチャーなら、マイナーなフレームワークや言語でも、「最適」だから選ぶということができると思うのですが、普通はその分野で、なるべくオーソドックスなものを選んでやっていくのが安牌なのかなぁと言う気がします。今のチーム/環境に「最適」なものを選べること自体が少ないのではないかなぁ。おそらく学校でも、そういう(普及しているもの)を教えているのではないでしょうか?