これからプログラミングを勉強する初心者がやるべきこと

# はじめに

この記事では、「これからプログラミングを学びたい！」という人に向けて、**プログラミングの勉強の始め方** を述べていきます。

技術的な話というよりは、スタンスの話が主になります。

:::note warn
**読む前のご注意**

この記事でご紹介する方法は、私自身の体験を踏まえた上で「これをすれば良いんじゃないか？」と考えたものを書いています。
毒にも薬にもならないことを書いても仕方ないと思い、私の思想を (あたかも一般論のように) 押し出しているところもあるので、他の記事も併せて参照することを強くお勧めします。
:::

## 筆者について

略歴
> - 大学1年の春にプログラミング学習を始めたものの、挫折。
>- 大学2年の春にプログラミングサークルに入り、競技プログラミングを始める。ある程度書けるようになったものの、周りとのレベル差があって話についていけず、幽霊部員に。
>- 大学2年の冬に GeekSalon という大学生向けのプログラミングスクールに入学し、Unity を使ったゲーム制作を通じてプログラミングの楽しさを知る。その後は Vue.js, Swift などをはじめ、様々な言語・フレームワークに挑戦。
>- 現在は同プログラミングスクールでメンターをしつつ、主に Web 制作関連の案件を年に2,3個こなす。
>- 最近はブロックチェーン技術に興味を持ち始め、完全な IT 人間になりつつある。

一言で言うと、**昔挫折したことあるけど、今はプログラミングが大好きになった人**です。

## この記事の対象者

- プログラミングをこれから勉強しようという人
- プログラミングをどう勉強するのか分からない人

# 本編



## 1. 【目標決め】「プログラミングを勉強する」は目標にしない

まず、プログラミングを勉強する前に目標を立てます。これがないと何を勉強するのかが決まってこないので、必ず決めます。
ここで、「プログラミングを勉強する」こと自体を目標にするのは避けるべきと思っています。
理由は大きく分けて2つあります。

:::note alert

**プログラミングを勉強すること自体を目標にしてはいけない理由**

1. プログラミングを勉強することには終わりがなく、途中で目標を見失うから
1. 学んだことが実際に何に使われるのかが繋がらないと、面白さを感じるのが難しいから

:::

一つ目について。プログラミング学習に終わりはありません。私はプログラミングを勉強して5年目になりますが、使える言語よりも使えない言語の方が遥かに多いです。それに、学んだ端から新しいものができてくるのがこの分野です。
プログラミング学習に終わりがない以上、「プログラミングを学習する」という目標は、明確な達成基準が存在しません。途中で目標を見失い、学習のモチベを著しく低下させてしまうことになりかねません。

二つ目ですが、これは私自身の失敗談が根拠です。

私はプログラミング学習を始める際、まず初めに `Python の基礎的な文法を学べる本` を買いました。
本を読んでいくと、変数に型があるということ、ファイルを外部から読み込む方法があるということ、クラスからインスタンスを生成することができること……様々なことがわかりました。

しかし、教材の通りに実行すればアウトプットは正しく出てくるものの、これが一体何に使われるのかがピンと来なくて、面白くないと思ってしまったのです。(機械学習のライブラリを触っていたら違っていたのかもしれませんが……)

だいぶ後になって Unity を使ってゲームを作った時、書いたコードがゲームのシステムに直結しているのが実感でき、楽しくプログラミングを勉強することが出来ました。

プログラミングはコンピュータに計算させるツールなので、プログラミングそのものというよりは、それを使って何かをするところにプログラミングの本来の面白さがあるはずです(もちろん個人の考えなので異論はあると思います)。

では、「プログラミングを勉強する」ではなく、何をしたらいいのでしょうか。私は、具体的な制作物を想定して学習をしていくのが良いと思っています。

:::note alert 
NG

- プログラミングを勉強する
- Python を使いこなせるようにする

:::
:::note info
Good

- 推しのファンゲームを自作する
- サークルの集金システムを作る
- 機械学習を使って競馬の予測をする

などなど

:::

具体的に作るものを想定できると、より積極的な学びができるようになります。
副次的に、制作物を他の人に自慢することも目標になるので、モチベを高く保つことができます。

初めに目標を決めておき、そのために必要な知識は何かな……と思いながら学習するのがオススメです。


## 2. 【言語選び】派閥争いは気にしない

さて、目標が決まったら続いて「どの言語を学ぶか」を考えていきます。

🤨「え？プログラミングってどの言語でも同じでしょ？」

……と思うかもしれませんが、実は言語によって得意・不得意があります。
自分の目標を達成するために、最適なプログラミング言語を決めます。

周りに詳しい人がいるなら、その人に「◯◯をしたいんだけど、何を勉強したら良いと思う？」と聞いてみると一番いいと思います。

もしネットで調べる場合は、その記事が何年に書かれたかに注目してください。数年前の記事だと、かなり古い言語や技術をリコメンドしている可能性があります。

また、ネットで調べる中で往々にして初心者が巻き込まれるものがあります。それが、プログラミング界の【**派閥争い**】です。
代表的なもので言えば、「Vue vs React vs Angular」「Apache vs Nginx」「Unity vs Unreal Engine」などです。

これらのツールは互いに切磋琢磨しながら発展しています。プログラマーは色々触ってみて、「この機能がいい」「この部分がダメ」などを比較し、そのツールの評価をします。

> プログラミング以外でも、「Excel と Google スプレッドシート」「Zoom と Google Meet」など、派閥争いが大量にあると思います。

「これからプログラミングを勉強する人が最初に学ぶべき言語」に関しても、様々な立場から色々な声があります。
初学者の方にとっては、どれを信じれば良いか分からなくなってしまうこともあります。

ただ、大前提としてどれが最強っていうのはなくて、往々にして適材適所です。
というか、派閥争いが行われている時点である程度有名なので、議論に上がっているものであれば何を選択しても問題ないと思います。

また、プログラミング言語ごとに書き方は違えど、考え方自体は共通していることが多いので、ある一つの言語を学べば、他の言語に移籍するのは比較的容易です。

従って、最初に学ぶ言語をどうしようか気にしすぎて詰まってしまうよりは、あまり気にせずに「これ！」と決めてしまった方が良いと思います。

## 3. 【教材選び】実践重視。とにかく作って学ぶ

学ぶ言語が決まれば、次は教材を決めます。
初めてプログラミングを学習する時には、 **「言語そのもの」についての教材よりも、「言語を使って何かをする」教材を使った方が良いと思っています**。
学んだことが実際にどう使われるのかが想像しやすいからです。

使うサービスは、実践重視のものであれば何でも良いと思います。
大きく分けて`本`と `Web サービス`の二つの媒体がありますが、個人的には Web サービスの方が以下の点でとっつきやすいと考えています。

:::note info
**Web サービスの良いところ**

- コードがコピペできて楽ができる
- アニメーションや動画を使った、グラフィカルな説明が可能
- 本に比べて新しい情報が載っている (ことが多い)

:::

各 Web サービスごとに値段は変動しますが、有料のものであっても、3000円も出せば大抵のものは利用できます。

また、自分で教材を選ぶのが難しかったり、学習を具体的にどう進めていけば良いのかが分からなかったりする方は、プログラミングスクールやプログラミングサロンという手もあると思います。
たいていの場合、プログラミングスクールは本や Web サービスと比べて 10 倍くらいの値段がかかります。それなりの覚悟が必要ですが、以下に示すような相応のリターンがあります。

:::note info
**プログラミングスクールの良いところ**

- 次にやるべきことが常に明確
- メンターがいるので、勉強に強制力が働く
- わからないことがあったときにメンターに質問できる
- コミュニティに参加することで様々な情報を手に入れることができる (就活など)

:::

スクールを使うべきか使わないべきかについては熱い議論がされていますが、それこそ派閥争いみたいなものなので、どちらでもいいと思います。こういっては何ですが、大抵の人は 1 つ (多くて 2 つ) のスクールでの体験を元に強引に一般化して「スクールとは……」と語っているだけなので、ふーんそういう考えもあるのね、くらいでとどめておくのが良さそうです。
無料で説明会をしているプログラミングスクールも多いので、実際に相談しに行ってから自分で判断するというのもアリだと思います。

## 4. プログラミングが出来る「怖い人」とは付き合わない

教材も決まったのなら、早速プログラミング学習を始めていきましょう。
ところで、プログラミングの勉強を続けていくにあたって必要なものはなんでしょうか？

私は、**モチベ管理** だと思っています。モチベを高く保つ方法は人によって様々だと思いますが、モチベを下げる人と付き合わないのがまず重要だと考えています。

この方の記事を読んでみてください。
これは私の体験ではないのですが、近いことが自分の身にもありました。

https://note.com/chia_ckra/n/naa57c93aeca5

> 記事を超簡単に要約すると、
仕事のバリ出来る上司から指導してもらっている初心者の方が、途中からパワハラまがいの暴言を吐かれ続け、最後にはプログラミングを挫折してしまったという話です。
(この方は新天地でプログラミングを続けているそうです)

この方の記事を読めば「なんだこのひどい上司は！😡」となる方も多いと思う一方、主にエンジニアを中心として「このパワハラ上司の気持ちも分からなくはない」と言っている方も一定数いらっしゃるようなんですよね。

というのも、プログラミングが出来る人は往々にして「なにが理解できないのが理解できない」んです。
個人的な意見ですが、プログラミングは日常で使う言葉と**全く違う言葉**を使います。知識がない人が聞いても呪文でしかありません。
誰もが初めはそうなのですが、プログラミングが出来るようになってくるに従って、言葉を理解できるようになっていきます。そして、**初心者にとってそれが呪文であることを忘れていきます。**

初心者が「分からないことを説明されてもちんぷんかんぷん」と苦しんでいるとき、教えている側も「こんなに丁寧に説明しているのに、全然伝わらない……」と、もどかしい気持ちでいっぱいになります。
言葉を選ばずに言えば、上級者にとって初心者はストレスを与えてくる存在な訳です。
普段は大丈夫でも、余裕がないときに話しかけられてつい言葉が強くなってしまうこともあるかもしれません。

別にその上司を擁護するわけではないですが、「プログラミングの出来る怖い人」は一定数います。
そういう人と一緒にやりたい！というハングリー精神にあふれた方 (ドМとも言う) を除き、自分のモチベを下げる存在とは距離を置く方が良いと思っています。
(まぁ、記事の筆者は仕事で勉強していたので、そうも言ってられない状況だったと思いますが……。)

一方で、質問した時に怒らないばかりか、初心者と同じ目線で教えてくれる人も一定数います。そういった人の近くにいることでプログラミングを楽しく勉強していけると思います。
初心者がプログラミング学習を続けていく上でメンターに必要なのは、プログラミングの豊富な知識よりもむしろ、初学者のモチベーションを高く保てるようなコーチングスキルだと思っています。

## 5. プログラミングを舐めてかかるな

最後に重要なのは、**プログラミングを舐めてかからない**ことです。

「プログラミングは独学で出来る」という言説があります。

私の周りで完全に一人でプログラミングを学んできている人は何人かいますし、実際、全員とは言わないまでも、独学で出来ちゃう人はいるとは思います。

ただ、この言説があたかも「プログラミングはチョロい」と言っているように聞こえてしまうのはいささか問題だと思っています。
プログラミング学習は決してチョロくないです。侍エンジニアさんによると、プログラミング学習時に「つまずいた経験がある・挫折したことがある」と回答したのは全体の約9割だそうです。[^1]

実際、私はかなり苦しみながらプログラミングを勉強していました。
私がプログラミングを「楽しい」と思えるようになったのは、かなり理解が進んで自分で一から自由にコードが書けるようになってからでした。
それまでは内心の「分からない」「つらい」という気持ちを押し殺しながら、「楽しい！！！」と半ば自分を言い聞かせながらやっていました。

また、例えばスクールに通ったり、プログラミング初心者の集まるコミュニティに所属したりしたからといっても、自動的にプログラミングが出来るようになる訳ではないと思っています。
私自身プログラミングスクールのメンターをして多くの受講生を見てきていますが、自分から勉強をせずに全てメンターに教えてもらおう！という姿勢の生徒さんは、成長角度が低い印象があります。

私自身プログラミングが分からなさ過ぎてやめてしまった経験があるので、勉強が嫌になる気持ちは死ぬほど分かります。ただ、本気でプログラミングを出来るようになりたいなら、どこかで歯を食いしばってやらなきゃいけないと思っています。

# おわりに

本記事ではプログラミングの始め方、主にスタンスについて述べてきました。
世の中にはさまざまなプログラミングの学習法がありますが、まず第一に「やる気」がなければ土俵にすら立てません。
やる気は本人の気の持ちようではありますが、環境によっても変わってくると思っています。自分の中でうまくハマってないな...という場合は、環境を変えることも大事です。

プログラミング学習において最も避けるべきなのは、「挫折してやめてしまうこと」です。
今の私は挫折を克服してプログラミングを続けられていますが、もし仮に 1 年間プログラミングから離れていた時期がなければもっと高みにいれたのかなと思うと、勿体ないことをしたなぁと思うこともあります。

これからプログラミングを勉強するみなさんは、ぜひ私の屍を越えて行って欲しいです。
それでは、よいプログラミングライフを！

もし良かったら、いいねボタンを押してくれると嬉しいです！

[^1]: https://www.sejuku.net/blog/109190