「これからはITだ!さぁ、プログラミングを始めるよ!」と決意しても、初心者がプログラミングを独学で始める場合、何から手をつけていいのか・どこからスタートしてよいか分からない場合が多いのではないでしょうか。
とりあえずプログラミングに関する本やネットで調べてみるものの、専門用語に圧倒されて時間がかかってしまったり、本の分厚さに驚き挫折するケースが多くあります。しかし、プログラミングは、始め方と進め方が分かれば、独学でも必ずできる様になります。
「きっちりやると決める」とプレッシャーになるので、ゆるふわに、「これからプログラミングを始めるよ、最初は分からなくてもいいよ」、という気持ちでOKです。プレッシャーが極力ない状態で始める形が理想です。
この記事では、独学でのプログラミングの始め方を説明します。繰り返しになりますが、学校の授業の様にきっちりした方法ではなく、ゆるふわにプログラミングを始めたい方や初心者は、ぜひ参考にしてください。
Webアプリのプログラミングを念頭に置いた記事となっていますが、デスクトップアプリやスマホアプリ等、他のアプリのプログラミングでも、この方法で始めることができます。
この記事は、こんな人向けです
・独学でのプログラミングの始め方を知りたい方
・これから独学でプログラミングを始めようとしている方
・過去に独学でプログラミングを始めたことがあるけど、挫折してしまった方
・効率よく独学でプログラミングを学べる方法を知りたい方
本記事を書いている僕には、以下の経験があります:
- プログラミング歴20年以上(独学、仕事でもプログラミングしています)
- プログラミング書籍の執筆者
- WEBアプリ、組み込み系、デスクトップアプリやスマホアプリをこれまでに開発
この記事を読むことにより、「プログラミングの具体的な始め方、学習を進める手順」をイメージできる様になります。
プログラミングを始める前に
プログラミングの基礎知識
現在のコンピュータは、ノイマン型コンピュータと呼ばれています。ノイマン型コンピュータは、プログラムという命令のカタマリをデータとして記憶装置(ハードディスクなど)に記録し、これを順に読み込み、処理・実行することで動作します。
このプログラムを作る行為をプログラミングと呼んでいます。
プログラムには、色々と種類があり、それぞれに適したプログラミング言語でプログラミングする必要があります。プログラミングを始めるには、まず、作りたいプログラムを選び、次に、それに適したプログラミング言語を選ぶことが大切になります。
以下に、実際にプログラミングされているものの例を示します:
- オペレーティングシステム(OS)
Windows、Mac、Linuxなど - Webサイト・Webアプリ
Googleの検索エンジン、Amazon、メルカリ、Yahoo!JapanのニュースサイトやFC2のブログなど - デスクトップアプリ
Microsoft Word、Excel、テキストエディタ、ゲームなど - スマホアプリ
Facebook、Instagram、Youtube、Twitter、ゲームなど - 電子機器
コンビニにあるクレジットカードの読み取り機、エアコン・電子レンジ・冷蔵庫、エレベータ・エスカレータなど - 仮想通貨
ビットコイン、リップル、イーサリアムなど - 業務システム(業務を効率化するためにプログラミングされているもの)
買掛金管理システム、在庫管理システム、物流システム、POS(レジ)など
プログラミングを始めるための準備
プログラミングを始める前に、以下の物・環境を用意しておく必要があります:
- パソコン
- マウス・キーボード
- インターネット接続環境
- 統合開発環境
パソコン
プログラミングを始めるためには、パソコンが必要です。パソコンは、大きく分けると、Windows系、Mac系、Linux系の3種類ありますが、パソコンを既に所有している場合は、そのパソコンを使用してプログラミングを学べばよいと思います。初期投資はなるべく低く抑えるのも、長続きさせるコツです。それぞれの特徴を以下に示します:
Windows系
どこから始めればよいかわからない場合は、Windows系がおすすめです。
理由は、Windows上で動作するアプリの数が多いためです。情報量もWindows系の方が圧倒的に多いため、インターネットで調べものをしたい際に、答えが見つかる可能性が高いです。ただ、iPhoneなどのアプリ開発を中心にする場合は、Macbook系がよいです。
Mac系
iPhone向けのアプリやMac系のアプリを作りたいしたい場合は、同じApple社が作っているMac系がよいです。Mac系は作業効率がよいため、Webアプリなどの開発にも適しています。
Linux系(Ubuntu)
Linux系は、作業効率が悪い(コマンド入力を中心に作業が進む)ため、初心者にはおすすめしません。ただ、OSは無料で入手できるため、今パソコンを持っておらず、予算もかなり限られている場合に限り、候補にしてもよいと思います。
キーボード・マウス
プログラミングをするにあたり、使いやすいマウスやキーボードは必須です。打ちにくいキーボードや使いにくいマウスの場合、入力が面倒になりやすく、腱鞘炎の原因にもなります。打ちやすいキーボードや操作性のよいマウスをこの機会に揃えてみてください。おすすめは、長時間使用しても疲れにくいゲーミング用キーボードやマウスです。
インターネットへの接続環境
プログラミングは、プログラミング自体の作業量のほかに、調べものの量が多くなります。また、WebアプリやWebサイトであれば、自分で作ったものをインターネット経由で公開する必要があります。
プログラミング以外にも、同じ目的の人間が集まったWeb上のコミュニティに参加することにより、ちょっとした疑問の解消や不特定多数に質問をして、フィードバックを得たりすることもできます。インターネットへの接続環境は、そういったコミュニティに参加する際やオンラインスクールを受講する際にも必要なため、準備しておく必要があります。
統合開発環境(IDE)
効率よくプログラミングを進めるためには、統合開発環境(IDE)が必要となってきます。詳細は後述しますが、学ぶプログラミング言語が決まった後に、プログラミング言語用のIDEを準備すればOKです。無償でも使い勝手の良いものが多々あります。
独学でプログラミングを始める時に抱える悩みと解決策
独学でプログラミングを始めると、以下の様な問題に直面して悩みを抱えたり、挫折したりします。
- 進め方が分からない
- 覚えることが多すぎる
- どれくらいの時間が必要か分からない
- ステップアップできている実感がない→モチベーションが続かない
- 分からないことを解決できない(聞ける人が周囲にいない)
- プログラミング用のウェブサイトや入門書の説明が難しくて理解できない
プログラミングを始めるにあたり、上記の様な悩みで、無駄な時間を使わないためには、以下の5つの流れで進めることが重要です。これにより、効率的に、自分のペースで、学習を進めることができます。
- やることリスト(Todo)とスケジュールを作る
- 作成したいアプリを決める
- アプリに適したプログラミング言語と開発環境を選ぶ
- フレームワークを選ぶ
- プログラミング言語とフレームワークの基礎を学ぶ→アプリを作る
それぞれの詳細を説明します。
やることリスト(Todo)とスケジュールを作る
「うわ、Todoとスケジュールだって、面倒くさそう」と思った方は、真面目すぎです(笑)。自分だけが分かればよいので、きっちりとしたものは不要です。
完璧でなくてもよいので、今の時点でわかる範囲で決める→進めるにつれて不足しているものが明らかになれば、それも追加していく形でOKです。
僕が実際に何かを作るときは、「アプリ名Todo.txt」というテキストファイルを作成して、そこにTodoを書いて、大まかな完了予定日を入れます。完了したら実際の完了日を入れていき、後続のTodoの完了予定日を後ろにずらして、現実的なスケジュールで進めます。
実際に作ったpluralsというWebアプリのTodoと進捗は、こんな感じです。9/9にトップページを作成した後、DB側のテーブルレイアウト変更まで、15日も期間がかかっています(笑)。残りの作業が分かればよいので、こんなにゆるくても、実際はアプリも作れるし、プログラミングも自分のペースで学びながら、進めることができます。
更に具体的には、以下の様に進めます:
- TODOの一番最初にプログラミングで何ができるかを調べるタスクを入れる
- 調べる期間(最初は3日とか)を入れて、調べた後に、その後のTodoを入れていく。3日間調べた後に、もう2、3日必要だと思うのであれば、期間を延長する
最初のTODO:プログラミングで何ができるかを調べる
プログラミングで何ができるかを調べるには、QiitaやGitHubでアプリの作り方を検索してみたり、プログラミングコミュニティからアドバイスをもらったり、googleで自力で検索してもよいでしょう。
例えば、Webアプリの作り方を検索する場合であれば、QiitaやGitHubには多くの情報が掲載されています:
- Qiita
「作ってみた webアプリ」で検索 - GitHub
「webアプリ」で検索
プログラミング関連のコミュニティに確認する場合は、有名なところは以下3つです:
pythonのコード例が理解できない、という様な素朴な疑問に対しても、ちゃんとした回答が返ってきますので、ぜひ活用してください:
Stack Overflow:pythonのコード例が理解できない
また、情報を収集している時に、簡単なアプリを作ってみてもよいと思います。
例えば、ブログサイトを作成する場合、RubyonRailsサイト上のステップバイステップで学べるページが参考になります(以下翻訳サイトです):
調べる期間を入れる→調べる→その後のTodoを入れていく
最初にプログラミングでできることを調べる際、調べる期間(最初は3日とか)をTodoに入れて、調べた終わった後、その後のTodoを入れていきます。3日間調べた後、更にもう2、3日必要だと思うのであれば期間を延長します。
プログラミングでできることを調べ終え、その後のTodoを入れていく際も、完璧なものは必要ありません。今わかっている情報でTodoを入れていき、途中で必要なTodoが出てくれば、それを足していきましょう。
この様に、Todoとスケジュールを都度更新していくことで、期間は変更されるけど、ゴールは見えている状態になり、目標を見失わずにプログラミング学習を進めることができます(どれくらい時間が必要か分からない不安要素を消すことができます)。目標を設定して、スケジュール修正やタスク修正をしながら、目標達成に向けて動くことを専門用語では、メタ認知活動といいます。
作成するアプリを決める
ゲームであれば、具体的なゲーム内容(パズルゲーム、ビリヤードゲームなど)、Webアプリであれば、具体的なアプリ内容(SNSやニュースサイトなど)といった具合で、作成するアプリを決めます。
作りたいアプリを決めることにより、アプリを構築する際に必要となるプログラミング言語も決まります。
【悲劇】作るアプリを決めずに、プログラミング言語の学習から始めた場合
プログラミング言語の学習から入り、その後、作りたいアプリを決めた場合、「自分が作りたいアプリに適したプログラミング言語ではないため、ネット検索してもあまり情報が出て来ず、先に進めない」、ということが起こります。必ず作りたいアプリを決めた後、アプリに適したプログラミング言語を選ぶ様にしてください。
具体例を出して説明します。
プログラミング言語の世界ランキング「TIOBE Index」を参考に、ランキング上位のC++というプログラミング言語を勉強するところから始めたとします。
3か月ほど学んだ後に、Webアプリを作りたくなりました。
C++でWebアプリを開発することは可能ですが、主要なWebアプリで、C++を使って開発されたものはありません。また、Webアプリに関するC++関連の情報は、RubyやJavaと比較すると少ないため、Google検索したり、プログラミングコミュニティに聞いても、答えが返ってこない可能性が高いです。
この様な状況を避けるためにも、プログラミングを始める時は、作成するアプリを意識して、プログラミング言語を選ぶことが重要になります。
【繰り返し】必ず作るアプリから決める
ここは重要なので、繰り返します。
作りたいアプリを決めることにより、アプリを開発する際に必要となるプログラミング言語も決まります。
この順番で進めるだけで、プログラミングを始めてから挫折する確率が大きく下がります。
アプリに適したプログラミング言語と統合開発環境を選ぶ
プログラミング言語と並んで、統合開発環境(IDE)の選定も重要になってきます。IDEは、プログラミングによる開発を効率化するためのツールで、メジャーなものは、すべて無償で手に入ります。プログラミング言語とIDEは、セットとなるケースが多いので、この情報も収集しましょう(例えば、Java言語を使う場合、よく使われるIDEはEclipseになります)。
以下にプログラミング言語の習得難易度別に、使用できる統合開発環境と構築できるアプリの例を示します:
習得 難易度 | プログラミング 言語 | 統合開発環境 | 構築できるアプリ |
---|---|---|---|
易 | HTML/CSS | Atom, Visual Studio Codeなど | Webサイト |
PHP | AtomIDE, Eclipseなど | Webサイト・Webアプリ | |
JavaScript | Atom, Visual Studio Codeなど | Webサイト・Webアプリ | |
Ruby | Atom, Visual Studio Codeなど | Webサイト・Webアプリ | |
中 | Python | Atom, Visual Studio Codeなど | AI(人工知能)、Webサイト・Webアプリ、 デスクトップアプリ |
Go | Atom, Visual Studio Codeなど | Webアプリ、ゲーム | |
Visual Basic | Visual Studio | 業務アプリ、ゲーム、 Windowsクライアントアプリ | |
難 | Kotlin | IntelliJ IDEA, Android Studioなど | Androidで動作するアプリ |
Swift | Xcode | iPhone、iPadアプリ、 Macクライアントアプリ | |
Java | IntelliJ IDEA, Eclipseなど | 業務アプリ、Webサイト・Webアプリ | |
C# | Visual Studio | 業務アプリ、ゲーム、 Windowsクライアントアプリ | |
C/C++ | eclipse, Visual Studio | 業務アプリ、ゲーム、ブロックチェーン、 Windowsクライアントアプリ |
開発するアプリが決まれば、アプリを開発するためのプログラミング言語(と統合開発環境)を選びます。上記のうち、習得難易度が「易」か「中」のものから始めると間違いありませんが、興味があるものを選んでも問題ありません(興味がなければ、上達もしないので)。
Webサイト・Webアプリ系を開発する場合
これからプログラミングを始める場合は、Webサイト・Webアプリ系のプログラミング言語をおすすめします。
Webサイト・Webアプリ系は、Ruby、JavaScript、HTML/CSSの組み合わせなど、複数のプログラミング言語が必要となるため、難しそうに見えます。
しかし、HTML/CSSはシンプルですし、JavaScriptは簡単な言語で、インターネット上に情報が多く載っています。また、Rubyは開発者が日本人であるため、日本語の情報が多く、学びやすくなっています。そのため、実は、Webアプリの開発は、他のアプリから始める場合と比べると、敷居は低くなります。
デスクトップアプリを開発する場合
デスクトップアプリを開発する場合、Windowsであれば、C/C++、C#やVisual Basic、Macであれば、Swiftなどのプログラミング言語が必要となります。難易度的には、「中」~「難」となっていますので、始める場合は、既に知っている人に教えてもらうか、プログラミングスクールの受講をおすすめします。
スマホ系アプリを開発する場合
スマホであれば、iPhoneやiPadであればSwift、AndroidであればJavaやKotlinとなりますが、上記の通り、習得難易度が「難」となっているので、始めるのであれば、デスクトップアプリ同様に、既に知っている人に教えてもらうかプログラミングスクールの受講をおすすめします。
必要なフレームワークを選ぶ
フレームワークとは、特定のアプリ開発を効率よく進めるためのもので、プログラミング言語と同じくらい重要なものです。
例えば、Webアプリであれば、RubyであればRuby on Rails、JavaであればSpringがよく使われるフレームワークとなります。
フレームワークが充実していれば、プログラミング量が減るため、その分、アプリを作るという目的を早く達成できます。また、フレームワーク自身は、多くの開発者に使用されているため、自分でフレームワーク部分の機能を一からプログラミングするよりも、意図しない挙動をする(不具合・バグが発生する)可能性が低くなります。
最初は、超有名なフレームワークを選択することをおすすめします。超有名であれば、インターネット上で必要な情報が見つかる可能性が高いためです。また、一人でも多くの人に使ってもらえる様に設計していることが多いため、学ぶための敷居も低くなっています。
プログラミング言語とフレームワークの基礎を学ぶ→アプリを作る
プログラミング言語と扱うフレームワークを学ぶことにより、目的とするアプリを作ることができます。ここでのコツは、学ぶことに時間を使いすぎずに、ある程度分かった後は、作り始めることです。
分からないことに直面した場合は、Google検索やプログラミングコミュニティへ質問して、都度解消していきます。
具体的に、「Ruby on RailsベースのWebアプリの作り方」に特化した記事も作成しています。こちらもぜひ参考にしてください:
以上です。
少しでもプログラミングの始め方に関するヒントになれば幸いです。