Progateの良いところ・残念なところ

<h1>経緯</h1>
自分の働いているスタートアップでは，Progate修了レベル程度のユーザーにフォーカスしたサービスを展開している．
自分も開発やサービス開発を今後やっていくにも関わらず，自分はProgateを使用したことが無かった．対象ユーザーのレベル感を知るとともに良い点・残念な点を自社のサービスに活かそう，ということで実際に使ってみることにした．
<h1>Progateとは</h1>
「初心者からできるプログラミング学習」を掲げる初心者向けプログラミング学習サイト([Progate公式サイト](https://prog-8.com/))．
スライド中心の学習を行った後に実際にオンラインエディタでアウトプット，の流れを繰り返すことで知識を深める．
UIは全体的にイラスト多めでデザインが美しい．
個人的に推しているのはなんといってもコース数が多いところ，Web系の言語からPython，コマンドラインまで学習できる．
<h1>要件</h1>
今回の要件は次の通り．

- 筆者はプログラマ歴3年
- Pythonを一通りは使えるが体系的に学習したことはない
- Progateの用意されているレッスン(Python ⅠからPython Ⅴまで)を一日で学習

<h1>結果</h1>
かかった時間はだいたい3時間位，ページに載っていた想定時間が9時間くらいだったはずだから，多分1/3くらいの時間で修了．今までなんとなく使っていた言葉(メソッドや継承とか)のしっかりしたイメージを持てるようになった．
<h1>良かった点</h1>
<h2>UIが綺麗</h2>
モチベーションの大半はUIの綺麗さや後述のオンラインエディタに依存する．全体的にパステルカラーの配色で言語ごとに統一感がある．プログラミングはコンソールの真っ黒な画面にひたすら向かう，と思っている初学者は少なくなく，いい意味でその期待を裏切ってくれる．

<h2>オンラインエディタ</h2>
オンラインのエディタがチャプターの演習部分で使用できる．もともと書いてあるコードにヒントやコメントをもとにプログラムを追記していく．基本的に，そのチャプターで学習すること以外は既に埋めてあり，新規で学んだ部分のコードだけ埋めていく．最終的にオンライン実行され結果が表示されたり，エラーやヒントが表示されたりする．特にエラーの通知が素晴らしく，次のようにエラーコードを噛み砕いて分かりやすく説明してくれる．

- 実際のオンラインエディタ(公式サイトより)
![公式サイトより](https://d2aj9sy12tbpym.cloudfront.net/javascripts/dist/assets/editor_image_jp-e307f46bebad4e09782429be28dc21e6.jpg)

- 実際のコード

```python
# 文字列のキーと数値の値を持つ辞書を作って、変数itemsに代入してください
items={"apple":100,"banana":200,"orange":400}

# for文を用いて、辞書itemsのキーを1つずつ取り出していく繰り返し処理を作成してください
for item_name in items:
    # 「---------------------------------------------」を出力してください
    print("---------------------------------------------")
    # 「◯◯は1個△△円です」となるように出力してください
    print(item_name+"は1個"+str(items[i])+"円です")
```

- コンソールの出力

```
---------------------------------------------
Traceback (most recent call last):
  File "pana4.py", line 9, in <module>
    print(item_name+"は1個"+str(items[i])+"円です")
NameError: name 'i' is not defined
```

- Progate側で出たホップアップ
![Screenshot_20200313_154450.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/422452/d1014fc9-bbee-2b73-dfb6-6ef482dd1995.png)

コンソールのエラーに焦る初心者は少なくなく，そのような人が躓かないようになっている．
<h2>流れが自然</h2>
プログラミング初心者で初めてProgateでPythonやります，みたいな人でもついてこれるチャプター設定．

- PythonⅠ…文法と条件分岐 
- PythonⅡ…リストと辞書，繰り返し(for文，while文)
- PythonⅢ…関数(引数，返り値)
- PythonⅣ…クラスとインスタンス
- PythonⅤ…クラスの継承・総合演習

チャプターごとに学習することもできるよう．技術的な部分のイラストも多く，特に継承らへんはイメージしづらい部分をいい感じにまとめてあった．
<h1>残念な点</h1>
<h2>身にならない</h2>
実際に触ってみた感じかなりサクサクと進めることができた．それは要所要所でコメントがついていたり，エラーが丁寧だったりするからだ．しかしながら逆に言えば，コメントに従えば深い知識が無くても正しい答えにたどり着いてしまう．実際にクラスを扱うチャプターでは，それがクラスなのかメソッドなのか変数なのか考えなくてもコメントに従えばコードが書けてしまう．
実際に開発するとなったとき，そういう部分で詰まると自己解決が出来ないのでは，と感じた．
<h2>採点が謎</h2>
Progateはコードの出力だけじゃなくコードの中身まで正規表現などで採点しているよう．そのため，きめ細かいエラーメッセージなどが出せる半面，特定の解答のみしか通らない，という問題もある．筆者が気づいた例を下に示す．
<h3>if文のカッコ</h3>
if文で条件式の前後にカッコをつけると，出力が一致してもProgate側でエラーとされる．

- エラーになるコード

```python
# countが3以上のとき、total_priceに0.9をかけてください
if (count>=3):
    total_price*=0.9
```
- Progateの出力
![Screenshot_20200313_173005.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/422452/4a144f09-01aa-b4f4-359d-50b7fe11bfdd.png)


- 正しいとされるコード

```Python
# countが3以上のとき、total_priceに0.9をかけてください
if count>=3:
    total_price*=0.9
```
<h3>その他</h3>
Progateで学習していないようなことをやるとエラーになる(がそれはしょうがない気もする)．働いた悪知恵を次に示す．
<h4>bool演算の悪用</h4>
not演算子を用いて条件判定を行う部分のチャプターで次のように記述したところ，Progate側でエラーになった．これについては可読性下がるし想定されていないのはしょうがない．

- 正しいコード

```python
# zが77ではない場合に「zは77ではありません」と出力してください
if not z==77:
    print("zは77ではありません")
```
- 記述したコード

```python
# zが77ではない場合に「zは77ではありません」と出力してください
if z-77:
    print("zは77ではありません")
```
- Progate側で出たホップアップ
![Screenshot_20200315_145759.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/422452/0e02f3d4-853b-aa54-94f7-852594ffd33e.png)
<h4>改行コード</h4>
二回に分けて出力することを想定している部分を「\n」でつないでもProgate側でエラーになる．というか，Progate側で改行コードくらい解説してくれても良いのでは...?
<h2>エディタ環境</h2>
オンラインエディタ，基本的には優秀だが気になるところが1点だけ．インデントのタブが半角スペース4つなのがかなりのストレス．for文などでインデントの補完がされるのでインデントを削除する機会が多いにも関わらず半角スペース4つは萎え，タブ文字にしてくれ...
<h2>扱っていない部分</h2>
全5回のチャプターではもちろんカバーできてない部分が多い．基本文法の中でもタプルや集合はカバーしてないし，文章処理(検索・置換・正規表現など)は1mmも触れられてない．今後プログラミングを使ってどんなことをやる，みたいなのを決めるには得られる知識が少なすぎる．
<h1>まとめ</h1>
Progateは初心者がプログラミングの敷居を下げるには最適な教材だと思う．が，エンジニアを目指して実践に役立つ知識を習得したり，今後自分がやりたいことを見つけるには不向きなツールかな，と感じた．