見出し画像

初心者が独学でプログラミング学習を続けられる(かもしれない)12のヒント

この記事は FOLIO Advent Calendar 2020 14日目の記事です

この記事の想定読者

本記事は経験ゼロの状態から独学で1年間プログラミングを学習し続けている自分が、プログラミング学習を続けられるコツを、

・これからプログラミングを学ぼうかな!と思っている人
・プログラミングの学習始めたけど、続かなそう、挫折しそう、と思っている人

のような方々にお届けする記事です(私情と主観と勝手な思い込みが絶賛入り交じっているかもしれません。ごめんなさい)。

はじめに

私は2019年の秋から44歳でプログラミングを初めて、「ターミナルって何すか?これ触るとパソコン爆発しませんか?」という状態から、幾つかの言語など(Ruby, Rails, HTML, CSS, Javascript, SQL,Python,R)をざっと学習し、最近自分のやりたいことが見えてきて、Pythonでデータ分析や機械学習を学んでいます(ちょっとカッコつけて言ってみた)。

スクリーンショット 2020-12-08 8.51.01

(「ユーティリティ」フォルダに格納されてるのが、プログラミングをやらなきゃ死ぬまで使わないであろうターミナルというツール。これからこいつにお世話になりますよ)

そんな初心者の私が、これからプログラミングを始めようと考えている皆さんや、学習の途中で心折れそうな人に、学習を続けられる12のヒントをお伝えしたいと思います。(本当は100のヒントというタイトルでしたが、100個も無いことに書いている途中で気づいた。)

自分がまだ初心者ですから、初心者だから悩むポイントをまだ忘れずにいます。ですから私のような人間が、初心者目線のアドバイスを初心者のみなさんにするのは有益なのかと思い、筆をしたためている次第です。

1年学習してあらためて思ったのが、ある程度継続してやり続けないと習得できない知識や技術があることです。これはプログラミングに限らず、スポーツでも仕事でも勉強でも同じですね。
イチローが「小さなことを積み重ねることが、とんでもないところへ行くただ一つの道」と言っていましたが、本当にその通りで、日々コツコツ積み重ねることが、プログラミングの学習においても大切だなと痛感しています。

ただ、「日々コツコツやること」これがなかなか上手くいかないですよね。ですからこの記事では、コツコツが苦手なみなさんに、学習を続けられるヒントなどをお伝えしたいと思います。

画像2

その1)学校行くか!?

私の知る限り、プログラミング学習の手段は、大きく分けて3つの方法があります。

1)スクールに通う
2)WEB上のコンテンツ(動画)を見る
3)本を買って学ぶ

まず1の「スクールに通う」メリットは、分からない部分をすぐ講師が教えてくれる、そして、一度入学を決めてスタートしたらガチで学ぶ環境に身を置くことになるので、「モチベーションが…」「やる気が…」みたいな言い訳をしながら現実逃避する暇もなく追い込まれるのが利点です。

デメリットは、結構な授業料を払わないといけない点です。これは通う長さと内容によると思いますが、半年で30万〜70万ぐらいの授業料がかかります(ただし、厚生労働省の専門実践教育訓練給付金制度とい無駄に長い名前の制度がありまして、これに該当する講座は授業料が最大7割ぐらい戻ってくるので、これを活用するのはアリです)。

これは個人的な意見ですが、本当に知識ゼロの状態からスクールに通うことはあまりおすすめしません

理由として、ゼロの状態というのは、プログラミングを通して自分が何をやりたいか?が見えてないことがほとんどだからです。

機械学習で分析できるエキスパートを目指しているのに、学校入ってみたらずっとHTMLとCSSの授業ばかりで、「はいみなさん、猫ちゃんの画像にリンクを貼りましょうね〜」、みたいな授業に時間を割くのはちょっと歩む方向を間違えていると思うからです。(もちろんホームページ作りたい人にはその選択肢は間違ってないですが)

ですから、本やWEB動画などで、プログラミングの入り口を1ヶ月ほど学んで(どんな言語があって、どんなことができるのか?、具体的に何をすればいいのか?)から「スクールで学んだ方が効率がいいや」と判断するのであれば、それも一つの選択肢だと思います。

その2)動画で学ぼう!

つぎに2)の「WEB上のコンテンツ(動画)で学ぶ」です。今WEB上には、本当に上質な動画が沢山あり、プログラミングを学ぶ上でとても役に立ちます。無料と有料のものがありますが、問答無用で有料プランで学ぶことをおすすめします(見れる動画の量が違う)。個人的に役に立ったサイトは以下です。

ドットインストール
Paiza
Progate

どれも業界ではとても有名&本当によくできたコンテンツで、私はそれぞれ2ヶ月間有料会員になって使い倒しました。
WEB上のコンテンツでプログラムを学ぶメリットは、とにかく月1000円前後のサブスクで「プログラムを書きながら」そして「その書いたプログラムが合ってるか間違っているのか理解しながら」学べる点です。自分の書いたプログラムが間違っていれば「どこが間違っているのか」理解できるのがメリットです。

反対にデメリットは、細かい部分の疑問などは、どうしても拾えない点です。学習をしていく上で、文脈とはすこし逸れた点で気になること、分からないことが出てきます。そういう部分は受け身が基本の動画の学習では、なかなかフォローしきれず、そこがデメリットです(一部の動画サービスには有料会員だけ講師に質問できる機能もあります)。

あとWEB動画で学ぶ際に注意すべき点は、「コードが覚えられないから、細かい部分を理解できないから」という理由で、同じ動画を5回も10回も繰り返すのは絶対に時間の無駄です。

画像3

後述しますが、プログラミングは「何も見ないで0から書けるようになる」よりも「何が書かれているかを理解できる」「そのコードを自分がやりたいことに応用できる」方がめちゃめちゃ大切だからです(個人の意見です)。

同じ動画を繰り返し見るのは、どんなに多くても3回にとどめておくべきです。内容知っている動画を何回も見る癖がつくと、それが「現実逃避」に繋がり、本来知るべきことにたどり着くのが遅くなる原因になります。

その3)本を使い倒せ!

最後に3)本を買って学ぶ です。
プログラミングを学習しない限り、この業界の本に触れることはないですよね。たまにプログラミングの本でベストセラーが出るとランキングに入ってくることもありますが(「独学プログラマー」みたいに)、基本は本屋さんの奥にヒッソリと置かれていることが多い専門書の類がプログラミングの関連書です。

でもたとえば東京・新宿の紀伊国屋書店や神保町の三省堂書店のような大型店舗に行くとわかるのですが、プログラミングの関連書は英語教材と同じぐらい充実していて、これは学習する上で最強の武器になります。

特に大学受験で参考書を使い倒して勉強した人は、プログラミングも本を通して学ぶのはとても良い学習法だと思います。メリットとして感じる点は、分からない部分を繰り返し学習する際に、本だと手軽に繰り返しリピートで読めることですね。あとは直接メモを書き込めたり、気になる点に付箋を貼っておけるのがメリットです。
デメリットとしては、「どの本が自分に向いているのかわからない」点です。これに関しては後で触れます。

結論として、これからプログラミングを始めようとする方におすすめなのは「動画サイトの有料プランで学習しながら、『これなら理解できそうだ』という本を見つけて一冊まず読破してみる」という学習法です。スクールを検討するのは、上記をこなしてからでもいいと思います。

画像4

その4)モチベーションをどう保つか

プログラミングを学ぶことは、少なくとも私にとって決して簡単なことでありませんでした。難しすぎるのと、知らないことばかりなので、挫折しかけた時期がありましたが、学ぶ上で幾つかの工夫を施したら、モチベーションが復活しました。

モチベーションを保つには、やっぱり「プログラミングを学ぶこと=面白い」という状態にならないとダメですよね。人それぞれだと思いますが、自分は学習にエンタメ要素を取り入れて、プログラミングを学ぶことを極力楽しいものにする工夫をしました。

毎朝5時6時に起きて、本業の仕事前に2〜3時間の独習を継続できているのも、この工夫が一因だと思います。

その5)モチベーションを維持する具体的方法1

エンタメ感を入れろと言われても、なんのことやらよくわからないですよね。具体的にそのあたりをご紹介します。

まあ、冷静に見ると些細な話で申し訳ないのですが(笑)、本で学習する際に是非活用して頂きたい方法です。

大抵の本の場合、コードの入力説明の時に、

・こんにちは
・Hello, World
・foo, bar, hoge

みたいな言葉を入力→プログラミングを書く→出力される。みたいなパターンでコードを解説することが多いんですね。

例えばpythonの場合だったら

print("hello, world")

というプログラムを入力すると

hello, world

という文字列が出力されます。(学習前だと、何言ってるか意味不明かもしれませんが、「print("hello, world")っていう文字列を入力すれば、hello, worldという文字が出力されるんだ、へーーあっそう」程度の理解で全然いいです)

この「Hello, World」「foo」「bar」「hogehoge」というのが、初学者にとってはとにかく退屈なんですよ(ちなみにこのfooとかbarとかhogehogeは特に意味がない単語で、文字列のサンプルみたいなイメージです。役所で紙に記入する例に書かれている山田太郎、東京花子みたいなもんだと思ってください)。

例えば、

greeting = ("hello, world")
print(greeting)

と入力するとgreetingという文字(厳密には変数)にhello worldという文字が格納されて、print(greeting)というコードを叩くと

hello, world

という言葉が出力されます。また

words = ['foo', 'bar', 'baz','qux']
print(words)

wordsという文字(変数)に'foo', 'bar', 'baz','qux'という文字列が格納されて、print(words)というコードを叩くと、

['foo', 'bar', 'baz', 'qux']

という言葉(厳密には配列)が出力されます。本での学習初期段階では、多くの場合このような感じでプログラミングにおいて必要不可欠な基礎知識が解説されているのですが、この写経的行為を繰り返していると、ふとこう思う時期がまもなく到来します。

だから、何なんだ?

と。

画像5

最初の3日ぐらいは、自分が書いたプログラムにコンピュータが反応してくれるような感覚が嬉しいのですが、6時間ぐらい学習してくると、ハローワールドとかfoo, bar, bazとかone, two three,hogehogeと出力されても、「もしかして、すごく非生産的なことをやっているのかもしれない」という気分になります。

HTMLとかCSSを学習する場合は、画像を貼ったりリンクを更新したり、文字のサイズや色を変えたりと、「見た目が変わって楽しいウフフ」という部分が多いので学習のモチベーションが下がりにくいのですが、PythonやRubyなどの入門時期は、「自分は3日もhogeとかfooとかbarとかhello, worldばっかり入力して、いったい何をやってるんだろう……」という「何の料理に使うか分からないのに、ずっとネギのみじん切りをしてる」気分になり、これが結構デモチの原因になります。
意味がよくわからない般若心経をノートに1000回書かされる気持ちに近いです。

これを回避するためには、コードを学習する時、入力する値は極力自分の好きなものに置き換えることです。

たったそれだけかよ!と思う人もいるかもしれませんが、これを心がけるだけで学ぶモチベーションが爆上がりします(多分)。

例えばある教科書に、「カフェのメニューを作るために、drinksという配列を作り出力させましょう」とあって、以下のようなコードを書かせる指示があったとしましょうか。

drinks = ['カフェラテ', 'シナモンラテ', 'アップルティ', 'ロイヤルミルクティー']
print(drinks)

しか〜し! 45歳のオッサン街道爆進している自分は、日常ロイヤルミルクティーとかアップルティーには残念ながら縁がないので、こういう指示があったら、

drinks = ['生ビール', 'レモンサワー', 'ホッピー', 'ハイボール']
print(drinks)

みたいに、自分の好きなお酒に置き換えて、心の中は赤提灯な気分で学習していました。

たったこれだけですか?とバカにしてはいけません。
これだけを心がけるだけで、モチベーションが違います。嵐が好きならletters = ['foo', 'bar', 'baz']みたいな退屈な言葉で配列覚えるよりも、

arashi = ['桜井', '大野', '相葉', '二宮', '松本']
print(arashi)

みたいに、入力する文字を書き換えて学習したほうがデモチを避けることができると勝手に思っています。鬼滅の刃が好きなら「'炭治郎', '禰豆子’...」とかでもいいです。とにかく、自分が書いているコードにエンタメ感を盛ることです。

意味のない文字列や、興味のない単語を入力して、特に大きな目的の無いコードを書いているほど退屈なことはありません。でも最初の頃に出てくる「変数」とか「関数」とか「配列」とか「条件分岐」「繰り返し」などのプログラミングを学ぶ上で避けられない超必須項目は、これで退屈さを少しは回避できるのではないでしょうか。

その6)モチベーションを維持する具体的方法2

モチベーションを保つには「エンタメ感」ともう一つ、目標が見えることが大切です。

目標が見えないと、「そもそも、自分は何のために学んでいんだろう」という禅問答のサイクルに入り、気づけば学習から遠ざかってしまいます。

画像6

目標を捉えながら学習するという観点で言うと、さっき紹介したPaizaとか
Progateなどの動画サイトは、「簡単なRBGゲームのプログラムを書きましょう」とか「カフェのメニューを作って自動注文できるプログラミングを書きましょう」のように、「プログラミング学習を通しての目標成果物」が見えているので、自分が今何のために学んでいるかが見える化されてて、モチベーション維持の一助になります。

本で学ぶのもこれと同じで、初心者向けの本を買う時に一冊を通して最終的に「○○を作りましょう」「○○が出来るようになりましょう」という本だとモチベーションに維持になり、一冊読破のハードルが下がります。

Rubyを学ぶのであれば「ゼロから学ぶRuby超入門」、Pythonなら「Python一年生」みたいな具体例が書かれた本を2週間〜1ヶ月ぐらかけて読破してみましょう。本一冊を通じて、具体的になにか成果物が出来る。これが初心者向けの本選びのポイントです。

蛇足ですが、プログラミング初心者が手を出さない方がいいのが、オライリーという会社が出してるプログラミングの本です。

誤解をしないで頂きたいのは、この会社はメチャメチャ良質な本を多数輩出しているスゴい出版社なんですが、とにかく初心者にはハードルが高い内容ばかりです。基本的にどの本も「キミあれだよね、プログラミングの基礎はわかってるよね」という斜め上からのスタンスで、初心者には痒い所に手が届かない内容のものが多いです(初学者にはわからない超大前提などが端折られて書かれている)。ただ、ある程度プログラミングが理解できるようになると、オライリー本の面白さに気づきます(私は9ヶ月ぐらいかかりました)。

その7)モチベーションを維持する具体的方法3

学習していくと、どんどん難易度が上がり、ある時「壁」にぶち当たります。

自分の場合、初学の頃には壁が3回あり「引数と戻り値(ひきすうともどりち)」の話、「initialize(イニシャライズ)」の話、そして「getterとsetterとattr_accessor」の話が難所でした(今でも完璧に理解してない)。

画像7

こういう「壁」にぶち当たった時、悩んでもがいてググってまた悩んでを数日繰り返すことになるのですが、大切なのは、ある程度悩んでわからなかったら、とりあえず放置して先に進む!プログラミングの学習初期は、これがとても大切です!

というのも、大抵のことは学習を進めていくと後から理解できることが多いからです。あと難しそうな言葉使っているけど、よく読んだら概念は簡単やんけ!というパターンも多いです。ですから、

「悩む」→「ググる」→「また悩む」を1時間ぐらい繰り返しても分からないことは、スルーして先に進みましょう。

その8)モチベーションを維持する具体的方法4

これも本を通しての学習で大切なポイントなのですが、プログラミングの本は読むだけでは絶対ダメだと思います。

大切なのは「手を動かして、自分が何をやっているのか?」を考えながら学習することです。初学者が本を使って学習する際には、読んだだけで理解した気にならずに、必ずプログラムをキーボードを使い自分で入力しながら学習したほうがいいです。

さらに最初の段階では、たとえその本にダウンロードできるサンプルコードがあったとしても、基本は全部自分で入力して学習したほうがいいです(長い名前とか数字などはコピペしてもいいです)。

なぜかというと、最初は手入力するとめちゃめちゃ間違えます。エラー表示がでます。エラーには、「お前のコードはここがダメだから出力されないんだよ」というアドバイスが書かれています。これを読み解いて、自分のコードは何が悪いのかを理解する能力を身につけると、コードを書く&理解するスピードがだんだん速くなります。

プログラミングは、例えば「.(ピリオド)」や「'(クオーテーション)」が一個でも無いと全く動かないこと日常茶飯事の超わがまま娘です。そういう部分を理解する上でも、最初は手をひたすら動かして、コードを書く感覚というのをなんとなく身につけてみてください。
「書くと身につく」→「身につくと使う」といういいローテーションが生まれてきます。

その9)覚えることに必死にならない

これは、自分が学習をはじめて3ヶ月位経ってから気づいたことで、みなさんに声を大にして拡声器でお伝えしたいコツです。

プログラミングを勉強し始めると、概略はなんとなくつかめても、細かい部分まで覚えられなかったり、昨日必死に覚えたコードを翌日忘れて、次の日復讐の鬼と化してしまう状態になることがあります。

これは極論になるかもしれませんが、プログラミングの学習においては「覚えること」にあまりウェイトを置いてはいけないと思います。

もちろん必要最低限のことは覚える必要はありますが、手を動かして学習すれば、自然と必要最低限のことは身につきます。だから無理して、

「この10行のコード、明日までに一文字も間違えずに覚えてやるぜ」
とか
「この本のコードを全部覚えてやるぜ」
と意気込む必要は全くありません。これは自分が独学で気づいた大きなことの一つでした。

日本式の大学受験を通ってきたからかもしれませんが、どうしても「勉強する=覚える」みたいなイメージを抱いてしまい、すごい無駄な学習をしていた時期が自分にはあったのですが、皆さんには覚えることに必死になるな!とお伝えしたいです。

その10)覚えるより大切なこと

プログラミングを学ぶ上で、覚えるよりも大切なことがあります。それは目の前のコードは、どんな意味があって、そのコードが実行されると、どんなことが起きるのか、ざっくり分かるようになることです。

0から自力でプログラムを書けるようになってやるぜ! 初学のころはそう意気込んでしまうことがあります(自分は120%そうでした)。ただこれは誤った考えです。なぜなら、別にプログラムを書くことは受験ではないからです。

そう、わからなければググればいいし、本を見ればいい。詳しいエキスパートに聞けばいい。カンニング大歓迎!の世界なんです!だから、細かいことを最初の頃に必死で覚えるために学ぶ必要は全くありません。

画像8

それよりも、どういうコードを書くと、どんな出力が得られるのか?どんなコードを書くとエラーになるのか?そのエラーの原因は何なのか?そこを意識しながら学習を続けた方がいいと思います。

多分初期段階では、「あーーここで使うカッコの種類は()じゃなくて[]だった、もう自分全然覚えられないな……」みたいな細かい部分が気になり、細かいことが積もり積もって「全然覚えられない自分はプログラムなんて向いてないんいゃないか…」という精神状態になることもあるでしょう。

そういう時は「プログラミングは覚えなくていいんだ。わからなかったらググろう」という言葉を思い出して下さい。

その11)エラーのコピペを習慣づけよう

コードを勉強していると、書いたコードがうまく動かず、コンピューターから「それはエラーですよ何言ってるかわかりません」と厳しい回答をいただくことがしょっちゅうでてきます。
初学の頃は、「エラー=ダメな烙印を押されてる」という気分になり凹むんです。でも学んでいくうちに「エラーって学ぶことがたくさんあるな!」というフェーズに移ります。

エラーが出でもいちいち凹まずに、そのエラーをよく読み、なんで間違っているのか?を解読する習慣をつけてみてください。最初の頃は、英語だしよくわからない言葉が並んでるし、何言ってんだコイツみたいな気持ちになるかもしれません。

でも、似たようなミスを犯すと似たようなエラーが出てくるので、それを繰り返し積み重ねていくと、何が書いてあるかだんだんわかるようになります。
そして、何言ってるかわからないエラーが出てきたら、「何も考えないでコピペしてググる」これを習慣づけることがとても大切だと思います。

これは自分の経験ですが、学びはじめて1年で、ググって解決できなかった問題は全体の1%ぐらいで、残りの99%のエラーはググれば解決できました(残りの1%は職場の詳しい人に教えてもらいました)。

初学の段階のエラーは、ググるとだいたい答えがインターネット上に転がっています。そして分からない→ググるという行為を続けていくと、「どう検索すれば解決につながる記事にたどり着けるか?」というスキルも上がっていきます。

画像9

その12)具体的に何かを作ってみる

上記のことを継続していると、いい感じで学ぶ習慣ができて、プログラミングに触れる日々が当たり前になる世界がやってくると思います。そして、本や動画を一周したら、実際に何か作ってみることをおすすめします。

学習を続けていると、教科書に書かれていることが上手にできて満足したり、動画サイトのプログラムを踏破したりすることで、なんか満足しちゃう気分に陥ることがあります。

それはそれで素晴らしいことなのですが、教科書や動画で得た知識を使って、自分で実際に何か作ってみることが大切です。もちろん最初の頃は知識も技術も拙いものですから、たいしたものは作れないです。でも別に人に見せる必要もないですし自分だけで満足するものでもいいと思います(私の場合は一番最初にホームページとtwitterの簡単なやつをHTMLとCSSとRuby on Railsを使って、初心者でも簡単に登録できるherokuというサーバーにアップしたりしてました。もうクローズしてしまいましたが)。

でも人によっては「作りたいものがない」「何を作ったらいいかわからない」という方もいらっしゃるでしょう。そういう方は、Quiita(キータ)というエンジニアのみなさんがいろいろな記事を投稿されてるサイトで「自分の学んでいる言語名+作ってみた」と検索すると、いろいろな記事が出てくるのでそれを参考にするのもありです。

以上12のポイントが、初心者の私から初心者のみなさんのお伝えしたいプログラミング独習を続けられる12のヒントでした!

最後まで読んで頂きありがとうございましたーー!

画像10

明日の15日目は、msawadyさんのエンジニアの採用に関する記事です。


東京都八王子市高尾山の麓出身。東京在住の編集者&ライター。ホッピー/ホルモン/マティーニ/アナログレコード/読書/DJ