※まずはじめに
未経験から一人前のエンジニアになる為に一番やってはいけない事は、「闇雲にプログラミング学習をしてしまう」事です。正しい前提情報を知らないままプログラミング学習を始めてしまうと、エンジニアになるまでに何倍もの時間がかかってしまいます。プログラミングを始める前に必ず知っておくべき情報を網羅的にインプットする事で、正しい手順と正しい心構えでプログラミングに臨める状態を目指します。
- 「どのようにプログラミング学習を
進めればよいのだろう」 - 「エンジニアになるためには
どのような手順が必要なのか」 - 「最速でプログラミングを
身につけるためのコツが知りたい」
上記のような疑問がまだ残っている方は必読です。
そして何ができるようになるか?
- 最短でプログラミングを習得できるようになる
- プログラミングでどんなモノを
作れるようになるのかイメージが湧く - エラーの解決方法がわかる
- オリジナルアプリの開発工程がわかる
ライブラリとフレームワークを学ぼう
- ライブラリとは何か、概要をつかむこと
- フレームワークとは何か、概要をつかむこと
- ライブラリとフレームワークの違いを知ること
前記事では代表的なプログラミング言語を紹介し、PCソフトやスマホアプリ、Webサービスなど様々なプロダクト(製品)を制作できる事を解説しました。
しかし、プログラミング言語を使えば様々なプロダクトを制作出来るといっても、ゼロから自分でコードを書くのはとても大変です。そこで役立つのがライブラリやフレームワークです。
各プログラミング言語向けに用意されているライブラリやフレームワークを利用すれば、ゼロから自分でコードを書かなくても簡単にプロダクトを制作できるようになります。今後の記事でも実際に利用するので、本記事でライブラリとフレームワーク、また両者の違いについてイメージをつかんで下さい。
ライブラリとは
ライブラリとは、よく使われる機能を集めてひとまとめにした部品の事です。
例えば以下のように、多くのプロダクトには共通してよく使われる機能があります。
- ログイン機能
- 画像やファイルのアップロード機能
- メールの送信機能
このようによく使われる機能は、すでに誰かがコードを書いてライブラリとして公開してくれている事が多いです。ライブラリを利用すれば必要な時に必要な分だけ機能を追加出来るので、自由度が高くとても便利です。
フレームワークとは
フレームワークとは、よく使われる一連の機能をひとまとめにした枠組みの事です。例えばTwitterをはじめとするSNSでは、共通して以下のような一連の機能が必要です。
- 投稿を保存する機能
- 投稿を取得する機能
- 画面を表示する機能
フレームワークはこのような一連の機能をまとめて提供しており、全体的に開発の面倒を見てくれます。フレームワークは言わば、アプリやサービスなどを開発する為の土台です。フレームワークを利用する場合は、そのフレームワークのルールに従ってコードを書く事になります。ライブラリと比べると制約が多く自由度は低くなりますが、その分開発効率が大幅にアップします。
ライブラリとフレームワークの違い
ここまで読んで「なんだか似ているような気がするけど、今ひとつ違いがわからない…」と感じている方もいるかと思います。ここでは以下の説明を確認して、大体の違いのイメージがつかめればOKです。
ライブラリとフレームワークの違いをまとめると以下のとおりです。
- ライブラリ:よく使われる機能を
集めてひとまとめにした部品- 必要なときに必要な分だけ
利用できるので、自由度が高い - 自分のコードから呼び出して
部分的に利用する
- 必要なときに必要な分だけ
- フレームワーク:よく使われる一連の
機能をひとまとめにした枠組み- 独自のルールがあるので自由度は低いものの、開発効率が大幅にアップする
- フレームワークという枠組みの中に自分のコードを書いていくイメージ
プログラミング学習の進め方
- プログラミング学習の最終的なゴール
- プログラミング学習の目安時間
- プログラミング学習の基本ステップ
- プログラミング学習は「写経」が重要
プログラミング学習の最終的なゴール
プログラミング学習を始める前に、必ずやるべき事があります。それは、目的・目標の設定です。しっかりとした目的・目標意識を持って学習できている人と、そうでない人では、学習成果に大きな差が出ます。しかし、「目的や目標の設定方法がわからない……」という方も多いのでないでしょうか?
そこでまずは、以下の点について解説します。
- 目的や目標が必要な理由
- 目標設定の方法
最後には、一緒に目標を設定をする時間も設けているので、ぜひチャレンジしてみて下さい。
目的や目標が必要な理由
理由1. 目的や目標がないと挫折してしまうから
プログラミング学習を始める前に、まずは何のために学習するのか目的を設定しましょう。そして次に、その目的を達成する為の目標を設定します。目標設定には、「正しい道順で目的達成までの最短ルートを描く」という重要な役割があります。
また、目的を達成する為に今やらなければならない事が明確になり、それを達成する事で充実感を味わえます。もし最終的なゴールがないまま学習を始めれば、以下のような状況に陥るリスクが高まります。
- モチベーションが保てずに挫折する
- 自分がやりたかったことと異なる結果になる
- スキルが身につかない
- 学習に時間がかかる
プログラミング学習は、仕事とは異なり強制力がありません。人間は、目先の利益や楽な事を優先してしまいがちです。しかし、あなたが「何のためにプログラミングスキルが必要なのか」というしっかりした目的を持っていれば、挫折・失敗するリスクが大幅に低くなります。
理由2. 手段が目的になってしまうから
プログラミング学習はあくまで「手段」です!!「目的」ではありません。プログラミング学習で最も多い例が、「プログラミングを学習してエンジニアになり、収入をあげたい」というのが本来の目的だったにもかかわらず、いつしかプログラミングを習う事や、本・書籍をこなすこと自体が目的になり、いつまでたってもエンジニアになれない事です。
これは、プログラミング学習以外にも当てはまる事です。例えば、東大に合格する事が目的であった場合、「東大に合格する為には何をすればよいか」「どの科目でどれくらい点数を取ればよいのか」を明確にする必要があります。
その為にやるべき項目を洗い出し、実行しなければなりません。上記のプログラミング学習の例で言えば、「エンジニアになるには何をすればよいか」をまず明確にする必要があります。
具体的には、就職したい会社の募集要項を確認したり、どんな言語が求められているかを確認したりします。では次に、目標設定の方法をさらに細かく解説していきます。
目標設定の方法
まず目的を明確にする
ゴールが見えないまま学習をしても、向かうべき方向がわからず挫折してしまいます。その結果、プログラミング学習をやめてしまう方がたくさんいます。そうならないよう、プログラミング学習を始める前に、必ず目的を明確にしましょう。
- 時間と場所に縛られずに仕事がしたい
- 現在の仕事よりも収入をアップさせたい
- Webサイトを作りたい
- 副業をして毎月プラス5万の収入を得たい
上記はあくまで一例です。
あなたが将来どうなりたいかを明確にしましょう。目的を明確にしたあとは、具体的な目標を設定します。目標を設定すると、今やるべきことを逆算できるので、学習効率が大幅に上がります。
SMARTの法則
目標を設定するときは、「SMARTの法則」を意識して下さい。SMARTの法則とは、目標の実現可能性を最大限に高めてくれる方法です。
SMARTの法則は、以下の5つの要素で構成されています。
- Specific(具体性):目的よりも具体的で、行動に移せる内容かどうか
- Measurable(計量性):目標との距離を計測できるかどうか
- Achievable(達成可能性):達成できる現実的な目標かどうか
- Relevant(関連性):目標を達成することが、何かにつながっているかどうか
- Time-related(期限設定):期限が明確かどうか
目標設定では、目的を達成するためにやるべき事を具体的にしておきます。そして、目標を達成するか、期限を迎えた段階で振り返りを行います。
もし目標を達成できなかった場合は、「何が原因だったのか」「どうすれば改善されるのか」を考えてください。目標が達成できていた場合は、目的達成のための新たな目標を設定します。
目標を設定してみよう
先ほど紹介したSMARTの法則を参考にして、実際に目標を設定して下さい。例えば「エンジニアに転職して収入を上げたい」という目的であれば、その為にやるべきことをリストアップします。ゴールである「エンジニアへの転職」を実現する為には何が必要か、考えてみてください。
- プログラミングスクールに入る
- プログラミングの基礎を学ぶ
- オリジナルのアプリを作る
- 職務経歴書などを作る
- 転職活動をする
上記のように、
やるべきことを書き出せたでしょうか?
続いて、大まかな期限を決めましょう。例えば、目的達成の期限を6か月後に設定したとします。転職活動に必要な期間はどれくらいでしょうか。多くの場合、1〜3か月ほど必要ですよね。つまり、期限の1〜3か月前から転職活動を始めなければなりません。
このように、ゴールである「エンジニアへの転職」から逆算して、必要な期間とスタート時期を設定しましょう。ポイントは、無理のないスケジュールを組む事です。厳しいスケジュールを設定した場合、何かが上手くいかなかったときに修正ができません。ある程度のバッファ(余白)を設けておく事を意識してください。ではいよいよ、SMARTの法則に従って、細かく目標を設定していきます。
まずは、上記の例の1つ目「プログラミングスクールに入る」について、目標を設定します。
- Specific(具体性):インターネット上
でプログラミングスクールを調べる - Measurable(計量性):平日は資料請求をして、土日は最低でも1社の体験レッスンに行く
- Achievable(達成可能性):無理なく
続けられる - Relevant(関連性):学習環境を整えられる
- Time-related(期限設定):2週間
次に、上記の例の2つ目「プログラミングの基礎を学ぶ」について、目標を一緒に考えてみます。
- Specific(具体性):平日に2時間、
土日に5時間勉強する - Measurable(計量性):学習記録をつける
- Achievable(達成可能性):平日に2時間、土日に5時間であれば無理なく続けられる
- Relevant(関連性):プログラミングスキルを身につけられる
- Time-related(期限設定):3か月
上記のように期限を設定し、目的の達成に必要となるやるべき事を具体的にしてください。直近の目標はしっかりと設定し、それより先の目標は大まかに設定するのがポイントです。そして、目標を達成するか、期限を迎えた段階で振り返りを行います。
もし目標を達成できなかった場合は、「何が原因だったのか」「どうすれば改善されるのか」を考えます。その後目標を設定し直し、ゴールにたどり着けるように調整を行います。目標が達成できていた場合は、目的達成の為の新たな目標を設定します。すでに大まかな目標を設定している場合は、SMARTの法則に従って目標をより具体的にしてください。
プログラミング学習の目安時間
「プログラミングを習得するのにどれくらい時間がかかるんだろう……」
このような疑問を持っている方はたくさんいると思います。学習する言語や学習効率によっても、この学習時間は変わってきます。できるだけ短い時間で効率よく学びたいですよね。
そこで、ここではプログラミング学習の目安時間を紹介します。
あくまで目安なので、実際の学習時間は人によって異なることを理解したうえで参考にして下さい。
実務を行うために必要な目安時間
一般的に、問題なく実務を行えるレベルになるには、約1000時間必要だと言われています。プログラミングの知識だけでなく、業務知識も使った実践的なプログラムを作成する為に必要な時間の目安です。実際に実務経験を積む時間も加味すれば、さらに時間はかかると言えます。
プログラミングの習得に必要な目安時間
プログラミングの習得に必要な時間は、約800時間だと言われています。なお、ここでいう「プログラミングの習得」とは、「一人でサービスやアプリの開発を行えるようになること」を指します。この800時間という数字もあくまで目安なので、学習方法や1日の学習時間によって変わります。学習効率が悪ければ、その倍の時間がかかってしまう可能性すらあります。
プログラミングの習得に必要な最短の時間
正しい手順と学習方法でプログラミング学習を進めれば、プログラミングの習得に必要な時間を300時間程度にまで減らせると言われています。ただし、本格的なWebアプリを開発する場合、300時間では難しいです。また、300時間での習得は、学習環境が整っていてこそ達成できます。
- 学習中に詰まったときに、すぐ解決できる環境
- エンジニアに教えてもらえる環境
- 学習方法が明確で、やるべき事が見えている状態
上記のような条件が揃って初めて、
300時間という短い時間でプログラミングを習得できる可能性が高まります。
プログラミング学習の基本ステップ
「プログラミング学習はどんなステップで進めたらよいのだろう」
実際にプログラミングの学習を始めようと思った時、こんな疑問が湧いてくるのではないでしょうか?
どんなステップで学習を進めるべきかを把握していなければ、遠回りな学習をしてしまい、時間ばかりが過ぎてしまいます。そこで、ここでは以下の2点について解説します。
- プログラミング学習を始める前の心得
- プログラミング学習の基本の3ステップ
プログラミング学習を始める前の心得
原則1:暗記しないこと
プログラミングに必要なのは「暗記」ではなく、コードを「理解」し、「把握」する事です。短期間で情報が更新され続けるプログラミング業界において、コードの丸暗記に意味はありません。また、検索をすれば情報をすぐに得られるので、暗記をしなくてもプログラミングはできます。
原則2:理解と把握に徹すること
プログラミングは、実践を繰り返すことによって身につきます。実際の現場で使ったり、アプリを開発したりする事は有効な学習方法です。また、学習の初期段階では、一つ一つのコードをしっかり理解する必要はありません。まずは「この技術はどこでどのように使われるのか」「どんなことができるのか」を大まかに把握するだけで十分です。
原則3:発信すること
プログラミングは、アウトプットすることで成果を出す事が出来ます。よって、まずはインターネット上の教材や技術書のサンプルなどを真似する事から始めてください。
その後、自分なりに処理を変えたり加えたりする努力をしてください。エラーを自分の力で解決していく事で、理解度がより深まります。また、ブログやSNSなどを利用して発信する方法もあります。学習の進捗をある程度まとめて記録したいときは、Qiitaを利用することをおすすめします。
ブログであれば、はてなブログがおすすめです。IT系の読者が多いので、高いスキルを持った方々からフィードバックをもらえます。余談ですが、私はWordPressでブログを書いてます。理由は、WordPressに触れて使い方を学ぶ為です。
進捗をまとめる時間がない時は、 Twitterで発信するといいです。どんな形でも構わないので、少しでも進捗を発信する事が重要です。アンチコメントも多いですが、気にせずにツイートして下さい。最悪は、ブロックすればいいんですから。そして、それを習慣にしましょう。
プログラミング学習の基本の3ステップ
プログラミングを学習する時の基本ステップは、以下の3つです。
- ステップ1:本や教材を使って学習する
(基礎を大まかに把握する) - ステップ2:実際にモノを作る
(基礎を実践する) - ステップ3:基礎に戻って学習する
(基礎を理解する)
ステップ1:本や教材を使って学習する
(基礎を大まかに把握する)
ステップ1では、本や教材を使って学習し、プログラミングに必要な基礎を大まかに把握します。
本や教材は出来るだけ動画を利用するようにして下さい。動画は書籍よりもわかりやすく、さらに情報量を圧縮しているので、効率よく学ぶ事が出来ます。
一度に全てを理解する必要はなく、最初は流し見する程度で構いません。
2回目は、実際に手を動かしたりして学習してください。動画を見て少し難しいと感じたり、より深く理解したいと感じたりしたら、入門書を読んでわからない部分をピンポイントで学習するのがおすすめです。基礎を大まかに把握する事で、スタートからゴールまでの全体像が掴めます。
そして、現在の進捗が全体のうちのどの辺りなのか、感覚的に把握する事が出来ます。
ステップ2:実際にモノを作る(基礎を実践する)
ステップ2では、ステップ1で大まかに把握した基礎を使い、実際にオリジナルのプログラム制作に挑戦します。いきなりゼロから作るのは難易度が高い為、本や教材で作ったサンプルを改造する事から始めて下さい。サンプルを改造するだけであれば、調べればすぐに出来るので初心者でも問題ありません。
自分でアイディアを考えて実装し、エラーが発生したら何が原因なのかを突き止めて修正して下さい。このように、少しずつ機能を追加したり修正したりする中で、プログラミングの基礎が身についていきます。
ステップ3:基礎に戻って学習する
(基礎を理解する)
ステップ2では、わからない部分が出てくるはずです。これは多くの場合、基礎知識が未熟である事が原因です。プログラミングにおいては、基礎を理解していなければ、先に進めない事がよくあります。プロのエンジニアでさえ仕事中に調べながら実装しているので、初心者はわからなくて当然です。
ステップ3では、ステップ2でつまずいた部分について、基礎に立ち返って学習をしてください。何がわからないのかを考えながら、基礎を理解する為に復習を行います。一度基礎に戻って深く学び直す事により、ステップ2で躓いた課題を乗り越えられるようになります。
このように、ステップ2とステップ3を繰り返していく事で、確実にプログラミングを習得していく事が出来ます。躓いても焦らず、基礎に戻ってしっかり理解する事が大切です。
プログラミング学習は「写経」が重要
プログラミング学習においては「写経」が重要です。
「写経がそんなに重要なのか」と思った方もいるかもしれません。実際にプログラミング学習を進めていくと、継続することの大変さに気づくと思います。どうしても、「次の日にやればよい」となってしまい、学習がなかなか継続できない方も多いでしょう。
そこで、ここでは以下の3点について解説します。
- プログラミングにおける「写経」とは
- 写経によって得られる効果
- 写経の手順
プログラミングにおける「写経」とは
プログラミングにおける写経とは、「サンプルコードを書き写すこと」をいいます。よくテスト勉強をする時に、「参考書や教科書の内容をノートに書き写して覚える」という勉強法をとる人がいますが、その感覚に似ています。写経ができる人とできない人では、プログラミング学習の成果に大きな差が出ます。
写経によって得られる効果
次は、写経がプログラミングを学習するうえでいかに重要なのかを解説します。
写経によって得られる効果は、主に以下の3つです。
1. 感覚的にプログラミングを覚えられる
プログラミングを学習する時に、単に頭で覚えようとしても簡単には覚えられません。プログラミングを覚えるコツは、暗記するのではなく、「こんな機能もあるんだな」と感覚的に覚える事です。そこで重要なのが写経です。写経する事で、感覚的にタグの使い方などを覚えられます。
2. プログラムを書く習慣が身につく
プログラミング学習において、プログラムを書く習慣を身につける事はとても重要です。プログラミングを学習する際、学習サイトや参考書などを利用する事が多いと思います。学習サイトや参考書を読むだけでも勉強にはなるのですが、実際に手を動かしてプログラムを書く事が、最も効率の良い学習方法です。
この「実際に手を動かす」事が、簡単なようで意外と難しいです。「エラーなどで躓き、手が止まってしまい、そのまま学習を辞めてしまう」というのはよくある話です。
そこで、学習サイトや参考書などに載っているサンプルコードを写経して、
手を動かす習慣を身につけて下さい。
3. 写経したコードを実際に動かすことで、
理解度が上がる
プログラミング初心者がいきなりアプリを作ろうとしても、作り方さえわからない状態だと思います。そのうえ、プログラミングによってどんなものができるのか、イメージも湧かないです。イメージが湧かないので、自分が今何を学んでいるのか想像出来ず、モチベーションが下がってしまいます。
その為まずは、内容がわからなくてもよいのでサンプルコードを写経して下さい。写経したサンプルコードを実際に動かす事で、自分が今何を学習をしているのか理解できるようになります。そして、自分が今何を学習をしているのか理解できれば、学習効率は一気に上がります。
写経の手順
- サンプルコードを用意する
- わからなくてもよいのでそのサンプルコードを写経する
(コピーではなく、できるだけ手を動かす) - 写経が終わったら、コードがどのように
変化したのか確認する - 疑問を感じた箇所について調べ、疑問を解決する
- 1〜4を繰り返す
書籍・本
出典:最短距離でゼロからしっかり学ぶ
Python入門 必修編
世界累計50万部のベストセラー『Python Crash Course』待望の翻訳版が登場! 10歳の小学生から定年世代まで、世界中の読者が学んだプログラミング入門書で、あなたもPythonの基本をしっかり学びましょう。本書は世界の中学、高校、大学でもテキストとして利用されており、この本で得た知識をもとに新しい仕事に就いたり、副業をスタートさせたりしている人たちが世界中にいます。
「必修編」では、プログラミング環境の用意、基本的なプログラムの書き方に始まり、リスト、辞書、クラス、関数といった基礎的な知識からエラー処理、テストコードの書き方までを演習問題を交えながら、わかりやすく解説します。随所にプログラマーとしての心構えなども触れられており、読みやすく整理されたコードの書き方も身につきます。これから初めてPythonを学ぶ人も、学び直したい人も、必読の書籍です。Windows・Mac・Linuxに対応しています。
出典:良いコードを書く技術 ──
読みやすく保守しやすいプログラミング作法
読みやすく保守しやすい「良いコード」の書き方を解説した入門書です。本書を読むと、良いコードを書くための習慣から、名前の付け方、コードの分割や集約を行う方法、抽象化の作法、計算量とアルゴリズム、ユニットテストやメタプログラミング、そして簡単なフレームワークの自作まで、プログラマーとして長く役立つ基本が身に付きます。
2011年に刊行し、大好評を博した初版を、10年ぶりに改訂しました。改訂版では、コード例をモダン化したほか、第7章「データ構造」を新たに書き下ろしました。10年ぶりの改訂であるにも関わらず、本書の根幹は驚くほど変わっていません。それはすなわち、基礎や基本といった本質的な知識は、陳腐化しないということです。
以上が私のオススメ本になります。気になる方や読んでみたいと思っている方は、参考になりますので、ぜひ読んでみて下さい。
まとめ
- ライブラリやフレームワークを利用すれば、簡単にプロダクトを制作できる
- ライブラリ:よく使われる機能を集めて
ひとまとめにした部品- 必要なときに必要な分だけ利用できるので、自由度が高い
- 自分のコードから呼び出して
部分的に利用する
- フレームワーク:よく使われる
一連の機能をひとまとめにした枠組み- 独自のルールがあるので自由度は低いものの、開発効率が大幅にアップする
- フレームワークという枠組みの中に
自分のコードを書いていくイメージ
- 目的・目標を設定することは極めて重要である
- プログラミングの習得に一般的に1000時間程度かかるが、300時間まで減らすのも可能である
- プログラミング学習には「暗記しない」「理解と把握に徹する」「発信する」といった心得がある
- プログラミング学習には
大きく3つのステップがある - プログラミング学習においては
「写経」が重要である
次回は、プログラミングの前提知識を身につけよう⑤を記事にしますので、お楽しみを!!