[初心者向け]流行りのプログラミング言語の一言概要(2018年版)

![programing.jpg](https://qiita-image-store.s3.amazonaws.com/0/258841/f1bffbc8-7564-181f-fc20-92dd43e9a376.jpeg)

# 概要

待ち時間の暇つぶしにひたすら書いてみた。
ネット情報の雑学なので間違い等あればご指摘ください。

言語のリンクはwikiに行ってます。

## [アセンブラ](https://ja.wikipedia.org/wiki/%E3%82%A2%E3%82%BB%E3%83%B3%E3%83%96%E3%83%AA%E8%A8%80%E8%AA%9E) (不明)

CPUが理解できるマシン語用の言語。
低級言語。使ってる現場は見たことない

## [AWK](https://ja.wikipedia.org/wiki/AWK) (1977年)

スクリプト言語

CSVやTSVだったりCLIでの結果加工用言語
シェル芸するときに重宝

``` awk:hello.awk
#!/usr/bin/awk -f

BEGIN {
  print "Hello World!"
}
```

## [Bash](https://ja.wikipedia.org/wiki/Bash) (1988年)

スクリプト言語

シェルに対しての操作をするための言語
無きゃ死ぬレベルで簡単に自動化できる。
最近だとWSLがあってwindowsでも使える。

``` bash:hello.sh
#!/bin/bash

echo "Hello World!"
```

## [BASIC](https://ja.wikipedia.org/wiki/BASIC) (1964年)

プログラミング入門言語(いつの時代)
ベーマガが有名(BASICマガジン)
「初心者向け汎用記号命令コード(Beginner's All-purpose Symbolic Instruction Code)」で、
その頭文字をとってBASICと命名
高水準言語である。

## [C](https://ja.wikipedia.org/wiki/C%E8%A8%80%E8%AA%9E) (1972年)

言語の原点。手続き型言語
C言語を極めれば他の言語の習得は余裕になるらしい
極めるとは何をもって言えるのかは不明
組み込み/カーネル界隈では必須の言語

``` c:hello.c
#include <stdio.h>

int main(int argc, char **args) {
    printf("Hello, world!\n");
    return 0;
}
```

## [C#](https://ja.wikipedia.org/wiki/C_Sharp) (2000年)

構造化, 命令型, オブジェクト指向, 関数型, イベント駆動型, ジェネリック, リフレクション, 並行計算

.NET Frameworkでの標準言語
割と新し目な言語でJavaやC++のいいとこどりな言語
Unityなどを使う人は習得必須の言語

``` c#:hello.cs
using System;

namespace Hello {
  class Program {
    static void Main(string[] args) {
      Console.WriteLine("Hello, World!");
    }
  }
}
```

## [C++](https://ja.wikipedia.org/wiki/C%2B%2B) (1983年)

マルチパラダイム（手続き型プログラミング、データ抽象、オブジェクト指向プログラミング、ジェネリックプログラミングの組み合わせ）

Cの登場以来10年後に開発された言語
C言語にオブジェクト指向を追加しさらにライブラリも豊富かつ処理も高速
見た目だけではCの上位互換っぽいが欠点もある
カーネル開発でC++を使わない理由について言及したMLは有名

https://cpplover.blogspot.com/2013/05/linus-torvalsc.html

``` c++:hello.cpp
#include <iostream>

int main() {
    std::cout << "Hello World!" << std::endl;
    return 0;
}
```

## [COBOL](https://ja.wikipedia.org/wiki/COBOL) (1959年)

金融系システムではいまだ健在
1行が80桁のコーディングスタイルはここから
正式名称はCommon Business Oriented Language

以下は世界一有名といわれることもあるCOBOLで「Hello world!」を出力するプログラム

```
000010 IDENTIFICATION                   DIVISION.
000020 PROGRAM-ID.                      SAMPLE-01.
000030*
000040 ENVIRONMENT                      DIVISION.
000050*
000060 DATA                             DIVISION.
000070*
000080 PROCEDURE                        DIVISION.
000090 MAIN.
000100     DISPLAY "Hello world!"  UPON CONSOLE.
000110     STOP RUN.
```

## [csh](https://ja.wikipedia.org/wiki/C_Shell) (1978年)

シェルスクリプトをC言語風に書くための言語
ビルジョイっていうviを作った人が製作者の言語
Unixには標準で搭載

``` bash:hello.sh
#!/bin/csh -f
echo "Hello World"
```

## [D](https://ja.wikipedia.org/wiki/D%E8%A8%80%E8%AA%9E) (2001年)

C/C++のいいとこどり言語
言語レベルで単体テストをサポートしている
D言語くんはD言語知らない人でも聞いた事あるかも

``` D:hello.d
import std.stdio;

void main() {
    writeln("Hello World!");
}
```

## [Dart](https://ja.wikipedia.org/wiki/Dart) (2011年)

オブジェクト指向

サーバサイドでもフロントエンドでも使える言語
流行りそうで流行らない
JavaScriptとの共存/適材適所で選ばれる言語
インストールが手軽なので試してみる価値はあります

``` dart:hello.dart
main() {
  print("Hello World!");
}
```

## [Elixir(エリクサー)](https://ja.wikipedia.org/wiki/Elixir_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)) (2012年)

Rubyっぽい関数型言語。並行処理の機能が特徴的。
資生堂のエリクシールではない。

``` elixir:hello.exs
defmodule Hello do

    def world do
        IO.puts "Hello world"
    end
end

Hello.world
```

## [Fortran](https://ja.wikipedia.org/wiki/FORTRAN) (1957年)

手続き型・構造化・命令型・オブジェクト指向

高水準言語の元祖！
大学の研究などではいまだに現役
教授の教授が引き継いだ言語がFortranでそこから引き継ぎって感じで
残っているらしいです。
数値計算のライブラリが豊富で乗り換えできないって声が多々聞こえます。
母校の大学でも使ってる研究室がある。

``` fortran:hello.f90
program hello
  print *, 'Hello World!'
end program hello
```

## [Go](https://ja.wikipedia.org/wiki/Go_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)) (2009年)

コンパイラ型言語、構造化プログラミング、手続き型プログラミング、命令型プログラミング、並行計算、マルチパラダイムプログラミング

処理速度、学習コストの低さ、豊富なライブラリ！
現在流れが来てる言語といった感じでしょうか。
DockerなどもGoで書かれています。
メインはWebサーバー・アプリケーションの開発でしょう。

``` go:hello.go
package main

import "fmt"

func main() {
  fmt.Printf("Hello world\n")
}
```

## [Haskell](https://ja.wikipedia.org/wiki/Haskell) (1990年)

純粋関数言語。
全ての式や関数が副作用を持たないのが特徴
上級者向け言語。いつか入門したいです。

``` haskell:hello.hs
main = putStrLn "Hello World!"
```

## [Java](https://ja.wikipedia.org/wiki/Java) (1995年)

オブジェクト指向・構造化・手続き型

あらゆる業界からの人気No.1言語。
業務系アプリやwebアプリ、モバイルアプリまで色々用途があります。
入門するならとりあえずこれから始めておけばご飯は食べてけます。
衰退傾向にあるらしいですがまだまだしばらくは需要があることは間違いないでしょう。

Write once, run anywhere。OS依存がほぼない言語

``` Hello.java:java
public class Hello{
   public static void main(String[] args){
     System.out.println("Hello World!!");
   }
}
```

## [JavaScript](https://ja.wikipedia.org/wiki/JavaScript) (1995年)

マルチパラダイム

フロント/サーバサイドどっちもこなす優等生。
テキストエディタとwebブラウザのみで開発を進められるのでホントの初心者からしたら大変ありがたいうえに上級者にも使われるため学習価値はとても高い

## [Julia](https://ja.wikipedia.org/wiki/Julia_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)) (2012年)

手続き型プログラミング, 多重ディスパッチ, 関数型言語, メタプログラミング

科学技術系の計算言語。
PythonやRの対抗馬。
スクリプト言語かつコンパイル言語でもある

``` julia:hello.jl
println("Hello World")
```

## [Kotlin](https://ja.wikipedia.org/wiki/Kotlin) (2011年)

オブジェクト指向

Androidアプリの開発言語として注目されている。
Scalaのライバル的な感じ。最近だと大分リードしている。
今後注目の言語です。

``` kotlin
fun main(args:Array<String>) {
    println("Hello World!")
}
```

## [Lisp](https://ja.wikipedia.org/wiki/LISP) (1958年)

マルチパラダイム、関数型、手続き型、自己言及、メタ

名言集は読んでおくべき
http://www.geekpage.jp/blog/?id=2007/8/21

## [Nim](https://ja.wikipedia.org/wiki/Nim) (2008年)

マルチパラダイム: コンパイル言語、並行プログラミング言語、手続き型、命令型、オブジェクト指向

説明省きます。
この記事をぜひ読んでください。とても面白い

[全ての開発者が学ぶべき1つのNim](https://qiita.com/tlllune/items/4aafa56818c3c814939f)

``` hello.nim:nim
stdout.write("hello, world")
```

## [Objective-C](https://ja.wikipedia.org/wiki/Objective-C) (1983年)

オブジェクト指向プログラミング

iOS/macOSの開発言語
Cライクな言語というよりCをそのまま使える言語
swiftが出て人気は減ってきているが地方の業務系iOSアプリ案件では
いまだに根強い人気がある(swiftエンジニアの育成ができていないだけ？)

``` objective-c:main.m
#import <Foundation/Foundation.h>
 
int main(int argc, const char * argv[])
{
 
    @autoreleasepool {
 
        // insert code here...
        NSLog(@"Hello, World!");
 
    }
    return 0;
}
```

## [Pascal](https://ja.wikipedia.org/wiki/Pascal) (1970年)

命令型、構造化プログラミング

教育用の入門言語
アルゴリズムの学習などに最適で構造化言語といった呼び方もされる

``` pascal:hello.pas
program hello;
begin
    writeln( 'Hello World!' );
end.
```

## [Perl](https://ja.wikipedia.org/wiki/Perl) (1987年)

マルチパラダイム

CGI時代に一世を風靡した言語
保守案件がメインだがテキスト整形においてはいまだに強い人気がある
可読性がとても低いことで有名

こんな名言もある
__Perlは、スキルがあるが、性格の歪んだプロフェッショナルによって創られた、巨大で陰湿な悪である。__

``` perl:hello.pl
print "Hello World!";
```

## [PHP](https://ja.wikipedia.org/wiki/PHP_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)) (1995年)

命令型プログラミング

豊富なフレームワーク＆学習コストの低さ＆環境構築の容易さで入門向け言語
HTMLソースに埋め込んで使えるのも魅力的な言語です。

案件数もいまだに多い印象。バージョンアップで後方互換性が無くなることもあり
移行案件が多いのも事実。(東京の事情は分かりません。。。)

``` php:hello.php
echo "Hello World"
```

## [Python](https://ja.wikipedia.org/wiki/Python) (1991年)

オブジェクト指向、命令型、手続き型、関数型

Webアプリから人工知能、CLIでの簡単なツールまで何でもいけます。
学習コストが大変低くかつ豊富なライブラリで非エンジニアの方でも事務処理を自動化したなんて話をよく聞きます。ブラウザ操作やexcelの自動入力なんかも簡単にできます。
本格的人工知能なんかもいけるようです。

ただ適材適所という言葉あるように何でもPythonでやるのはエンジニアとしての視野が狭くなるのでお勧めできません。

``` python:hello.py
print("Hello World!")
```

## [R](https://ja.wikipedia.org/wiki/R%E8%A8%80%E8%AA%9E) (1995年)

マルチパラダイム 関数型 オブジェクト指向 命令型

データ分析やデータの可視化などに一躍買っている。
データサイエンティストを目指すなら習得必須の言語。

``` r:hello.R
print("Hello world")
```

## [Ruby](https://ja.wikipedia.org/wiki/Ruby) (1995年)

構造化、命令型、オブジェクト指向

プログラミングを楽しむための言語。
作者は日本人の[Yukihiro Matsumoto](https://twitter.com/yukihiro_matz)さん。
若手エンジニア向けの講演は大変心に響きます。

フレームRuby on Railsはweb業界の入門に個人的には適していると思う。
純粋なオブジェクト指向言語である。

``` ruby:hello.rb
print "hello world!"
```

## [Rust](https://ja.wikipedia.org/wiki/Rust_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)) (2010年)

コンパイラ型言語、システムプログラミング言語、マルチパラダイムプログラミング、関数型言語、オブジェクト指向プログラミング

安全で高速な汎用言語
C言語風の制御構造が特徴的

公式ドキュメントのレイアウトが個人的に好きです。
https://doc.rust-lang.org/stable/reference/notation.html

``` rust:hello.rs
fn main() {
    println!("Hello World!");
}
```

## [Scala](https://ja.wikipedia.org/wiki/Scala) (2003年)

オブジェクト指向言語、関数型言語

Javaからのスキルアップに最適な言語
関数型とオブジェクト指向型の二刀流。
インタプリタも備えており対話的にCLIからも使える。
ちなみにJavaも最近JShellなるもので同様なことができる。

``` scala:hello.scala
object hello {
  def main(args: Array[String]) :Unit = {
    println("Hello World")
  }
}
```

## [sed](https://ja.wikipedia.org/wiki/Sed_(%E3%82%B3%E3%83%B3%E3%83%94%E3%83%A5%E3%83%BC%E3%82%BF)) (1973年)

スクリプト言語

テキスト成型言語
シェル芸/ワンライナーをやるなら習得必須
正直awkだけでも良いが可読性重視するときは使い分けが必要

``` bash
$ echo | sed 's/.*/Hello World!/'
```

## [Smalltalk](https://ja.wikipedia.org/wiki/Smalltalk) (1972)

オブジェクト指向言語

オブジェクト指向言語の元祖！
その他オブジェクト指向言語に大きな影響を与えた言語

## [SQL](https://ja.wikipedia.org/wiki/SQL) (1976年)

色褪せないデータベース操作言語。
NoSQLが出てきて大分勢いありますが正直消えることはないでしょう。
ベンダー毎に全く違う拡張性を持つので都度学習が必要だが
一つ習得しておけばあとは応用のみなので何か一つ学習する必要はある。

## [Swift](https://ja.wikipedia.org/wiki/Swift_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E8%A8%80%E8%AA%9E)) (2014年)

関数型言語、命令型プログラミング、オブジェクト指向プログラミング

Apple推しの最新言語
iOSアプリを作るなら習得必須言語で学習がすぐに画面に出るので
学習のモチベーションも保ちやすい。
バージョン変更で大分互換性が無くなる。

## [Typescript](https://ja.wikipedia.org/wiki/TypeScript) (2012年)

マルチパラダイム : スクリプト、オブジェクト指向、構造化、命令型、関数型、ジェネリック
Microsoft製の言語。Javascriptへ変換するための中間言語。
Haxeと比較される。

## [Visual Basic](https://ja.wikipedia.org/wiki/Microsoft_Visual_Basic#Visual_Basic_%E8%A8%80%E8%AA%9E%E3%81%8C%E6%8E%A1%E7%94%A8%E3%81%95%E3%82%8C%E3%81%A6%E3%81%84%E3%82%8B%E3%81%9D%E3%81%AE%E4%BB%96%E3%81%AE%E7%92%B0%E5%A2%83) (2001年)

Windows業務アプリでの必須言語
今でも現役バリバリの言語
マイクロソフト社作

## [Whitespace](https://ja.wikipedia.org/wiki/Whitespace) (2003年)

スペース/タブ/改行のみで構成されている言語
所謂「難解プログラミング言語」ってやつ
使ってる人は見たことないがヒープやスタックといった学習にはいいかもしれな(嘘です)