複数のプログラミング言語を学んだほうがいい、というのは、いろんな記事で紹介されていますので、今さら言うことでもない気がします。
しかし、やっぱり学んだほうが良いと思える人はいるので、利点と欠点を挙げてみます。
複数言語を学ぶ利点
複数言語を学ぶ利点はいろいろありますが、私が実際にやって思ったのはこんな感じです。
次の言語の学習コストが低い
私の場合、最初にC#
の研修を受け、仕事で数年使っていて、その後Delphi
*1、SQL
*2、PowerShell
*3あたりを利用していました。
その後は、当ブログにもよく出てくるPython
を習得しています。あと、仕事でVBA
とJava
もできるようになりました。
プログラムは順次実行、条件分岐、反復(ループ)が基本要素です。
一つのプログラミング言語で、このあたりを十分に理解しておくと、二つ目以降は構文の書き方と使い方を覚えるだけで一応は使える*4ので、楽です。
比較できる
単一言語しか知らないと、その言語の利点や欠点は案外わかりません。
C#
だけやっていた頃は、Visual Studio
で楽々コーディングしていましたが、他の言語を触ってから初めて、
と思いました。
それと同時に、C#
はVisual Studio
の利用が前提で、コンパイル等を考えるとサクッと作る用途には向かない、と気づきました。
Python
みたいに、コンパイル不要な言語は気軽です。
言語の根底にある考え方や文化も、それぞれで結構違っています。
たとえばC#
は、記法を短くする修正や簡単に書ける構文を用意したりと、開発者が楽に開発できるように、という考え方が根底にあると感じます。
慣れすぎるとコーディング力がつきにくい、という問題もありますが。
また、同じオブジェクト指向言語でありながら、C#
とPython
は結構違うので、そのあたりも知れて面白いです。
さくっと作るならPython
、しっかり作るならC#
みたいな使い分けができます。
道が広がる
単純な話ですが、手段を多く知ることで、選択肢が広がります。
特定言語に特化して、その道のプロになるのはよいと思いますが、プログラミング言語はあくまで手段なので、目的に応じた言語選定やより良い言語を習得するほうが良いと、個人的には思います。
まあ、オブジェクト指向言語ばかり学んで、関数型言語を学ぼうとしない筆者が言えたことではないですが。
複数言語を学ばなくてもよい人
複数言語を学んでも利点が少ない人、あまり意味がない人について考えます。
プログラマーなり立て
プログラマーなり立ての人が、いきなり複数言語を同時に学習するのは避けたほうが良いです。
とにかく、今自分が使う必要のある言語を、必死に習得しましょう。
必要な言語を習得し、仕事や作業が自分で楽にできるようになってきてから、言語を習得したほうが効率的です。
プログラミングを使う明確な目的がある人
例えば、機械学習を利用するためにPython
を利用している人です。
こういう人は、新たな言語を学んでも使う機会に乏しいので、必要ないと思います。
自分の話
C#時代
C#
の経験ですが、仕事ではWindows Form
を使っていました。
学び始めた当時に出ていたWPF
*6を独学で知りました。
その後、最初に作ったシステムがほぼ新規にもかかわらずクソ設計だなぁと気づいてから、設計分野に興味を持ちました。
その他、デバッガビジュアライザを自分で作って画面のテスト(画面にある各コントロールを取得し、必要なプロパティ値を出力する)に使ったりとか、結構ディープな部分まで使っていました。
複数言語を学んだほうが良い、と書いていた話
筆者が最初に
開発者は複数の言語を学ぶべきである
という記述に触れたのは、『達人プログラマー』でした。
この本では、一年に一つ習得するとよい、と書いてあります。知識のポートフォリオの話も一緒に書いてありました。
前職を退職してからは、一年に一つを目標にしよう、と思い、進めております。
Python時代
習得は昨年の話です。
機械学習がかなり盛り上がっている中、学んで損はないだろう、と手を出しました。
結果はブログに書いた通り、普通に書く分には困らなくなっています。
というか普通に、社内でPython案件が回ってくるようになりました。
まあこれは、運が良かったと考えるべきでしょう。
JavaScript時代
これは今年です。HTML
とCSS
の学習も含みます。
PCが壊れて学習自体止まっていましたが、一応やっています。
C#
→Python
と、やわらかい言語に変遷してきたわけですが、JavaScript
でさらにやわらかくなりました。
基礎を習得したら、フロントのライブラリを学ぼうと考えています。本もいっぱい出ていますし。
TypeScript
もやりたいんですが…なかなか。
思うこと
自分の得意分野外のことを学ぶのは、なかなかしんどいです。
JavaScript
のように、関数でもなんでも変数に入れられる、みたいな考え方が個人的には受け入れがたいです*7。
あとは、単に忙しいというのも、誰にだってあると思います。
しかし、新たなプログラミング言語を学ぶなど、新たな学びは間違いなく自分の成長につながります。
特にこのブログみたいにアウトプットしていくと、下手な記事は書けないという思いもあり、かなりちゃんと調べます。
つまり、複数のプログラミング言語を習得することもそうですが、自分が今できない分野に手を広げるのは、とてもいいことだと思っています。
手を広げた結果がどうなるかは運も絡みますが、その運を引き寄せるために新たな知識が必要だったのかもしれません。
勉強習慣を身に着けるハードルも高いですが、少なくともやらないよりははるかにマシです。
まあ、今やっている業務等が回せるな、と思っている人は、ぜひ別言語に手を出してみましょう。楽しいです。
おわりに
思ったこと書きなぐっただけの記事です。
ブログの更新が滞っていたり、JavaScript
の勉強が遅々として進んでいなかったりしている、自分への戒めでもあります。
今後もこんなこと書いたりしますので、よろしければ読んでください。