主要なプログロミング言語の『使用用途』を考えてみた

   


プログロミング言語の主な分類としては

1. LL言語(PHP, Rubyなど)
2. 中間言語をVMで実行する言語(Java, C#など)
3. ローレベル言語(C/C++など)

があるかと思います。

それぞれの分類ごとに主要な言語とその使用用途を見ていきましょう!

1. LL言語

まず、「主要なプログロミング言語とは何か?」ですが、そのためには主要じゃないものを外していくとわかりやすいです。

LL言語(軽量言語、スクリプト言語)で言うと、PHP, Python, Perl, Rubyなどがありますが、この中でPerlは主要じゃないものとして除外します(Perl好きな人からは怒られそうですが…、私自身がPerlに関する知識が少ないっていう理由で外させてください)

PHPはWeb・スマホのサーバーサイド

PHPの使用用途は主にWebのサーバーサイドかスマホアプリ/ゲームのバックエンドのJSON APIですよね。

私の場合、cronで動かすDB更新のバッチ処理もPHPで書く場合があります。WebをPHPで作ってるので、バッチもPHPで書いてるってだけなんですけどね。それでも同じ言語で書くことによって、コードを使いまわせるメリットがあるので、よほど他の言語にする利点がない場合は言語を統一したほうがメリットがあると思います。

PythonはWeb・スマホ・デスクトップ、アカデミック分野

続いてPythonですが、PHPと同様にWebのサーバーサイドやスマホアプリのバックエンドで使われています。海外では有名なサービスの開発に使われていて、Dropbox、Instagram、PinterestがPythonで作られているそうです。

DropboxはPCのデスクトップアプリ部分もPythonで開発してるそうです

それからPythonには科学計算や統計処理のライブラリが充実してるので、データ解析や人工知能などのアカデミックな分野で使われているそうです。

幅広いですね。

私は以前、RubyとPythonどっちを使い始めようか考えた時があって、Rubyを選択しました。決定打となったのはPythonのメソッド定義には第一引数にselfを書かなければならないことでした。

def hello(self):
がメソッド定義なんですけど、selfって書かなきゃいけないんです。selfはJavaやPHPでいうところのthisなんですけど、なんでわざわざプログラマーが暗黙の引数であるselfを書かなければいけないんだよって感じがして、Rubyのが構文的に好きだなと思いました。

ちなみにRubyで同じコードを書くと

こうなります。こっちのがずっと自然ですよね。

RubyはWeb専用じゃない

RubyはなんといってもRuby on Railsを使ったWebサービス開発が有名ですが、Ruby作者のまつもとゆきひろさんによると、

「RubyはWeb開発用言語ではなくて、汎用言語であり、RubyってWeb用でしょ?とか言ってる人はもういいです。」

とインタビューで答えてました。というかそのはず(Web上の出典を探したんですが、見つかりませんでした。書籍か雑誌か、はたまたrebuild.fmかも)

その時おっしゃってたのは「Rubyは自分自身がサーバーになることも出来る」とのことでした。

RubyにはTCPソケットのサーバーとして待ち受ける機能があって、通信が来たらスレッドを起動して、そのコネクションの返答をさせるということが出来ますからね。

PHPの場合、実はこういうことが出来ないんですよ。PHPにもTCPソケットを待ち受ける機能はあるんですが、ユーザースレッドを起動する機能がないので同時アクセスを並列でさばくことが出来ないんです。なのでPHPはWeb用言語と言っていいかもしれませんね。とはいえ、それでもWeb以外の処理(バッチ処理とか)できるのでWeb専用とは言い難い気がします。

で、一応PHPのユーザースレッドについて現在の状況について調べてみたらpthreadsというモジュールを使うと出来るらしいです。以前はなかったんですけど、今は出来るみたいですね。とはいえ、標準機能として提供はされていないという意味では上記は正しいと言えるでしょうね。

だから、PHPってLLの他の3言語にくらべてちょっと特殊でWebに特化してる感はありますね。

続いて中間言語をVMで実行するタイプの言語を見ていきましょう

2. 中間言語をVMで実行するタイプの言語

Javaは性能がすごい

「Javaは処理によってはC言語よりも高いパフォーマンスを出す時がある」って話聞いたことありますよね?

これについて、ローレベルの処理に詳しいエンジニアにJavaのCPU処理性能について聞いた話を紹介します。

C/C++でCPUごとに最適化したマシン語を生成させるには、そのマシンごとにビルドしなければならないので、通常はそんなことはせず、もう少し汎用的なマシン語にビルドしているそうなんです。

それが、Javaの場合、VMがそこを受け持ってくれるので、自分が動作しているマシンに最適なマシン語を実行してくれるそうなんです。Java開発元であるOracleのサイトを見ると「高度に最適化されたマシン コード」とという表現が使われています。

なので、C/C++で実行するマシン用に最適化してビルドしたものじゃない場合、Javaの方が速くなることがあるんだそうです。

基本的にはJavaはVMを介している分遅いんですけど、上記のような条件がそろうとJavaのが性能出るそうです。

性能がそれだけ出て、しかもC/C++よりも開発の生産性が高いコードが書けるので、CPU性能と生産性の両立をしたい場合に使うといいんでしょうね。

Javaの使用用途

主な用途はWeb・スマホのサーバーサイドとAndroidアプリ開発です。

Javaっていうと業務システム開発の印象が強いですけど、意外とWebサービスやスマホのバックエンドでも使われています。

私が以前参加した家電量販店のECサイトやスマホゲームのバックエンドでもJavaが使われていました。

ただ、業務システムと違ってフレームワークがSpirngMVCだったり、Tapestryだったりしました。業務システムは圧倒的にStruts1が主流でしたからね。とはいえStruts1もサポート切れとなったので、今は別のものに乗せ替えてるんでしょうけどね。

C#はモバイルのクロスプラットフォーム

C#の使用用途はWeb・スマホのサーバーサイドとWindowsアプリ開発です。

C#には他の言語にない特徴があります。それはランタイムがオープンソースとクローズドなもの2種類あることです。

クローズド版がMicrosoftの作ってる.NETでオープンソース版がMonoです。

Monoを使ってモバイルアプリのクロスプラットフォーム開発が実現されています。

スマホゲームのゲームエンジンUnityはMonoを使って実装されていて、Unity上で開発したC#のコードはAndroid用にもiOS用にもWindowsアプリ用にもビルドすることが出来ます。この他にPlaystation用などコンソール機用にもビルドできます。

XamarinもMonoで実装されていて、こちらも一つのコードをAndroid、iOS用にビルドすることが出来ます。

3. ローレベル言語

C/C++、D言語、Go, ObjectiveC, Swiftなどがこの分類でしょう。

ひとくちにローレベルと言っても、C/C++はOS開発にも使われていて、はたやObjectiveC, Swiftはスマホアプリ開発に使われているので、ローレベル言語の中でも使用用途はさまざまです。

GoはWebやスマホのバックエンドのAPIを以前はLL言語でやってたものを性能出すためにGoに置き換えたって話は最近良く聞きますよね。あとDevOpsでも使われてるみたいです。

っと、ローレベル言語の話になった途端、説明が大雑把になった感がありますね。私自身がこのタイプの言語をあまり使っていないというのがバレバレです(笑)

仕事で使うという観点で考えてみる

技術的な観点でプログラミング言語の使用用途を考えてきましたが、仕事で使う場合は、結局のところ、会社が採用してる言語を使うということになります。急に夢から覚ますような話ですが、これって逆に言えば悩みが減るという良い面もあります。

先程書いたPythonはメソッド定義にselfを書かなければならないのがイケてないという問題も、会社でPythonが採用されていたら、四の五の言わずに使うことになります。

実際使ってみれば、selfって自分で書くのもいいやん!って思えるかもしれないので、そういう意味でも案外会社が与える成約というものいいのかもしれません。

ですから、趣味で自分の好みで自由に言語を選択する機会と、会社で指定されているものを使う両方の機会を持つといいのかなと思います。

エージェントを使った方が転職活動は楽です

東京・大阪近郊のイケてるIT企業に転職したい人には『レバテックキャリア』

 東京・大阪近郊のエンジニア経験者向け転職サービスです。

このサービスを運営しているレバレジーズという会社はシステム開発もやっているので、現場の仕事をよくわかってくれてますし、ヒカ☆ラボというIT系の勉強会なども主催していたりteratailというプログラマー専用の質問サイトを運営してて好感が持てます。求人案件もWebやスマホの面白い仕事が多いのでいいと思います。

あとホームページ見ると分かるんですが、若くて美人の担当者が多いのもナイスなんです!私の場合(たぶんあなたも)、担当者が美人だと転職活動のモチベーションめちゃ上がりますからね笑

エンジニア未経験の方や地方在住の方にはDODAというエージェントをおすすめします。

エンジニア未経験の方や地方在住の方には『DODA』

全国の求人を扱っていて、しかもITエンジニア未経験の人にも転職支援をしてくれるエージェントです。

未経験の人はサポート対象外のエージェントが多い中、DODAは未経験者を支援し転職を成功させています。未経験の方こそエージェントから職務経歴書の作り方や面接の仕方のレクチャーを受けた方がずっとうまくいきます。

フリーランスになりたい人には『ギークスジョブ』

フリーランスエンジニアになるには人脈が必要と思われがちですが、ギークスジョブに登録して希望条件を伝えれば、自分に合った案件を紹介してもらえるんですよ!思ってるより全然簡単にフリーランスってなれるもんなんです。

東京・大阪・名古屋・福岡の案件を紹介してもらえます。

 - 勉強法