・プログラミングを学習したいけど何から手をつけたらいいかわからない
・初めてプログラミングを勉強するけど、どのような学習方法がベストなの?
・学習ってどういう風に進めたらいいの?
そんな疑問に答えます。
どの言語を選んでも、ベストの学習方法というのは変わりません。ここでは、すべてのプログラミング言語において一番効率的な学習方法を解説します。
記事の信頼性
私が使えるプログラミング言語はphp、java、excelVBA、cobol、perlです。
使えるようになった経緯は、元SEかつ自分で独学していたためです。
複雑なウェブサイトや、スマートフォンアプリの開発経験もあり、また資産運用部門にいたときもプログラムを使った業務効率化をしていました。
目次
効率学習の手順
最短で、実際に開発できるようになるには、以下の学習フローがおすすめです。
- 一番簡単な本を通読
- ドットインストールで学習
- サンプルを改造する
- 自分で最初から作ってみる
簡単に全体を解説しますと、本を速さ重視でざっくり通読し、全体像をつかみます。その次に、ドットインストールという月1000円程度でプログラミングの学習動画見放題のサイトでポイントを理解します。なんとなく、全体的に理解できたら、誰かがすでに作成済みの簡単なサンプルプログラムを改造します。ここで飛躍的に知識の定着と、開発能力が向上します。最後に自分で最初から作ってみます。
ポイント
とにかく『3.サンプルを改造する』にいかに速く到達するかが最短学習のカギです。例えば、プログラミングの仕組みを理解することを、自転車の構造を理解することに置き換えてみるとわかりやすいと思います。自転車の構造を理解するとしたら、何冊も本で仕組みを勉強するより、実物を触ってみて、ペダルを回してみたり、ハンドルを回してみたりして、動きを理解したほうが、圧倒的に速く仕組みを理解できるはずです。プログラミングも同じです。本での勉強は最低限にして、なるべく早く実際に動いているものを改造することで学習は進んでいきます。
1、一番簡単な本を通読
まず、一番簡単な本で全体像を掴むことが大切です。
紙媒体の本をおすすめします。理由は以下です。
- 体系的にまとまっていて、満遍なく基礎を学べます。
- どの章にボリュームがあるか直観的にわかります
- 線を引いたり付箋をつけたりできます
- 外出中の空き時間でも素早く勉強を開始できます
本の選び方
本を選ぶポイントは以下です。
- amazonで評価が高く、評価の数も多い
- 絵などが描いてあり、限界まで簡単にしようということが『タイトル』や『説明』でわかる
- 全くの初心者向け
- 分厚くない。薄い本
読み方
とにかくなるべく速くぼんやりとしたイメージを作ることが大切です。
後で、振り返ってもいいので、細かいことは覚えなくていいです。
全体的に素早く何度も読む感覚で行ってください。精読ではなく、回数でカバーする感じです。
- 本を素早く捲り、どんな章があるか何度も確認し、頭に本の構成のイメージを作ります。
- 各章の概要を、素早く何度も捲ることで、全体的に理解していきます。
- 大事なことを書いていそうなところだけ読みます。
- 適当に何回も読み流してください。
2、ドットインストールで学習
上記の1で大体プログラミングのイメージがついたら、実際にプログラミングしている動画を見て、ポイントを押さえます。
ドットインストールというサービスがとてつもなくコスパがいいのでお勧めです。
月1000円程度で、体系的に纏められたプログラミングのレクチャー動画を見放題です。
見ながら、自分が大事だと思ったことを、ドットインストール内のメモ機能を使ってメモします。
難しいところは飛ばしてもいいです。
3、サンプルを改造する
この段階で飛躍的に知識レベルと能力が向上します。
いかに、この3まで早く到達できるかが、最短学習のカギです。
環境構築について
様々な、環境を選べるかもしれませんが、一番メジャーだと思うものを選ぶのが身のためです。
理由は、システム構築をしているとしょっちゅうわからないことが出てくるのですが、メジャーなものは、ググれば解決策が見つかりやすいからです。
逆に、マイナーな環境を使っているとトラブルが起きたときにしんどいです。理由は、調べても中々、解決策と呼べる情報やヒントが見つからないからです。
これはとても重大なことです。
ちなみにwebサイトを作るのであれば、ローカル(自分のPC内)で環境を作るより、エックスサーバー(レンタルサーバー)で月1000円位払って、そこで運用するのが楽です。
サンプルプログラムの入手
いろんな単語でググって、サンプルプログラムを見つけてください。
簡単なプログラムの方がいいです。実際にプログラムのコード(記述)を見れるならそれを参考にして自分で作ってしまうのもいいと思います。
サンプルプログラムの改造
まず、正常に動作するか確認してみてください。
次に、そのプログラムを見てどのような仕組みで動いているか確認します。
ソースコードが短ければ、必要があれば、紙に印刷して、どこの部分で何をしているかメモをしてもよいです。
改造
引き算する
何か、書かれているコード(プログラム)の一部を、区切りのいいところで、コメントアウト(=無効化)もしくは、消してみてどうなるか試してみるといいです。
動作確認したときに、動きがなくなったところが、さっきコメントアウト(=無効化)もしくは、消してみたコードに対応します。(例外もあります。その時は、コメントアウトする範囲を小さくしましょう)
足し算する
何か、現在の動作に動きを足してみましょう。すでに書かれているコードの一部を、複製してみるのもいいです。
動作を確認して、動作が増えた部分に対応するのが、追加したコードです。
ポイント
改造するときにわからないことがあったら、そのコードをコピーしてググってしまいましょう。そうすると素早く、ヒントを見つけられます。
例えば、以下で検索するといいです。
『(学習中のプログラミング言語) コード』
やっているうちに気付くと思いますが、コードの記述の仕方を忘れても、ググればすぐにわかります。
だから、細かく覚えてなくても、ググるのが速ければ、問題ないのです。
慣れれば、本で該当箇所を探すより、圧倒的にググる方が速いです。
便利なサイトは、お気に入りに登録すると便利です。
(もっと便利なのは、google keepというgoogle のメモサービスを利用することです。)
4、自分で最初から作ってみる
かなり手間ですが、これが一番身に付きます。
とても手間ですが。
わからなくなったら、シンプルなサンプルプログラムを探して、参考にしましょう。
開発に取り掛かるときのポイント
開発しはじめると、必ず意味不明なエラーに悩まされるときが来ます。
その時の対処の仕方は以下です。
流れを細かく追っていく
どこでエラーが起きているか、場所を特定するために、色々な箇所に変数を使って、数字の変化を追ってみてください。
そうすると、どこまではうまくいっていて、どこからおかしくなるかというのがわかり、エラーが起こっている箇所を特定、もしくは範囲を狭めることができます。
エラーのメッセージをそのままグーグルの検索にかけてみる
全く同じエラーメッセージが出た人が、どのように対処したか、ヒントを探してみるといいです。
時には英語で書かれた掲示板とかにたどり着く場合があります。
その時は、英語が苦手なら、ブラウザでgoogle chrome を利用されている方は、右クリックで日本語に翻訳して、
大体どんなことが書かれているかヒントをもらった上で、英語の原文に戻し、重要そうな文章を精読するといいでしょう。
英語が出てきてもビビらないで、諦めてしっかり読むと意外と解決します。
質問機能がついている掲示板であれば、そこで質問してもいいです。
周りに詳しい人がいる場合は、その人に聞くのが一番速いですね。
他のことをやる
もし席を離れることが出来るなら、気分転換に別のことを行うといいです。
たまに、ふと解決策が浮かんでくることもあり、それで試すとうまくいくこともあります。
別の処理で代用できないか考える
どうにもならないときは、時間がもったいないので、別の方法で、大体同じ動作にならないか考えてみます。
ユーザーから見たら、処理をどう書いてるかというのは、興味がないことが多いので、一つの記述方法にこだわらず、代替手段を探すことで、進捗をさせることが出来ます。
外部の機能を利用できないか考える
今の時代便利なもので、必要な機能をすでに誰かが作って、無料で提供されている場合があります。
それを組み込んでしまって解決させる方法もあります。
機能を削ることを検討する
どうにもならなければ、ユーザー目線で別である機能、理想ではないけど、それに近い機能に代替できないか考えます。
もしそれすら出来なければ、機能を削減するか、それでもどうしてもその機能が欲しいなら、誰かにお金を払ってやってもらいます。
プログラミングを限界まで単純にまとめると
以上がプログラミングを勉強し、開発するまでの流れです。
でも基礎レベルは超簡単なので、せっかくなので、プログラミング学習のポイントを以下でまとめます。
プログラミングのロジック(仕組み)
初心者向けに極限に簡単にいうと、2通りしかロジック(仕組み)はないです。複雑に見えるプログラムでも、これを重ねているだけです。
この2通りのロジックを動かすために、その他全てのものは用意・準備・設定されるといっても過言ではないです。
※ちなみに、プログラム(コード)は上から下に順番に処理がされていきます。
①分岐
もしAが起こったら、Bの処理をする。Aが起こってなかったら、Cの処理をするといった具合です。
実際の代表的な記述は以下のようなものになります。
if ( A起きる? ){ 処理内容B }else { 処理内容C }
あっち向いてホイに例えてみると以下になります。
if( じゃんけんに勝つ ){ 指を上下左右に動かす }else{ 顔を上下左右に動かす }
じゃんけんに勝ったら、相手に向かって、指を上下左右のいずれかに向けますが、じゃんけんに勝てなかったら、顔を上下左右のいずれかに向けます。
②繰り返し
一言で済ますとループです。『Aの状態』の間、『Bの処理』を繰り返し実行するというものです。
実際の代表的な記述は以下のようなものになります。
while ( Aの状態? ){ Bの処理 }
whileは英語で、~する間って意味ですね。
釘を金槌で打つ作業に例えてみると以下になります。
while( 釘が出てる ){ 釘を金槌で打つ }
釘が出てなければ、釘を金槌で打つという処理は終わります。
プログラミングで処理される数字や文字について
数字や文字列をそのまま処理することもできるのですが、変数という箱を用意してあげて、その箱にいろんな数字や文字列を適宜入れ替えて『箱』として処理することもできます。
単純に言うと中学の数学の変数Xとかと大して変わりません。
数学と同じように、数字で計算することもできるし、数字が中に入っているXとして計算することもできるということですね。
違いがあるとすれば、文字列とかも加工する処理ができますし、Xには文字列も加工するために入れることができたりするってことですね。
ちなみに
変数と似ているものに配列というものがあります。変数の箱を、電車の1車両という箱状のものに例えるならば、配列は車両がたくさん連なった1つの電車になります。
要は、配列とは変数という箱が順番に並んでいて、それが1セットになっているものです。配列の3番目を処理するなどといった具合に扱われます。
オブジェクトというものについて
これから学ぶプログラム言語がもし、『オブジェクト指向』と呼ばれるものに分類されるプログラミング言語であれば、最初はこの『オブジェクト』というのがわかりにくいです。
一言で済ますとテンプレみたいなものです。テンプレーション(ひな形)ですね。
すでに部品として出来上がっていて、それを複製して自分のプログラムに合うように改造して使うものです。
テンプレはテンプレのままでは使用できません。自分用にコピーして、修正をしなければいけません。
用語としては、以下になります。
テンプレーション(ひな形)・・・『クラス』と呼びます。
テンプレを自分用にコピーしたもの・・・『インスタンス』と呼びます。
最後に
最短で開発をするには、以下の2点が重要です。
・ゴールはどこなのか?
①プログラムを勉強して知識を付けるのがゴールでしょうか?
②それとも何か作りたいものがあってそれを作ることがゴールなのでしょうか?
③それとも既に出来上がっているものがあって、それを改造することがゴールなのでしょうか?
最短で目的を達成するには、ゴールをはっきりさせて逆算することが必要です。
①なら普通に勉強だけすればいいし、②なら勉強をなるべく簡単にすまして開発しながら勉強するということもアリです。
③なら出来上がっているものを理解するだけの知識だけあれば乗り切れます。
最短開発の心がけ
『いかに自分の作業を減らすか』にこだわるといいと思います。
法律的にコピーして大丈夫な部分があれば、外部のものをコピーしてもいいです。
とにかく、大事なのはシステム界隈でよく言われる『車輪の再発明』をしないことです。
つまり、すでに自分か誰かが作成済みのものを、自分で同じものを1から作成するのは非効率だということです。
逆に言えば、一度自分が作った機能は、あらたにその機能が必要になったとき、過去に自分が作ったものをコピペすれば、済むので、
開発すればするほど、将来、新たに開発するときに流用できる部品が増えているので楽になっていきますね。
※コピペできればの話です。法律や契約など、いろいろなしがらみがあると思うので、そこは注意してください。
一番重要なこと
最後なのですが、一番重要なことは、作ったものがちゃんとユーザーに使われる見込みはあるのかということです。
これは、個人でアプリを作り、お客様に届けるのも、その人がほとんどやるという状況にある人に、僕が失敗した経験から、心から伝えたいことです。
多分、これはほとんどの人にとって関係のない話です。
関係のない方は、恐縮ですが蛇足なので、無視してください。
この記事を読んでいる人がひどい目に合わないように、僕が一番伝えたい想いは実はこの後の数行にあります。
良いものを開発しても以前と比べて、ユーザーに選ばれるのが大変であると感じます。
当たり前だと思いますが、便利なツールや充実した情報がそろい、誰しもが素晴らしい物を作れるようになったとき、素晴らしい物が世の中にあふれかえることになります。
つまり競合が増えるということで、それは、お客様に選ばれる確率が減るということです。
単純に言うと、『開発のしやすさ』と『開発したものの利用されやすさ』はトレードオフの関係にあります。
つまり、開発がしやすくなる社会になればなるほど、物を売ることは難しくなっていくということです。
実際、いい物を作れば、勝手にお客さんが寄ってくる時代は終わりました。いい物を作りさえすれば売れるのであれば、世の中にセールスマンや、マーケターと呼ばれる職種はいませんし、広告という言葉もありません。
(それは、士業のような弁護士や公認会計士といったサービス提供者にも同様にいえることで、昔とは違う部分だと思います。)
ではどうすればいいかというと、いきなり作るのではなく、よく下調べして、何通りも手段を考え、時には周りの人と協力したりすることです。
もし一人で商売するのであれば、そもそもプログラミングをあなたがするべきかという前提から疑うことも選択肢に入ると思います。
というのが私が一番伝えたかった考えです。
それ以外の人は、プログラミングの学習は、応用が利くと思うので、そのまま突き進んでください。
関連記事も以下で紹介しています。
関連記事:【暗記のコツ】偏差値74の僕が実際使った最強の記憶方法【記憶の世界大会でも使用】
関連記事:【社会人の英語学習法】時間もお金も最小限【日常会話~ビジネス会話まで】
関連記事:【資産運用おすすめ】5兆円運用の部署の元分析者が初心者におすすめする投資
関連記事:【ダイエット成功】太ってた私が10kg痩せてトレーナー資格まで取ったダイエット方法