プログラミングを始めたい中高生向け、簡単プログラミングについて！~言語選択~

# この記事を書くにあたって
　最近Twitterなどを見ていると、Web系のプログラマーやモバイル開発系のプログラマーが増えてきているように感ています。そこでもっともっとプログラミング人口を増やしたいと思い、この記事を書いています。実は僕も学生です。趣味でプログラミングをしているのですが、大好き過ぎていつの間にか手の下にはPCのキーボードが．．．なんてことはないです。ですが、プログラミングはとても楽しいです。学校ではできる人が少ないので、個人的には**任天堂Switch**位もっと普及してほしいと思っています。☆
　近年では学校教育でも取り上げられるくらい大事な能力となってきていますので、ぜひこの記事を見た人は必ずなんかプログラムを書いてみてください。
　前置きが長くなりました。前置きが長い話と校長先生の長い話程だるいものはこの世に存在しませんね。それでは早速本題に入っていきたいと思います。


![hacker_cracker1_smile.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1409495/4762a2ac-bc60-ada1-22ce-e7f02354e2f7.png)

というか、実際こんなことしないｗ　↑


# プログラミングにおける基礎知識
　プログラミングを学ぶ前に、まず知っておかなければならないことがいくつかあるので紹介します。
## 1. 言語の種類
　プログラミングにはプログラミング言語というものが使われます。この言語の種類は様々なものがあり、いきなり初心者がいろんな言語から一つに絞るのは、ほぼ無理だと思います。（よっぽどリサーチすれば別ですが．．．）もし、始めたいのであれば近くに経験者がいる場合はその人に聞いて選んでもらってください。（言語にも流行りがあり、ここでオワコン言語を選ぶとはっきり言って死にます。（→その技術が役に立たない））  
　そして、選んでもらう時も注意してください。その人が現役バリバリで活躍している方であれば、その人の言うとおりにしてもらって構わないと思います。しかし、10年前に辞めてそのまま全くプログラミングに関わってないとかいう人などはもしかしたら最近のプログラミング事情を知らない可能性があるので、選んでもらった言語をしっかりとリサーチしてから入門しましょう。

### 言語は２つに分かれる
　そもそもプログラミングとは何かというと、コンピューターを動かすためのコンピューターに指令をだす指示書を書くことを言います。
具体的には、いろんなツールを使ってファイルを作り、そのファイルを動かしてアプリを作っています。  
　余談ですが、プログラムを書くのはとても苦労します。皆さんが使っているアプリありますよね？それも誰かが汗水たらして作ったプログラムです。使う時は、感謝して使ってください。あと、アプリがたまに動きが悪くなったり不具合が起きたりしますよね？**そんな時は、ブチギレたりしないでください。**ではどうすれば良いのかというと、**めんどくさがらずフィードバックを必ず送ってあげてください。絶対です。**プログラムを書くときにミスするのは当然です。人間ですから。そこでフィードバックを送ってあげるとプログラムを書く人はめっちゃうれしくなります。　なぜかというと、まずフィードバックが届くことで、そのアプリがしっかりと使われていることが分かります。そして、それがアプリを改善・進化させる励みになります。**絶対にやってください！**　ということで余談はここまで～



　　先ほど、プログラムはファイルだといいましたね。そのファイルを動かす方式というのが２種類ほどあります。この形式によって二つに分けられます。

####1.  コンパイル言語
　コンパイルとは、プログラムを翻訳する作業のことを言います。実はプログラムは、そのままでは動かないため、**コンパイラ**によって0と1の文字列に置き換えられます。こうしてできるファイルが**実行ファイル**といいます。（ちなみに0と1で書かれたファイルを**バイナリファイル**といいます。）これを作成し動かすことができるのがコンパイル言語です。
　この実行ファイルを直接コンピューターが動かすため、動作が軽快であるという特徴があります。（プログラムによる）
![コンパイル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1409495/0398c36e-ebcb-fc50-d5a6-dc05732febf6.png)


#### 2. インタープリタ言語 
　たいして、インタープリタ言語は実行ファイルを作成せずプログラムを一文ずつ翻訳して実行しているため、少し動作が遅く感じます。（処理による）　そのかわり、プログラムをすぐに実行したり止めたりできるので、コーディングはしやすいです。（ファイルを翻訳＆実行するものを**インタープリタ**という）
![インタープリタ.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1409495/1a28f127-986b-a16c-8beb-8e8da8da4128.png)

  
　この二つの言語の違いをご理解いただけたでしょうか？
プログラミング言語は大きくこの二つに分類されます。プログラムの処理方法の違いによって性能に多少差があることも分かっていただけましたね？  
　そこで、たくさんあるプログラミング言語毎にある違いが生じるわけです。
それが、**用途の違い**です。
例えば、スマホアプリ用の言語だったり。Webサイト作る系の言語だったり。etc
そこで、次の項ではそのことについて詳しく解説していきたいと思います。

### ２．プログラミング言語　用途の違い
　先ほども言ったように、プログラミング言語には性能の違いがありそれぞれ用途があります。  
　ちなみに、初めから「これは～用の言語」と決められているものはあまりなく、その言語の文法や拡張機能（ライブラリ）によって実現しやすいことが違うため、それらの影響を受けることが多いです。

用途ごとの表　※ごく一部（間違ってたらごめんなさい　多分あってると思う）

|言語 |Web開発（フロントエンド*1） |Web開発（バックエンド*2） |モバイル開発 |デスクトップアプリ |
|---|---|---|---|---|
|python |〇 |◎ |〇 |〇 |
|javascript |◎ |◎ |〇 |〇 |
|kotlin |✕ |✕ |◎ |✕ |
|swift |✕ |✕ |◎ |〇 |
|java |✕ |◎ |◎ |◎ |

フロントエンド・・・Webサイトのデザインを作る人（ユーザーの見える部分を書く）
バックエンド・・・Webサイトを運営するためのサーバーなどを管理したり見えない部分のコードを書く人。

　たとえば、kotlinを例に挙げてみましょう。kotlinとはAndroidアプリ開発で用いられる言語です。
2019年にGoogle（AndroidのOS作ったのGoogle先生だから）がアプリ開発推奨言語に指定しました。実はこの言語は、もう少し前からありましたがこの出来事の影響を受けてアプリ開発に使われるようになりました。（それ以前はJavaを使用していたためkotlinでもJavaのライブラリを読み込むことができます。）

このように、プログラミング言語にはそれぞれの用途があり言語選択をするときには、かならず**自分が何を作りたいか**を念頭に置いて選ぶことが大切です。

### できることとライブラリについて
　前述でも、ちょくちょく出てきていますが「ライブラリ」という言葉　皆さん知ってますか？はいそうです、図書館です。中学一年生ならば英語のテスト満点ですね！（そんなことは無いｗ）  
ライブラリ・・・言語の機能を拡張するどっかの誰かさんが作ったプログラムたち。
です。

じつは、このライブラリの豊富さが言語の人気を大きく左右します。

　プログラミングはこれらの拡張機能を必ずといいっていいほど利用します。なぜならプログラム言語（コンパイラ・インタープリタ）でデフォルトで翻訳できる機能だけでは、アプリが作れないからです。例えば、アプリの画面を出す操作がありますね。それも実はライブラリがないとできません。（OSの機能にアクセスして、windowを呼び出す　なんちゃらかんちゃら）　なので、プログラム言語を選ぶときはその言語のライブラリの豊富さもチェックしておくといいです。

　さらに、ライブラリは用途にも関係してきます。
例えば、いまスマホアプリ開発界隈で人気になっているFlutterというフレームワーク（拡張機能の一種）があります。そのフレームワークの言語はDartという言語を使用しているのですが、この言語実は初めはWeb系開発の言語としてJavascriptを置き換えるために作られた言語です。しかし、それは実現せずさらにFlutterの登場によって完全にWeb開発からモバイル開発へとシフトしました。（FlutterではWeb開発も出来ますがあまり聞きません。）

　このように、ライブラリ・拡張機能が言語そのものの人気や用途も左右することがあるのです。

# プログラムを学ぶ覚悟．．．
![450-2015061523232448191.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1409495/8564f0fe-4062-41bc-e7d8-9dff2f35aaae.jpeg)

初めに言っておきます．．．
***そんなもん　いらん．．．***

個人的には、プログラミングを楽しんでくれればそれでいいと思います。だって楽しいんだもん💛

# プログラムを学ぶことで学生に生じるメリット
　まず初めに、プログラミングは英語で書きますね？
やはり、**英語に強くなります。**（個人差あります。　あと強くなるのは基本的に単語です。文法を強くしたい方は、プログラミング言語を作ったところやライブラリの作成者が公式で出しているWebサイトを読んでください。もちろん英語のやつです。）
常に英語と触れているわけですから、やっぱり強くなりますね。（知らない英単語をフィーリングで読めるようになる。）

※ここはあくまで個人の感想です。（ちなみに僕は家で公式ドキュメントを大きな声で音読してます。もちろんわからない単語はGoogle先生が教えてくれますよ。結構楽しいですよ。）

# どうしても1人で選びたい！という場合
　そういう場合はGoogle先生に頼ってください。調べるポイントがいくつかあります。

- 今使われているかどうか 
- 環境構築のしやすさ（ツールのインストールなど）
- 自分のやりたい事にあっているかどうか

この3点です。

今、自分がやりたいことが決まっている場合　例えばスマホのアプリが作りたいなら
「スマホアプリ開発　入門」みたいに調べてください。優しいサイトが沢山出てきます。

決まってない場合は、最初にやりたい事を決めてください。
プログラミングはあくまでツールなのでやりたいことが無ければ時間の無駄です。

　教養程度に学びたい、または友達に自慢してマウント取りたいときはpythonがおすすめです。
とにかくライブラリがそろってて何でもできます。（ほとんど）
（少し古いわりに今すごく人気　多分AIブームだと思う　あとは基礎文法簡単＆ライブラリ豊富）

# 最後に
　実は、僕はプログラミング始めて1年たってません。
なのになぜこの記事を書いたかというと、プログラミングがもっと普及してほしいからです。
　じつは、僕は特に作りたいものがあったわけでなく適当に始めました。ですが、プログラミングのことを調べて一つ一つコードを書いていくとどんどんいろんなことが身に付きました。（作りたいものがあったわけではないため、いろんなものを触りました）  
　プログラミング系ユーチューバーのなかでは、いろんなものに手を出すのはあまりよくないという意見もあります。それもごもっともです。しかし純粋にいろんなことを体験してプログラミングを楽しむのも悪くはありません。ぜひプログラミングを始めたい方**特に学生**は自分の一つの趣味＆隠しもった特技的なのでプログラミングを学んでみたください。そして友達にマウント取りましょう！

1人でも多くプログラミングを好きになってくれる人が増えればいいなと思います。