プログラム言語ごとの特徴と業務での使い分け　～学生目線で調べてみた！～

# 目次
- 1.調べてみたきっかけ
- 2.調査対象の言語の開発経緯と特徴
    - java
    - C#
    - JavaScript
    - Python
- 3.実際の業務での使い分け 
    - java
    - C#
    - JavaScript
    - Python
- 4.感想
- 参考サイト

## １．調べたきっかけ
　私は専門学校でプログラムを学んでおります。java や C# 、Pythonなど、様々な言語を学んでいますが、開発現場で活躍されていた先生方の話では、使用していた言語が多様でした。
- 言語ごとの違いは何なのか
- 基本文法は似ているのに、業務で使い分けられるのはなぜなのか

この2点が気になったので、調べて、まとめてみました。

## 2.調査対象の言語の開発経緯と特徴
　今回調査したのは、<font color="DarkRed">「Java」 「C#」 「JavaScript」 「Python」</font> です。
　ほかにもたくさんある中、この４種類を選んだ理由は２つあり、個人的に好きなこと、それからプログラム言語ランキング掲載サイトでだいたい上位にあるからです。
言語ごとに
・開発経緯
・特徴
の順に記載したいと思います！

### Java
- javaが開発された経緯
　javaは**ハードウエアに依存しない新しいソフトウエア開発プロセスの仕組みを生み出す**という目標で1990年代に[Sun Microsystems社](https://ja.wikipedia.org/wiki/%E3%82%B5%E3%83%B3%E3%83%BB%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%BA)でGreenという名前のプロジェクトとしてJavaの開発がスタートしたそうです。

- 言語の特徴
**1. ハードウェア（OS）に依存しない**
　「JVM（Java Virtual Machine：Java仮想マシン）」で動いていることで、JVMが動作するコンピュータならどんなコンピュータ上でも利用できます。

  **2. オブジェクト指向**
　モノとモノとの関係性（クラス）を定義していくシステム構成の考え方ができます。

  **3. ライブラリやAPIが豊富**
　汎用的な「クラス（部品）」をひとまとめにしてあるものが豊富で、よく使う機能のプログラミングの手間が省けます。
  **4. ガベージコレクション**
　Javaオブジェクトに対するメモリ領域の割り当てや解放をJVM（Java仮想マシン）が自動的に行います。

### C#
- C#が開発された経緯
　C#は、有用性の高いC言語でオブジェクティブ指向の考え方が存在しないという問題を解消しようという試みのもと、[Microsoft社](https://ja.wikipedia.org/wiki/%E3%83%9E%E3%82%A4%E3%82%AF%E3%83%AD%E3%82%BD%E3%83%95%E3%83%88)で開発されました。
- 言語の特徴
 **1.Microsoft製品との相性が良い** 
　同じ開発元であり、各種ツール(Visual Studioなど)により開発がサポートされています。なので、Office製品とC#を組み合わせることが可能です。

  **2.Unity（ユニティー）とも相性が良い**
　ゲーム開発で有名なUnity（ユニティー）では、以前までは「C#、JavaScript、Boo」の３つの言語で開発が出来ましたが、今では、JavaScript、Booが廃止され、C#一択となりました。

  **3.オブジェクト指向**
   　「Java」と同じでモノとモノとの関係性（クラス）を定義していくシステム構成の考え方ができます。

### JavaScript
- JavaScriptが開発された経緯
　JavaScriptは、開発者の上司からの「Javaのような外観」「初心者に優しい」「Netscapeブラウザのほとんどなんでも制御できる」という指示のもと、[Netscape Communications Corporation](https://ja.wikipedia.org/wiki/%E3%83%8D%E3%83%83%E3%83%88%E3%82%B9%E3%82%B1%E3%83%BC%E3%83%97%E3%82%B3%E3%83%9F%E3%83%A5%E3%83%8B%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%BA)によって、10日間で開発されました。
　余談ですが、名前に「Java」とついてるのはJava が注目を浴びていたことにあやかったからだそうです。

- 言語の特徴
**1.非同期処理が行える**
　ページを移動しなくてもデータを取得できたり、表示したりできる非同期通信が可能になります。「Google Map」が代表例です。

  **2.ブラウザさえあれば実行できる**
　ブラウザには、JavaScriptを実行するための機能が標準で搭載されているため、ブラウザさえあれば実行できます。

  **3.フレームワークが豊富**
　React（リアクト）やAngular（アンギュラー）、Vue（ビュー）などのフレームワークがあり、Webアプリやサービスの土台を簡単に構築できます。

### Python
- Pythonが開発された経緯
　Pythonは、開発者がかなり複雑な分散システムを開発している際、既存のプログラム言語では思うように開発が進まず、開発者の「もっと使いやすい言語があればな」という想いから開発されました。
- 言語の特徴
**1.科学計算分野のライブラリが豊富**
　数値計算や機械学習などの科学計算分野のライブラリが豊富で機械学習・AI開発に最適なプログラミング言語といわれています。
**2.シンプルなコード**
　基本的にほかの言語に比べてシンプルな文法が採用されています。また、インデントが強制されるため、スコープ（ループ処理などの範囲）などを一目で理解することが可能です。
		
## 3.実際の業界での使い分け
### java
- どんな開発で使われている？
  - 組み込み系
　ガベージコレクションによりアプリケーション側が自由に任意のメモリー空間にアクセスできなくなるため、システムとしての高いセキュリティが保てます。
  - 業務システム
　取引先の多様なOSに対して対応可能です。
			
### C#
- どんな開発で使われている？
  - デスクトップアプリケーション
　特徴にもあったように、Windows用のソフトウェアと相性がよく開発しやすいです。
  - ゲーム
　強力なUnityツールと組み合わせられるので、多くの人が利用しています。
			
### JavaScript
- どんな開発で使われている？
  - Webアプリ
　Node.jsを使えば、JavaScriptだけでフロントエンド開発・バックエンド開発の両方を行うことができ、Javascriptが扱えるエンジニアを雇うだけで済みます。また、非同期処理を使って動的なページを作ることが出来ます。			　
			
### Python
- どんな開発で使われている？
  - AI開発
　AI向けのライブラリ（機械学習など）が充実しているので、多くの人がAI開発に用いています。
## 4. 感想
　言語の特徴を調べたことで、なぜ使い分けられているのか理解することが出来ました。この記事では記載しきれなかった言語の特徴もあるので、気になった方は調べてみるといいかもしれません。
　今回は「Java」 「C#」 「JavaScript」 「Python」の４種類でしたが、他の言語についても調べてみたいと思います。


## 参考サイト
#### Java言語
-  [【初心者向け】Javaの歴史を一通りなぞってみる](https://eng-entrance.com/java-history)
-  [Javaとは？言語の特徴や用途を初心者向けにわかりやすく解説](https://sejuku.net/blog/3686)

#### C#
-  [C#ってどんな言語？｜その特徴と学習メリット](https://products.sint.co.jp/topsic/blog/csharp-language-overview)
-  [C#（シーシャープ）とは？5つの特徴とできることを紹介](https://hnavi.co.jp/knowledge/blog/csharp-development/#title2)
-  [C#の歴史について解説【開発者は誰？】](https://freelance.techcareer.jp/articles/wp/skills/c%23/detail/214/)
-  [【まとめ】開発会社だから語れるC#での開発のメリットとデメリット](https://jp.ntq.com.vn/info/blog/blog13/)


#### JavaScript
-  [JavaScriptとは？特徴や用途・使い方を初心者向けにわかりやすく解説](https://sejuku.net/blog/3984)
-  [JavaScriptとは？使用するメリットや基本的な書き方を解説](https://online.dhw.co.jp/kuritama/difference-between-javascript-and-java/)
-  [JavaScriptの歴史【紆余曲折を経たプログラミング言語】](https://rightcode.co.jp/blog/it-entertainment/javascript-history)
-  [定番？WEBアプリ開発でJavaScriptを技術選定する３つの理由【スマホアプリも人気】](https://deha.co.jp/magazine/javascript-web/)

#### Python
-  [Pythonとは？特徴やできることを初心者向けにわかりやすく解説](https://sejuku.net/blog/7720)
-  [プログラミング言語のPythonとは？その特徴と活用方法](https://hnavi.co.jp/knowledge/blog/python/)
-  [Pythonとは？言語の特徴・メリット・活用事例を初心者向けに解説！](https://udemy.benesse.co.jp/development/python-work/python.html)
-  [なぜ機械学習にPythonが使われるのか？機械学習でPythonが使われる4つの理由](https://www.codexa.net/why-use-python-for-machine-learning/)
-  [Pythonの歴史|開発元や由来、いつからあるのかを解説](https://freelance.techcareer.jp/articles/wp/skills/python/detail/550/)