【経験談から学ぶ!】より早くプログラミングを身につけるための方法
プログラミング初心者向けに最も効率的な学習方法のための要点を紹介しています。独学でエンジニアになった人の経験談に基づいているので、これからエンジニアを目指す方には参考になるでしょう。学習方法や目標設定など細かく解説。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
本稿は、Codementorのブログ記事を、Codementorより了解を得て日本語翻訳し掲載した記事になります。
本稿のテーマは、プログラミング学習において何をすべきで何をすべきでないかです。また、最も効率的な学習方法のための要点をお伝えします。
これらの要点は、独学でエンジニアになり、現在オーストラリアのThoughtWorksに勤めているNatasha Postolovski氏の経験に基づいたものです。
現在、これまでより多くの人々がプログラミングを学習し始めているようです。インターネット上には質の高い教材、講義、メンターの存在が充実しているため、異分野のバックグラウンドを持つ人々も、セルフスターターとしてプログラミングの独学をスタートできる環境があります。
彼らの目標は、アプリの開発、Webサイトの構築、テクノロジーによる問題解決、エンジニアになることなどさまざまです。
学習のリソースが豊富に手に入るのは良いことですが、問題点もあります。
- コード学習を始めようとするとき、何から始めるべきでしょうか?
- 学ぶことと学ばないことは、それぞれ決まっていますか?
- 最良の実践方法と、スキルを高めるための最速の方法は何でしょうか?
この記事はこれらの問いに一部答えることを目的としています。
画像:Googleトレンドのデータより、過去数年にわたりプログラミング学習への人々の関心が高まっていることが示されている。
目次
- 目的を明確にする
- あなたにとって最適な学習方法を知る
- あなた自身にとって重要なことに取り組む
- 良い仲間を見つける
- 継続すること
- 学習進度を管理する
- 完了させる習慣
- エラーメッセージはあなたの友
- 全てを学ぼうとしないこと
目的を明確にする
コードを学習する理由は人によってさまざまです。
フルスタックエンジニアの仕事に応募するためには、JavaScriptとRubyを学ぶ必要があるかもしれません。学校の課題を終わらせることが目的であれば、HTMLとCSSの基本だけを学べば十分かもしれません。Numpyでデータ解析をするには、Pythonについて少しの知識は必要です。
また、Swiftで書いてみたいと思うiPhoneのゲームのアイデアや、Unity3Dで作ったバーチャルリアリティ型のスマッシュヒットゲーム(対象物を粉々に破壊するゲーム)のドキドキするようなアイデアを、持っているかもしれません。
数十億ドル規模のスタートアップのアイデアを思いついたら、機械学習(マシーンラーニング)を学ぶ必要が出てくるかもしれません。問題を解決するためにプログラミングが必要になるかもしれません。
コード学習を始めてさらに深くプログラミングの世界に入ると、目的を達成するために必要な具体的なテクニカル・スキルについて、より多くを発見するでしょう。しかし最初は、なるべくシンプルにスタートすることが理想です。
次のことを一般的におすすめします。
- 静的な(データの格納、動的な動作を必要としないという意味の)Webサイトを作るときには、HTMLとCSSを最初に学びましょう。必要であればJavaScriptも学習しましょう。
- iOSのアプリを作るにはSwift、Androidアプリを作るにはJavaを学びましょう。
- Webアプリケーションを開発するには、HTMLとCSSに加えてWebフレームワークも学びましょう。Webフレームワークとは、あなたの開発するWebアプリケーションへのデータ格納や動的な動作の追加を、より容易に行うためのツールです。例えば、ユーザーアカウントを設定したり、データベースからデータを取り出したりなどの機能です。人気のあるWebフレームワークとしては次のようなものがあります。
- Django(Pythonで書かれています)
- Ruby on Rails(Rubyで書かれています)
- Meteor(JavaScriptで書かれています)
- Laravel(PHPで書かれています)
- Webフレームワークは、何を開発したいかに応じて選びます。私個人としては、コード学習者にはRuby on RailsRailsが良いと思います。というのも、ドキュメント形式の「Railsガイド」によって、体系的に詳しく解説されているからです。
- ゲームを開発するには、Unityを学ぶといいでしょう。
- データサイエンスや機械学習(マシーンラーニング)には、Pythonとそのライブラリを学ぶのがいいでしょう。ライブラリとは、例えばデータ分布図(Scatter plot)を表示したりといった特定のタスクを、より容易に実行するためにあらかじめ書かれたコードのことです。
何を学びたいかについてアイデアが浮かんだら、次にタイムライン(予定表)も考える価値があります。あなたのプログラミング学習に適したペースを教えてくれる指標として役に立ちます。
理想的には、このような宣言文を書いてみるのがいいでしょう。
「3ヵ月以内に、友人のバンドのためのWebサイトを公開したい。」
または、「6ヵ月以内に、ビジネスアイデアをMVP(Minimum Viable Product:仮説検証やコスト削減の目的で開発される、必要最低限の性能のみ備えた製品)の形でローンチしたい。」
具体的な目標が思い浮かばないとしてもモチベーションを保ち、目標達成度を管理するのに役立つので、何か1つ作っておくのがいいでしょう。
「図書館の司書の仕事を辞めて、エンジニアになりたい。」というような目標ではなく、より具体的に、これに「12ヵ月以内に」を加えたような目標にするべきです。時間軸をはっきりと持つことは、進捗管理をする上で役立ちます。
あなたにとって最適な学習方法を知る
プログラミング学習に、ベストな方法はありません。
- ある人はYoutubeのビデオやスクリーンキャストを観るのを好むでしょう。
- 他の人は、本の世界に没頭するのが好きです。
- また他の人は、実践型学習を好みます。
- また他の人は、終始一貫してドキュメンテーションを読みながら進めます。
- また他の人は、メンターから最も良く学ぶことができます。
- また他の人は、コーディングブートキャンプを通して学びます。
学習方法は、あなたにとって効果の高いものも、それほど効果的ではないものもあるでしょう。プログラミング学習を始める前に、あなた自身の好む学習方法と、それを軸としてどのような学習の旅を設計したいかについて、理解しておく価値はあります。
例えば、2006年にRuby on Railsの人気が出始めた当時は、数多くのプログラマたちは、最初に愛称「ピッケル本(Pickaxe Book)」として知られる、表紙の絵がつるはし(pickaxe)の入門書からRubyの学習を始めていました。
1冊864ページにわたり、プログラミング言語Rubyを詳解しているこの「ピッケル本」は、Rubyのプログラマの間では伝説的な存在です。しかし初学者にとって、ここからスタートするのは難易度が高すぎます。
あなた自身にとって重要なことに取り組む
コード学習を進めているときには、あなたにとってあまり意味のないレクチャーに何時間も費やすことも、よくありがちです。トイプログラムをToDoリストのすべき事のようにこなしたり、つまらないWebサイトを作ることもあるかもしれません。
これも良い学習方法の1つですが、モチベーションを上げるには効果的ではありません。
Webアプリの開発を学ぶには、あなた自身の生活の中の問題を解決するアプリを開発することから実践しましょう。どんな小さなアプリでもいいのです。ゲームの開発を学ぶには、あなた自身がプレイしたいと思えるようなゲームを作ることが大事なのです。
私の小さな実体験より:数年前に、私はプログラミングスクールの講師向けクラスの教育アシスタントを務めていました。例外なく、そのクラスで最も多くを学んだ講師たちは、自分自身のために何かを開発することを実践した人たちでした。
クラスで最も成果を上げた講師は、家族の家計を記録するためのシンプルなアプリの作成に取り組んでいました。逆に、自分自身のためには開発を行わず、ただクラスで課された課題をこなしていただけの講師たちは、学ぶところが最も少ないようでした。
私が彼らを観察してわかったことは、人が最も高くモチベーションを持って意欲的に学び、記憶の効率も高まるのは、学ぶ対象が自身にとって直接的に役立つと思うときであるということです。
次のようなシナリオを考えてみてください。:2人の人がいて、Webサイト上でのクレジットカードの決済処理について学習しています。1人は「将来的にいつか役立つかもしれない」という理由で学んでいます。
もう1人は、独立事業としてドキュメンタリーを制作しようとしているので、Webサイト経由で寄付金を受け入れる方法を理解する、差し迫った必要があります。
2人のうちどちらが、学習内容をより良く記憶できるでしょうか?
学習スピードを加速し、学習内容を定着させるには、あなた自身が好きになれる個人的プロジェクトや、学んだことを応用できるプロジェクトを持つことが、最良の方法です。
良い仲間を見つける
メンターでもプログラミング学習者でも、あなたをサポートしてくれる仲間を持つことの価値は計り知れません。プログラミング学習が困難に思えるときにも、他の仲間も同じように努力していると知っていることは支えになるでしょう。
メンターはあなたのプログラミング学習における努力を強力に後押ししてくれるでしょう。彼らはあなたが行き詰まったときには助けてくれますし、疑念を持ったときにはアドバイスを与えてくれます。また、次に何を学ぶべきかという学習の方向性を示してくれますし、最終的な目標に向けてナビゲートしてくれます。
あなたの目標(例えば、エンジニアになる、インディーゲームをローンチするといった目標)をすでに達成した知り合いがいれば、彼らはメンターの候補者となります。
実際のメンターとメンティー(弟子)の関係は、「私のメンターになってくれますか?」という申し出から始まるというより、コーヒーや食事やビールのお誘いから始まり、相互にとって上手くいく関係であればその延長として始まることが多いです。
継続すること
2週間に1回のペースで3時間学習するよりも、毎日20分ずつ規則的に学習した方が効果的です。継続して学習することで、学習内容を定着させたり、効率的に記憶できる効果があります。
学習進度を管理する
プログラミング学習が長い旅になれば、途中でそれまでの達成記録を簡単に忘れてしまうかもしれません。プログラミングの基礎をマスターした後には、それ自体素晴らしい進歩であるのに、まだ未知のことがたくさんあることの方に意識が向くかもしれません。
学習進度を管理して、今までに達成できたことを振り返るのが重要なのはこうした理由からです。
毎日または毎週、新たに学んだことを1段落くらいにまとめて記録しましょう。進歩を日記に記録しておけば、将来振り返るときに、達成度を自己評価するのに役立ちます。
完了させる習慣
コード学習を遅らせる要因の1つは、タスクを未完のまま放置することです。
最初にプロジェクトを開始するのは楽しいものです!思いのままに、構築したいものや学びたいものを選べます。
しかし、難し過ぎることに直面したらそれは後回しにするかもしれません。もしそのタスクを完成させる時が来なかったら、どうなるでしょう?困難なタスクを先延ばししても、学ぶことは何もありません。先延ばしする習慣に陥ってしまうと、知識にもムラができてしまいます。
エラーメッセージはあなたの友
プログラミング学習と密接な関係があるのはエラーメッセージです。
赤い文字で埋まった恐ろしいスクリーンやしつこく出現するポップアップウィンドウは、書いたコードに間違いがあると私たちに教えてくれます。直感的には、これらのエラーメッセージから一刻も早く離れて、解決策を探さなければと思うかもしれません。しかし、時間をかけてよく読んでみると、エラーメッセージには数多くの役立つ情報が記されていることに気づくでしょう。
エラーメッセージは、何についてどこの箇所が間違っているのかを正確に教えてくれるので、素晴らしい存在です。実際に、エラーメッセージを十分に読まないことの方が、かえって最悪の事態につながります。よって、エラーメッセージはあなたの友だと覚えておいてください。あなたを罰するためではなく、助けるために存在しています。
全てを学ぼうとしないこと
テクノロジーについて最も素晴らしく、同時に最も難しいことは、その全てを学ぶことはできないということです。実際に、知れば知るほど自分の無知を知ることになるでしょう!
学ぶことができるプログラミング言語、Webフレームワーク、仕様、ライブラリ、プロトコルは山ほど存在しますが、全て学習しようとするのは誤りです。
ウサギ穴の迷宮に入らないように(”Go Down the Rabbit Hole”:ルイス・キャロルの「不思議の国のアリス」からの表現)注意してください。ゴール達成のために必要なことをリストアップしたら、達成するまでその決定は固守してください。途中で他に学びたいことを見つけて脇道にそれそうになっても、それはどこか忘れない場所にメモでもしておいて、将来しかるべき時が来たら、改めて取り組む方がいいでしょう。
脇道にそれないことも、良いプログラマーの重要な要素です。今の段階から、またはもっと前のプログラミング学習の初期段階から、こうしたスキルを伸ばしておくこともできます。
プログラミング学習の旅には台本がないことも覚えておいてください
コードを学ぶには数多くの方法があります。プログラミングを早く習得する人もいれば、もっと時間がかかる人もいます。あなたにとって難しい概念を他の人が容易に理解できることも、その逆もありえます。
あなたの旅は直線コースではないかもしれません。途中で休んだり、寄り道をしたり、疑念を抱くこともあるかもしれません。また、プログラミングを学んだ後に忘れてしまったときには、1から全て学び直さなければならないこともあるでしょう。
最後にお伝えしたいのは、プログラミングの学習方法に唯一正しいものはなく、万人に適した計画表もないことです。
私たち一人一人に個性があるように、プログラミング学習も人それぞれやり方があるでしょう。不確実性を積極的に受け入れて、果敢に挑戦してください。その価値はとても高いと思います。
[お知らせ]TechAcademyでは初心者でもエンジニアになれるオンラインブートキャンプを開催しています。これからエンジニアを目指したい方、プログラミングを始めてみたいと思っている方はぜひご覧ください。