現在、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がある
- テストが組み込まれており、導入しやすい
- 関数型、ガード、パターンマッチ、パイプ演算子により安全なコードが書きやすい
- 軽量プロセスにより、安全にエラー処理ができ、エラーに対処しやすい
- ホットスワップ機能により、ゼロタイムデプロイがしやすい
採用すべきでない理由
- 採用がしにくい
- 情報が少ない
- 関数型なので、新規概念が多く、学習コストが高い
- ライブラリが少ない
- 人気が出るかわからない