タイトル通りなのですが、プログラミングは「習うより慣れろ」が早道です。これ以外の方法を取ると、なかなか先に進めません。ここではその理由をお伝えし、では具体的に何すればいいのか、というところまでお伝えします。
ちなみに私は、Winddowsアプリ、WEBのフロントエンド、携帯、家庭用ゲーム等の開発に携わっています。片手では数えきれない程のプログラミング言語をこなしています。他者が編集したものを読むに至ってはいちいち覚えていません。きっと、両手を軽く超えるでしょう。
主に学生、もしくは業界未経験の若手社会人に向けてお伝えします。
何故、プログラミングは「習うよりも慣れろ」なのか
プログラミングは広く奥が深いため、終わりはありません。入門書の読破に時間を費やしても、そこに書かれていない事で躓き、学習が滞る事があります。広範囲が学習の阻害要因です。出来るだけ早い段階で狭め、学習の邪魔になるものを独力で取り除けるようにする必要があります。そうすれば、独力で学べます。これが最も効率的な学習法です。
早めにプログラミングに取り掛かる方が良い理由は
- 覚えることが少ない
- 解決手段を学ぶ方が大事
- 完成に価値がある
言葉をしゃべるのと同じです。文法を覚える時間に割くよりも、他者との会話です。常に変化拡大しているのに、全てを頭に叩き込んでから会話をする人はいません。プログラミング学習の目的が何であろうと、この慣れの重要性は変わりません。学校の課題やテスト対策、IT業界に入るためであっても同じです。本当かどうかは、ここから先を読むとわかります。
プログラミング言語は、覚えることが少ない
全ての理解と暗記は、果てしなく時間を費やします。超大手の開発現場ですら、手元に書籍や雑誌を手元におき更にネットで検索しながら作業しています。言語・ライブラリ・開発手法が、常にアップデートされます。全てを暗記するのは無駄です。覚える量を少なくして、必要な知識だけを身に着けるのが成功の鉄則です。
学生ならば試験で望む点数をとれるように教科書を覚える程度で済みます。業務目的ならば、一通り簡単な入門書を軽く理解する程度で十分です。そもそも言語のマスターの終わりはないので無駄です。
プログラミングスキルが上昇するにつて、開発の効率化と提案の質と量の拡大が見込まれます。人材価値も高まります。しかし、それは後のことです。先に成功ラインに乗らなければその先に行けません。実際、求人票を確認すると未経験者可を多数見つけられます。
とはいっても、文法は軽く押さえておく必要があります。入門書を手に取り一通り目を通します。この時、記載内容の有無について頭に入れておきます。すると、コードを編集で迷ったときに、書籍を見返すことで迷い解消できます。何度見返しても構いません。そのような学習程度で良いのです。そして、いつかその書籍を忘れるほど不要になります。
もちろん、高品質を求められる開発現場ならば、結論は異なります。しかし、未経験者は期待されません。開発現場に立てば、後から身につくからです。期待されているのは、後述する取り組み姿勢です。
未経験者がプログラミングで知っておくべき範囲は、
- 学生
- 教科書をマスター
- 業務で覚えたい人
- 簡単な入門書を一通り読むのみ
解決手段を学ぶ方が大事
教科書や入門書に書かれていない障害があり先に進めないことがあります。これはメディアに問題があるからではなく、日々情報が更新されているからです。先に行けない例は、
- 開発環境をインストールしたけど、動かない
- 統合環境の使い方が分からない
- プログラムが途中で止まったけど、解決方法が分からない
- したい事を簡単に早くできる方法を知りたい
こんな時、どうするのか。最初から手短な人に聞く人が、その後に成長するでしょうか。上の例のような事がずっと後も続きます。そのため、この時の取り組み姿勢が、その後の成長に大きく影響すると考えられます。
開発現場では、こんな手段が取られます。
- グーグル検索
- 所有している(電子)書籍
- リアル書店
- YouTube
- SNSで質問
- 上司に報告し、納得いくまで調べる
どれも簡単ですが、実務で役立てようとすると一朝一夕にはなりません。検索は、英語や検索方法に慣れておく必要があります。SNSのようなコミュニティでの質問も、関係性が成り立っていないと適切な答えは返ってきません。あなたを知らないからです。
現在は、知識の有無以上に、解決手段をどれ程持っているかがプログラミング能力の差になっています。この中に、オンラインスクールの講師に聞くという手段も残されています。多少の出費はありますが、最も時間を節約できる手段です。
問題解決の原動力になるのがモチベーションです。答えが得られる環境にあっても、意欲がなければ得られません。支払いが発生すれば尚更です。学習意義を顕在意識が理解する事で、自然と解決手段を学ぶでしょう。目標を明確にしてモチベーションをあげる事こそが、学習の効率をあげることに繋がります。プログラミング学習における土台なのです。
完成に価値がある
目標を明確にしておかないと、学習効率が悪くなるどころか挫折してしまいます。やらなくていい事をやり続けられるのは、時間を持て余している人だけでしょう。完成イメージにより、
- より望ましいものをより効率的に作る意欲へ繋がる
- 幅が広いプログラミング学習の範囲を狭め、集中的できる
- 意欲と集中により、より理解し、より覚えやすく、より続けられる
モチベーションを維持させる事で、余計なことを学習しなくて済みます。広く奥が深い言語の学習ではこの方法が欠かせません。私自身、この方法を好んでとっています。興味本位で学習すると、いつの間にか放置してしまうからです。
完成イメージの中に期限を設ける事もオススメです。「今日中にこの機能を入れ、出力を確認する」と意識する事です。より望ましい完成形のため、時間を浪費する恐れがあるからです。期限を明確にすると、間に合わせるために頭が常に学習に向き多様な手段を思いつきます。その過程が後の開発に役立ってくるのです。
効率の良いプログラミングの学習手順
以上は、効率の良い学習の結論とその理由でした。ここからは、それを踏まえて具体的にどうするのかをお伝えします。
- したい事を明確にする
- 簡単な入門書を一通り読む
- 作り、行き詰ったらネットや書籍に解決策を求める
- 完成させ、他者に見てもらう
- 改修して、もう一度見てもらう
- 詳しい書籍を一通り読む
- プログラムソースの見直し
目標設定をすることにより、学習範囲が狭まります。そのため、Pythonのように習得が容易な言語では、入門書の理解に一週間ほど(100時間)で十分です。
入門書の最初の理解は半分程度
高級言語の入門書は次のような順番で書かれています。
- 開発環境の構築と使い方
- コーディング全般で必要な文法(変数定数・フロー制御等)
- データ構造
- 関数
- クラスとインスタンス(オブジェクト指向のベース)
- モジュール・パッケージ
- 並行処理
- テスト方法
- etc
1~4をマスターしていれば、プログラミングの足がかりができます。初期段階の読み方は、設定した目標と一致しない内容であるならば、何がどこに書かれているか覚える程度で十分です。
また、試験対策でもならば、5教科の勉強のように全てを暗記する必要はありません。作りながらの方がより覚えられます。その際、必ずどうしてそのように動くのか咀嚼する必要があります。この理解する姿勢は、5教科の学習方法と同じでおろそかには出来ません。
できるだけ早くマスター2~4をマスターしたいのであるならば、書籍のソースコードをネットからダウンロードする事をお勧めします。最初から手で全てコードを打ち込むと勉強にはなりますが、時間が掛かり早く実現できないために学習意欲を削がれるという代償が伴います。変更しながら理解するとで、余計な作業が省け、より早く理解ができます。もし書籍を読みながら深く理解できるようならば、編集すら省いても良いでしょう。
試験対策の学習でもなく、目標がないなら、順番を入れ替え入門書で大まかに理解した後に、目標設定をしても構いません。大事なのは、あなたが夢を実現するための持続化です。
入門書の選び方と読み方
あなたに最適な書籍は、5教科の参考書と同じで、人それぞれです。しかし、プログラミング学習特有の参考となる傾向があります。
- 著者が外国人よりも、日本人の方が理解しやすい
- 著者が著作者として有名である程、理解しやすい
外国人著者の場合、分かりづらい翻訳や著者の個人的な視点が盛り込まれる傾向があります。また、著作者として数多く出している人の書籍は、躓きやすい点に触れ、逆に余計なことは書いてありません。あくまでの学習初期の段階における目安です。学習が進むとは、外国人著者の書籍を好み、現役エンジニアの書籍を求めるようになります。
もし書店に出向く事ができないのであるならば、アマゾンのkindle unlimitedが良いでしょう。月額980円で読み放題です。時間と現金の両方を同時に節約できる素晴らしいサービスです。しかも、今は最初の30日間無料です。
また、学習の初期段階の読み方も、5教科とほぼ同じです。違いは暗記する必要がないということです。覚えていればその後の学習が容易になりますが、全体像の把握こそが大事です。繰り返しますが、2~4を除き、どこに何が書いているのか覚えておくだけで十分です。
私は、2~4を読むときには、5教科の学習と同じように、大事なところや理解不足なところに付箋やマーカーで印をつけ、何度も読み返して頭に入れていました。
プログラミングの早期習得に欠かせないサンプルコード
ここまでで、品質はともかく作れるだけの下地はできました。次の段階は、目標設定に従い作るものを決め、早めに手を動かすことです。
書籍のサンプルコードを変更し、学習を進めます。書籍のソースコードはダウンロードできます。最初から全て入力すると時間をロスします。購入済みの入門書にしたい事が実現できないようだったら、買い求めたいところです。わずか数千円でロスを削減できるのですから。
他者のソースコードの利用方法は理解にあります。コピーして都合のいいように編集して終了ではないのです。何故そのような作りにしたのか、別の方法はないのか、深く考察することにより理解が深まります。実際、出版されている書籍のサンプルには、もっと効率の良い書き方を見つけられることがあります。
プログラミング習得のための目標の具体化
目標の「したい事」をより具体的にします。事務作業の自動化、Excel操作、機械学習等のアバウトなものではなく、もっと具体的にです。
例えば、SNSを利用して知人のおラーメン店を紹介してもらうために、いくら支払うのが妥当でしょうか。それを確認するために、IT技術を使うとします。Twitterからラーメン店の情報を発信している人をリスト化して、フォロワー数・過去の発信件数と内容・リツイートされた数。これだけを収集すれば、宣伝による効果が分かります。ここまで具体的にすると爆速で学習が進みます。
早期習得に役立つ解決チャンネルの複数化
手を動かして、目的未達にならないように、解決方法に至る経路を複数用意しておくと良いです。Google検索、書籍、YouTubeはもちろんですが、他にもあります。
- オンラインの学習サイト
- オンラインスクール
- コミュニティ(SNS・オンラインサロン)
そして、残念ですが、無料のサービスでは解決効率が悪くなります。無料は集客のためであり、受け答えをする程時間を割いてくれません。金銭を支払えば、貴重な時間を失わずに済みます。金銭はプログラミングを学べば100倍になって戻ってきますが、時間は取り戻せません。Kindle unlimitedでも月額980円です。この金額で短時間で済ませられるのです。
他者の評価を受けることで更に上達する
作ってお終いではありません。誰かに完成品を見てもらうと更に上達します。というよりも、作って手仕舞いだと、永遠にそこそこの人で終わります。
誰かに見てもらうのは、批評され改善に役立てるためです。学生だろうが、とりあえず動けばOKな業務であろうが同じです。そして、批判を恐れる必要はありません。何故なら、あたたの価値と作ったものの価値は別だからです。あたたが加えた行為が、あなたが学んだ事であり、社会に役立つ価値になります。もともと本を理解して、他からソースコードを持ってきて作ったものです。あなたと制作物の価値は全く別です。
そして批判されて理解できるのであるならば、積極的に改善した方が学びになります。製造段階では、自分の都合のいいように組み立てるため、制作物は自分自身との妥協の産物です。
また、ソースコードのレビューが出来る人がいるならば、依頼した方が良いでしょう。独学による学習は知識の偏りになるため、ここで改善した方が良いのです。実際、開発現場でもレビューが行われます。
そして、再び書籍やその他のメディアを使っての学習に入ります。永遠に終わることはありません。他者と切磋琢磨しながら学び、そして役立つ人になれるのです。
コメント