その他

【プログラミング言語】1つに集中すべき?複数学んでもOK?

みなさんは、「色んなプログラミング言語に手を出そうとするな」なんて主張を見かけたことはありませんか?
これからプログラミングを始めるなら、一つの言語をまず極めるべき、なんて論を目にすることが多いかなと思います。

これは、事実だと思います。
違うプログラミング言語でも、根幹にある思想や文法は共通していることが多く、1つの言語を習得すると他の言語の習得も非常に早くなるからです。

でも正直、プログラミングの独学って何から手をつけていいのかわからないですよね。
どのプログラミング言語を学ぶべきかも、どんな教材を使ってどんな流れで学ぶべきかもさっぱりわかりません。

僕も独学で勉強を始めたころはそうでした。
下の記事でも書きましたが、僕が勉強を始めたときは本当に色々な言語に手を出したものです。

RubyやRuby on Railsに始まり、VBAやJavascriptにPHP、PythonやJava、C#やCやC++なんかにも挑戦しました。
最近でも、NASMアセンブリ、JuliaやRust、TypescriptやPowerShellスクリプトなんかも書くことがあります。

よく使う言語だけに絞っても、Python、C#、C++、VBA、Javascript、PowerShellスクリプトと多岐にわたります。
手を広げすぎだなと自分でも思います笑

おかげで正直どの言語のスキルも中途半端なままになっている感は否めません。

ただ、色々な言語に手を出してきて良かったなと思うこともあります。

今回は、僕と同じく、つい他の言語に手を出してしまい悩んでいる方に向けて、色々な言語に手を出してきて良かったなと思うことを伝えたくて記事を書きました。

もくじ

  1. 複数の言語に手を出すデメリット
  2. 様々な言語に触れていて良かったこと
  3. 学習するプログラミング言語を選ぶコツ
  4. 『curiosity driven』という考え方
  5. まとめ

複数の言語に手を出すデメリット

さて、僕が色々な言語の勉強をしてきて良かったと感じる話をする前に、まずは一般的に言われている『複数の言語に手を出すデメリット』を整理しておきます。

複数の言語に手を出すデメリット

 ・それぞれ文法や構造が異なるので、混乱する

 ・1つの言語を習得する前に他の言語を勉強するのは学習の効率が悪い

 ・スキルセットが中途半端になる

大きくまとめると上のようなことがよく言われてるかと思います。

僕の経験から言っても、これらは半分以上事実です。
複数言語に手を出すことで、当然ながら1つの言語を深く勉強するための時間は削られます。

ただし、それ以上にメリットになる部分もあります。
以下ではそのメリットについてお話します。

様々な言語を勉強していて良かったこと

ここからは、僕が色々な言語に手を出して感じたメリットについてお話します。

複数の言語に手を出すメリット

 ・色々な言語のバックグラウンドを持つ中途の先輩社員と会話ができるようになる

 ・新しい言語や技術を学ぶことに対する抵抗がなくなる

 ・表面的な文法だけでなく、技術の基礎を学べる

僕は、これまで様々な言語を学習してきて、大きく上記のメリットを感じています。

まずはコミュニケーションの観点でのメリットです。

これは主観ですが、今40代くらいの先輩社員の方々は、CやJavaなどの技術的なバックグラウンドを持っている方が多いように感じます。
一方で、僕のような若年層は、比較的PythonやJavascript、C#などのモダンな言語に触れていることが多いです。

僕は、これらの言語の基本文法などは一通り習得しているおかげで、社内でのふとした瞬間の、技術的ジェネレーションギャップを埋めるポジションに立つことがあります。
また、エンジニアは誰しも、自分の使っている技術に少なからず愛着を持っているので、相手の好きな言語をある程度身に付けているだけで、それが共通点となってコミュニケーションかかなりスムーズになります。

次に、学習面でのメリットです。

プログラミングに限らず、何かを新しく学ぶときは、その学習コストが気になるものです。
特に0から学ぶ時の学習コストは非常に高いです。

そのためか、多くの人は歳を取るにつれて新しいことを学ぶことを避け、すでに自分が習得している知識で問題を解決しようとしがちです。
僕もそうでした。

ですが、新しい言語を複数習得して、学習への抵抗がなくなったことで、『いまさら勉強するなんて…』と思っていた数学や英語などの勉強も始めることができました。

また、オブジェクト指向、デザインパターン、リーダブルコードなど、多くの言語に共通する上に非常に重要な知識は、案外1つの言語のみを勉強していると身につかないものです。
実際に僕も、Pythonを勉強していた際にはイメージがつかなかったオブジェクト指向が、JavaとC#を勉強した際に理解できるようになるという体験をしました。

このように、コミュニケーションの面や学習の面で見て、複数の言語を学習することにはメリットもあると言えます。

『curiosity driven』という考え方

最後に、僕が大切にしている『curiosity driven』という考え方について紹介しておきたいと思います。

『curiosity driven』とは、ゴールとは関係のなさそうな方向に好奇心(curiosity)のまま、寄り道をしながら進むという目標達成へのアプローチの1つです。

これと対になる考え方に、『goal oriented』という考え方があります。
『goal oriented』とは、目標を定め、最短距離を一直線に進むアプローチを指します。

これらの考え方は、もちろんどちらが正解というものではなく、その時、その場、その人によって適切なアプローチは変わってきます。

ただ、日本の受験競争やビジネスの世界では、成果の予想ができない『curiosity driven』ではなく、『goal oriented』のアプローチが採用されているため、多くの方には馴染みがないかもしれません。
そのため、『curiosity driven』のようなアプローチをしていると、「中途半端にするな」「そんなことをしても無駄だ」といった批判を受けることがあります。

しかし、世の中のイノベーションの多くは、計画的に生み出されたものではなく、この『curiosity driven』によって生まれたと言われています。
また、Googleは勤務時間の20%を好きなテーマの研究に使って良いとする「20%ルール」を採用し、そこから多くのイノベーション、利益を得ています。

僕は、複数のプログラミング言語を学ぶべきか否かの論争も、このアプローチの考え方の違いなのだと思います。

「1つの言語に集中して勉強した方が効率よくスキルを身につけられる」というのは『goal oriented』のアプローチでしょう。
一方で、自分の好奇心のままに様々な言語を勉強してみるというのも、長い目で見れば大きな成果につながるきっかけかもしれません

結局は、1つの言語に集中すべきか、好きな言語を勉強するかは、自分にあった方法で進めるのがベストなのだと思います。

僕は最短最速で成果を出すというよりは、自分の好奇心のままに進んでいきたいタイプなので、複数の言語を勉強するアプローチが合っていたと思いますし、実際にそれで良かったと思っています。

まとめ

とりとめがなくなりましたが、結局、勉強の進め方について正解はなく、自分に合った方法で進めていくのがいいんじゃないかなって結論です。

ただ、個人的には「最短で稼ぐ!」とか「これだけやれば未経験からエンジニアに!」みたいな『goal oriented』的な論はあまり面白くないなと思います。

せっかく広大なIT技術の世界に足を踏み入れたのだから、色々冒険してみるのがいいんじゃないでしょうか?

COMMENT

メールアドレスが公開されることはありません。