「次に勉強するべきはどの言語?」を考えるための材料として、身近にあるソフトウェアが何言語で書かれているかをリストアップしてみました。
リストは完全に私の独断によるもので、特に他意はありません。
アプリケーションよりはミドルウェア寄りな視点になっています。
ジャンル分けも適当です。
ジャンル | 名前 | 言語 |
---|---|---|
OS | Linux Kernel | C |
OS | Windows | C++ |
RDBMS | MySQL | C/C++ |
RDBMS | PostgreSQL | C |
WebServer | Apache | C |
WebServer | Nginx | C |
WebServer | h2o | C |
KVS | redis | C |
KVS | memcached | C |
KVS | tokyotyrant/tokyocabinet | C |
KVS | kyototycoon | C++ |
DB | MongoDB | C++ |
DB | ElasticSearch | Java |
Logger | Fluentd | Ruby |
Tool | Embulk | Java |
CI | Jenkins | Java |
PackageManager | yum | python |
PackageManager | apt | python |
PackageManager | homebrew | ruby |
Firewall | firewalld | python |
Browser | GoogleChrome | C++ |
ImageManipulation | ImageMagick | C |
VCS | git | C |
Language | Perl | C |
Language | PHP | C |
Language | Ruby | C |
Language | HHVM/Hack | C++ |
Language | go | go |
Language | node/v8 | C++ |
Tool | Gnu coreutils | C |
Tool | AWS CLI | python |
DevTool | peco | go |
DevTool | ghq | go |
DevTool | Vagrant | Ruby |
ProccessManager | supervisord | Python |
Provisioning | Ansible | Python |
Provisioning | Chef | Ruby |
Provisioning | Berkshelf | Ruby |
Provisioning | ServerSpec | Ruby |
Container | Docker | go |
Container | kubernetes | go |
Container | rkt | go |
リストアップしてみての感想
- ミドルウェアや言語処理系ではまだまだC言語が広く使われている。特に2014年に登場したh2oがCで書かれているのは特筆するべき。
- 最近のミドルウェア/処理系ではC++を使っているケースもちらほらある。代表例はChrome,MongoDB,node.js,HHVMなど。
- Java製ツールは(自分の身近には)あまり多くない。embulkがJava製なのは要注目。
- 2009-2013年あたりに登場したインフラ系プロダクトではRuby製が多い。ただ最近ではGoに押され気味。
- 2013年以降、Go製のツールが急に増えてきた印象がある。
各言語について思うところ
(特定の言語をDisる意図はありません)
C
既存ミドルウェアでC製のものが多いので、トラブルシューティングをしたりパッチをあてたりするにはC言語とその周辺ツール(make,gdb,lddなど)の知識は必要。
スクリプト言語のモジュールでも、速度が要求されるものはたいていCで実装されている。(PerlのXS、PHPのextension、Rubyのgem)
Linux KernelがC言語で書かれているのは大変重要で、これはこの先も当分変わらなそう。
C++
MongoDB,node.js,HHVMなどを皆が使っているわけではないので、もし現場でC++製ツールを使っていないなら、勉強せずにスルーしてもいいかもしれない。将来的にgoやrustに取って代わられる可能性が高そう。
Java
Java製のツールで広く普及してるものといえばJenkinsくらいしか思いつかない。
古き良き言語で若干時代遅れだと思われていたが、Java8でキラキラ感を取り戻した感あるので、今後じわじわくるかもしれない。
Perl
Perl製のツールって最近あまり聞かない気がする。昔は鯖管=Perlなイメージがあったが、近年はその市場をRuby/Goに奪われた感ある。かなしい。
PHP
PHP製のツール・ミドルウェアというのはほぼ皆無である。
PhpMyAdminとかWordpressとか「アプリケーション」的なものが多い。
PHPプログラマは他言語を勉強しないとやっていけないが、他言語プログラマはPHPを勉強しなくてもやっていけるのである。
rebuildfmでPHP書ける人が登場しないのはつまりそういうことである。
Ruby
Infrastructure as code をやるなら多少なりとも読み書きできる必要がある。
Chef/Vagrant/Fluentdの登場で、インフラの言語としてかなり定着してる感ある。DSLの書きやすさ、プラグイン機構の作りやすさが、インフラ系で採用される大きな決め手になったと思われる。
Python
主要なLinuxディストリビューションに最初から入ってるスクリプト言語は今やpythonだけである。yum/apt/firewalldなどOSのコアに近い部分で縁の下の力持ちとして働いている。
が、最近のツールでpython製のものはだいぶ少なくなってきている気がする。
広く使われているものとしてはaws-cliがあるが、将来的にこれはGo言語で置き換わりそうな気がする。
pythonは勉強しなくても何とかなるかもしれない。
元々欧米では広く使われていた、科学計算ライブラリが豊富、だったところに、機械学習という強い追い風がきたので、今後重要性が高まってきそう。
Go
2014年以降に書かれたCLIツールはGo製のものが大変多い。CLI分野ではRubyをしのぐ勢いがある。
例えばhub
コマンドはもともとRuby製だったのがver 2からはGo言語で書きなおされていることがそれを象徴している。
またコンテナ系でよく使われているので、コンテナ技術を深堀りするためには避けては通れない。
Rust
C,C++言語を置き換えるかのようなコンセプト・可能性がある。将来どこまで勢力を広げるかは未知数。
結論
これから自分が勉強するべきなのはC/Go/Ruby/Rustあたりか。
(それとは別にアプリケーション用言語としてJS/Java/Swiftを勉強する必要もある)