プログラミングスクールに通って分かったこと

#0. はじめに
どうも。G's Proコース1期生の岡野です。「世界を変えるGeekになろう」と謳う、[G's Academy](http://gsacademy.tokyo/)に通って早８ヶ月・・・。
もう規定の授業を受ける段階は終わって、卒業に向けてメンターとともにサービスを開発している段階ですが、今一度プログラミングスクールに通って分かったことをみなさんにシェアできたらなと思います。



読者対象：プログラミングが気になっている人、プログラミングスクールに通うか迷っている人、G's Academyに入ったばかりの人

#1. プログラミングはサービスを始める上で一つの柱でしかない
みなさんもプログラミングを学ぶ上で期待することは、マークザッカーバーグのように世界一のSNSを作って世界の人をつなげたり、エバン・シュピーゲルのように消えるメッセンジャーを作って、若者に絶大な支持を受け、終いにはミランダカーと結婚できるようになるようなことだと思います。

僕も昔はそうでした。プログラミングを学びさえすれば、自分のアイデアで世界を変えれるんだと・・・

**しかしそんな世界は甘くない！！！**

プログラミングを学べば簡単に世界を変えれるほど世の中甘くありません。
サービスを開発、運用していくためには、プログラミングだけでなく、デザイン、ファイナンス、マーケティング、マネジメントなどなどを学ばないといけません。
僕はプログラミングの授業が終わって、さあサービスを作り始めるかという段階になってようやく気づき始めました。
作るサービスを決めるとなると、デザインはどうしようか？、どうやってユーザーを集めようか？など考えなければならず、どんどんコードを書くことから遠ざかってしまいました。

あくまでプログラミングがアイデアを形にする手段。過度な期待はやめましょう。


#2. プログラミングスクールに通えば、勝手にスキルが上がるわけではない
僕も以前からプログラミングを自習していましたが、プログラミングスクールを通う上でさらなるスキルアップをもくろんでいました。プログラミングスクールに通いさえすれば、プログラミングが上達して自分のアイデアを形にできると思っていました。

**しかしそんな世界は甘くない！！！**

プログラミングスクールは、もちろんお金を払ってプログラミングのスキルアップをしたいという人々にはとても良い環境ではありますが、**そこで勉強してプログラミングのスキルが上がるか否かは自分次第**。何よりも大切なのはどれだけの量のコードを写経しながら理解し、そしてそれを踏まえて発展させるかだと思っています。

僕の中での勉強法は確立されていて

1.授業の2週間前までをめどに該当範囲を技術書、webなどを活用し、記載されているコードを写経する
2.授業で扱うコードを先生が説明するように、自分で説明できるようにする
3.授業やwebに記載しているサンプルコードを参考に、少し発展させてものを自分で作る(自分の頭で考えて)
4.1からオリジナルを作る
というものでした。**授業の内容を先取りする**というのがコツです。別にカリキュラムを無視してもいいと思っています。先にどんどん自分から学んでいきましょう。

#3. 既存のプログラミングスクールで学べることはソフトウェア開発の一部分
現在日本ではプログラミングがブームで、様々な企業や団体がプログラミングを教えていますが、大学以外のほとんどの組織では、**ソフトウェア開発の一部分しか学べません。**

具体的に、現状学べるプログラミングは、PCやスマホなどのコンピュータを使ったネットワーク通信を行うという観点から見ると、国際標準化機構(ISO)によって策定された、コンピュータの持つべき通信機能を階層構造に分割したモデルである[OSI参照モデル](https://ja.wikipedia.org/wiki/OSI%E5%8F%82%E7%85%A7%E3%83%A2%E3%83%87%E3%83%AB)のうち、一番上の層であるアプリケーション層やその下の部分をプログラムできるようになるに過ぎません。

通信の部分(ルーティングの仕組みなど)や優れたプログラミングの構造の如何(例えばデザインパターンなど)といったものは自分で補う必要があります。

学術的な勉強を受けてない文系出身の方などは特に、過度な期待はせず自分から積極的に補っていきましょう。

＜おすすめの書籍＞
[ハイパフォーマンスブラウザネットワーキング](https://www.amazon.co.jp/%E3%83%8F%E3%82%A4%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9-%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AD%E3%83%B3%E3%82%B0-_%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AF%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E3%81%9F%E3%82%81%E3%81%AE%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E6%9C%80%E9%81%A9%E5%8C%96-Ilya-Grigorik/dp/4873116767/ref=sr_1_1?s=books&ie=UTF8&qid=1480687350&sr=1-1&keywords=%E3%83%8F%E3%82%A4%E3%83%91%E3%83%95%E3%82%A9%E3%83%BC%E3%83%9E%E3%83%B3%E3%82%B9%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%83%8D%E3%83%83%E3%83%88%E3%83%AF%E3%83%BC%E3%82%AD%E3%83%B3%E3%82%B0)
→主にネットワーク通信における各種プロトコルの具体的な仕様を説明してくれます。ちょっと難しい
[アジャイルサムライ](https://www.amazon.co.jp/%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E3%82%B5%E3%83%A0%E3%83%A9%E3%82%A4-%E9%81%94%E4%BA%BA%E9%96%8B%E7%99%BA%E8%80%85%E3%81%B8%E3%81%AE%E9%81%93-Jonathan-Rasmusson/dp/4274068560/ref=sr_1_1?s=books&ie=UTF8&qid=1480687434&sr=1-1&keywords=%E3%82%A2%E3%82%B8%E3%83%A3%E3%82%A4%E3%83%AB%E3%82%B5%E3%83%A0%E3%83%A9%E3%82%A4)
→アジャイルと呼ばれる有名な開発手法をいろんな図や絵を使って説明しています。チーム開発をする人はおすすめ
[Java言語で学ぶデザインパターン入門](https://www.amazon.co.jp/%E5%A2%97%E8%A3%9C%E6%94%B9%E8%A8%82%E7%89%88Java%E8%A8%80%E8%AA%9E%E3%81%A7%E5%AD%A6%E3%81%B6%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80-%E7%B5%90%E5%9F%8E-%E6%B5%A9/dp/4797327030/ref=sr_1_1?s=books&ie=UTF8&qid=1480687506&sr=1-1&keywords=%E3%83%87%E3%82%B6%E3%82%A4%E3%83%B3%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3%E5%85%A5%E9%96%80)
→デザインパターンと呼ばれるソフトウェアのよく使われる構造をまとめて説明したもの。この本を読んだ後、有名なライブラリやフレームワークの中身を見ると、ああ！！おお！！ってなるのでおすすめ。
[リファクタリング](https://www.amazon.co.jp/%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0_%E6%97%A2%E5%AD%98%E3%81%AE%E3%82%B3%E3%83%BC%E3%83%89%E3%82%92%E5%AE%89%E5%85%A8%E3%81%AB%E6%94%B9%E5%96%84%E3%81%99%E3%82%8B_-OBJECT-TECHNOLOGY-Martin-Fowler/dp/427405019X/ref=sr_1_1?s=books&ie=UTF8&qid=1480687615&sr=1-1&keywords=%E3%83%AA%E3%83%95%E3%82%A1%E3%82%AF%E3%82%BF%E3%83%AA%E3%83%B3%E3%82%B0)
→一度書いたコードは、新たなコードが加えられる行くうちに技術的負債としてどんどん腐敗していきます。新しいコードを書く前に、変数名の変更やクラスの設計など様々な点を見直して、全体としてより良いコードを目指すことをリファクタリングと言いますが、それを網羅的に解説したもの。まだ一度しか読んでないので、理解仕切れてない部分も多いが、普段書いているコードの意識する点がわかるのでおすすめです。

[入門シェルプログラミング](https://www.amazon.co.jp/%E5%85%A5%E9%96%80UNIX%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0_%E3%82%B7%E3%82%A7%E3%83%AB%E3%81%AE%E5%9F%BA%E7%A4%8E%E3%81%8B%E3%82%89%E5%AD%A6%E3%81%B6UNIX%E3%81%AE%E4%B8%96%E7%95%8C-%E3%83%96%E3%83%AB%E3%83%BC%E3%82%B9%E3%83%BB%E3%83%96%E3%83%AA%E3%83%B3/dp/4797321946/ref=sr_1_1?s=books&ie=UTF8&qid=1480687818&sr=1-1&keywords=%E5%85%A5%E9%96%80%E3%82%B7%E3%82%A7%E3%83%AB%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0)
→bashとか、シェルってなんだ？ってところを説明してくれる技術書。Unix系のOSを使う上で欠かせない知識を補完してくれます。
[安全なwebアプリケーションの作り方](https://www.amazon.co.jp/%E4%BD%93%E7%B3%BB%E7%9A%84%E3%81%AB%E5%AD%A6%E3%81%B6-%E5%AE%89%E5%85%A8%E3%81%AAWeb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E8%84%86%E5%BC%B1%E6%80%A7%E3%81%8C%E7%94%9F%E3%81%BE%E3%82%8C%E3%82%8B%E5%8E%9F%E7%90%86%E3%81%A8%E5%AF%BE%E7%AD%96%E3%81%AE%E5%AE%9F%E8%B7%B5-%E5%BE%B3%E4%B8%B8-%E6%B5%A9/dp/4797361190/ref=sr_1_1?ie=UTF8&qid=1480688078&sr=8-1&keywords=%E5%AE%89%E5%85%A8%E3%81%AAweb%E3%82%A2%E3%83%97%E3%83%AA%E3%82%B1%E3%83%BC%E3%82%B7%E3%83%A7%E3%83%B3%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9)
→webアプリケーションを作る上で、ついつい後回しになってしまうセキュリティーを分かりやすく説明しています。僕もセキュリティーがあんまり好きではないですが、気をつける点を把握する上では重要だと思います。



#4. プログラミングは習慣で上達する
プログラミング言語もあくまで人間が考え出した言語。その意味では、英語やフランス語などといった言語と変わりません。

英語を学ぶ時に一番上達するのは、英語が公用語とされている地域に行って強制的に英語を使う環境に行ったり、受験に向けて高い点数を取ることを目的に毎日単語、熟語、文法を記憶し、長文をよみこんでいた時ではないでしょうか？

英語などの他の言語を学んだように、まずは基礎の単語や文法に当たる変数の概念やいif文などの条件分岐などを抑えて、その後と長文を読み込むように自分でちょっとしたプログラムを書くということを**毎日、最悪5日に1回ぐらいの間隔でやっていくこと**が大事だと思います。

(下は自分のgithubからの引用。ところどころ草が生えてないないのはgithubにpushするのを忘れたから・・・(震え))
![スクリーンショット 2016-12-02 22.32.07.png](https://qiita-image-store.s3.amazonaws.com/0/78362/be1a179e-4da4-d7f1-d732-be4975915942.png)

#5. メンターの有り難さ
何と言ってもこれです。**今から学習しようとする領域において、少しでも先に開拓し、豊富な知識やノウハウを持つメンターはとても価値があり、重要です。いくら強調してもしすぎることはありません。**メンターの重要性は[SOFT SKILLS](https://www.amazon.co.jp/SOFT-SKILLS-%E3%82%BD%E3%83%95%E3%83%88%E3%82%A6%E3%82%A7%E3%82%A2%E9%96%8B%E7%99%BA%E8%80%85%E3%81%AE%E4%BA%BA%E7%94%9F%E3%83%9E%E3%83%8B%E3%83%A5%E3%82%A2%E3%83%AB-%E3%82%B8%E3%83%A7%E3%83%B3%E3%83%BB%E3%82%BD%E3%83%B3%E3%83%A1%E3%82%BA/dp/4822251551/ref=sr_1_4?s=books&ie=UTF8&qid=1480686140&sr=1-4&keywords=%E3%81%BE%E3%81%A4%E3%82%82%E3%81%A8%E3%82%86%E3%81%8D%E3%81%B2%E3%82%8D)でも指摘されています。


ここでポイントなのが、**メンターは少しだけ自分よりも先に行っている人が良いということ**です。
メンターといってもめちゃくちゃスキルが上の人よりも、少し上の人の方が聞きやすいですし、一緒に悩みを理解し解決してくれる可能性が高いです。プログラミングスクールに通っていると少し前に入っている人や同じ時期に入っている人がそばにいることが多いので、分からないところがあればすぐに聞けます。(もちろん先生がいれば、すぐに聞けばいいのはもちろんですが)

もう一つポイントなのが**メンターが答えを全て知っている訳ではないということ**です。
プログラミングと行っても前述の通り、web、モバイルなどといった様々な領域が含まれるので、聞いた問題の解決策をメンターが知っている可能性は高くはありません。この事実は問題を短時間で解決できないという意味では問題ですが、良い部分もあり、メンターに問題を説明していると、**自分がどこまで理解し、どこまで理解していないか分かって**、メンターを置いてけぼりにして自分で解決するということがしばしばあります。メンターは仏の心で自分の悩みを沈黙しながら、優しく聞いてくれるという役割も担ってくれるのです。

メンターの有り難さに感謝しながら、プログラミングの上達を目指しましょう。
既存のプログラミングスクールは、すぐにメンターが見つかるという意味でとても価値があると思います。


#APOLO(みんなの音楽コンシェルジュについて)
実は現在プログラミングスクールに通いながら、チャットボット開発に取り組んでいて、先日サービスとしてリリースいたしました。

サービス名はAPOLOで、キャッチコピーは「みんなの音楽コンシェルジュ」です。

<img width="800" alt="icon_facebook.png" src="https://qiita-image-store.s3.amazonaws.com/0/78362/768cfd00-dcc4-f8b3-5f8a-40ffd6ead236.png">

公式キャラクターのポアルンと話しながら、音楽が探せて聞けるというサービスになっています。
![poarunicon.png](https://qiita-image-store.s3.amazonaws.com/0/78362/37da9215-ed6b-3ad4-c5fb-12706b10c987.png)


【APOLOのここがすごい!!】
①**ダウンロード不要。友達追加するだけ。**
APOLOはスマホで使えるアプリではなく、LINEで使えるチャットボットです。
是非ともLINEの検索窓から友達を検索するように、APOLOを検索してみてください。

②**ポアルン(APOLOの公式キャラクター)が言葉を読み取って、その時の気分に合った音楽をレコメンド。**
独自のアルゴリズムにより、ポアルンにオススメを聞くボタンがあるのですが、そこを押してポアルンにその時の気分を伝えるとその気分に合った音楽が帰ってきます。
今までにない体験をしてみてください。

③**グループで音楽をオススメし合える。**
グループ内にAPOLOを追加してもらえればみんなでポアルンとの会話を楽しみながら、音楽をオススメし合えます。
この曲いいんだよ！！とかこの曲最高！！という調子でぜひみんなで音楽を聴く体験をしてもらえればと思います。
まだまだなので温かい目で見てもらえると。。。


HP:http://apolochat.com/
LINE:https://line.me/R/ti/p/%40urm8576z

LINEの検索窓で「@apolo」と検索してもらえると、すぐに友達追加できて利用することができますので、ぜひとも使ってみてください。