post Image
2017年に向けて——学ぶ言語を選ぶ

 アローラ!
 年末です。翌年に想いを馳せる日々ですね。今回はそんなあなたに向けて、私が来年学ぶ言語を選ぶ際に出てきた候補を、理由を添えて書いていきます。

はじめに

 私は学生時代にひたすら Hello, World! を書いていました。Hello, World! には言語設計の思想が漂っているものです。さくっと言語にしっくりくるかを確かめるのなら Hello, World! が最適なのです。
 というわけで、この記事には Hello, World! をかき集めてあります (私自身、後から見返したいですからね!)。
 好きな言語の Hello, World! は見ていて心が安らぐのです。
 さて、行きましょう。

私について

 私はフロントエンドを主に書くアプリケーションエンジニアで、日頃、以下のような言語を触り、業務に携わっています。そのため、以下の言語は習熟しており、ここに登場しません。TypeScript はとても良いので、皆さま是非ともおさわりください。

  • JavaScript (ES.next)
  • TypeScript
  • PHP

選定基準について

  • 言語自体に開発支援機能がついていること
  • 0 == "abc"true になるなど、変な型変換が極力ないこと
  • 金額を綺麗に扱えること(業務上必須)

 また、以下のような2016年に賑わった事柄に関わる言語は、なるべく選定するようにしています。

  • 機械学習
  • 統計処理
  • マルチプラットフォーム

なぜ言語を学ぶの?

 新装版になったこちらを読みましょう。

選定した言語について感じたこと

 さっそく本題に移っていきましょう!

  • Go
  • Rust
  • Julia
  • Python
  • C#

Go

hello.go
// refs: https://golang.org/
package main

import "fmt"

func main() {
    fmt.Println("Hello, World!")
}

 Go (golang) は Google が2009年に発表した言語で、現在7歳です。愛嬌あふれる gopher くんがマスコットキャラクターです。
 シンプルな言語仕様に加え、並行・並列処理を簡便に扱える goroutine といった機能も組み込まれており、並行・並列処理の需要の高まりからか、よく採用事例を聞くようになりました。また、開発者をサポートする強力なツール群のおかげで、高い生産性を維持できるそうです。
 A Tour of Go を少しだけやってみましたが、シンプルで書きやすく非常に好印象です。

Pros

  • シンプルで非常に効率良く書ける言語仕様
  • 並行・並列処理のやりやすさ
  • gofmt, golint といった開発をサポートする公式提供のツール群
  • runtime/pprof というプロファイラが言語機能に組み込まれている

Cons

  • バージョン管理が一筋縄ではいかなそう (vendoring について少し調べた感じでは、あまり良く思わなかった)

Rust

hello.rust
// refs: http://rustbyexample.com/hello.html
fn main() {
    println!("Hello World!");
}

 Rust は Mozilla が2010年に発表した言語です。
 安全性・速度・並行性の3つをゴールに掲げ、とても活発に開発が行われています。開発者がメモリに気を遣わなくても良いにもかかわらず、内部ではガベージコレクタを利用していないなど、言語仕様にユニークな点が多いことも特徴です。こういったことから、型システムに強く興味を持っている私はティンと来てしまいます。
 また、ビルドシステム、パッケージマネージャ、プロジェクト管理ツールの Cargoとても優秀です。公式提供のツールひとつでパッケージ作成に必要なことがすべてまかなえる点は素晴らしいことですね。

Pros

  • 言語仕様の面白さ
  • Cargo があれば良い安心感

Cons

  • 言語仕様がユニークなため、理解の難しい部分がある

Julia

hello.jl
# refs: https://juliabyexample.helpmanual.io/
println("hello world")

 Julia は OSS として2012年に発表された言語です。
 科学計算処理に向いた言語で、カバーする分野としては Python や R といった統計/機械学習となります。スクリプト言語の手軽さを捨てずに、高い性能も求めた言語でもあります。
 この分野はあまり詳しくないので、この程度にとどめます。

Pros

  • 手軽にかける言語仕様にもかかわらず性能が非常に高い
  • 科学計算処理をする際には是非とも採用したい

Cons

  • 言語の特性からか、サードパーティのライブラリが少ない

Python

hello.py
print("Hello, World!")

 Python は1991年に発表された言語です。今回挙げた中では最も年寄りの言語ですね。
 言語仕様レベルでコードが均質化しやすい設計を取っていることが特徴です。日本には Ruby があるからか、あまりパッとしない印象ですが、世界的に見れば非常に多く使われている言語でもあります。
 近年、機械学習の機運が高まり、Python にも注目が集まっています。例えば、ニューラルネットワークを扱うフレームワークの Chainer は Python で作られていますし、Google の機械学習用ライブラリである TensorFlow は Python からの利用を想定しています。古株では自然言語処理用ライブラリの NLTK (Natural Language Toolkit) といったものもあり、機械学習といった分野では外せない存在になっているように感じます。

Pros

  • 言語仕様レベルでコードが均質化されるのは非常に良い
  • Web アプリケーションから機械学習までこなせる汎用性の高さ
  • IPython Notebook がある

Cons

  • バージョン断絶問題

C Sharp

hello.cs
// refs: https://www.microsoft.com/net/
using System;

namespace Application
{
    public class Program
    {
        public static void Main()
        {
            Console.WriteLine("Hello, World!");
        }
    }
}

 C# (C Sharp) は Microsoft が2000年に発表した言語です。
 言語仕様では、LINQ といったユニークな機能を搭載していたり、非同期メソッドが使えたりと、普通にコードを書くのであれば至れり尽くせりです。
 2015年あたりまでは Windows と密に結合しており、他の環境ではなかなか手が出しづらかったのですが、2016年はついに改善されました。そう、マルチプラットフォーム対応の .NET ランタイムである .NET Core がリリースされました。この改善のおかげで Windows 以外でもコンパイラプラットフォーム “Roslyn” の開発支援機能の恩恵を受けられるようになり、非常に大きな一歩を踏み出しました。また、Xamarin が Microsoft に買収され無償化されたことも記憶に新しいです。

Pros

  • コンパイラである “Roslyn” が AST などを提供してくれるため、プラグインの精度が均質化している
  • 一つ学んでおけば、デスクトップからモバイル、Web に至るまでサポートできる強さ
  • まとまりの良い言語仕様
  • TypeScript と通ずる部分のある設計思想

Cons

  • スクリプト言語に慣れると、構文がじゃっかん冗長に感じる

まとめ——私はどの言語を学ぶか

 私は Go をやります!


『 Go 』Article List
Category List

Eye Catch Image
Read More

Androidに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

AWSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Bitcoinに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

CentOSに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

dockerに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

GitHubに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Goに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Javaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

JavaScriptに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Laravelに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Pythonに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Rubyに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Scalaに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Swiftに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Unityに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Vue.jsに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

Wordpressに関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。

Eye Catch Image
Read More

機械学習に関する現役のエンジニアのノウハウ・トレンドのトピックなど技術的な情報を提供しています。コード・プログラムの丁寧な解説をはじめ、初心者にもわかりやすいように写真や動画を多く使用しています。