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

「プログラミングの習得には、どのくらい学習時間が必要なんだろう?」
「プログラミング学習の時間を短縮する方法はあるんだろうか?」
と思っているのではないでしょうか?
プログラミングは正直、習得が非常に難しいスキルです。
ほんの数日で習得できるようなものではありません。
そのため、
・もし非常に長い時間がかかる場合、それを短縮する方法があるのかを知りたい
このように思うのではないでしょうか?
そこで、この記事では僕自身のエンジニアとしての経験を踏まえ、以下の内容を説明します。

・(前提)プログラミングスキルの習得にかかる勉強時間
・その勉強時間を短くするためにすべきこと、すべきではないこと
特に僕自身が過去、独学でプログラミングを勉強していたことがあり、そのときに「無駄に学習時間をかけてしまった・・・」という反省点も踏まえています。
ですので、もしあなたがこれからプログラミングの学習を始める場合、「真似してはいけない」具体例として、非常に参考になるのではないかと思います。
この記事を最後まで読んでいただくことで、プログラミング学習にかかる時間や、その学習時間を短縮するための方法を理解することができます。
最後までしっかり読んで、プログラミングの学習を効率よく進められるようになってくださいね。
- [結論]プログラミングの学習にかかる時間と、それを短縮するための3ステップ
- [この記事の信頼性]僕がエンジニアになる前にやっていた勉強
- [前提]プログラミングを習得するのにかかる勉強時間はどのくらいか?
- 僕自身のプログラミング学習で良かった、3つのポイント
- 僕自身のプログラミング学習で改善すべきだった、3つのポイント
- 効率よくプログラミングを勉強するためのステップ
- [重要]エンジニアに求められるスキル = プログラミング x その他雑多なスキル
[結論]プログラミングの学習にかかる時間と、それを短縮するための3ステップ
![[結論]プログラミングの学習にかかる時間と、それを短縮するための3ステップ](https://www.mame-blog.site/wp-content/uploads/2022/01/study-hours-of-programming02-1024x768.jpg)
それではまず、この記事の結論からお伝えしたいと思います。
プログラミングの学習には1000時間という、非常に長い勉強時間がかかります。
その1000時間の勉強時間を短縮するためには、
・2: そのときのあなたのスキルレベルに合わせて、挑戦する内容を分解する
・3: 他の人に共有できる場や仕組みを持つ
この3つのやり方をすることで、挫折することなく勉強する時間を短縮することができます。

気になる場合は、この記事の後半も読んでみてくださいね。
目標を持ちまっすぐ進む
これからプログラミングを勉強しようとしているあなたは、おそらくエンジニア (or プログラマー)になるのを目指しているのではないでしょうか?
「エンジニア」と一言で言っても、いろいろな種類のエンジニアがあります。

このそれぞれごとに、非常に深いレベルのスキルと経験が要求されます。
そこで、まず最初のキーポイントは、
です。
いろいろなプログラミング言語やスキルをつまみ食いしていては、広く浅い知識になってしまいます。
結果として、いつまで経っても、エンジニアの現場で使えるレベルのスキルを身につけることができません。
もしあなたが最短距離でエンジニアになりたいのであれば、そのゴールに向かって一直線で進みましょう。
そのときのあなたのスキルレベルに合わせて、挑戦する内容を分解する
独学において、あなたのスキルレベルは3つの段階に分かれます。
・ある程度勉強して基本的な文法は大まかに理解した
・ToDoアプリなど、簡単なものであれば作れる
この3つのそれぞれにおいて、取り組むべき勉強は異なります。
文法も理解していないのにいきなり難しいWebサービスを作ろうとしてもエラーなどにハマり、時間ばかりがかかってしまいます。
他の人に共有できる場や仕組みを持つ
プログラミングの学習は覚えることが多く、意味不明なエラーが発生したりしてハマることが多いです。
そこで、途中で挫折しないための対策として、他の人にやったことや達成したことを共有できる場を持つことをオススメします。
具体的には、Twitterで今日勉強したことを報告したり、誰か友達と一緒に勉強したり、プログラミングスクールで他の人と勉強するなどです。
この章に書いている内容は、この記事の一番最後の章で、
・今日やったことを共有するときはどのような点に気をつけたらいいのか?
を説明しています。
[この記事の信頼性]僕がエンジニアになる前にやっていた勉強
![[この記事の信頼性]僕がエンジニアになる前にやっていた勉強](https://www.mame-blog.site/wp-content/uploads/2022/01/study-hours-of-programming03-1024x682.jpg)
僕は大学時代、2年間程度、独学でプログラミングを勉強していました。
結果、2,000〜3,000行程度のプログラムであれば、自分で書けるようになりました。
大学を卒業後、メーカーにソフトウェアエンジニアとして就職することができました。
ですので、新卒で入った当初は(正直スキルは不十分だったかもしれませんが)、「大学のときに独学でプログラミングを勉強した」という実績はあります。
この記事は、そんな僕の経験を元に書いています。
僕のプログラミングとの出会い
僕が初めてプログラミングに触れたのは、大学1年生のプログラミングの学習でした。
教養課程の講義の1つに、C言語を使ったプログラミングの授業があったからです。
そのときは、「プログラミングって、全然楽しくないな・・・」と思った記憶があります。
サンプルプログラムを修正するだけの授業だったのもあり、プログラミングに全く興味を持てませんでした。
一方、大学3年生のときに、同じ大学の先輩がプログラミングを使ったアート作品を作り、テレビに出演したという噂を聞きました。
当時は、NHKのBS2で夜中にデジタルアートの公募形式の番組をやっており、それに出演したというのです。
それを聞いた僕は、

「プログラミングって、何て楽しい世界なんだろう・・・!」
と思いました。
それまで僕にとってプログラミングは、「サンプルプログラムを修正するだけ」のものであり、
授業で習った内容によると、「不具合を出すと修正作業が大変で周りの人から責められることもある」ということでした。
ただ、この先輩の住んでいる世界は、僕にとってキラキラ輝いて見えました。
僕のやったプログラミングの学習
それからというもの、僕はプログラミングの学習に熱中するようになりました。
目標は、「プログラミングを使ったアート作品を作り、テレビに出演すること」です。
それからというもの、授業やバイトの空き時間があればずっとプログラミングをやり続けました。
そのときやっていたのは、
・動けばOK、という考え方
・プログラムの読みやすさやメンテナンス性は二の次
このようなプログラミングでした。
とにかく早く作品を完成させて、テレビ番組に出演したかったのです。
そのため、プログラミングの基礎となる勉強もロクにせず、エンジニアとして必要なスキルを身につける努力もしていませんでした。
正直、スキル的には全然ダメだったので、プログラミングのスピードはかなり遅かったと思います。
何をするにしても、すぐに分からないことが出てきて、その調査に時間がかかる・・・という状態でした。
プログラミングの学習を頑張って目標を達成できたのは、周りの人に共有・相談できる環境があったから
そんなスキル的にイマイチな状態だったので、とにかく苦労しました。
特にそのとき苦労したのが、
・Windows上で動く、独特な文法を持ったプログラム (Windowsプログラミングと呼ばれるそうです)
・C言語のポインタやアドレス
こういったものです。
これらのどれもが、大変だった記憶があります。
そんな中、僕が頑張れたのは、周りの人に支えられたからでした。
・本当にどうしようもないときは先輩にプログラミングを質問することができた
・辛い時も研究室の先輩に愚痴を聞いてもらった
彼らの支えがなかったら、僕はここまでプログラミングを頑張ることはできなかったでしょう。
結果として、亀の歩み程度のスピードでも、時間を積み重ねることで無事に作品は完成し、テレビに出演することができました。
その時の嬉しさは今でも覚えています。
僕自身の目標は達成したけど、エンジニアとしてのスキルが不足していることに気づいた
すでに説明した通り、大学を卒業した後は新卒でエンジニアになることができました。
その時の僕は「テレビに出演した」という成功体験があったので、「自分のスキルでも十分通用するだろう」と思っていました。
ところが・・・です。
実際、現場で働いているエンジニアは僕とは全く違うレベルにいました。
そのときになって初めて、僕はプログラミングの奥深さや難しさに気づいたのです。
それと同時に、これまで、あまりに「アート作品を作りテレビに出演する」ことに集中しすぎていた、ということも気づきました。
エンジニアになるのであれば、以下のようなプログラミングができる必要がありました。
・その後の仕様変更の可能性も踏まえた上で、柔軟性の高いプログラムを書ける
大学のときにこういったスキルまで身につけられていれば、僕はエンジニアで働き始めた後、そこまで苦労することはなかったでしょう。
この記事は、そんな僕の経験や苦労を踏まえて、「あなたがプログラミングを学習するための勉強時間を短縮するための方法」をまとめています。
読んでくださっているあなたが、僕と同じような苦労をしないことを願いつつ・・・。
[前提]プログラミングを習得するのにかかる勉強時間はどのくらいか?
![[前提]プログラミングを習得するのにかかる勉強時間はどのくらいか?](https://www.mame-blog.site/wp-content/uploads/2022/01/study-hours-of-programming04-1024x682.jpg)
そもそも・・・ですが、プログラミング学習にかかる勉強時間は1000時間かかると言われています。
1000時間勉強したら、現場で働けるレベルのスキルになる、ということです。
1000時間は、1年間、1日平均3時間弱、勉強することになります。

僕の場合、大学3年〜4年の2年間、平均して毎日1時間ちょっと、プログラミングをやっていました。
計算すると、
となります。

「1000時間に到達してないじゃないか!」
と思われそうですが、そのとおりです。
僕の場合、
・そもそも何を勉強したらいいか分からず、回り道をしてしまった
こういった理由により、エンジニアになった後に大変な思いをしました(笑)
仕事や家事などをやっている中、平日も祝日も全て3時間弱の勉強が必要になるので、かなりハードルは高いですよね。
特に平日は、早起きしたり、仕事が終わった後に3時間を確保するのは大変です。
しかも、1000時間の勉強時間は、効率よく進めないと、その時間が1200時間にも1500時間にもなってしまいます。
ただでさえ1000時間という時間が長いのに、それがさらに長くなるのは避けたいですよね。
そこで、ここから先は、この記事を読んでくださっているあなた限定で、
・効率よくプログラミングを勉強するためのステップ
これらを説明します。
僕のプログラミング学習で良かったポイント、改善すべきだったポイントは、あなたがプログラミングの学習をする上で参考にできるかと思います。
特に僕の「改善すべきだったポイント」は、反面教師の実例として参考になると思うので、あなたの時間を無駄にしないためにも絶対に読んでくださいね。
この記事の最後では、僕の体験も踏まえた上で、効率よくプログラミングを学習するためのステップを紹介します。
僕自身のプログラミング学習で良かった、3つのポイント

この章では、僕がプログラミングの学習をする上で良かったポイントを3つ、お伝えします。
あなたがプログラミングの学習を進める上で参考にできるポイントがあれば、是非取り入れてみてください。
明確な目標を持っていたので、挫折することがなかった
「この記事の信頼性」のところでもすでに書きましたが、僕は「プログラミングを使ったアート作品を作り、テレビ番組に出演したい」という明確な目標を持っていました。
謎のエラーが発生したときに何とか耐えることができたのは、明確な目標があったからです。
もし「何となくプログラミングを勉強しようかな」というレベルだったら、この目標は達成できていなかったでしょう。
また、目標が明確であったために、寄り道をせずにまっすぐに進むことができたと思います。
「テレビ番組出演に必要なプログラミングの要素」や、「やりたい表現」から逆算して勉強することができました。
その結果、勉強する範囲を広げすぎることなく、特定の領域に集中して勉強することができました。

プログラミングに関して相談できる先輩がいた
僕の大学の研究室には、プログラミングが得意な先輩がいました。
本当に解決ができないポイントは、その先輩に相談することができました。
プログラミングの学習をしていると、一人だとどうしても解決できない壁が生まれたりします。
その壁を乗り越えるために一番有効なのが、プログラミングの経験者に質問をすることです。
1000時間以内に効率よくプログラミングのスキルを向上するためには、
・例えば1日悩んでみて、無理そうであれば誰かに聞く
こういうやり方をオススメします。
何故なら、
・効率よくプログラミングスキルを身につけることができる
このように、プログラミングに必要な調べる力を身につけつつ、効率よく学習を進められるからです。
周りの人に達成した内容を共有できる環境にあった / やらざるを得ない環境に身を置くことができた。
僕は、大学の研究としてプログラミングを行っていました。
所属していた研究室はほとんど縛りがなく、非常に緩かったので、教授から何か言われることもなく、自由に進めることができました。
「やらされ」感はなく、「自分で作ったものを教授やゼミで共有する」という感じでした。
ゼミでの発表では、現在の進捗などを他のメンバーや友達に共有するようにしていました。
毎週ゼミで進捗を説明するのは、いい意味での緊張感があります。
特に何も言われることはないとはいえ、「1週間何も進捗がありません」とは説明したくないのが心情です。
そのため、何とか進捗を出すために頑張ることができました。
僕自身のプログラミング学習で改善すべきだった、3つのポイント

続いて、僕のプログラミング学習で改善すべきだったポイントを紹介します。
これらのポイントは、以下のように「実際に独学で1000時間近く勉強をし、エンジニアとして働いたからこそわかる」ものばかりです。
・実際にエンジニアとして働いてみて、「こうすべきだった」という点
ですので、あなたがプログラミングを独学で勉強する上でも、参考になるかと思います。
いきなり大きいものを作ろうとしすぎない
僕には強烈に作りたいものやプログラミングを通じて実現したい目標があったため、
・Windows上の開発環境の知識
・OpenGLなどコンピュータグラフィックスの知識
・Windosプログラミングの知識
・C++言語の知識も
これらの知識を一度に習得しようとしすぎました。
その結果、エラーが起きたときも何が原因でエラーになっているのか切り分けに時間がかかってしまいました。
1つのエラーを解決するのに1週間くらいかかってしまったこともあります。
新しい知識を習得するのは重要なことではありますが、分割して新しいことにチャレンジしていった方が、結果的に効率がよいです。
他の人に見せられるプログラムを書くようにする
僕がプログラミングを独学で勉強していた頃は、書いたプログラムが見やすいか?という、エンジニアとして重要な要素が完全に抜け落ちていました。

ぶっちゃけ、プログラミングを独学で勉強しているときは、変数やクラスの名前やソースコードの可読性などに気をつけなくても何とかなります。
ただ、エンジニアとして働くことを考えると、このやり方ではダメでした。
エンジニアとして働くためには、他の人からも見やすいプログラムを書くスキルは非常に重要でした。
僕が独学をしていた時は、この観点が完全に欠如していました。
「作りたいものを完成させる」ことを目的にしすぎず、俯瞰的な視点を持つ
このときの僕は、目的が「プログラミングでアート作品を作ること」になっていました。
もちろん、目標は明確に持っておいた方が途中で挫折する可能性を減らせるのでオススメです。
ただ、そればかりが目標になりすぎるのも問題だなぁ、と感じます。
作りたいものを作った結果、その次にどうなりたいのか?どうしたいのか?というところまで考えておくべきでした。
大学生の頃の僕がもう少し頭がよくて、将来のことまで考えることができていれば、
・プログラミングを独学で勉強している人はどのような勉強をしているのか?
・今自分に足りていないスキルは何か?
などを俯瞰的に見られたのでは?結果、より優秀なエンジニアになれたのでは?と思います。
もしあなたがエンジニアになりたい場合、「作りたいものを完成させること」に集中しすぎず、俯瞰的な視点を持つこともオススメします。
効率よくプログラミングを勉強するためのステップ

最後に、ここまでの内容も踏まえて、あなたがプログラミングを学習する上で効率のよいステップを紹介します。
それぞれのステップに必要な勉強時間の目安も書いているので、参考にしてみてくださいね。
文法をある程度理解する (学習時間: 0時間〜100時間)
まずは全ての基本となる、プログラミングの文法を学習しましょう。
選ぶ言語は、何でも構いません。

表記方法はプログラミング言語によって違いますが、変数や関数、クラスなどの概念はどの言語でもほぼ同じだからです。
ただし、HTMLとCSSは厳密にはプログラミング言語ではなく、マークアップ言語なので、プログラミングの基礎を学びたい場合は、HTML/CSS以外の言語を選ぶとよいでしょう。

「プログラミングは完全に初めてだよ!」ということでしたら、まずはHTMLやCSSを簡単にやってみるのがよいでしょう。
その後、何かしらのプログラミング言語に挑戦するのがよいでしょう。
完全に初めての場合、そもそもパソコンの操作なども不慣れである可能性があるため、パソコンの操作に慣れる意味もあります。
イメージとしては、Progateやドットインストールなどのオンラインでできるチュートリアルを使って、以下のような内容を理解することです。
・どのような文法があるのか?
を理解することです。
目的に応じたプログラミング言語やフレームワークを選び、基礎を勉強する (学習時間:100時間〜200時間)
この記事を読んでいるあなたは、おそらく「プログラミングを勉強してエンジニアになりたい!」と思っていることでしょう。
その目的を達成するためには、できる限りあなたの目標に一直線に進む必要があります。
例えばフロントエンドエンジニアになりたいのであれば、フロントエンド向けのプログラミング言語を選ぶべきです。
間違ってもバックエンド向けのプログラミング言語やフレームワークを勉強してはいけません。
できる限り最短距離でエンジニアになるためには、
・そのエンジニアで必要とされるプログラミング言語やフレームワークは何なのか?
を明確にし、そこに一点集中で勉強しましょう。
ちなみに、一般的なエンジニアの種類に関しては、以下の記事にまとめています。
もし、「エンジニアって言ってもどんな種類があるんだろう?」と気になる場合は、こちらの記事を読んでみてください。
ある程度勉強したら最初はToDoリストなど、ある程度作りたい作りたいものを作り始める(学習時間: 200時間〜400時間)

プログラミングのスキルは、サンプルプログラムばかり書いていても身につきません。
あなたの作りたいものを作ることで、より実践的なスキルが身につくようになります。
そこで、200時間くらい勉強した後は、簡単なWebサービスやアプリを作り始めましょう。
最初は、いきなり大きいWebサービスやアプリではなく、簡単なToDoアプリなどにしておくのがオススメです。
僕の事例でも説明したとおり、いきなり複雑なことをやろうとすると、問題が起きたときにその原因を分析しづらくなるためです。
ですので、最初は簡単なものから始めることをオススメします。
プログラミングの成果を見せる場を持つ工夫をする
また、プログラミングで挫折する1つ目の壁がこのあたりの時間で来ます。
写経をやっている段階であれば、起こるエラーも想定の範囲内のものばかりだったと思います。
ただ、このタイミングからは予想もしなかったようなエラーが起きるようになります。
そんな大変な時期を乗り越えるために、あなたがやっていることや作ったものを他の人に見せる場を作っておきましょう。
もしあなたの周りに今日やったことを報告する家族や友達がいればそういった人たちに報告するのもよいでしょう。
もしそういった人がいなければ、Twitterに投稿するのもオススメです。
Twitterに毎日、「#今日の積み上げ」というハッシュタグで投稿すれば、多くの人からいいねをもらうことができ、やる気を上げることができます。
Twitterは、エンジニアになった後も情報発信ツールとして使えるため、そこを見越してアカウントの開設までやっておけるとよいかと思います。
もしこのタイミングでプログラミングの学習に挫折してしまいそうな場合
このタイミングで挫折するとすると、

「意味不明なエラーが出てきてわからない」
「次に何をやったらいいかわからない」
という感じなのではないでしょうか?
その場合、僕のように独学で勉強し続けるのも1つの方法です。
ただ、実際あまり効率がよくないかなぁ・・・と思います。
この記事を読んでくださっているあなたは「できる限りプログラミングの学習時間を短縮したい」と思っているかと思います。
そこでオススメするのが、プログラミングスクールに通い、不明点を解消できるようにする方法です。
プログラミングスクールの中には、専門の講師がついて不明点の解消に向けて手助けをしてくれるものもあります。
「エラーの解決方法がわからない!次に何をやったらいいかわからない!」そんなあなたへの、オススメのプログラミングスクールはこちらです。
僕がいろいろなプログラミングスクールやそのコースを徹底比較した結果のオススメになるので、興味がある場合は是非見てみてください。
本格的に作りたいものを作る(学習時間:400時間〜800時間)
続いて、本格的にあなたの作りたいものを作るフェーズです。
このフェーズあたりから、あなたにもし本当に作りたいものがあればそれを作っていくとよいでしょう。
このフェーズで作ったものは、エンジニアへの転職活動でもポートフォリオとして使うものになります。
もし「作りたいものがない!」という場合は、以下の記事を参考にしてみてください。
Githubにプログラム(ソースコード)をアップロードしていく
このタイミングからは、Github上であなたの書いたプログラムを公開していくのがオススメです。
Githubもエンジニアになる上で必須のツールとなるので、その練習も兼ねて使えるようになっておきましょう。
エンジニアへの転職活動をする際、企業によっては「Githubアカウントを教えてください」というところもあります。
そのときに「やばい・・・」とならないためにも、このタイミングからGithubのアカウントを育てておく必要があります。
あなたのオリジナルなサービスのソースコードが載っているGithubアカウントは、あなたの立派なポートフォリオになります。
プログラムの読みやすさにもこだわる
実際にエンジニアとして働く場合、他の人と共同で作業するため、他の人からも読みやすいプログラムを書ける必要があります。
いつまでも「動けばいい」という考え方をしていると、エンジニアとして働き始めた後に苦労するか、あるいはそもそもエンジニアへ転職できない可能性があります。
特にGithubにソースコードをアップする場合は、そのソースコードを企業に見られる可能性もあるため、「読みやすいプログラム」を書けるようにしておきましょう。

とはいえ、いきなり読みやすいプログラムが書けるわけではないと思います。
最初から読みやすいプログラムを書こうとすると、手が止まってしまうのではないかと思います。
そこで、あなたの作りたいものを作っていく過程でも、「とにかく動くものを作るフェーズ」と、「書いたプログラムを読みやすくするフェーズ」に分けることをオススメします。
エンジニアに向けて転職準備や転職活動を行う(学習時間:800時間〜1000時間)
最後の段階が、エンジニアに向けて転職準備や転職転職を行うフェーズです。
・どのような企業があるか?を調べる
・あなたのスキルで不足している箇所があったら補う
このようなことををする、いわば「完成させる」タイミングになります。
実は、これだけだと足りない内容も・・・
ここまで読んでくださったあなたは、

「このやり方に沿って独学で勉強すればエンジニアになれるのか!」
と思ったかもしれません。
それは、プログラミングのスキルの話だけをすればYesです。
ここまで勉強してきたあなたは、プログラミングとしては、エンジニアとして十分なスキルがついているでしょう。
ただ、エンジニアはプログラミング以外にも、
・要件や仕様の策定
・ソフトウェア設計
などなど、さらに別のスキルが求められるのが実情です。

「独学でチーム開発なんてできないよ!」
「要件や仕様って・・・何?」
こんな風になっても安心してください。
対策は次の章で説明します。
[重要]エンジニアに求められるスキル = プログラミング x その他雑多なスキル
![[重要]エンジニアに求められるスキル = プログラミング x その他雑多なスキル](https://www.mame-blog.site/wp-content/uploads/2022/01/study-hours-of-programming09-1024x576.jpg)
この記事では、独学で効率よくプログラミングを勉強するための方法をまとめてきました。
どのように進めるべきなのか?どのようなやり方だとマズいのか?などが伝わったのではないでしょうか?
そしてエンジニアには、プログラミングのスキル以外にも、前の章で説明したとおり、チーム開発や要件/仕様の策定、ソフトウェア設計など様々なスキルが要求されます。
それらのスキルは、正直独学だと身につけづらいです。
一人でチーム開発ってそもそも不可能ですし、要件や仕様の策定もコツがあります。また、ソフトウェア設計も体系的に勉強しないとなかなか難しいです。
そこでオススメするのが、プログラミングスクールでこういったスキルを補う方法です。
プログラミングスクールの中には、即戦力でエンジニアになるために、プログラミング以外のスキルを教えてくれるところもあります。
もしあなたが「即戦力のエンジニアになりたい!効率よく進めたい!」と思っている場合、僕のオススメのプログラミングスクールの記事を読んでいただけるとよいかと思います。
僕自身のエンジニアの経験も踏まえつつ、目的に合わせたプログラミングスクールを説明しています。
あなたが効率よくエンジニアになるための武器として使っていただければと思います。
この記事は以上です。
ここまで読んでくださり、ありがとうございました!
コメント