始めに
こんにちは!
まんじです!
プログラミング入門の頃にありがちな悩みとして、「プログラング言語はいくつ学ぶべきなのか?」というのがあると思います。
結論から書くと、とりあえず1つの言語にフォーカスしてプログラミングで仕事をしながら必要になれば2個目3個目と自然に増やししていくのがおすすめというか、大体みんなそんな感じになります。
実際問題、同時並行的に書くのは多くても2~3個じゃないカナーって思います。
前提: プログラミング言語をたくさん使えるようにしてもあんま意味がない
昔自分はこう思っていました。
「PythonもRubyもJavaもCもJavaScriptもPHPも、いっぱい言語使えたらイケてるんでね?」と。
ただこれが微妙に間違いでして、この微妙ポイントを解説します。
- 言語を複数使えてもそもそも1個か多くて2個しか同時並行的には使わない
- いろんなプログラミング言語を学んだところでその分浅くなるというだけ
- 言語ごとの微妙な違いによって学習コストが上がる(調べる時間が増える)
- 案件を取る時や転職や就職する時に求められるのは広さよりも深さ
言語を複数使えてもそもそも1個か多くて2個しかどうせ使わない
同時に2~3案件の仕事をやってるとかなら言語を同じ時期に3個以上使うとかはあるかもしれませんが、かなり稀なケースです。
普通にプログラミングで労働(正社員かフリーランス)かビジネスをしている場合は、言語数は大体1個か2個です。
フルスタックエンジニア的なスタンスでやっていても、フロントはTypeScriptにバックエンドは何か違う言語を使って2個ぐらいに落ち着きます。
たまにPythonとGoとTypeScriptみたく3個ぐらい使う人もいますけど、せいぜいそれくらいが同時に使う上限値です。
いろんなプログラミング言語を学んだところでその分浅くなるというだけ
これは微妙に賛否両論あるところですが、言語数を増やすほど1個の言語に使う時間は短くなるので、どうやっても広く浅くなる傾向にあります。
反論としてはいろんな言語を使うことで違いが分かって相乗効果からめちゃくちゃ技術力が上がる的な側面は確かにあります。
でも、広く浅い感じの人と深く狭い人を比較すると、言語ごとの微妙な慣習というか小技とか書くスピードとかはやっぱり狭く深い人のがいろいろ良いパフォーマンスが良くなりがちです。
ただ、ある程度熟練してる人だと1ヶ月かからないぐらいで雑魚レベルの人は追い抜けるというのはあって、結局のところそれも深さから来ます。
熟練者になって自然に言語数が気付いたら5個とか6個とかになるのは良い感じな雰囲気ですが、雑魚レベルの人が10個とか一気に勉強して使えるップリをしても本質からはズレがちです。
とりあえず1個を深めることから始めるのが良いです。
あと、プログラミング言語にフォーカスしてプログラミングしてる人はプログラミング言語開発者とかの低レイヤーの人とかじゃないとそもそも存在しない気がします。というのは労働現場を見てると感じますね!
一般的には仕事のタスクやらをこなしていれば勝手に不明点ググりつつその使ってるプログラミング言語のレベルが上がるって感じです。
言語ごとの微妙な違いによって学習コストが上がる問題
めちゃくちゃ時間がかかるわけじゃないですけど、PythonからTypeScriptに移行するって感じでも多少の学習コスト(学習時間)は必要になります。
これがPythonからGoとかPythonからJava、Pythonから関数型のプログラミング言語とかだともっと学習コストが上がるイメージです。
あとはプログラミング言語ごとの作法というよりも、その言語使って大体フレームワークとかを使って開発する確率が高いはずなので、そっちの学習や作法を知るのにも時間がかかります。
例えば、TypeScriptだとstirng[]で書くけど、PythonだとList[str]って書くのか、、、フムみたいな感じのやつです。
案件を取る時や転職や就職する時に求められるのは広さよりも深さじゃね?というやつ
そもそもプログラミング言語がいくつ使えたところであまり意味はなくて、「どういったポジションでどういったことができるのか」という部分が求人の本質だったりします。
Reactを使ったフロントエンドのマネージャークラスを募集する場合なんかを例にすると分かりやすいです。
会社側が欲しいのは、プログラミング言語マスターではなくて、フロントエンドでReactを使って実務経験年数がそこそこあってそこそこの規模の会社でマネージャークラスをしていたもしくはマネージャークラスができるような人材なわけです。
そう考えると、使えるプログラミング言語の数とかはほぼ関係なくて、そのポジションをこなせる技術力とソフトスキルがある人がお目当ての人になります。
ただ、そういったできる人は結果的にプログラミング言語も複数個使えるようになっていることが多いというだけの話で、プログラミング言語を増やしまくったからそこのポジションにいけるというわけではないケースが多いです。
求人を見れば分かるんですけど、実務でのプログラミング言語5個以上の経験とか書かれてる会社はないです。
大体、ReactやらAWSやらDjangoを実務経験で2年とかで求人がされます。
とりあえずプログラミング言語は1個だけ使って必要に応じて増やすという戦略でOK
こんな感じです。
- TypeScriptを使ってReactで仕事をGETする(言語1個目)
- 仕事をしていたらバッチ処理をGoで書いていたからGoもついでにやる(言語2個目)
- WordPressの案件をまるっと受託することにしたからPHPをやる(言語3個目)
- 転職した会社のバックエンドがJavaだったからJavaをやる(言語4個目)
- スクレイピングを個人的にしたくなったのでPythonを使う(言語5個目)
言語ごとに多少やりやすい分野はあったりするので、目的のための手段としてプログラミング言語が増えていくのが良いと思います。
増やそうとして頑張って無理やり増やすというよりかは、勝手に徐々になんか増えていってしまったってイメージのが目的のための手段になっている確率が高めです。
あと、1個の言語がそれなりに使えるようになっていると2個目3個目と新しいプログラミング言語を勉強する時もシンプルにすごい楽になるので、そういう意味合いでもとりあえず1個を極めるじゃないですけど1個を深めに使うのがおすすめです。
(仕事で使ってると定番の処理とかなら勝手に深まっていきますけど!)
あとあと、1ヶ月で1個プログラミング言語習得しちゃおうぜ的な発想も昔ぼくは入門の頃になったんですけど、浅く知ってる程度になりがちでいざ全然使えないとか使わないから忘却の彼方にいくとかはありがちなので、数を追うのはそういう点でもあんまりおすすめしません。
まとめ
- プログラミング言語はとりあえず1個深めるほうがよさげ
- 何かの手段としてプログラミング言語を使うとよき
- 2個目3個目のプログラミング言語を習得するのは1個目よりも圧倒的に楽
とりあえず言えるのは、仕事で1個プログラミング言語を使ってればある程度勝手に縦にも横にもできるようになってくるお!って感じだお!