As a material for thinking "Which language should I study next?", I made a list of the languages in which the software around me is written. The list is entirely at my discretion and I have no intention of doing so. The perspective is closer to middleware than the application. Genre classification is also appropriate.
Genre | name | language |
---|---|---|
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 |
(I have no intention of dismissing a particular language) C Most of the existing middleware is made of C, so knowledge of C language and its peripheral tools (make, gdb, ldd, etc.) is required for troubleshooting and patching. Most scripting language modules that require speed are implemented in C. (Perl XS, PHP extension, Ruby gem) It is very important that the Linux Kernel is written in C, and this will not change for the time being.
C++ Not everyone uses MongoDB, node.js, HHVM, etc., so if you're not using C ++ tools in the field, you might be able to go through without studying. It seems likely that it will be replaced by go and rust in the future.
Java I can only think of Jenkins as the most popular Java tool. It was thought to be a little out of date in the good old language, but it seems to have regained its glitter in Java 8, so it may be slowly coming up in the future.
Perl I don't think I've heard much about Perl tools these days. In the past, there was an image of Sabakan = Perl, but in recent years it seems that the market has been taken away by Ruby / Go. It's true.
PHP There is almost no tool / middleware made by PHP. There are many "application" things such as PhpMyAdmin and Wordpress. PHP programmers can't do it without studying other languages, but other language programmers can do it without studying PHP. That's why no one can write PHP with rebuildfm.
Ruby If you do Infrastructure as code, you need to be able to read and write a little. With the advent of Chef / Vagrant / Fluentd, it seems that it has become quite established as an infrastructure language. The ease of writing DSLs and the ease of creating plug-in mechanisms seem to have been the major deciding factors for adoption in infrastructure systems.
Python Python is now the only scripting language that comes pre-loaded with major Linux distributions. It works as an unsung hero in the part near the core of the OS such as yum / apt / firewalld. ~~, but I feel that the number of recent tools made by python is decreasing. ~~ ~~ There is aws-cli that is widely used, but I feel that it will be replaced by Go language in the future. ~~ ~~ python may be manageable without studying. ~~
Originally widely used in Europe and the United States, there was abundant scientific calculation libraries, but with the strong tailwind of machine learning, it seems to become more important in the future.
Go
Most of the CLI tools written after 2014 are made by Go. In the CLI field, there is momentum that surpasses Ruby.
For example, the hub
command was originally made by Ruby, but it is symbolized by the fact that it has been rewritten in Go language from ver 2.
Also, since it is often used in container systems, it is inevitable to dig deeper into container technology.
Rust There is a concept / possibility that replaces the C and C ++ languages. It is unknown how far the power will expand in the future.
Should I study C / Go / Ruby / Rust from now on? (Apart from that, you also need to study JS / Java / Swift as an application language)