プログラミングの習得には1000時間が一つの区切りという記事をよく見かけます。ただし、そこには、プログラミング学習の到達目標を明確に定義できていない、みんなが納得できる成果イメージがはっきりしないといった課題があります。
プログラミング学習の費用対効果をできるだけ高めるにはどうしたらよいかという観点から、プログラミング学習に費やす時間について説明します。
プログラミングに興味のある方は、プログラミング学習の参考として、ぜひ読んでみてください。
プログラミング学習に1000時間が必要ってどういうこと?
一人前のプログラムが書けるようになるにはプログラミング学習に1000時間は必要という記事をよく見かけます。ここでは、1000時間が必要なのか、1000時間をかけた結果として何が得られるのかを説明します。
1000時間ってどれぐらいの時間
1000時間って結構長い時間ですよね。学習時間ごとに身につくスキルとそれがどんなレベルなのかを説明します。
200時間で何が身に付く?
大学生の場合は、1単位は45時間とされており、カリキュラムで言えば半年に90分授業15コマ程度ということになります。
プログラミング基礎の講座などでは、講義と演習を半年で2単位というカリキュラムがよくみられます。コンピュータの基礎とプログラム言語を受講すれば4単位なので、半期で約200時間をかけることになります。
このように、200時間かければ、プログラミングの基本的な知識の習得と簡単な例題レベルのプログラムを作成できるようになるともいえるでしょう。
なお、大学のカリキュラムでは半年かけていますが、90分授業4コマ分ですから、自習や独学であれば、もっと短い期間で習得できるでしょう。
1000時間で何が身に付く?
世の中のサラリーマンは、年間2000時間は仕事に費やしています。これは、1日に8時間、土日を休みとすると月に22日程度働くと仮定すると、年間で2100時間程度となるからです。残業などがあればもっと仕事に時間をかけています。
すなわち1000時間をかけるというのは、半年間仕事に専念するのと同じことになります。
新入社員の教育にOJT(On the Job Training)という実際の仕事を教材として実務の知識を身につける教育方法があります。OJT終了後は1人前の社員として実務を任されます。
1000時間かけるということは、半年間のOJTを受けるのと同じと考えれば成果のイメージもつかみやすいと思います。
石の上にも3年は通じる?
「石の上にも3年」とは古いことわざですが、技術革新の速いITの世界にはなじまないかもしれません。
ドッグイヤーと呼ばれるサイクルの速さを考えると、例えば3年立てばその技術は枯れたものとなっており、他の新しい技術の習得に時間を振り向ける必要があるかもしれません。
すなわち、プログラミングのスキルやノウハウを実務を通じて身につけることは必要ですが、その際には時間をかけずに効率的に行なう方法を取り入れる必要があるのです。
主なプログラミング言語の例
これまでに数多くのプログラミング言語が誕生しています。
これから学習するのであれば、実際に仕事などで使えるものを選ぶ方がよいでしょう。
また、特定のプログラミング言語を学べそれでオーケーというわけではなく、業務やIT技術の進展に応じて、新しいプログラミング言語を学ぶことが必要です。
現在、人気のあるプログラミング言語を以下にいくつか紹介します。
プログラミング言語 | 難易度 | 説明 |
PHP | 低 | HTMLと相性が良く文法の比較的シンプル |
Ruby | 低 | Ruby on Railsを利用してサーバサイド開発に使用 |
JavaScript | 低 | フロントエンド開発用の代表的な言語 |
Python | 中 | 数学や統計のライブラリが充実し、AIや機械学習に使用 |
Java | 中 | 大規模システムや基幹系システムなどの開発で使用 |
Swift | 中 | iPHONE(iOS)向けのスマートフォンアプリ開発用 |
C/C++ | 高 | 汎用性の高い言語。C++はオブジェクト指向に拡張されたもの |
R | 高 | 機械学習系のパッケージが豊富で、AIや機械学習に使用 |
HTML/CSS | 低 | WEB開発には必須の知識となるマークアップ言語 |
プログラミング学習で学ぶこと
プログラミングを学習する際に学ぶべきポイントを以下に説明します。
ITの基礎知識
プログラミングは、コンピュータに何をすればよいかを指示するためにソースコードを書くことがアウトプットとなします。したがって、コンピュータやネットワークがどういうのものであるかについての基本的な知識を習得しておかなければ効果的なプログラムを作ることができません。
なお、学習に当たっては、コンピュータやネットワークの利用に必要な知識を効率的に習得するよう心がけ、時間をかけすぎないようにしましょう。
構文や文法
まずは、対象とするプログラム言語でソースコードを記述するための規則である文法や構文を学ぶ必要があります。
プログラム言語ごとに、使える文字や単語、文の書き方を規定する構文規則が決められています。プログラムはこの規則通りに書く必要があり、規則通りでないとエラーとなります。
構文や文法はプログラム言語間で似ている部分もありますので、他の言語を習得していれば習得は楽になります。
関数やライブラリ
プログラム言語には、「入出力」「文字列処理」「時間」など使用頻度の高い処理を関数などとしてまとめたライブラリが用意されています。
ライブラリを利用することで、的確なプログラムを効率よく作成することができます。
ライブライにはたくさんの種類の関数などがあり全てを覚えられるわけではありませんが、ライブライリの構成や特徴、重要な関数などはきちんと理解して使いこなせるようになることが重要です。
フレームワークなどの支援ツール
WEBアプリケーションでは、ログイン処理やユーザー登録などよく使う処理があります。
こうした処理を毎回プログラム言語でゼロから記述するのはあまり効率的とは言えません。そこで、アプリケーションを効率的に作成するために用意されたひな形のプログラムであるフレームワークを使用することとなります。
フレームワークではゼロからコーディングするのに比べると短期間で一定の品質を確保したプログラムの作成が可能です。
開発環境や実行環境
プログラムを実際に開発するためには、ソースコードを記述するためのエディタ、デバッグを行なうためのデバッガ、実際に実行するためのコンパイラや処理系など、開発環境や実行環境と呼ばれるハードウェアやソフトウェアをそろえる必要があります。
オンライン学習ではこうしたものはすぐに使えるようにあらかじめ準備されていますが、システム開発や構築を行なうには自分で用意できるスキルが必要です。
プログラミング学習初心者へ送る「読まなきゃ損!」なツイートまとめ-その1できることのイメージとプログラミング学習に必要な時間
設計書通りのプログラムがコーディングデバッグできる
プログラム開発では、企画、設計、開発、導入という手順を踏むことが一般的です。プログラマは設計書にしたがってプログラミングすることが最初のステップとなります。
この場合は、該当のプログラム言語に関する知識と簡単な例題の記述経験があれば着手可能です。したがって、200時間程度の学習で身につけたスキルでも対応可能でしょう。
もちろん、なるべく短時間で品質の良いプログラムを作成するには相応のスキルが必要ですが、こうしたスキルは作成経験を通じて蓄積されることも多いです。
開発プロジェクトの環境を設定できる
ある程度プログラミングの経験を積めば、あるプログラム言語でプログラムを開発して実行するためにはどんな環境が必要か理解できるようになり、自分で必要な環境の構築も可能になります。
環境構築ができればプログラミングをグループで実施することも可能となります。
このようなチーム開発のリーダ的な役割をこなすには200時間程度の学習では力不足で、1000時間程度の実務経験があるとよいでしょう。
プログラムの設計ができる
プログラム設計ができるためには、プログラミングスキルのみならず、設計対象に関する知識や関連するIT技術に関する知識も必要となります。いわゆるシステムエンジニアなどが中心に行なう業務となります。
したがって、ここでは学習対象がプログラミングのみならずもっと広いIT関連技術へと広がります。
プログラミング学習で挫折しないためには
目標設定
プログラミングの学習に完璧はありません。漫然と学習していると終わりが見えず結果途中であきらめることにもなりかねません。
「このプログラムミング言語でプログラムが書けるようになりたい」といった漫然とした目標ではなく、習得したスキルをどのように生かしたいかを明確にしましょう。
これが明確になれば、取得すべきスキルレベルもはっきりし、学習にどの程度の時間をかければよいかも精度よく想定できるでしょう。
経験を積むステップを組み込む
プログラミングは言語知識をいくら覚えても手が動くようにならないと習得したことにはなりません。
一方、どんなプログラムを作れば学習に有効であるかを決めるのもそれなりのスキルが必要です。
そういう意味では、実用に供されるプログラムの開発を、仕事などを通じて経験することを学習のステップに組み込むことは有効です。
まとめ
いかがでしたか? 今回は、プログラミング学習では、何をどのぐらいの時間かけて学べばよいかについて説明しました。
技術進歩の速いプログラミングにおいては全てをマスターすることは不可能で、目的をもって効率的に学習することが求められます。
プログラミング学習は最初はとっつきにくいのですが、習うより慣れろといったトライアンドエラーの姿勢で学んで行けば必ず身に付くものです。
プログラミング学習の参考になれば幸いです。
【無料?有料?】プログラミング学習に最適なツールは何?