プログラミング入門以前（勉強の仕方／調べ方／モチベーションの上げ方）

# 概要

本記事では、プログラミング言語を勉強する前に、前提条件として考えていることや勉強方法を示しています。テーマがぶれてる箇所がいくつかあるので、そのうち精査したい。まぁ、参考程度に。

ここでは以下のような構成で記述します。

- 勉強方法
- 調べ方
- モチベーションの上げ方
- 質問の仕方
- 個人的におすすめプログラミング言語

ちなみに私は昔Javaメイン（しかも組込みJava。DB操作、センサやプロセス制御などしていた。ほぼバニラ状態で使用）。PHP、Javascriptも若干いじってましたが。前の会社の業務ではC言語とVB6（まだ生きてるんですよね、こいつ）、試験用ソフトをJavaで自作していました（あとwireshark使用する関係でlua言語を少々）。現在はPythonをメインで使用しています。楽で良いですね。

# 勉強方法

私は新しくプログラミング言語を勉強する際、基本以下の2パタンで勉強します。

- 参考書
- 学習サイト

個人的には、学習サイトをベースに勉強するにしても**一冊は参考書を買うことをお勧めします**。参考書は後々辞書的な使い方が出来るからです。忘れてしまった構文があった場合、webで検索してもいいのですが、検索したものは結構ノイズ（余計な情報）がのったものが多いです。それに反して参考書は情報が整理されているので、ノイズが少ない場合が多いです（これは参考書の出来によりますが）。

少し突っ込んだ話をすると、私は以下の疑問を解決してから勉強を始めたりします。

- 何が出来るのか
- 人気はあるのか
- 学習難度はどの程度か
- **どういった開発環境があるのか（Windows／Mac／Linuxでそれぞれ調べ方は変わります）**
- バージョン管理方法はあるのか
- パッケージ管理ソフトは標準であるのか（新しめの言語はあったりしますが）

太文字にしているのは、私が特に重視していることです。安直なたとえ話をすると、「鉄板に穴を空ける方法」はたくさんあります。この中で「キリ」を使う／「ボール盤」を使うなどありますが、簡単に穴を空けるられるのはボール盤だと思います。ただ、こんなことは「知っていれば分かること」だと思います。

プログラミングはとにかく**やりたくないことをPCにやらせたい**という思いでやるものです。要するに楽したいということです。それなのに、プログラミングで苦労しては本末転倒です。なるべく、楽できる方法を考えます。

歴戦のソフトウェアエンジニアとこれからプログラミングを学習する人の大きな差は「**ツールを使いこなせるかどうか**」というのが大きいです。場合によっては、最初からツールありきで勉強することは、基本的な知識の定着の妨げになることもありますが、**そんなことはやり続ければ覚えると思います**。

## 参考書

私はよく以下のような参考書を買っています。

- やさしいシリーズ（著：高橋 麻奈）：[https://www.amazon.co.jp/%E9%AB%98%E6%A9%8B-%E9%BA%BB%E5%A5%88/e/B003UWQFJ0/ref=dp_byline_cont_book_1](https://www.amazon.co.jp/%E9%AB%98%E6%A9%8B-%E9%BA%BB%E5%A5%88/e/B003UWQFJ0/ref=dp_byline_cont_book_1)
- 逆引き辞典

やさしいシリーズは、様々なプログラミング言語に対応したものが売られています。開発環境周りはあんま良くないですが、その後のデータ型や制御構文などが網羅的に記載されているので重宝しています。ひとまず持っといて問題ないと思いますね。

逆引き辞典は特定の著者で選んでいません。そこそこ網羅的にやりたいことが載っているものを選んで買います。単純にコードが載っているので、イメージがしやすいんですよね。

## 学習サイト

学習サイトとしては以下のようなものを使用すると良いと思います。ただ、ある程度「データ型」や「制御構文」などを抑えていれば、動画で勉強するよりも本で勉強する方が効率が良かったりするので、あくまで本当に本当の初学者が利用するものというイメージでいた方がいいかもしれません。

- ドットインストール：[https://dotinstall.com/](https://dotinstall.com/)
- paiza：[https://paiza.jp/](https://paiza.jp/)
- progate：[https://prog-8.com/](https://prog-8.com/)
- Youtube：[https://www.youtube.com/](https://www.youtube.com/)

Youtube以外は、一部無料ですがほぼ有料といったものです。ただ本当の本当に初学者の方向けの内容なんてどこも似たり寄ったりで正直違いがありません。上で挙げてるサイトをお勧めしているのは、練習問題があったり、動画が短く分かりやすいからですかね。

- ドットインストール
動画１つが３分程度で構成されており、隙間時間等に見ることが出来ます。基本的にはWebアプリ作成に関連したものが多いです。プログラミング以外にも、ソフトウェア開発を行う上でのツールの紹介をした動画もあります。

- paiza
学習サイト＋転職サイトというような感じのサイトです。こちらも基本的にはWebアプリ作成に関連したものが多いです。スキルチェック機能の問題数が多く、モチベーションを上げやすいです。スキルチェックした結果でランクが付与され、転職サイトとしてはそのランクに応じて求人に応募出来ます（基本的に東京周辺の会社です）。

- progate
使ったことないですが、知名度はありますね。単純にプログラミングのみを勉強するのならこれでもいいのかもしれませんね。まとまった時間がしっかりとれるのならばこちらのサイトを見てもいいかもしれません。

- Youtute
言わずと知れた動画投稿サイトです。ここでも様々な人がプログラミング講座の動画を出してますね。個人的には、単純にプログラミングの基礎を勉強をするだけならば適当な人の講座を見てもいいのですが、上記のサイトではエディタなどで練習問題を解けるので、可能であれば上記サイトで勉強した方が良いと思います。
それよりは、Youtubeでは、そもそもプログラミングをやる上での心持ちや、開発環境の構築方法などの動画を見た方が良いですね。そういう普通の学習サイトにないようなものを取り扱ったものを勉強するには良いです。

# 調べ方

プログラミングをしていると、エラーに躓くことがあります。その場合、**素直に出てきたエラーをGoogle検索にコピー&ペーストします**。当たり前のことですが、これすらやらない人が多く、これを出来ない人が「プログラミングは難しい」と吹聴しているように思います。

私はそこまで英語が読めないので、以下の順序で調べることがあります。


- （ライブラリなどを使用していたら、公式ドキュメントを見る。特に何も考えたくなければ一つ下から始める）
- 日本語サイト限定で検索（必要であれば期間も限定する）
- 検索結果に出てくる英語のQ&Aサイト（Stack Overflowなど）の回答を見る
    - この時、何にも考えなくていいので、Google翻訳を使用
    - 表現がおかしいところのみ英語の文章を読み直す
- 外国人のブログ記事を読む

基本的に英語で記述された記事の方が良いものが多いです。当たり前ですが、英語の方が使用している人が世界的に多いです。そのため、翻訳機能を使ってでも英語の記事を読むことをした方が、日本語の記事を探すよりも結果的に労力が下がる場合が多いです。

# モチベーションの上げ方

以下にプログラミング学習におけるモチベーションの上げ方を以下に挙げます。

- 誰かと一緒にやる
    - 一緒に勉強する人を見つける
    - メンターを雇う
- 目標を決める／計画を立てる（仕事としてやる）
- 記事／ブログを書く
    - Qiita：[https://qiita.com/](https://qiita.com/)
    - Qrunch：[https://qrunch.net/](https://qrunch.net/)

正直、プログラミング（見識のある方はコーディングと読み替えても良いです）は、面倒なものです。根気がなければ続かないと思います。

まず一つ目に、誰かと一緒にやることが非常に大切だと私は考えます。「メンターを雇う」という項目がありますが、出来る限り対等な立場の人と一緒にやる方が良いと思います。知識レベルも一緒であれば、会話の中で自分が気付かなかった有用な「気づき」を得ることが可能です。この方法は分野が違っていてもそこそこ有用であるらしいです。

二つ目ですが、こちらは当たり前の話ですが、プログラミングとは手段でしかないので、何をやるわけでもなく始めるのはとても危険です。「機械学習を勉強して、株価予測したい」「画像解析して、自動モザイクツール作りたい」「温度センサ情報をサーバで管理したい」など、何かやりたいことを決めてから取り掛かる方が良いと思います。
そもそも「プログラム」とは「計画」という意味なので、「ソフトウェアを作る」その行為自体を計画的にすること自体が、「プログラミング」の練習になると思います。
仕事であれば計画も何もかも与えられるので、楽が出来ますが、そうでないならぜひ計画を立てた方が良いと思います。

３つ目は記事を書くことですが、これは最近私が主としていることです。単純に反応があると嬉しいというだけですが。また、これ自体はアウトプットするという行為なので、記憶の定着も促せて、出来ることが単純に増え、モチベーションアップにつながっていると思います。

# 質問の仕方

質問サイトやエンジニアの知人に対し、質問する場合があるとします。そうしたとき、以下のようなことを念頭に質問すると良いです。

- プログラムの目的は何か
- 何に困っているのか
- どんなコードを書いているのか（エラーが起こっている位置など）
- （必要であれば開発環境や実行環境の情報）
- エラーは発生しているか
- どこまで試したか（何をしたら、どうなったかを出来る限りで良いので）
- どこまで調べているのか（少しでも参考になりそうになったサイトはまとめる）

簡単に書くとこんなもんですか（もっとあるかもですが）。正直ピンポイントで詳細に答えを知っている人なんてあんまりいないと私は思います。必要であれば、質問された側も調べないといけない場合もあるので、以上のことは殴り書きのメモでも良いのでまとめると良いと思います。伝わればよいので。

誰かに教えを乞う前に調べた方が良いということですかね。この自体「調べる」という行為の練習になりますし。ベテランプログラマも人によっては「ググるのが上手いただの人」の場合があります。なので、**人に聞く前に15分程度調べる癖をつけた方が良い**と私は思います。15分経っても分からない場合に、調べた内容を元に質問すると相手も嫌にならないと思いますね。

# 個人的におすすめプログラミング言語

個人的おすすめプログラミング言語は以下の２つです。

- Javascirpt
- Python

どちらもいわゆる「動的型付け言語」です。簡単に言うと、プログラミングする上で覚えなければならないことが他の言語と比べて若干少ないということです（もちろん、ある程度のレベルになると学習コストはどれも似たり寄ったりになってきますが）。また、少し難しいことをする際にもライブラリ（なんか便利な道具箱だと思ってください）が充実している点や、エンジニアの数が多いという点がメリットとして挙げられます。

まだ私が触れてませんが「Go言語」も良さそうですね。こちらは静的型付け言語なので、「Javascript」「Python」と比べると学習難度は少し上がります。なので可能であれば、以下のような順番でやると良いのかなと思います。

Python か Javascript -> Go言語

それぞれのプログラミング言語の開発環境まで言及しませんが、そのうちまとめたい。


# 余談

Web系エンジニア志望の方に限りますが、以下の方のYoutubeを見ると、エンジニアとして生きていくビジョンがイメージしやすく、モチベーションが上がるのではないかと思っております。

- KENTAチャンネル：[https://www.youtube.com/channel/UC_HLK-ksslL-Z_2wiIZDlMg](https://www.youtube.com/channel/UC_HLK-ksslL-Z_2wiIZDlMg)