TL;DR
今回はプログラミング独学法について完全公開しますが、その前に、最近話題になった「プログラミングスクールなんか行かなくていいからこれやれ」という記事が削除されていたので、思い出す範囲で概要を書いておきます。
独学勉強法の例
ざっくりと以下のようなことが書かれてあったと思います。
概要
- Linux インストール
- Python の本買ってきて読む
- html/css/js の勉強
- ブラウザで動くアプリを作る
- LPIC ネットワーク系の本を読む
- データベース
- Web フレームワーク
他に、こういう記事もありました。
ざっくり概要を書くと、以下のような感じ。
- Progate をやる
- 書籍を 1 冊やりきってみる
- N 予備校を使う
私の独学方法
Python の場合だと、以下が Web アプリケーションを作るエンジニアになる独学方法だと思います。
- 2 週間:Linux / SQL / Docker / Vim / Git / CI・CD の基本操作
- 1 ヶ月:Python の基礎(以下の本)
- 1 ヶ月:Django で何か作る(簡単な本、公式チュートリアル)
Python おすすめ本
私の見解としては「言語だけを習得しても実務で活かせないから意味はない。言語以外も網羅的に勉強する必要がある。幅広く学ぶには、調べながら何か作るのが最も効率的である。したがって、独学でエラーを繰り返しながら何か作ってみるのが最高の勉強になる」という感じです。
結局何が言いたいのかというと
- エンジニアに必要な能力は能動性である
ということです。
「何か作る」と自分の成長を感じられるので、プログラミングが楽しくなるはずです。
バックエンドの学習方法
私の場合ですが、業務で必要なこともあって起業前に以下のようなことを、夕食後にスキマ時間(毎日 2 時間)を作って独学で勉強しました。私の仕事は経営であって、エンジニアでないので全く極めてはいませんが、実務で使える程度です。
- PHP
- Ruby
- Swift
- Python
10 年前に、始めてのプログラミングを勉強しました。言語は PHP だけで、フレームワークを使わず、掲示板とエンターテイメント系のサービスを公開しました。10 年前に作ったサービスは、現在も稼働していて毎月収入が発生してます。
PHP の独学時間は、2 週間です。
Ruby の独学時間は 2 ヶ月でしたが、Rails の中で Ruby を書く機会が少なかったのと、書いててあまり面白くなかった(直球ですいません)ので Python にシフトしました。これは好みですね。
バックエンド学習の流れ
- 簡単な参考書を見る(じっくり見ない。流し見で 2 周)
- 少し難易度の高い本を買って、写経する(ざっくり 3 周する)
- 何か作る
この方法なら、無理なくできそうじゃないですか?
私の見解としては、コード以外の「日本語の解説」を理解する(精緻化)ことが大切だと思ってます。学習の目的はコードの暗記ではなくて、本質を理解していくことだからです。
近年、エンジニアが使うエディタは、コード補完、スニペット呼び出しツール、AI の補完など色々便利になってるので、コードの暗記に意味はありません。
権威性 チュートリアル
大学が配布しているチュートリアルは、日本語の使い方も美しいですし、非常に論理的に構成されています。背景となる知識がほとんどなかったとしても、文章がきちんと読めれば本質を理解できるように作られています。
東京大学と京都大学から、無料で Python 学習 PDF 版が配布されています。東大の方は Python だけに特化、京大の方は、プログラミングとはなんぞや?というところから始まります。
大学の資料だけでは情報不足ですが、初学者の人は十分だと思います。上述した Amazon のおすすめ本と並行読みすると、より理解が深まるでしょう。
ブラウザから Python を記述、実行できるColaboratoryを使って、試してみるといいでしょう。
Python PDF 版
京都大学 プログラミング演習 Python 2021 年版 2021/10/20 更新
Python チュートリアル
Python プログラミング入門 — Python プログラミング入門 documentation
Python チュートリアル — Python 3.9.4 ドキュメント
Django
はじめての Django アプリ作成、その 1 | Django ドキュメント | Django
本の読み方
「どうしてそうなるのか?」「どういうロジックでそうなるのか?」を整理して理解するのは大切だとは思うのですが、中々先に進まなくて挫折してしまいそうになりませんか?私は学習が頓挫しないように以下の方法で対処しました。
- 暗記しようとしない
- 完璧に理解しようとしない
- 難しい部分は印をつけておく(重要な箇所ではなく、分からなかった箇所にマーカーを引く)
- 読むのがきつくなったら、違う本を読んだり、違う言語をやる
後々、しっかり読めるように「読む前の土台を作るために軽く 10 回読む」という気楽な気持ちで読みます。
参考になりそうな勉強法を引用します。
- 10回読む。
- 5回目までは、ただ読む(わかろうと思わず、ただ目を通すだけ)。
- 6~7回目は重要な言葉、公式などに注意しながら読む。
- 8~9回目は重要な言葉、公式などの説明がどこにあったか注意しながら読む。
- 10回目に理解しようと思って読む。
参考:先手必勝法
情熱的に一気に読むんじゃなく、毎日 2 時間の勉強時間を作って、その間だけ機械的にやる。習慣に組み込んだほうが続きますよね。
フレームワーク
Ruby や Python を勉強した後。
会員登録サイトを作りたかったので、以下の 2 つを勉強しました。独学時間は、それぞれ 1 ヶ月くらい。
- Rails
- Django
結局、Django を採用しました。
Rails の方がコード量が少なくなるけど抽象的で、Django の方がコード量が増えるけど可読性が高まり分かりやすい印象。エラーがでた場合の対処も楽。暗記が好きなら Rails、Python のコードをバリバリ書きたいなら Django。
Django で、できること
- 管理サイト
- ユーザー認証(パーミッション、ユーザーセッション)
- ログイン機能
- マイグレーション機能
- CRUD
- セキュリティ対策(CSRF、XSS、パスワード暗号化)
- 多言語翻訳
- 地理空間データ
管理サイト(Django Admin)は、CRUD(追加・参照・変更・削除)を提供してくれます。その他、検索・フィルタ・ソート・ページネーション・一括操作・変更履歴・パスワード再設定などの機能があります。
Django を使うことで、Python の知識も活かせるし、何を書いているのか理解しやすいので、楽しみながらプログラミングできるのではないかと思います。
開発環境
プログラミング言語の勉強よりも、開発環境を整えることに時間を取られたりします。
- Linux
- git
- Docker
- AWS(IAM、EC2)
- SQL
AWS Cloud9
統合開発環境の話になりますが、ブラウザのみでコーディングやデバッグができる AWS Cloud9 はおすすめです。
ターミナル、エディタ共有、リビジョン履歴、様々な言語に対応しておりコード補完も充実しています。追加のソフトウェアのインストール、git push の実行、シェルエクスペリエンス、遠隔ペアプロ、グループチャットも搭載。
データベースも簡単に作れて、様々な環境設定が不要なので、開発環境の準備にかかる時間を削減できます。また、言語ごとに環境を変更できるのは凄いですよね。
少し気になるのは、わずかに EC2 の料金がかかること。一ヶ月 20 日間、1 日 4 時間の IDE 実行で ワンコインくらい?Cloud9 を閉じてから 30 分経過すると自動的に休止させコストを抑えることができます。
ローカルなら、流行り廃りの無い Vim を覚えていれば問題ないかと思います。
補足
フロントエンドなら、専門家で無い限り、2 週間ほど MDN のサイトで、さっと独学すれば十分です。後は CDN を使う。
フロントエンド
- JavaScript/React/Next.js
- html/css/SCSS
他
- デザイン(フォント、配色、レイアウト、タイポグラフィ)
- ネットワーク
- Adobe ソフト(Photoshop、Illustrator、XD、Premiere Pro)
- UI、UX
- ディレクション
- マーケティング、アクセス解析、SEO
- 営業、経営
プログラマーに必要な要素
- 能動性
- 日本語の文章を理解する
以下のように言い換えることもできます。
- 自己解決能力
- 読解力
以上、最短でエンジニアになって起業する独学勉強法でした。