黒澤からプログラミング入門の方へ伝えたい事

# 目的
どのように自作のウェブアプリを小さく作って、順に大きく最終的にはCloneアプリを作ってポートフォリオに
進化せていくべきかのアイディアです。
採択する技術が決まっている方は
直接[本題](https://qiita.com/kurosawa_kuro/items/eb1f2798b53599d51b26#%E6%9C%AC%E9%A1%8C)にジャンプしても大丈夫です。

# 対象者
ウェブ アプリ入門の方向け
AI/人工知能およびブロックチェーンの話は今回しません。

# 技術
今回は特定の言語に限った話では無いのですが、入門の方は
下記の前提条件を参考にして選択していただければと思います。

## 言語
- 言語に拘らず学習目的(Javascriptは色んな活躍場面があるので学習して損はありません。)  
  ⇨ Node.js  
  ⇨ ⇨ [Node.jsの学習方法](https://qiita.com/kurosawa_kuro/items/f058949273982e2bc6d5)、[Java Scriptの学習方法](https://qiita.com/kurosawa_kuro/items/5d18322f60a1ccd76e37)
- 地方で入門の方  
  ⇨ php  
  ⇨ ⇨ [PHPの学習方法](https://qiita.com/kurosawa_kuro/items/daf97d06e7c5b54be37d)
- 地方でphp学習済みの方  
  ⇨ Java
- 都内の方  
  ⇨ Ruby、Go  
  ⇨ ⇨ [Ruby on Railsの学習方法](https://qiita.com/kurosawa_kuro/items/f580a25e72146f76ac7a)
- フロントエンドの方  
  ⇨ Node.js  
  ⇨ ⇨ [Node.jsの学習方法](https://qiita.com/kurosawa_kuro/items/f058949273982e2bc6d5)、[Java Scriptの学習方法](https://qiita.com/kurosawa_kuro/items/5d18322f60a1ccd76e37)
- 機械学習・人工知能に興味がある方  
  ⇨ Python

入門にはnode.jsかphp。都内ならばrubyをオススメしてます。
未だこの1 〜 2年のAI・人工知能バブルでpythonでのウェブアプリの情報が
増えだしていますが、まだ充分では無い時期なので入門時には
避けたほうが良いと考えています。
Goも将来有望ですが、まだ充分では無い時期と考えています。

## DB
- MySQL  
一番情報が多いので最初に手を付けるにはベストでしょう
- Postgresql  
  Herokuで公開する前提だとこちらの方が都合いいですね
- MongoDB  
  上記２つはRDBですが、こちらはドキュメント型のNOSQLです。  
最近は情報量が多くドキュメント型は初心者に扱い易いと思います。

入門にはMySqlをオススメしてます。

上記の技術をカテゴライズしニッチな技術を含めて以前下記にUdemyでのオススメコースを紹介しましたので
ぜひ参考にしてください。

iOSやAI/人工知能およびブロックチェーンのオススメコースも紹介しています。
[【保存版】Udemy 350コース突破記念 講師に全力 リスペクト企画 オススメ コース紹介【入門者向け】](https://qiita.com/kurosawa_kuro/items/d3927bdaa68b02a42036)

## 環境
環境構築は出来るだけ時間をかけずに、コーディングする時間を多く取れるようにしましょう。
特にDB連動するCRUD ウェブアプリケーションを作れるようになるまで、そこに集中しましょう。

環境構築の自動化とはその後です。

そういう意味ではwinでもmacでも同じやり方で構築できるXAMPPは最高に入門向けです。

Linuxの知識がある人はAWSのCloud9もオススメです。

# 進め方
いきなりRailsチュートリアルでTwitterクローンに挑戦するのではなく、小さく作って。
テーマを意識して機能を追加しましょう。

例えば、掲示板とTwitterの違いは何だろうか？
FacebookとInstagramの似ているところと、違うとこはどこか？

## 前提 1
先にHTML、CSS、Java Scriptはしっかり勉強しておきましょう
よく「HTML、CSS、Java Script位は」と言われますが、重要なのでしっかりやりましょう

## 前提 2
もし、時間にゆとりがある場合、ExcelやAccessが使える状況ならば先にウェブではなく下記から準備運動でやってみるのもありです。

1. Excel
2. Excel VBA
3. Access
4. Access VBA
5. Access VBAとExcel VBAの連動

Excel VBAだけでもやると、ウェブの要素が入らずにプログラミングってどういうものかを把握しやすいのでオススメしています。


## 本題

最初はXAMPPでPHPが無難です。9位まではフレームワークなしで素のPHPで書いたほうが後の理解が深まると思います。
[こういうチュートリアル](https://dotinstall.com/lessons/sns_php_v3)を参考に自分でMVCフレームワークを自作してみてから人気のフレームワークを学習しましょう


1. 名前を入力すると、「こんにちは、クロサワさん」というように入力した値を含めて表示するだけのフォームを利用したアプリ(この時点ではDB連動する必要は無い)
2. 1にバリデーションを加える(この時点ではDB連動する必要は無い)
3. 2にセッションで入力値を記録してバリデーションでこけても残るようにする(この時点ではDB連動する必要は無い)
5. 1.2.3で学んだ技術をベースにTodoリストアプリを作る。ここでDB対応してCRUDをマスターする。ついでにAjaxやModalも使えるようにしてしまう
6. 5をベースに社員登録アプリを作り、ログイン機能を追加する
7. 掲示板 アプリを作る。投稿に対してのコメントの関係性を意識して作る。ログインだけじゃなく動作制限・認可を意識する。
8. ブログ アプリを作る。掲示板と何が違うのかを調べて整理するとこから始めよう。
9. チャットアプリを作る。ソケット通信はNode.jsの方が簡単
10. Twitter clone
11. Facebook clone
12. Instagram clone
13. Amazon Clone
14. Youtube Clone

cloneは一つでも充分なんだけど、やってみたら面白くて色々cloneしたくなるはず
cloneを参考するにはこちらで探してみてください。

[【保存版】Udemy 350コース突破記念 講師に全力 リスペクト企画 オススメ コース紹介【海外コース版】](https://qiita.com/kurosawa_kuro/items/feba1a8d84e7c5996031#clonereal-world-applications)

### 入門時にオススメの書籍
#### PHP
[PHPの絵本 第2版 Webアプリ作りが楽しくなる新しい9つの扉](https://www.amazon.co.jp/PHP%E3%81%AE%E7%B5%B5%E6%9C%AC-%E7%AC%AC2%E7%89%88-Web%E3%82%A2%E3%83%97%E3%83%AA%E4%BD%9C%E3%82%8A%E3%81%8C%E6%A5%BD%E3%81%97%E3%81%8F%E3%81%AA%E3%82%8B%E6%96%B0%E3%81%97%E3%81%849%E3%81%A4%E3%81%AE%E6%89%89-%E6%A0%AA%E5%BC%8F%E4%BC%9A%E7%A4%BE%E3%82%A2%E3%83%B3%E3%82%AF-ebook/dp/B06ZZDQYYX/ref=sr_1_20?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=php&qid=1557157041&s=gateway&sr=8-20)
[いきなりはじめるPHP~ワクワク・ドキドキの入門教室~](https://www.amazon.co.jp/%E3%81%84%E3%81%8D%E3%81%AA%E3%82%8A%E3%81%AF%E3%81%98%E3%82%81%E3%82%8BPHP-%E3%83%AF%E3%82%AF%E3%83%AF%E3%82%AF%E3%83%BB%E3%83%89%E3%82%AD%E3%83%89%E3%82%AD%E3%81%AE%E5%85%A5%E9%96%80%E6%95%99%E5%AE%A4-%E8%B0%B7%E8%97%A4%E8%B3%A2%E4%B8%80/dp/4897978858/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=php&qid=1557157041&s=gateway&sr=8-1)

#### Ruby
[はじめての「Ruby on Rails」5 (I・O BOOKS) ](https://www.amazon.co.jp/gp/product/4777519783/ref=ppx_yo_dt_b_search_asin_title?ie=UTF8&psc=1)

#### Web全般
[「プロになるためのWeb技術入門」 ――なぜ、あなたはWebシステムを開発できないのか](https://www.amazon.co.jp/%E3%80%8C%E3%83%97%E3%83%AD%E3%81%AB%E3%81%AA%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AEWeb%E6%8A%80%E8%A1%93%E5%85%A5%E9%96%80%E3%80%8D-%E2%80%95%E2%80%95%E3%81%AA%E3%81%9C%E3%80%81%E3%81%82%E3%81%AA%E3%81%9F%E3%81%AFWeb%E3%82%B7%E3%82%B9%E3%83%86%E3%83%A0%E3%82%92%E9%96%8B%E7%99%BA%E3%81%A7%E3%81%8D%E3%81%AA%E3%81%84%E3%81%AE%E3%81%8B-%E5%B0%8F%E6%A3%AE-%E8%A3%95%E4%BB%8B/dp/4774142352/ref=sr_1_1?__mk_ja_JP=%E3%82%AB%E3%82%BF%E3%82%AB%E3%83%8A&keywords=web&qid=1557157194&s=books&sr=1-1)

### YoutubeでもCloneを参考にできます。
再生リスト形式で検索するのがコツです。

https://www.youtube.com/results?search_query=clone++php&sp=EgIQAw%253D%253D


### ポイント
#### Windows Xammpを卒業するタイミング
5 〜 7ができた時点でWindows Xammpを卒業してLinuxを操作して環境開発を行いましょう。
その際はvagrantを利用してvirtual boxにubuntuかcentosをインストールし
Lamp環境をコマンドでインストールして作りましょう。

そして、Heroku ⇨ さくらのVPS ⇨ AWSって順でアプリを公開してみよう.

更にGit/Githubでソースのバージョン コントロール・プルリクベース開発行い
環境構築の自動化をしましょう。最初はシェルにまとめるだけいいので、次第に冪等性を意識しAnsibleを使いこなせるようになりましょう
仮想化のメインストリームであるdocker、docker-composeで環境構築の大幅な短縮化を実現しましょう。
最後にテストコード、CIにも挑戦し学習記録をQiitaに投稿しよう

また、この時点でiOS等のモバイルに挑戦するのもあり

# 最後に
上記をまともにやると三ヶ月では済まないので、年単位でゆっくり育ててみてください。