こんにちは。
この記事を読んでいるあなたは、

・これからプログラミングを勉強しようと思うが、何から始めたらいいのか分からない
・プログラミングって難しそうだけど、どうやったら一番簡単に勉強できるんだろう?
このように悩んでいるのではないでしょうか?
僕もプログラミングを始めたときは、

・プログラミング言語の種類多すぎ・・・
・しかもそれぞれのプログラミング言語の難易度が高すぎ・・・。
このように思っていました。
ですので、あなたが今持っているような悩みは非常によく分かります。
この記事を読んで分かること
この記事のメリットは、一言では下記です。

プログラミング初心者の状態から、何から学習を始めたらいいか?
さらに、この記事では、
・社会人になって、どのようにプログラミング言語を勉強しているか?
このような、僕自身の体験談を沢山盛り込んで説明したいと思います。
理論だけではないので、かなり具体的で分かりやすい内容になっていると思いますので、読んでみてください。
この記事の内容
この記事では、以下のような内容を説明します。

・前提を理解する / 考える
・プログラミングの準備をする
・実際に勉強をする (この記事のメイン)
・その他、やるべきではないこと、知っておくべきこと
僕が過去に、プログラミングをどうやって覚えたか?

内容に入る前に、過去の僕がプログラミングを覚えたときの様子を紹介したいと思います。
僕はすでに触れたように、大学生のときにプログラミング言語を覚えました。
そのときはC言語を使って、「インタラクティブアート」というアート作品を作ることにハマっていました。

そのときはNHK BS2で「デジタル・スタジアム」という公募型の番組があり、そこに出演することを目標にやっていました。
今のようにプログラミングスクールもないですし、参考になるウェブサイトも少ない状態で、本当に手探りで勉強していたのを覚えています。
また、社会人になってからはプライベートでPythonやAngular (TypeScript)などのプログラミング言語を覚えたりしています。
社会人の毎日時間がない中でどうやってモチベーションを保ちながらプログラミングを勉強しているのか?という部分は参考になると思います。
それでは早速、内容に入っていきたいと思います。
プログラミングの本質を理解する
突然ですが、あなたはプログラミングの本質は、何か知っていますか?
答えは、
です。
言い換えると、プログラミングは「手段」であり、「目的」ではありません。
つまり、その「手段」が上達しても、あなたの本当の「目的」を達成できないと意味がありません。

プログラミングを勉強しているときは、どうしてもその学習に集中するので視野が狭くなりがちです。
なので、プログラミングを本格的に開始する前に、
を明確にしてほしいと思います。
その目的の設定方法に関しては、次の章で説明します。
プログラミング学習をする目的を設定する

それでは何故、あなたはプログラミングを勉強しているのでしょうか?
一般的には、
・とにかく手に職がほしい
・フリーランスエンジニアになって独立したい
・プログラミングを使えるようになって何か作りたいものがある
などでしょうか。
僕は、プログラミングを勉強する前に、
ことをオススメします。
その内容は、「デキるプログラマーになって女の子にモテたい」などの、下衆なモチベーションであってもよいです。
それは、目的を設定する上で大事なのが、
だからです。
ちなみに僕の例
僕が大学時代に初心者からプログラミングを勉強したときは、

インタラクティブアートを作って、テレビに出たい!
そして周りの人に「スゴい」って言われたい!
というモチベーションでした。
その時はインタラクティブアートやメディアアートと呼ばれるアート作品が今よりは一般的で、
NHKのBS2で「デジタル・スタジアム」という公募型の番組をやっていました。
その他にも、東京で一般のアーティストを集めてデジタルアートの展示会などをも行われていました。
僕はとにかく、そういう場所に出たかったのです。
なので、
とか、
「世の中を変えるようなサービスを作りたい」
なんていう、崇高な目標はありませんでした。
でも、こんな目標であっても、本人が頑張ることができればよいのです。
僕はこのモチベーションだけを頼りに、ほぼ触ったことがないC言語やC++言語と半年くらい毎日6時間くらい格闘し、アート作品を作りました。
この(成功?)体験をベースに僕は新卒でエンジニアになったので、人間何があるか分からないものです。
プログラミングができる環境を整える

目標を具体的にしたら、次はプログラミングを作るためのPCを準備しましょう。
PCのスペックはプログラミング言語にもよります。
ただ、最初から複雑なシステムを作ることはないと思うので、まずはご自宅にあるPCを使う、でよいと思います。
もしこれからPCを買うのであれば、MacBook Proをオススメします。
理由は、以下の通りです。

・環境構築が簡単であること
・今後複雑なプログラミングをやっていくとするとProの方が良いため
(もしHTMLとCSSくらいしかやらないよ!ということであればMacBook Airでも十分かもしれません)
ただ、このあたりはあなたのお財布事情を考慮しつつ決めていただければと思います。
勉強するプログラミング言語を選ぶ
続いて実際に勉強するプログラミング言語を選びましょう。
プログラミング言語は目的によって使われるものの傾向が異なるので、あなたの目的に応じて選ぶ必要があります。

AI(機械学習)をやりたいならPython、など・・・。
ただ、初心者のときからいきなりAI(機械学習)など、複雑なことをやるのはオススメしません。
いきなり複雑なことをやっても挫折する可能性が高くなるので、まずはシンプルなものから初めてみましょう。
例えば
・メモ帳
といった、自分が普段使えるようなツールなどのプログラミングから始めるのがよいかと思います。
勉強するプログラミング言語の順番は、
・ある程度、インタラクティブな操作ができて
・プログラミングの基礎を勉強できるもの
ということで、
・ある程度慣れてきたらJavaScriptに移行する
ちなみに、HTML/CSSからJavaScriptに移行した直後は、いきなりプログラミングのハードルが上がったように感じると思います。
それが、マークアップ言語と呼ばれるHTML/CSSと、プログラミング言語であるJavaScriptの違いになります。
ここで注意していただきたいのが、
それぞれのプログラミング言語は非常に奥が深いので、表面だけを勉強していても、本当の力がつかないからです。
なので、特定の言語を勉強すると決めたら、しばらくはその言語を続けることをオススメします。

目安としては、HTML/CSSだと1〜2ヶ月、JavaScriptだと最低3ヶ月くらいはやった方がよいです。
それぞれこのくらい時間をかければ、初心者レベルを卒業した・・・というレベルには到達できるかと思います。
プログラミングの基礎を勉強する

さて、いよいよプログラミングの勉強を開始です。
初心者から挫折せずに学習を続けられる方法として、以下のやり方をオススメします。
・学習はドットインストールやProgateなどのオンラインサイトを周回する
・「完璧を目指さずに」「文法の雰囲気を理解することを目標に」勉強する
・目安としては、HTMLとCSSでそれぞれ半月から1ヶ月くらい勉強する
・その後、JavaScriptの勉強を開始する。教材はドットインストールやProgateを利用
(ここで、変数などのプログラミングとして必要な概念を学ぶ)
・JavaScriptを3ヶ月ほどやって、変数や関数、クラスの概念をつかむ
・その後、実際に自分の作りたいものを作る
詳細は以下の記事に書いているので、勉強方法が気になる方はこちらも見ていただければと思います。
(体験談) 僕が新しいプログラミング言語を覚えるときにやること
理論の話は何となく理解していただけたかと思います。
そこで、ここからは、僕が何か新しいプログラミング言語を覚えるときにどうやっているか?を、実例を交えながらお伝えしたいと思います。
僕が一番最後に覚えたプログラミング言語は、“Angular”という、TypeScriptベースの言語です。
Googleが開発している言語で、Single Page Applicationを作るのに向いている、かなりいろいろな機能が使えるフレームワークです。

Reactよりもいろいろなことが出来る反面、学習コストが高すぎる、とも言われています。
僕がこのプログラミング言語を覚えるときにやったのは、具体的には以下のステップです。
1: チュートリアルをやる
Angularのチュートリアルは、「ツアー・オブ・ヒーローズ」というアプリを作るもので、以下のリンクになります。
僕はまず、このチュートリアルを全部、ソースコードを見ながら自分の手元で書く、ということをします。
目標は
・細かい文法を覚えようとはしない
・まずは自分の手元で動かせるようになった、という実績を積む
としています。
一回目のチュートリアル完了後の理解度は50%もないくらいですし、何なら、途中で

あれ、動かない・・・
ってなってハマったり、

よくわからなくなったから最初からやるか・・・
ってなって最初からやり直したり、

もうよく分からないからとりあえずコピペして次の章に行くか・・・
このようになることも、結構あります。
僕は結構長い間プログラミングをやっていますが、それでもこんな感じです。
2: そのチュートリアルを周回する
一回目のチュートリアルが終わって、
「では、Angularを使ってアプリを作ってみましょう!」
って言われても、120%無理です。
ある程度経験した人間だとしてもプログラミングの勉強はこのくらいのレベルからスタートすると思えれば、多少分からないことがあったとしても楽になりませんか?
そして、場合によっては、チュートリアルの2週目を行うこともあります。
2回目になると、何となく分布の特性も理解し始めることができます。

ただ、あくまで「理解し始めることができる」というだけで、「完全に理解する」なんてことはできません。
まずは、その言語を使って一人でプログラミングを開始できるようになるレベルと思ってください。
大体チュートリアルを2週くらいすると、チュートリアルのどこに何が書かれているのかを理解できるようになってきます。

「どこに何が書かれているか?」を知っていれば、プログラミングを進めていく中で、あなたの辞書代わりに使うことができるので、非常にオススメです。
3: チュートリアルで書いたソースコード(プログラム)を書き換える形で、少しずつ作りたいものを作る

チュートリアルを2週くらい周った後、自分の作りたいものを少しずつ作っていくことになります。
ただ、そのときも、いきなりゼロベースでアプリを作ることはしません。
何故なら、アプリの作りはじめのところが一番難しく、挫折する可能性があるからです。
なので、その言語で最初に作るアプリは、チュートリアルで作ったソースコードを編集することが多いです。

もしチュートリアルがない言語があれば、ウェブ上にあるサンプルプログラムをコピーしてきて土台とするのがよいです。
まずは変数名などはチュートリアルで使われていたものでいいので、とにかく慣れることにフォーカスしましょう。
細かい変数名や書き方の話は、少しずつ慣れてきてからで十分です。

そうしないと、人間の集中力も限界があるので、一番本質の「そのプログラミング言語を理解する」というところが進まなくなってしまいます。
この3のステップにかける時間は非常に長く、どんなに短くとも3ヶ月、長いと半年〜1年くらいはかけたりします。
(仕事をしながら、家に返ってきて毎日1時間ずつくらいプログラムを書いている場合となります)
逆にいうと、このくらい時間をかければ、どのプログラミング言語であってもある程度自由に使いこなせるようになっているはずです。
4: ゼロベースで作りたいものを作る
そして、最後の段階として、ゼロベースであなたの好きなものを作ってみましょう。
ここまでステップの1から3までやってきたあなたであっても、このステップでは、ありとあらゆる壁にぶつかると思います。
でも、ここが頑張りどころです。
ここでぶつかった壁の全てが、今後プログラマーとして活動していく上で、足腰となるスキルになります。
なので、1つずつ、頑張って解決してください。
もし分からない!という場合は、この記事の下の方に書いてある「知っておくべきこと」のサービスで調べてみるのも手段の1つです。
その他、プログラミング学習をする上でやるべきではないことと、知っておくべきこと
最後に、プログラミングの勉強をする上で知っておくべきことなどをまとめたいと思います。
まずは、初心者の人がやりがちだけれども、やるべきではないことを3つ、説明します。
プログラミング学習をする上でやるべきではないこと
1: いつまでも教材を周回すること
オンラインのプログラミング教材はそれに従って手を動かせばプログラムが動くので、一番最初のとりかかりとしては非常によいかと思います。
ただ、それだと敷かれたレールの上を走ることになり、プログラミングの本当のスキルは身につきません。
プログラミングの本当の力は、自分で何かを作っているときにつきます。
ですので、覚えようと思っている言語の教材を1周〜2周したあとは、出来る限り早く、何かを作るフェーズに移行してください。
2: プログラミングの文法を丸暗記しようとする
プログラミングは、「必要なときに必要なものを調べながら書ければいい」です。
もちろんどんなものがあるかは何となく頭の中に入っているべきですが、一語一句、全てを丸暗記する必要はありません。
プログラミングは受験勉強と違ってカンニングが可能です。
なので、分からないことが出てきたらその都度調べればOKです。
僕も、慣れていない言語を書くときは、変数定義の方法という極めて基本的な部分であっても、

あれっ・・・
と思って調べることもあります。
何か分からないと思ったら、自身を持って調べるようにしてください。
3: ゴールのないプログラミングの学習をすること
プログラミングはそれぞれの言語が非常に奥が深いので、いくらでも勉強できてしまいます。
ですので、目的を持っていないといつまでも勉強を続けることができてしまいます。
もちろん勉強自体は悪いことはないのですが、こうなってしまうと、プログラミングの勉強自体が目的になってしまいます。
そうなると、なかなか次のステップに移れなくなるリスクがあります。
プログラミング学習をする上で知っておくべきこと

続いて、プログラミングの学習をする上で、困ったことがあったときに参考になりそうなサービスを紹介します。
ここでは、有名なサービスの2つを上げています。
1: Stack overflow (スタック・オーバーフロー)
こちらのサービスです。
プログラミングに関するQAをまとめたサイトです。
僕も過去、プログラミング中に分からないことがあった場合は、何度もこのサイトに助けられました。
プログラミングで分からないことがってググると、だいたいこのStack overflowが上の方に出てくるので、知らないうちに使っているかもしれません。
このサービスのいいところは、質問に対して、一番いい回答に対して投票数が見られるところです。
ですので、あなたが持っている不明点と同じ疑問を見つけることができたら、その不明点に対して一番よさそうなものを手軽に見つけることができます。
ちなみにこのStack overflowは元々は英語サイトであり、英語サイトの方が回答数は多いです。
なので、日本語版で見つからない場合は、英語版の方を見てみるとよいかもしれません。
2: Qiita
このページです。
プログラミングに関する情報を共有するサービスです。
このQiitaは、Stack overflowに比べて、より読み物色が強くなっています。
なので、読んで楽しんだり、何か特定のジャンルに対して知識を深堀りするのにはちょうどよいかと思います。
ちなみにこれらStack overflowもQiitaも、僕自身は、それぞれのサービスのトップから検索することはほぼしません。
主な使い方は、プログラミングで何か不明点が見つかったときにそれをググったら、結果的にそれがStack overflowだったりQiitaだったりすることが多いです。
まとめ
それではこの記事の内容をまとめたいと思います。

・プログラミングは「手段」であり、「目的」ではない。集中して頑張ることは大事だが、それが目的になってはならない。
・プログラミングを勉強するときは、あなたが「心からやりたい!なりたい!」と思うゴールや姿を想像する。
・プログラミングの勉強は、オンラインのプログラミングの学習サイトで勉強
・その後、(あれば)チュートリアルを1回〜2回周回
・最後に、そのチュートリアルで書いたプログラムをベースに自分の作りたいものに改変する
この記事は以上です。
ここに書いてある内容が、少しでもこれからプログラミングを勉強しようとしているあなたの助けになればと思います。
ここまで読んでくださり、ありがとうございました!
最後に
この記事ではプログラミング初心者が何から始めるべきか?をまとめました。
一方で、プログラミング初心者はこの他にも
・プログラミングスクールには通うべきか?
などを知っておく必要があります。
こういった内容は、以下の記事に網羅的にまとめましたので、気になる方はこちらもご確認ください。
コメント