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

2016年11月22日に投稿 → に更新

ノートPC
プログラミング言語の主な分類としては、

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

があるかと思います。

それぞれの分類ごとに使用用途を考えてみます。

1. LL言語

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

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

私の場合、cronで動かすDB更新のバッチ処理もPHPで書く場合があります。WebをPHPで作ってるので、バッチもPHPで書いてるってだけなんですけどね。

それでも同じ言語で書くことによって、コードを使いまわせるメリットがあるので、よほど他の言語にする利点がない場合は言語を統一したほうがメリットがあると思います。

Pythonは機械学習(AI, ディープラーニング)、Web・スマホ・デスクトップ

続いてPythonですが、PHPと同様にWebのサーバーサイドやスマホアプリのバックエンドで使われています。

海外では有名なサービスの開発にも使われていて、Dropbox、Instagram、PinterestがPythonで作られているそうです。

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

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

ここ数年Pythonの書籍出版が増えているので、勢いを感じます。

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

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

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

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

まぁ、とはいえ、微々たる差なので慣れればどうってことはありません。今では私もPythonのコードも書いています。

Pythonに慣れると、今度はPHPやRubyなどの閉じカッコを書くのが面倒だなと感じてしまいます。

Pythonで以下のようにif文で:からインデントが戻るまでがif文なのに対し、

PHPでは{を書いたら}で閉じなきゃなりません。

たいした手間ではないんですけど、短い方に慣れると、それが当たり前になっちゃうんですよね。

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はCPUの実行性能がすごい

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

CやC++でCPUごとに最適化したマシン語を生成させるには、そのマシンごとに最適化オプションをつけてビルドしなければなりません。通常はそんなことはせず、大抵のマシンで動作するように汎用的なマシン語にビルドしています。CentOSのyumやUbuntuのapt-getなどでは予め汎用的なビルドをしたモジュールを配布しています。

それが、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というスマホアプリのクロスプラットフォーム開発用IDEもMonoで実装されていて、こちらも一つのコードでAndroid、iOS用にビルドすることができます。

3. ローレベル言語

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

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

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

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

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

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

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

実際使ってみれば、「selfって自分で書くのもいいやん!」って思えたりもします。案外会社から使用言語をしばられるというのもいいものです。

ですから、

  • 趣味では、自分の好みで自由に言語を選択する
  • 仕事では、会社で指定されているものを使う

両方の機会を持てるといいのかなと思います。

趣味で始めたものがそこそこでできるようになったら、その技術を使ってる会社に転職するというものもいいと思います。使いたい技術が使える職場を渡り歩くってエンジニアとしてかっこいいですよね!私はここ数年これを意識していて、趣味で始めたUnityやPHPで仕事をすることができました。

やりたい仕事ってこうやってたどりつくものなのかなと思います。

転職はやってみると思ってたよりかんたん

私自身3回ほど転職してるんですが、思ってたよりかんたんで、転職エージェントを使ったらあっという間でした。

エージェントが応募先候補の選出から、面接の日程調整までやってくれるので、こちらから動かなくても半分くらい自動的に進む感じで楽でした。しかも今は好景気で売り手市場なので転職するのにちょうど良い時期です。

レバテックキャリアっていうエージェントがおすすめです。

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

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

なので、レバテックキャリアのホームページ見てみてください。「ホントだ、美人じゃん♪」ってきっと思うはずです笑

職務経歴書の作り方がわからないという方は、私の使っているテンプレートを使ってみて下さい。

地方在住や、エンジニア未経験の人にも使える転職エージェントがある!

レバテックキャリアは1都3県・大阪京都兵庫・福岡近郊のエンジニア経験者向けサービスなので、地方在住の方や、エンジニアの仕事が未経験の方には、ワークポートがおすすめです。

未経験の人はサポート対象外のエージェントが多いんですけど、ワークポートは未経験者の転職も支援してくれます。以前エンジニア未経験の友達にワークポートを教えてあげた所、ちゃんと登録できて未経験可の求人を紹介してもらえました。未経験の人こそエージェントから職務経歴書の作り方や面接の仕方のレクチャーを受けた方がずっとうまくいくと思います。

ワークポートは全国の求人をカバーしているので地方在住の方もご利用いただけます。

人脈がなくてもフリーランスになれる!

フリーランスになりたい方にはフォスターフリーランスがおすすめです。人脈がなくてもフォスターフリーランスに登録するだけで案件を紹介してもらえます。案件の希望(どんな技術を使っているか、残業が少ないこと)等も聞いてくれるので、やりたい仕事が出来ます。対象地域は東京、神奈川、千葉、埼玉です。

「派遣社員」なら正社員とフリーランスのいいどこ取り!

フリーランスになりたいけど、確定申告とかめんどくさいなという方には派遣社員がおすすめです。

派遣ってネガティブなイメージありますが、ITエンジニアの派遣社員ならやりたい仕事を選べて、給料も悪くないですし、確定申告や年金、健康保険も派遣会社が入ってくれるのでいいと思います。

私の先輩でフリーランスになった後、派遣社員になった人がいるんですが「自由かつ煩わしい手続きがなくて最高」って言ってました!パーソルテクノロジースタッフに登録するだけでかんたんに派遣社員になれます。

私(やまろう)への相談メールも募集中

転職や仕事術、勉強法等について質問や相談がありましたら、以下のメールフォームからぜひご連絡ください。
経験者ならかんたんに解決できる相談って多いのでお気軽にどうぞ!こう書いてもなかなかメールくれる人って少ないのでホント気軽にメールしてくれると嬉しいです。

メールアドレス (必須)

相談内容

たまに間違ったメールアドレスを入力されていて返信できない場合があります。一週間経っても返信がない場合、メールアドレスを確認の上、再度送信をお願いします。

 - 勉強法