新しくシステム開発する時に意外と悩むのが「どのプログラミング言語を使うか」問題です。
上司から「好きなの使っていいよ」と言われたり、そもそも上司がITに詳しくなく丸投げだったりすると、途方に暮れてしまう方も多いのではないでしょうか。
プログラミング言語は生産性に大きく影響し、ひいてはプロジェクト全体の成否にまで関わってくる非常に重要なものです。
今回はプログラミング言語を選択するための指針についてご紹介します。
プログラミング言語は大きく4パターンに分類できる
Web系、アプリ系などのジャンルを問わず、プログラミング言語は大きく4つのパターンに分類できます。
それがこちら。
※本記事では2000年頃を境に古い/新しいと区分けしています。メジャー/マイナーは筆者の主観ですので、参考程度にしていただければ。。
※Pythonは20年以上前の古い言語ですが、注目度が上がり採用ケースが増えたのが最近のため新しい言語に位置付けています
古くてメジャーな言語は大規模開発向き
古くてメジャーな言語は大規模開発に向いています。
理由は技術者が多く、有用な書籍やネット情報が探しやすいからです。
特に技術者が多いのは大規模開発で大きなアドバンテージになります。
開発が本格化してくると社内人材だけではこと足りず、派遣やフリーランスの技術者を探すケースが出てきます。
この時、あまりに新しかったりマイナーな言語を使ってたりすると、技術者探しに苦労してしまいます。
また過去からのバージョンアップが積み重なっている分バグが少なく、信頼性が高いのも特徴です。
欠点としては、新しい言語に比べて生産性が低い傾向にあることが挙げられます。
新しい言語だと1行で書けるコードが、古い言語では数十行の関数を作らなくてはいけない、なんてことも。
LravelやRuby on Railsのように、フレームワークがこの欠点を解消しているものもありますが、その場合プログラミング言語に加えフレームワークの学習コストがプラスされますので、その辺りも考慮した方が良いでしょう。
新しくてメジャーな言語は小規模開発向け
新しくてメジャーな言語は小規模開発に向いています。
特に一人親方や2~3人程度で開発する分には適しているケースが多いでしょう。
現在流行っている言語は、古い言語の欠点を解消するように発展進化しているものが多いです。
直感的で分かりやすい言語体系になっており、生産性は高いが学習コストが低い、というメリットが出やすい傾向にあります。
新しい言語は書籍が少なかったり、公式サイトが充実していないなど情報不足に悩まされがちですが、メジャーなものであればQiitaのような技術系サイトで情報発信が多く行われてますので、情報不足に悩まされる心配はあまりないでしょう。
欠点は古い言語ほど開発実績がないことです。
特に大量のデータやアクセスを処理するような大規模システムで採用したりすると、思わぬトラブルを招く可能性があります。
新しくてマイナーな言語は判断が難しい
一番判断が難しいのが、新しくてマイナーな言語です。
これから流行るかもしれないし廃れるかもしれない、というリスクが大きいです。
「そんなの自分が良いなら関係ないじゃん!」と思うかもしれませんが、廃れる言語は今後技術者が増えず減る一方ということです。
自分が一生システムのお守りをするつもりならそれでも良いかもしれませんが、現実的ではないケースが多いでしょう。
反対にこれから流行ってくれれば何の問題もありません。
むしろ先駆者として自分が情報発信する側に回れるメリットもあると思います。
情報が少ないですし、書籍やネット情報に頼らず自分で解決しなくてはいけない課題が多くなりがちですので、このジャンルは技術力に自信がある人向けでもあります。
どうしても採用したい場合は、まずは小規模な開発で試してみることをお勧めします。
古くてマイナーな言語は除外
古くてマイナーな言語は選択肢から外してしまって問題ありません。
マイナー言語は技術者や情報がもともと少ないですし、古い分これから注目される可能性も低いです。
まとめ
ざっくりまとめるとこんな感じです。
パターン | 開発規模 | メリット | デメリット |
---|---|---|---|
古くてメジャー | 大規模開発向け | ・技術者が多い ・情報が豊富 ・不具合が少ない | ・生産性が低い ・学習コストが高い |
新しくてメジャー | 小規模開発向け | ・技術者が多い ・情報が豊富 ・生産性が高い ・学習コストが低い | ・思わぬ不具合が潜んでいるかも |
新しくてマイナー | 小規模開発向け | ・流行れば先駆者になれる | ・技術者が少ない ・情報が少ない ・廃れるリスクがある ・上級者向け |
古くてマイナー | ー | ー | ・技術者が少ない ・情報が少ない ・廃れる一方 |
プログラミング言語には目的によって得手不得手というものがありますが、それ以上に私は身の丈にあったものを選ぶのが一番重要だと考えています。
正直、ある程度しっかりしたプログラミング言語であれば大抵のことは解決できてしまうんですよね。(だから悩みやすいんですが)
この記事がみなさんのプログラミング選びの参考になれば幸いです。