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

      2016/12/08


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

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

最近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って自分で書くのもいいやん!」って思えるかもしれないので、そういう意味でも案外会社が与える成約というものいいのかもしれません。

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

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

転職はやってみると思ってたより簡単!

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

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

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

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

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

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

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

レバテックキャリアは東京・大阪近郊のエンジニア経験者向けサービスなので、地方在住の方や、エンジニアの仕事が未経験の方には、DODAがおすすめです。

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

DODAは全国に拠点があるので地方在住の方もご利用いただけます。

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

フリーランスになりたい方にはギークスジョブがおすすめです。人脈がなくてもギークスジョブに登録するだけで案件を紹介してもらえます。案件の希望(どんな技術を使っているか、残業が少ないこと)等も聞いてくれるので、やりたい仕事が出来ます。対象地域は東京・大阪・名古屋・福岡近郊です。

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

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

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

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

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

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

メールアドレス (必須)

相談内容

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

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

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

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

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

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

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

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

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

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

『派遣社員』なら正社員とフリーランスの『良いとこ取り』!

  • 「フリーランスになりたいけど、確定申告とかめんどくさいな」
  • 「定時帰りできる職場や、時短勤務がしたい」

という方には派遣社員がおすすめです。

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

 - 勉強法