プログラミングを勉強し始める君へ

# はじめに
この記事は、これからプログラミングを勉強し始める人に向けて書いたものです。  
筆者の経験を基に執筆しました。

この記事で書かれた方法が全てだとは思いませんので、プログラミングを既に勉強している方々から話を聞きながら勉強するのが良いと思います。

# 基本的な勉強方法
基本的にこのような形で勉強をしていくことをお薦めします。

1. 作りたいものを決める  
  作りたいものが決まらないと、覚える前に辞めてしまう可能性が高くなります。
2. 作るのに必要な言語の決定  
  1つのものを作るのに、その方法が1つとは限りません。大抵のものは複数の方法で作成できると思います。
3. 言語の概念を知る  
  一言でプログラミング言語と言っても、大きく分けて2つのパターンがあります。それによって言語の役割が大きく変わります。
4. その言語で作成された既存のプログラムを読む  
  いきなり作ろうと思っても、作れるものではありません。既存のプログラムを読みながら、言語の雰囲気を掴みましょう。また、他の人の知恵を自分のものにしましょう。
5. ものを作る  
  プログラミングは本を読んだだけや、他人のコードを読んだだけでは、身につきません。プログラミング言語はものを作るためにあるのです。ものを作ることで初めて、そのプログラムの範囲を勉強したと言えます。
6. 言語のリファレンスを見る  
  プログラミング言語は処理の向上やセキュリティの向上のために度々変更されます。また、プログラミング言語には流行があり、一生の中に複数のプログラミング言語をしなければならないことと思います。リファレンスには、その言語の全てが書かれているため、とても重要です。毎日の努力でリファレンスに慣れましょう。

但し、4〜6は並行して行っていきます。  
何故なら、他人の言語を読んで、そのコードの仕組みをリファレンスを元に紐解いて、それを自分のコードに落とし込むのが一般的だからです。
基本的に他人のコードの丸写しは良くありません。
勉強にならないだけでなく、もしかすると著作権に引っかかる可能性があるからです。

# プログラミング言語
主に使われているプログラミング言語には、次のようなものがあります。

- HTML （HyperText Markup Language）  
  https://developer.mozilla.org/ja/docs/Web/HTML
- CSS （Cascading Style Sheets）  
  https://developer.mozilla.org/ja/docs/Web/CSS
- JavaScript  
  https://developer.mozilla.org/ja/docs/Web/JavaScript
- C言語  
  https://www.programiz.com/c-programming/
- C++  
  https://isocpp.org/
- C#  
  https://www.visualstudio.com/
- Java  
  https://java.com/ja/
- Perl  
  https://www.perl.org/
- PHP （Hypertext Preprocessor）  
  https://secure.php.net/
- Python  
  https://www.python.org/
- Ruby  
  https://www.ruby-lang.org/ja/
- CoffeeScript  
  http://coffeescript.org/
- MySQL  
  https://www.mysql.com/jp/
- JSON （JavaScript Object Notation）  
  https://www.json.org/json-ja.html
- XML （Extensible Markup Language）  
  https://www.w3.org/TR/xml11/
- YAML  
  http://yaml.org/

プログラミング言語は大きく2つに分けられます。

- Script  
  動作を書くためのもの
- Language  
  定義するためのもの

言語によって、動作する場所が異なります。
言語によっては、ライブラリにより動作する環境を拡張しているものもあります。
例えば、JavaScriptは基本的にクライアント側（ブラウザ上）で動作するものですが、 **Node.js** を使用することで、サーバ上でも動作します。

また、言語から違う言語を呼び出して使うということもあります。
そのため、言語同士の関係も重要です。

言語によって、それぞれ強みや弱みがあります。
そのため、一つの言語で全てのことをすることは好ましくなく、複数の言語を使い分けることで効率良くなることもあります。
但し、言語の弱みを無くすためのライブラリもあるので、違う言語を探すだけでなく、ライブラリも探してみると良いと思います。

# 学習方法
本などにより、プログラミングを学習することは悪いことではありません。
しかし、プログラミングは知識を付けることではなく、それを利用してモノを作ることが重要で本質です。
なので、なるべく手を動かしながら学ぶようにしましょう。

## [方法1] 既存のプログラムを読む
有名どころのプログラミング言語のコードは、ネット上にたくさんあります。
その場所としては、[GitHub](https://github.com/)が有名です。
GitHubの使い方は、書かれた記事などがたくさんあるので、そちらを読んでください。

既存のプログラムを読むときに重要なのが、「どのような動作順序をしているか」、「なぜその方法を使用したか」、「他に同様の動作をする方法はあるか」です。
わからない関数が出てきたら、なるべくリファレンスを読むようにしましょう。

他人のコードを読む上で重要なのは、「考え方のコピー」です。
先程の3つは、真似とその発展に繋がります。

## [方法2] ものを作る
プログラミングの勉強をするときは、なるべく手を動かしながらしましょう。

プログラムを作成することで、自分以外の人、モノに見てもらうことができるようになります。
知っているプログラミングができる人に見てもらうも良し、`GitHub`やSNSを使用して他人に見てもらうも良し、実際に動かして正常に動作するかを確かめても良しです。
なるべく複数回数見てもらうのが良いでしょう。

また、今やプログラミングは一人で簡潔することの方が少なくなってきました。
自分が作成したプログラムを他人も活用することが出てくるでしょう。
そのため、正常に動くだけでなく、他人も読みやすいプログラムを書くというも重要なスキルです。
インデント、括弧の位置、スペースを活用して読みやすいプログラムを意識しましょう。

## [方法3] リファレンスを読む
言語には流行があり、複数の言語、ライブラリを使わなればならない状況になるかもしれません。
また、言語、ライブラリは日々成長しています。
そして、リファレンスにはその言語、ライブラリの全てが書かれています。
関数の使い方、バグの種類などなど、重要なことがたくさん書かれています。

しかし、リファレンスはかたっ苦しく書かれているため、慣れていなければ読むのにとても苦労します。
そのため、勉強をし始めた頃から少しずつ読むことで慣れていきましょう。