yuu’s blog

しがないエンジニアの技術日記です。

学ぶべき(?)プログラミング言語は何か?

プログラミング言語は沢山存在する

ご存知の通り、プログラミング言語は世の中に沢山存在します。
その為、「この言語を勉強すべき」と言った提言はなかなかなく、「これを実現したいならこの言語が良いのではないか」と言った情報が世の中には多いですね。

そのような現状について、ただただ書いていきます。

私は何をしているのか?

何を学ぶべきか、私の考えを述べる前に、私が何をしているのかを簡単に伝えたほうが良いかもしれません。
最近の私は、もう大人ですが"やりたいことをやろう"をモットーに、気になることにはなんでも手をつけています。
(座右の銘は違いますよ。「なせばなる」です)

範囲としては、基盤からアプリケーション開発まで。
物理PCやCloudを使用してサーバーを立ち上げ、Web/アプリケーションサーバーを立ち上げたり、そこで動くアプリケーションを開発したりしています。 他にも、マイコンにセンサーを接続して環境データを収集しCloudへ蓄積しWebで可視化なんかもしていました。

具体的な話をすると、IaaS/PaaS/SaaSとかUbuntuとかVirtualBoxとかマイクロサービスとかDockerとかNginxとかRDBMSとかNoSQLとかJavaとかSpringとかRubyとかRailsとかHTML/CSS/JSとかGitとかReactとかWebpackとかBootstrapとかBulmaとかPythonとかFlaskとかsklearnとかPyTorchとかAruduinoとかRaspberry PiとかC#とかXamarinとか...

書き出してみると、自分でも胡散臭く感じますが、広く浅くまあなんでもやります。
そうなると、やはり自分はその中で何に注力すべきか自然と考えるようになります。

言語やライブラリに関して私が思うこと

色々な領域で色々な言語やフレームワークを使用していると、技術者としてダメになるようです。
世界的に有名な企業で必要とされる技術者は特化型のいわゆる"専門家"ですからね。
一時期"フルスタックエンジニア"と言われていましたが、中途半端なだけだと言った意見も多いようです。
日本でも一部では何でも屋の人気(ニーズ)はありますが、それでもほんの一部です。

そんな何でも屋の人は色々と考えます。

これまでは、私は迅速に小規模開発を行うのがミッションでしたので、Ruby on Railsを使用していました。
しかし、時代は流れSPAが流行し出し、コントローラーえぇ...となると別にRails使わなくても...と行った状況になります。
また、機械学習の流行により、Pythonの利用が活発化し、UIとなるWebアプリのバックエンドはAI部分と同じ言語でという流れで海外ではDjangoが使用されることが多いようです。
さらにSPAを実装する場合は、FlaskがAPサーバーの対象になります。
自分も、機械学習をしたり、自然言語処理をしたりするので、PythonのほうがRubyと比べるとライブラリが充実しているので、わざわざSPAをRails APIを使用しなくても...という状況に陥っています。

結論として、ようわからんということです。

もっというと、スマホやデスクトップアプリ開発も、もちろん今のこれからもlネイティブアプリが主だと思いますが、正直エンジニアとしてはクロスプラットフォームを実現したいのでWeb中心のサービスにしたいのが本心だと思います。
Edgeもリリースされたことですしね。

Webフロントエンド界隈はもう訳がわかりません。
Gulpをやったけど設定に時間がかかり、とりあえずタスクランナーはnpmを使用してWebpackとか走らせるけど、Webpackも設定面倒だし、TypeScriptも設定が...とか、本当によくわかりませんね。

そんな中で考える私の結論

世の中には二種類の人間がいると思います。

  1. 専門性を極める人
  2. 広く技術を取り扱う人

1はもちろん世界的に有名で良い意味でもチヤホヤされる人々です。
それに対して、2は中途半端な人です。
もちろん1人で何でもできる人は、IT繁栄期初期であれば非常に重宝されたと思いますが、時代が時代なので笑い者にしかされないかもしれません。
特に強いのは1ではありますが、少しずつ2に近づいている人が(多分)もっと強く、世界的に優秀とされる人なのでしょう。

私はその世界を全く知りませんが。

(ちなみに、私は誰かが「物を作れるのは凄い!!」と言ってくれていたので、それを糧にギリギリ生きている状況です。)

話を戻すと、1と2では学ぶべき言語は異なります。
最新技術を正とするなら尚更です。

1分野を極める際、最新を正とした場合の学ぶべき言語

Web界隈

  • フロントエンド
    • React
  • バックエンド
    • Go

いつも一人開発を行っている私がいうのもなんですが、以前はエリートが少人数で開発していましたが、現在は能力が高いエンジニアでの迅速な中模開発が主だと思います。
そうなると、自然とフロントは中規模開発中心のReactになるでしょう。
Googleでもない限りは。
バックエンドに関しても、現状では圧倒的にJavaが強いですが、ライセンスの問題(よく知らない)や近年のマイクロサービス化とDockerの流行からするとGoがある程度の処理速度が出る上中規模以上の開発ができるので主流になるかと思います。

組み込み界隈

この辺りは弱いので、上記の表現で正しいかわかりませんが、口語で表すと「素早い処理が必要な場所で使用するプログラミング言語」です。

なので、上記のサブタイトルだと当然C/C++になりますが、口語のニュアンスだと以下の言語になります。

  • Rust

ご存知かと思いますが、GoやRustは次世代のC言語を目指している言語です。
Webサーバーでの情報ですが(ソースは忘れましたが)Rustのほうが速度が出るということや実際に機械学習のような処理速度が要求される部分でCと並行してRustを採用している企業もあり、高速の処理が必要な場所ではC言語の代用としてRustが使用されると思います。
ただ、組み込み界隈に関してはC言語が今後も強いと思います。

計算機科学界隈

これは、先を行き過ぎかもしれませんが、以下の言語が注目されています。

  • Julia

特にJavaScriptがそうですが、色々と問題がある言語を長期間運用しているPythonと異なり、新しい言語である為、まだライブラリ等は少ない状況ですが、十分な処理速度やテストのしやすさがJuliaにはあると思います。

(海外でもネタにされていますが、素人の私からするとJSの使用はよくわかりません。Pythonも2系から3系への移行はやはり厳しいですし、基本逐次翻訳である為、速度は遅いと感じる場面があります。)

1分野を極める際無難な言語

これは難しいですね。 結局求人の多さがポイントになるかと思うので、以下かと思います。

  • Web
    • フロント
      • Vue or React
    • バックエンド
  • 組み込み
  • 計算機科学

まあ、こんな物でしょう。
(Rails + フリーランスというワードは個人的に嫌いですが。1ヶ月でできる!!とか#駆け出しエンジニアと....も)

もちろんPHPなどいまだWebアプリケーションフレームワークがバージョンアップしていたり、(個人的に)忘れ去られ気味のNode.jsもありますが、きりがありませんね。
Node.jsはそもそも"フロントもバックもJSで"がコンセプトかと思うので、1分野を極めるには向かないでしょう。 基本0 -> 1の人向けです。(正直私も0 -> 1を仕事とせざるを得ない人ですが...)

色々やりたい人の学ぶべき言語

  • Web
    • フロントエンド
      • Vue
    • バックエンド
      • Go
  • 組み込み
    • Rust
  • 計算機科学

こんな感じでしょうか。
Vueは他のJSフレームワークに比べ低コストで学べます。 Reactやりたくなれば移行すれば良いだけです。
WebのバックエンドをPythonに統一しても良いですが、色々やりたい人向けなので、分けました。
Railsも良いし、個人的にはあまりコード書かなくてもアプリが立ち上がるのは良いのですが、流行はGoでしょう。
GoのWebアプリケーションフレームワーク使用したことがないので早くプライベートまで持ち込んでる業務を終わらせて使う余裕を持ちたいです。!!

もっとやりた人向け

もうこの辺は適当です。
特にLispをやりたい人はやっても良いと思います。

最後に

(ほとんどこんな記事を最後まで読む人はいないという意味で)お礼をいうほどではありませんが

最後までお付き合いありがとうございました。