プログラミングの入り口として、よくオススメに出てくるのはProgateではないでしょうか。
初心者オススメポイント
- 面倒な環境構築が不要
- Webブラウザ上で学習が完結
- OSに左右されない
- 初心者向けの解説
- コードをゴリゴリ書く事ができる
2020年の4月から始めて、テックキャンプ の事前学習〜途中で復習〜卒業後の言語習得と使いたおし、いつもの間にやらLv200になっていました。
目次
Progateでプログラミングができるようになるのか?
タイトルにもありますが、アウトプットしないと身につかないと思っています。
なぜなら、web 上でコードをお手本通りに書くだけでは、自走力がつきません。
自走力をつけるためにはアウトプット
実際に自分の考えたアプリやサイトをProgateで学んだ知識を元に作成するのが1番の近道です。
考えたものを作るという行為は、Progateを何周もするより遥かに効率が良いです。


参考-僕のアウトプット
- 学習記録をまとめるサイト作成(HTML / CSS)
- 数あてゲーム(Ruby)
- 小1用の計算ゲーム(JAVA)
僕のアウトプットアプリはこんな感じです。
アルゴリズムを学ぶ時は、家族や友人をターゲットにして、『こんなの作ったよ、やってみて』と言ってやってもらうとモチベアップにも繋がります。
実際、最近作ったJAVAの計算ゲームは小1の娘にやってもらい、いろいろ提案をもらいながら改良していきました。
Progate2周以上は無意味
Progateは1週できたらすぐに何か『簡単なアプリ、サイト』を作らないと身になりません。
Progate学習可能言語(有料含む)
全てを1週するのではなくて、一つの言語に絞って学習するのがいいです。
初学者にオススメなロードマップ
参考
- HTML / CSS:自分のブログみたいなサイトを作る
- 道場サイトを写経してみる(開発環境構築はドットインストール がいいです)
- そこで学んだ技術を自分のサイトに使ってみる
- Ruby:簡単なアプリを作成してみる
- Ruby on Rails:web アプリケーションの作成
- JavaScript:自身のサイトに動きをつける
- jQuery:ライブラリを使ってスライドショーでもつけてみる
僕が今から学ぶとしたら、こんな感じで学んでいきます。
もちろんこれは一例であり、自分の学びたい言語を習得するのが一番ですが、「とりあえずプログラミング学びたい」という場合は上記の方法を参考にしてみてください。
インプットし続ける事が無駄な理由
ProgateでRubyを学んだ後に「まだ、覚えていないかもう一回」と復習し続けるのは楽な事です。
しかし人間『楽』を続けて、やれることをやり続けても『成長』することありません。
できないことが「やれる!」に『変化』した時にこそ成長できると思います。(偉そうに感じたらごめんなさい)
辛くても自分で作ってみるともっと楽しくなる
0→1での開発はとても辛いです。特に新しい言語を学んだ後だと、かっこいいサイトなんか作れません。
Progateで10学んだとしたらアウトプットできるのは1〜2ってとこでしょう。
しかしそこで絶望せずに、作りきってから復習していくことで10に近づいていきます。
実際に作ってみた計算アプリ
現在JAVAを学習しているので、ProgateでJAVAを1週して、アプリを作りました。
初期機能
- 足し算問題の出力
- ユーザーから値を受け取る
- 正解であれば『正解です』誤っていれば『ヒントが出力』
1問だけじゃつまんない
引き算もやりたい
と、娘からリクエストを受け、改良(Progateもう1週しました)
改良機能
- 10問連続出力(正解であれば得点が加算)
- 足し算、引き算、掛け算を選べる
- 終了後にもう一度挑戦できる
下図のようなサイクルで学習をしていくのが最効率かと思います。
JAVAの計算アプリコード
実際のコードがこちらになります。
Progate2周してどの程度のアプリが作れるかの指標になれば幸いです。
import java.util.Scanner;
public class Main {
// 選択用メソッド
public static int select(String title) {
System.out.println(title);
System.out.println("[0]:たしざんをする");
System.out.println("[1]:ひきざんをする");
System.out.println("[2]:かけざんをする");
System.out.println("[3]:やりません");
System.out.print("せんたく してください:");
int number = new Scanner(System.in).nextInt();
return number;
}
// 計算式を分岐
public static void branch(String name, int number) {
if (number == 0) {
Format.calc(name,number);
} else if (number == 1) {
Format.calc(name,number);
} else if (number == 2) {
Format.calc(name,number);
} else if (number == 3) {
System.out.println("またきてね");
} else {
System.out.println("そんな すうじは ないよ");
}
}
public static void main(String[] args) throws InterruptedException {
System.out.println("あなたの なまえを おしえてください");
String name = new Scanner(System.in).next();
System.out.println("こんにちは" + " " + name);
String start = "テストにちょうせんしますか?";
String repray = "もう一度挑戦しますか?";
int number = select(start);
branch(name, number);
select(repray);
branch(name, number);
}
}
import java.util.Random;
import java.util.Scanner;
public class Format {
public static void calc(String name, int number) {
long start_point = System.currentTimeMillis();
int score = 0;
for(int i = 1; i <= 10; i++) {
switch (number) {
// 足し算の処理
case 0:
int a = new Random().nextInt(9)+1;
int b = new Random().nextInt(9)+1;
int answer = a + b;
System.out.println( i + "もんめ");
System.out.print(a + "+" + b + "=");
int guess = new Scanner(System.in).nextInt();
if (guess == answer) {
System.out.println("だいせいかい");
score += 10;
} else {
System.out.println("まちがいです");
}
break;
// 引き算の処理
case 1:
int c = new Random().nextInt(5)+5;
int d = new Random().nextInt(9)+1;
int answer1 = c - d;
System.out.println( i + "もんめ");
System.out.print( c + "-" + d + "=");
int guess1 = new Scanner(System.in).nextInt();
if (guess1 == answer1) {
System.out.println("だいせいかい");
score += 10;
} else {
System.out.println("まちがいです");
}
break;
// 掛け算の処理
case 2:
int e = new Random().nextInt(9)+1;
int f = new Random().nextInt(9)+1;
int answer2 = e * f;
System.out.println( i + "もんめ");
System.out.print(e + "×" + f + "=");
int guess2 = new Scanner(System.in).nextInt();
if (guess2 == answer2) {
System.out.println("だいせいかい");
score += 10;
} else {
System.out.println("まちがいです");
}
break;
}
}
long end_point = System.currentTimeMillis();
long time_seconds = (end_point - start_point) / 1000 % 60;
long time_minutes = (end_point - start_point) / 1000 / 60;
System.out.println(name + "のスコアは" + score + "てん です");
if(score == 100) {
System.out.println("かんぺきだ! まんてんですね");
} else if (score >= 80) {
System.out.println("すばらしい そのちょうしです");
} else if (score >= 40) {
System.out.println("いいですね");
} else {
System.out.println("がんばったね");
}
System.out.println("じかんは" + time_minutes + "ふん" + time_seconds + "びょう でした");
}
}