現役エンジニア講師が「今、改めて考える」初めて勉強するプログラミング言語は何がいい？2022年最新版

※色々な事を言いますが、今回のメインテーマは「タイムパフォーマンス」です。
いわゆる「タイパ」を重視してお話します。
※受講生向けの内容にしようと思いましたが、受講生に講師やITスクールの実情を知ってもらったほうが良いような気がしたので赤裸々に書いた結果、ポエムになりました。

## 対象読者
- これからプロになろうと考えている方
- プロになれなくても、副業でプログラミングを勉強しようと考えている方
- プログラミングで稼ぎたい方

既にプロ、もしくは現場経験がある方にはあまり有益な情報はありません。
それっぽい雰囲気をお伝えする事で、私なりに整理をしようとしている姿を観察することが出来ます。

## はじめに
これは2022年12月執筆時点での意見です。
なるべく鮮度の高い情報にしたかったので、書き置きなど一切ありません。
そのため、見直しもセルフレビューも甘いかも知れませんがご容赦ください。

また、既にエンジニアとして実務経験がある方には今更すぎるお話ばかりなので、有益な情報はありません。
「こういった考え方の人もいるんだな」という程度の情報になります。

### 注意
こういった記事を書くと「いや、それはおかしい」という議論が必ず発生します。
これはそれぞれのエンジニア毎のバックボーンや歴史があり、必ずしも一致しないからです。
つまり、究極的に言えば「市場に案件があって、将来的には勉強すればできるようになる」ので、努力をやめない限りどれからやっても結果は同じになるからです。

具体的には、元々はデザイナーだったり営業だった方が、たとえばPHPから学んだりPythonから入ったとしても、本人が勉強を続ければゆくゆくは全ての言語を学び始める事になるからです。
なので、ここではある程度ケースバイケースを意識しながら場合分けを考えていきます。

## 本題
「プログラミングを学ぶこと」を目標にすると、後から手戻りが発生するので「プログラミングで何をしたいのか」を決めてから、これの達成を目標にすると結果的にタイパの良い学習ができます。
コスパを考えるなら優良なサイトを探すことから、タイパを考えるなら信頼できる講師を探してください。

### 1. プログラミングで何がしたいのか？から考える
最もモチベーション・学習効果が高いのは「やりたい事があって、その手段としてプログラミングを学ぶ」事です。
全員が全員そうだ、とは言い切れないと思いますが、私の経験則としてほぼ全員がそうです。
【（反例）全員がやりたい事があってプログラミングを学ぶ：やりたい事はあるけど、自分がやろうとしない場合。こういう方がプログラミング（に限らず、自ら進んで）勉強する理由が分からないので、クライアントの目的達成のためにヒアリングして実現のために尽力しますがお役立ちできる事は少ないと思います…】

この際は、言語をどうするとかどういう勉強をするとか、というのも決めやすいです。
作りたいシステム、あるいはやりたい事をメンター講師に相談してもらえると、メンター講師側も本人の状況や傾向、学習スタイルから実現可能な方法を提案する事ができます。
あえて厳しい言い方をすると、「他人の力を使ってでも課題を解決する」のは実務でも重要です。
ご自身とメンター講師が合っている・合っていないというのはありますが、うまくメンター講師を使えているかどうかは改めて見直したほうが良いでしょう。

目標が決まっていない方は、まずは以下を検討してみるところから始めてみるのも良いでしょう。

- 作りたいシステムがある場合：メンター講師にシステム名やシステムのデモを見せる
- 副業で稼ぎたい場合：案件サイトの傾向を分析する
- プログラミングを勉強したい：勉強したいと思うようになったきっかけを振り返ってみる

### 2. 学べる環境から考える
無料で学べる環境を使う場合を想定しますが、参考にしているサイトで解説している言語を使うのが手っ取り早いです。
環境差異などを考える必要がないので、サイトを読み進めながらスムーズに学習を進められる事でしょう。
とはいえ、サーバーサイドプログラミングだと学習の前に環境構築という高い壁がそびえ立つため、万人向けという意味でJavaScriptを推奨します。

問題は学習を進めていった先のお話です。
ちょっと場面は変わりますが、プログラミングに限らず「教師が話した内容を別の場所で改めて学び直したらスッキリした」という経験があるはずです。
これを踏まえて「別の人から同じことを教わる」という点にフォーカスします。
たとえば、子供の頃などは数学や英語など学校教科を塾や家庭教師など色々な方法で解決していく方法もあると思います。
では、プログラミングはどうやって学ぶのか？というと、現状はプログラミングスクールが最有力になるでしょうか。
ちょっと質問するだけなら色々なサービスがありますが、特にteratailなどは一般より高い質問スキルが求められるため、質問の初心者や未成年だと回答を得る前に心を折られます。
teratailが顕著な例なので取り上げましたが、teratail以外でもプログラミングの質問は非常に敷居が高いです。
そういった面で見ても、無料で質問は出来るが回答が得られない無料サービスではなく、有料でもしっかりと学習サポートを意識した回答をしてくれる講師を探しましょう。
そのため、プログラミングスクールは吟味する必要があるかもしれません。

とはいえ、いきなりプログラミングスクールから考える事もないと思います。
無料でやるか、より安価にやる方法から試してみましょう。
無料でやるならProgateを始めとした体系的な学びや解説ができるサイトを探すところから始めましょう。
そのサイトでどんな言語を扱って解説しているかに依存はしますが、根本的な考え方（＝アルゴリズム）は同じです。
慣れないうちはライブラリがどうとか、バージョンがどうとかは一旦置いて「手元で動くものを採用する」という方針で見える部分から理解していきましょう。
慣れてきたら、エラーメッセージで検索してみて、それっぽいサイトを参考にガチャガチャやってみてください。上手くいく時と上手くいかない時がありますが、上手くいかない時は頑張りすぎないようにします。
将来的には、エラーメッセージが出てきても解決できるようになっていくので、今は焦らず解決出来るエラーメッセージを少しずつ増やしていきましょう。

ちょっとアドバイスを入れましたが「参考にしているサイトやメンター講師の得意なものから学ぶ」という提案です。

### 3. プログラミングで挫折経験がある場合
たとえばWordPressのような事を、WordPress以外でやってみる方法を考えていきます。
WordPressは高機能であるが故に、はじめて勉強するフレームワークとしては「何をしたら良いか分からない」という状況に陥りがちです。
WordPressの開発経験がある方なら「初心者はまずプラグインを作るのがいいんじゃない？」と思うかも知れませんが、

- プラグインをどうやって作る？
- プラグインで何を作る？
- プラグインをどうやって使う？

など、動くものを作るためにWordPressの仕組みを理解する必要があるなど、初学者への学習コストが高すぎます。
ある程度開発経験があってOSSのドキュメントを読めるレベルならプラグイン開発は有意義ですが、ただのWebアプリ作成経験もない状態でやることではないです。
（残念ながら、WordPressを推すカリキュラムでいきなりプラグインを作る内容になっているためにプログラミングに苦手意識を持たれてしまう例もありました）

というケースは決して少なくないため、専門学校やITスクール出身者の少なくない数がこういった挫折経験者だったというのは割と多いかも知れません。
なんなら、これからはプログラミング教育を学校で受けてくる未来の新人たちも多くなるでしょう。
今の時点でも「専門学校や大学などでプログラミングを学ぶ機会があった」方がどんどん増えている傾向を感じています。
が、実践として使う機会がなかなか見られず、結果として「よく分からない何か」になってしまったのではないかと思います。

こういった背景があるため、前向きに言語選択が出来れば強いのですが、言語自体に苦手意識を持っている場合はメンター講師が得意な言語に乗り換えてしまうという手があります。
大体はWeb系になるので、WordPress＝PHPを選択する事が多いのではないでしょうか。
せっかくWeb系を学んできたので、同じくWeb系でもサーバー側(PHPなど)ではなくクライアント側(JavaScript)をメインにやってみるのも一手です。

### 4. トレンドから選ぶ
若い初学者の方に多い印象があります。
時間をムダに使いたくない方が多い昨今なので、トレンドを重視する気持ちはすごく共感できます。
私の印象ですがAI開発でよく使われているPythonと、Web系でほぼ何でもできて痒いところに手が届くJavaScript、後はその時々の言語になるかと思います。

このタイプの方には、今までのパターンと比べるとアドバイスできる内容があまりありません。
「なぜプログラミングを学ぶのか？」がハッキリしていない事が多いからです。
もちろん、今までのパターンでも「なぜ～？」がハッキリしていない方もいます。
こういった場合は同じくヒアリングしますが、本人なりにやりたい事や、やりたい事ではないけどこうなりたい（副業で稼ぎたい等）イメージがハッキリしている様子が見られる傾向がありました。

プログラミングを学ぶ理由が明確ではないと感じた方は、まずは目的を明確にしてから、目的を達成するための勉強方法や言語選択をされると良いでしょう。

## 結論
勉強は目的ありきです。
学校の勉強の日々も目標がハッキリしていれば学習効果が高まりますし、目標が「テストで赤点を回避する」などであれば、そこそこに頑張るはずです。
特に意識していないなら、もしかしたら赤点になってしまっているかもしれないですし、要領の良い方だと点は取れますが本質を理解していないのではないでしょうか。
（特に、目標を赤点回避にしている方は、とりあえず詰め込めば出来てしまう事があります…）


## おまけ：講師向け
これは対象読者から外れる話ですが、対象読者の方々も認識してもらった方が良さそうなので、一緒に書いておきます。
念のため、対象読者の方に言及しておくと「プログラミング言語は覚えたいものからはじめると良い」ので、講師としてはどういう言語でも初学者向けなら比較的対応できます。
その前提で、掲題のテーマからは外れますがお話を続けます。


3.の挫折経験者向けへの対応は、プログラミングを知らない方への対応より苦慮される事が多いです。

- 受講生は自分の理解が浅い事を認識しているが、前回どうやって説明されて理解できなかったのかが不明である
- 先入観や既存の知識との乖離または修正

（≒間違っているかどうかは不明のため、要確認）というステップを挟んでから、プログラミングを知らない方と同じ事を丁寧に解説する必要があるためです。
こういったケースの背景を分析していきます。
なお、これらは全て俺データによりますが、こういった体験談・現場でのトラブルを集積する環境はあった方が絶対にいいですね。

### プログラミングがより身近になることで、変わる教育環境
昨今の受講生はどこかしらで「プログラミング」に触れているため、プログラミングに対して苦手意識があってもおかしくありません。
よりイメージを鮮明にするなら、今までプログラミングは「未知の領域」から、英語や数学と同じカテゴリになります。
（よく考えると、学校で学んだ知識や内容をそのまま業務に使えるようになるのはすごい事ですね）

そうなると、今後のプログラミングの位置づけは「学校で無理矢理やらされた事を再度学び直す」という事になる事が予想されるので、入社試験にプログラミング実技が追加される形になってくるかとは思います。
つまり、現在の英語塾（英会話スクール）と同じ位置づけになってくるため、ITスクールの需要はますます高まるのではないか、と個人的に思います。
そのうち、学生向け・社会人向けのプログラミングスクール（コース）で分かれるかもしれませんし、学校教科という位置づけならいわゆる家庭教師の要件にプログラミングが追加されるかも知れません。

### 学校教育としてのプログラミング
現状のITスクールで他の講師から教わる場合は、スクール側の体制やコース予算だと講師は一人しかいない事が多いので、考えが偏る可能性は否めません。
個人で入るスクール（1on1型：複数の講師に教わりやすい）とグループ指導型（一人の講師に教わる）では、初学者は後者で１ヶ月など慣れてきたら前者の学習効果が高くなる傾向があります。
自主性が備わることと、ある程度学んできた中で自分なりのプログラミングへの解釈ができるようになるからです。
とはいえ、**教材に書いてある内容を追いかけてきただけなので自分で調べ物をして解決方法を考える事ができるようになる段階ではありません。**
一般に法人向けの教育パッケージはこの点を留意してグループ演習の機会を作るようにして、受講生間で教え合うようにカリキュラムが組まれています。

こういった事情については私が個人的、そしてITスクール、法人の新卒研修を通じて総合的に得た知見です。
全てがこのケースに当たるとは思いませんが、学校教育でのプログラミングが従来のような座学＋筆記テスト（オンライン）を重視するようでは、教育環境を見直す事を検討する必要もありそうです。

### 「複数の講師を用意する」本当の意図
ここでは、ITスクール事業でよくハマりがちなクラス・カプセル化・継承・多態性について解説する際、ある講師が解説したところ70%の受講生が理解できたとします。
おっと、受講前から既に習得していた場合はこの数値から除きます。
上記では簡単に70%としていますが、実際は70%の内訳はもっと複雑です。
たとえば、40%は講師の解説するAパターンで理解したとします。講師は手応えを感じなかったので、念のためBパターンでも解説し、20%も理解できるようになったとします。
AパターンとBパターンの共通項をAB'パターンとして解説したり、新たにCパターンでも解説したところ、さらに10%が理解出来たとします。
その後は色々やってみるのですが、30%はそのまま理解できずに後で時間を使って受動型から能動型（受休憩時間での質問なり、業後のそれぞれの自習なり、場合によっては実務で使ってから）で習得できるようになったとします。
最終的に全員ができるようになるのですが、研修という意味では30％は取りこぼします。
これがスクール事業として許容できる理解度・達成度かは別として、品質の良い教育と言い切るには不十分な数値だと意識があれば（少なくとも現場講師としては課題意識を持つはず）対策や事後策は講じるでしょう。
これにはもちろん、教える講師の質は関係しますが、講師の質をすぐに上げるのは難しいので、講師に頼らずに学習効果を上げる方法もあります。
その一つが大体のカリキュラムの最後に組まれる「チーム・総合開発演習」です。
チーム総合開発演習自体も効果的な進め方はありますが、ここではチームメンバーが講師的なポジションになることで、

- 教えるために学び直す（または、一緒に勉強する）
- 良い教わり方（質問の仕方）を試行錯誤する

事により、擬似的に講師の数を増やすことが出来ます。
残りの30％と、もしかしたらペーパーテスト（オンライン）で理解したつもりでも理解できていなかった項目の洗い出しが期待できます。

なお、開発演習の時間を削って座学を追加するのは、座学の知識を実践する時間を削減する事なので非推奨です。
営業的には「予備日」とされている事が多いため、カリキュラムのカスタマイズや進捗状況によって削減しやすいのですが、受講生が試行錯誤する時間が少なくなる＝理解度を下げる要因になります。

### 受講生にとって一番良い学びの環境を考える
本稿では４タイプについて触れましたが、実際はこんなにスッキリ分かれたりはしないです。
「色々な経緯があってプログラミングを学んでみよう！」となった方が1on1なのかグループ講習なのかは分かりませんが、プログラミングを学びたいと思って縁があったので、講師ご各位には最大限良い環境を作る事を考えてくださっているとは思います。
とはいえ、講師だからといって全てをおんぶにだっこで受講生の要望を100%満たすのではなく、自力でできそうな部分は自分でやってみる「多少不便・努力が必要な状態」を適度に作るのも重要です。
不便という表現は面倒事を与える印象を与えてしまいますが、不便なものを便利に効率よく使えるようにする方法も自ら探して学び取っていく事を指導するのが良いでしょう。

## 次の記事
- [最もシンプルな記事の書き方・考え方紹介(5日目)](#)
- [カレンダーページ](https://qiita.com/advent-calendar/2022/oreno_nomurasan2022)