現在、Fintech系のスタートアップを始めるにあたって、以下の言語で選定を迷っている。
フロントエンド(これは決定済み)
- Reactjs
 - ReactNative
 - redux
 
バックエンド
- Node.js
 - Golang
 - Elixir (Phoenix)
 - Ruby (RoR)
 - Python
 - PHP
 
どんなプロジェクトか?
- 会計に関する業務オートメーションサービス
 - 企業向けとそこの従業員さん向けのサイトとアプリが必要。
 - 細かな設定や20種類のレポートページ、情報ダウンロード、データ登録、データ編集がある。
 - アクセスは、契約した企業に限定され、同時アクセスは、1000ぐらいを想定しておけば問題ない。
 - 会計に関するビジネスロジックには絶対にバグを出せない。
 - 長く続けていくプロジェクトなので、今後、優位性のある言語を選びたい
 
Node.js
採用すべき理由
- 僕が今最も書ける言語
 - npmが本当にすごい
 - 構成がシンプル
 - 結構早い
 - フロントとバックエンドの知識を共有できる
 - WEBに情報が多い
 - javascriptの文法を知っているプログラマは多い
 
採用すべきでない理由
- 安定的に動かす仕組みが弱い(シングルスレッド・エラー処理・非同期)
 - バグのないコードが書きづらい
 - 非同期が多すぎて、読みづらい、バグが出やすい
 - co + Promise + yield はいいが学習が必要
 
PHP
採用すべき理由
- 僕が2番目に書ける言語
 - リクエストごとにコードを一から読むやり方は、問題が少なくて楽
 - プログラマの採用がしやすい
 - WEBに情報が多い
 
採用すべきでない理由
- ライブラリ関係が微妙
 - 速くない
 - 文法が良くない
 - 今後、大きな発展が望めない
 - 書いていてつまらない
 - テスト環境を作るのが、他と比べてめんどくさい
 - コードが長くなる
 - 強固なコードが書けるわけではない
 - エラー処理が優れていない
 - 非同期処理がやりづらい
 
Ruby
採用すべき理由
- RoRが使いやすい
 - 文法がわかりやすい
 - 書いていて楽しい
 - Gemが充実している
 - 採用もそこそこしやすい
 - テストが組み込まれており、導入しやすい
 - WEBに情報が多い
 
採用すべきでない理由
- 速くない
 - 強固なコードが書けるわけではない
 - エラー処理が優れていない
 - 非同期処理がやりづらい
 
Python
採用すべき理由
- コードが見易い
 - 分析系のライブラリが多くある
 - コンパイルシステムがある
 
採用すべきでない理由
- 速くない
 - 強固なコードが書けるわけではない
 - エラー処理が優れていない
 - 非同期処理がやりづらい
 
Golang
採用すべき理由
- かなり速い
 - 型がある
 - 文法が単純で学習コストが低い
 - 生産性が低くない
 - ライブラリが充実してきている
 - 非同期処理がやりやすい
 - CPUやメモリを使う処理でも低コストにできる
 - go fmtがあり、コードが統一できる
 - テストが組み込まれており、導入しやすい
 - WEBに情報が多い
 
採用すべきでない理由
- スクリプト言語に比べて生産性が落ちる
 - 文法が少ないせいで冗長なコードになりがち
 
Elixir
採用すべき理由
- かなり速い
 - Phoenixが使いやすい
 - 書いていて楽しい
 - Mixがある
 - テストが組み込まれており、導入しやすい
 - 関数型、ガード、パターンマッチ、パイプ演算子により安全なコードが書きやすい
 - 軽量プロセスにより、安全にエラー処理ができ、エラーに対処しやすい
 - ホットスワップ機能により、ゼロタイムデプロイがしやすい
 
採用すべきでない理由
- 採用がしにくい
 - 情報が少ない
 - 関数型なので、新規概念が多く、学習コストが高い
 - ライブラリが少ない
 - 人気が出るかわからない