初心者です。これからプログラミングを覚えようと思ってます。
プログラミングを独学でやるとしたら、どのくらいの時間が必要ですか?
TwitterとかFacebookみたいなかっこいいアプリを作れるようになりたいんですけど、私でもできますかね?
こういった疑問に答えます。
私もシステム開発系の仕事に就いて長いので、エンジニアになりたい若い方からこういった質問を受ける事があります。
とあるベンチャー企業でシステム開発をメインに行っている者で、現状のメインはPHP・PerlとMySQLです。
まだ勉強を始めていない時は、一体プログラミングに何時間割いたらできるようになるのか、それが気になる所ですよね。
この記事では、こういった疑問を持つ学生に対して、終止符を打つつもりで書いていきます。
正直、物事の習得時間というのは人による部分が大きいので、『○○時間だよ』と言う事は少し気が引けます。
しかし私がどんな勉強をどの程度してきて仕事を始めたのかを語ることで、参考になることもあるかもしれないと思ったので、そんなことを書いていきます。
Contents
スポンサーリンク
プログラミングを独学するのに何時間必要かという疑問のための記事
まず、プログラミングの習得という話ですが、『どのレベルまで行ったら習得とするか』という問題はかなり大きいです。
というのも、実際にアプリを作ろうと思った時、1つの技術だけで完結する事はあまりないからです。
プログラミング言語に触れたことがない方であれば、なんとなくプログラマーというのは何も見ずにドンドン開発を進めていくようなイメージがあるみたいですが、そんなことはないんですよね。
どちらかと言うと、必要な情報を手に入れる能力が高い場合の方が多いです。
そんな中で誤解を恐れずに話すと、1つのプログラミング言語で言うところの基礎的な理解を得るのに、私はざっくり360時間くらいかかりました。
この記事を書くにあたり他の人の情報も調べてみましたが、『200時間でできる』と書いている方もいて、すごいなーと思います。
プログラミング独学360時間の内訳
実際に私が技術系の学校で、プログラミングを基礎から習った時の時間です。
4時間 × 30日 × 3ヶ月 = 360時間
相当ざっくりした計算ですが、こんなものでした。
最も、これはC言語をやった場合の時間なので、最近のPythonやRubyといった言語であれば、もう少し早いのかもしれません。
ただ、そこまで大きく変わらないんじゃないかとは思っています。
この間に勉強することは、ifやforなどの基本構文に始まり、変数・演算・外部ライブラリのインクルード・自作関数・構造体・多次元配列・連想配列・動的メモリの確保・ポインタなどです。
言語が違えば、クラスとインスタンスについても学ぶ事になるかなと思います。
それで、これを使って何が作れるかというと……なんでも作れるには程遠い状態です。ガーン。
『プログラミング言語の習得』と、『個人で作れるアプリの開発』って微妙に連動していないんですよね。
基礎的な理解はもちろん必要なんですが、この上に色々な知識が積み重なっていきます。
言わば、アプリ開発のためのベースとなる知識が手に入ったような段階かなと。
ただ、別の記事で言及しているのですが、HTML・CSSなどから入ってPHP・MySQLに移行した場合には、ウェブページや簡単なWebアプリケーションくらいは開発できるようになるかと思います。
基礎理解→アプリ開発までの習得に+400時間
基本的なプログラミング言語の取り扱いを理解したところで、アプリ開発に乗り出します。
私の場合は、これを8時間 × 50日くらい、みっちり勉強しました。
おそらく400時間くらいかと思います。
プログラミングスクールではなかったので、他の事もやっていました。なので、ちょっと時間はうろ覚えです。
もしかしたら、もう少しやっているかもしれません。
まず、何を作るにしてもデータベースがないと成立しないアプリ、非常に多いです。
データベースというのは、簡単に言うと様々な情報をエクセルのような表形式で、楽に管理するためのソフトウェアです。
これは、情報の外枠(何のデータを管理するか)をまず決めて、検索・挿入・更新・削除の4種類の使い方を学んでいきます。
私はここが少し苦手で、時間がかかりました。
これを学ぶことで何ができるのか、よく分からなかったんですよね。
でも、プログラミング言語からMySQLなどのデータベースを呼び出せるようになると、だいぶ世界が変わります。
たとえばWebアプリなら、ユーザIDとパスワードを管理する機能があれば、ログイン画面が作れます。
データベースを学ぶまではテキストに書いて保存していたものが、遥かに楽に管理できるようになるわけです。
ソケット通信を学べば2台のコンピュータ間でチャットツールが作れますし、Windowsフォームアプリを学べばWindowsアプリケーションが作れます。
Linuxの知識を手に入れると、世のWebアプリにあるような、サーバサイドで何が行われているのかが分かるようになります。
この時期は学んだことが次々形になっていく段階で、とても楽しいです。
ただ、すべてのコードを自分の手で書いていた段階から『様々なツールを応用しての開発』という新たな局面に変わるので、そこに対応できず挫折していく友人もいました。
色々なアプリを開発するまでには800時間くらいかかった
私の場合はこの頃から学生を卒業し、仕事でプログラミング知識を使っていくようになったので、1人で作っていて、公の場に公開できるアプリというのは1つもありません。
ここは少しフリーランスでバンバン新アプリを作っていらっしゃる方々に羨ましさを感じる所で、自分も何か作ってみたいと最近、画策を始めています。
ただ、『調べれば作れる』という状態にはなっており、ここまで来るのに総合して、ざっくり800時間くらいかかったかな、という印象です。
800時間というと、8時間 × 100日ですね。
みっちりやる方からすれば、3ヶ月ちょっとくらいでここまで達成できるかもしれません。
なお、この世界に足を踏み入れると一生勉強になります。
1,000万件以上の情報をデータベースで高速に取り出すためにはどうしたら良いかとか。
フロントエンドのデザインをかっこよくするために何を勉強したら良いかとか。
誰でも管理しやすいソースコードにするには? とか、どの言語を使ってバックエンドのシステムを構築したら良いか? とか。
いわゆる企業システムの悩みっぽい所に足を踏み入れて、現在も試行錯誤を続けています。
最近、ディープラーニングを自社システムに取り入れられないかなあと思い、ようやくPythonを使って勉強を始めました。
iPhoneアプリなども手を出したいという思いはあり、学習意欲は尽きません。
プログラミングの独学を時間で測るのをやめよう
さて、私の場合は基礎理解に360時間、アプリ開発に400時間を費やしました。
この間に、スティーブ・ジョブズを始めとするIT革命時代の歴史を勉強したりもして、それも間違いなく仕事に役立っています。
ただ、『習得にかかる時間』という発想がまず、良くないと思うんですよね。
そこでここからは、『プログラミングの独学に時間の概念はない』という話をしていきます。
と聞くと、「結局どれだけ勉強したら習得できるんだよ……」と思われるかもしれません。
でも、時間ではなく、知識ベースで考えるべきです。
習得にかかる時間は人それぞれ
まず、プログラミングの習得ってけっこうな壁があります。
その多くは、『何かエラーが発生した時に、それがなぜ発生しているのか分からない』という問題です。
ここでどれだけ長い間つまずいているかで、総合的な時間というのは変わります。
だから、正直あんまり習得時間って考える意味がないと思っています。
ある意味では、「プログラミングスクールを使えばエラーが出た時にすぐそれを聞ける」という話もあります。
ただ、エラーを処理した時に、そのエラーの内容をどれだけ深く理解できるかで、類似するエラーに対しての対応力が変わるんですよ。
教えてもらって解決したバグは、1年もあればほぼ完璧に忘れます。
でも、自分で悩んで解決したバグは、3年経っても意外と覚えていたりします。
だから、一概に「人に教えてもらってサッと解決した方が良いですよ~」とも言い切れない側面があります。
プログラムは、思った通りには動きません。書いた通りに動きます。
思った通りに動かなかった時に、どうして思った通りに動かないのか、分解して考える力が必要になってきます。
バグ修正って、一問一答ではないんですよね。
悩んで調べた分だけ、成長があるんですよ。
たとえそれが、車輪の再発明になったとしても。
時間ではなく、知識ベースで考えよう
プログラミング独学のゴールを時間で考えると、思い通りのスケジュールにならなかった時にモチベーションが下がります。
なので、『何がどれだけ扱えるのか』という、本質に近い部分で考えるのが良いと、個人的には思います。
「PHPの勉強を200時間やりました!」ではなく、「PHPを使って、メニューリンクのコードを一元化したホームページを作りました」といった具合に。
別に、何が作れなくても良いです。「PHPを使って、自作の関数を作りました」なんかでも。
自分が積み上げてきた実績、知識ベースで自分のスキルを測る事によって、目標到達地点までの道のりが自然と見えてきます。
これは多くの場合、「習得に何時間かかるかな」と時間で考えるよりも有益です。
私は物覚えが決して良い方ではないので、余計に『時間』で考えるのは得策ではないという実感があります。
だって、世の中に公開されている「よくできる人たち」の時間って、ほぼどれも自分には当てはまらないんです。
そんなことでがっかりしたくないので……。
プログラミング独学にかかった時間を振り返る
こうして自分の経験に基づく記事を書いてみて、やっぱり「200時間ってすごいな」と思います。
プログラミングスクールの授業はそうなのかもしれませんが、そんなに短時間でプログラムが書けるようになるのは限られた人たちではないかと。
授業を受けつつ自分でも学習するのであれば、それは純粋な200時間ではありませんからね。
個人的には、200時間を目標にして勉強すると、がっかりしてしまう方が多いのではないかな……? なんて、予想しています。
ともあれ。
『勉強する』という視点だと疲れてしまいますから、とにかく今の自分が作れるものを作ってみるというのが、モチベーションを上げるために重要な事ではないでしょうか。
私も、新たなアプリ開発に向けて、努力を積み上げてまいります。