Rのつく財団入り口

ITエンジニア関連の様々な話題を書いているはずのブログです。

【感想】Python特化型オンライン学習サービス「PyQ」をやってみました

アツい夏と涼しい秋にじっくりパイキュー

 ビープラウド社が2017年4月にオープンしたばかりの、Pythonに絞った学習サービス「PyQ」。はてブなどでも話題になりました。
 よさそうだったので僕も夏季休暇を利用して一番安いライトプランで学習を始めてみました。使い方などは他の記事の情報を見てもらうとして、ここでは、主に企業ユースでなく個人で申し込んで使った場合について、所感などをまとめていきたいと思います。

pyq.jp

解説記事

 使い方や実際の画面キャプチャなどは以下をご覧ください。

■ビープラウドのスタッフさんの記事

blog.hirokiky.org esuji5.hateblo.jp blog.livedoor.jp http://blog.iron-hot.com/%E5%BE%92%E7%84%B6/2017/04/12/article.htmlblog.iron-hot.com nakagami.blog.so-net.ne.jp nakagami.blog.so-net.ne.jp nakagami.blog.so-net.ne.jp

■オフィシャルブログ

blog.pyq.jp

はてなブログ

shinyorke.hatenablog.com

■スクール等の情報系ブログ

online-programming.me http://einginner-engine.hatenablog.com/entry/%E3%82%AA%E3%83%B3%E3%83%A9%E3%82%A4%E3%83%B3%E5%AD%A6%E7%BF%92%E3%82%B5%E3%83%BC%E3%83%93%E3%82%B9PyQ%E2%84%A2%E3%81%8C%E6%9C%80%E9%AB%98%E3%81%99%E3%81%8E%E3%82%8Beinginner-engine.hatenablog.com ited.tech

■Qiita

qiita.com

この記事を書いてる人のスペック(笑)

 えー僕の話は【ご挨拶】はてなブログに移行しましたの後半に書いた通りですが、Python歴は0年。仕事としてのITエンジニアがウン年、他の言語がJava/C#/PHP/SQL各種/サブ位置でのJavaScriptやHTMLやCSSXMLなどなど……が仕事で使うレベルで各種それなりという所。Pythonは『みんなのPython 第4版』を最近読み終わって『Pythonプロフェッショナルプログラミング 第2版』を読んでいたり他の学習サイトを回ったり情報を集めたりという感じです。
 学ぶ目的は来たるべき日に備えて仕事のスキルの幅を広げるため。新しいことに触れる新鮮な気持ちをいつでも持っていたいよねというのもあります。
 Pythonでやりたいことは、ディープラーニングでもスクレイピングでもクローリングでもなくて、まずは、他の言語と同じようにエンタープライズなWebアプリケーションを作れるようになっておきたいというのが当面のターゲットです。

エスト数や問題数、学習時間

 公式ページの受講生の声の紹介によると、

プログラミングの基礎習得→実務でのプログラミング習得→Webアプリケーション作成→仕様からの開発演習

の4段階で、未経験の人は150H、文法を知っている人は100Hでプロなプログラマーに到達できる。というのがモニターから算出した想定学習時間となっています。
 明確には書いていないのですが、クエスト一覧にあるカテゴリやチャプター(呼び方はこれでいいのかな)と以下のように対応しているはずです。

段階 未経験~[H] 文法知ってる~[H] カテゴリ チャプター数 カテゴリ毎クエスト数合計 (参考)実際の学習時間[H]
プログラミングの基礎習得 チュートリアル 1 1 計測忘れ(笑)
Pythonはじめの一歩 9 55 8
Python初級 6 31 7
80 50 Python中級 8 28 7
実務でのプログラミング習得 20 20 実務でのPython 3 17 学習中
Webアプリケーション作成 はじめてのWebアプリ 3 6
30 15 Web初級 4 10
仕様からの開発演習 20 15 仕様からの機能開発 5 2*
(その他) - - チャレンジ 1 4
(その他) - - コラボレーション 1 3
時間合計⇒ 150 100 - - エスト数合計157 -

*:「仕様からの機能開発」は、2017年8月時点でクエスト準備中

 その他のPythonチャレンジ、「いちばんやさしいPythonの教本」とのコラボ問題も含めてクエスト数合計が計測時点で157。1つのクエストには大体1~7つの問題がついていますから、うたい文句の通り、400問以上の圧倒的な問題数でがっつり鍛えることができます。

 一番右の数字はあくまで参考の一例ですが、、僕がやった時に掛かった時間です。
 学習に当たっては各問題で毎回すぐ模範解答を見て写経……ではなく、一度構文などを学んだらメモに残したりして次からはなるべく模範を見ないようにしてコーディングするようにしました。(Python中級までは)

「プログラミングの基礎習得」にあたるチュートリアルPython中級までがのべ約22時間。文法を知ってる人が基礎習得に50時間とあるので、その約半分で行けたことになります。まあここは既に他言語では実務経験のあるエンジニアだからというところでしょう。

追記:
 などとエントリの下書きを書いていたらPyQ公式ツイッターで2017/9/7付で問題大幅追加の告知が出ていました。

http://www.beproud.jp/news/20170907/www.beproud.jp

  • Python中級」の「19. for文の詳細」チャプター中のどのクエストか分かりませんが更新
  • 「実務でのPython」の「27. 設計」チャプターが更新
  • 「Web初級」の後に今までなかった「Web中級」カテゴリが新規追加、Web系の仕事御用達のWebAPIとスクレイピングがどどんと登場
  • 「仕様からの機能開発」カテゴリが準備中だったのがチケット販売サイトを作る問題に。
  • そして「Pythonデータ処理入門」「Python機械学習」のカテゴリが登場、チャプターも充実して問題大幅追加

と充実の追加。宣伝で問題は400問以上とありましたが、これでもう500を超えるでしょうね。
 機械学習コンテンツの監修はその筋では有名なサイボウズ・ラボの西尾泰和さん。あの「コーディングを支える技術」の著者なんですね。あの本も複数のプログラミング言語やその背景を学ぼうとする時に役立つ名著ですね。

実行結果の成否判定の方法

 クエスト内のそれぞれの問題で画面右上の「実行」ボタンを押すと、コンソールでpython xxx.pyしたのと同じように実行されて右下に結果が標準出力されます。「判定」ボタンを押すと正解かの判定が行われてOKなら分かりやすく画面に表示されてめでたく先へ進めます。
 この時、通らないと標準出力にずらずらとAssertionErrorなどが出るので、この時点で他言語のJUnitNUnitなどxUnit系を触ったことのある方なら「ああ、何かのテスティングフレームワークを使ってるんだな」と想像がつくでしょう。

 クエストが進むとファイルの読み書きの問題で、input/ディレクトリの下にある売上ファイルやお弁当の値段リスト、動物園リストなどのCSVを読み込んで計算するような本格的な問題がどんどん出てきます。
この時答えを書くスクリプト以外の他のファイルも閲覧専用で見られたりするので、ジツはtests/tests.pyなどをこっそり開くと判定をしているクラスが覗けてしまいます。(笑)
 Python言語の標準パッケージに最初からついている単体テスト用のライブラリ/モジュール、名前もそのままunittest のテストクラス群で判定をしているようですね。
それぞれの問題の本質とは外れるのですが、「なるほどPythonだとテストコードはこんな風に書くのか~」と意外なところで勉強になったりしました。
 このユニットテストの書き方も、中級をクリアした後の「実務でのPython」カテゴリで学べます。他、unittest以外にシェルスクリプトで判定している問題もあるようです。

ハマった時の対応方法

 ネットの感想で見たのが、スクリプト自体が間違っていて正常に動かない場合、あるいは「判定」で実行結果が正しくなかった場合、プログラム初心者はどうやって解決して前に進んだらいいのかと言う話。
 確かに間違っているときは実行するとTracebackが出て、初心者には意味不明な英語や記号や数字がズラズラズラ~っと吐かれていきます。他のどのプログラミング言語でも同じ、プログラムを学ぶ上で誰もが一度は通る道です。僕もクエストの中で出しまくりました。(笑)

 しかしここでスクリプト内のどこが間違っているかをプログラム的に判別して、初心者向けに日本語で丁寧にメッセージを出すような仕組みを別途作ったりするのはかなり大変なのではと思います。
 エラーを沢山出して自力で解決する経験を積むことで、どこらへんが間違ってるのか匂いのようなものを感覚的に感じ取る力、より短い時間で素早くエラーを解決できる問題解決能力を磨くことも実務では必要になってきます。(だいたいこの辺は本や座学教育では身につかなくて、現場の実地で習得できるものですね。)

 よくプログラマ啓発系の本でアドバイスに「メンターを持て」というのがありますが、ハマった時に聞ける人が身近にいるかというのはプログラミングの学習の上でかなり影響しますね。PyQが(恐らく)想定しているのは、やはり自力で対応できないユーザはより高額のプランにして、メールのサポートを受けたりメンターにチャットで助けを受けたりして進むこと……これが正道なのかなと思います。
 ヘルプの「プランに関するFAQ」を見ると、初めてプログラミング学習を行う場合はライトプラン+メールサポートの「スタンダードプラン」から始めるのが推奨とされています。

 また、クエストの一番最初の方で、わざと間違った構文や例外でエラーを出させる練習もあります。学習中にいつでも参照できる PyQ 1.0 ドキュメントでも、「Pythonの用語集、Tips>Pythonのエラー解説」でよく出そうなエラーがだいたい載っています。「PyQ Help>PyQ クエスト Help」でも写経がうまくいかない場合の確認箇所が載っていたりします。このへんのサポートは割と丁寧だなと感じました。

 余談ですが、Pythonのエラー解説に空白が間違ってるとお出ましになる必殺のIndentationErrorもちゃんと解説してあります。Python使いの人には当たり前なんでしょうけど、他言語から来た身だとすごく新鮮なエラーです。

判定時の初歩ミスで気を付けるところ(経験より)

  • 金額を出す問題で末尾の「円」をつけ忘れる。
  • 金額のフォーマットでカンマ付与を忘れる。
  • 同じく日付のフォーマット周りなど。
  • 計算結果を文章に嵌めて標準出力で求められる出題で、末尾が「~です」と「~です。」が両パターンある。
  • 結果が複数ある場合にコロンの横とか、半角スペースが必要だったりする。
  • 結果のサマリと詳細の間に空行を1行出力する必要があったりする。(これ、1時間ぐらい悩んだことがありました……)

 標準出力された文字列が正解と比較されて判定されるので、これらもちょっとでも違うとすべてNGになるのでどぞご注意ください。まぁ問題文と自分の書いたコードと出力結果をちゃんと見れという話ですが、僕もけっこうやらかしました。
 経験者には分かる話ですが、プログラミングって経験があってもこういうシンタックスレベルの初歩的なミスをけっこうやるものなんですよね。未経験者の人もトライ&エラーの繰り返しになると思いますが、どうぞめげずにぶつかってみてください。

 ほか、個人的には正規表現のところがなかなかクリアできずハマった印象があります。(他の言語でも普段正規表現あまり使ってなくてスンマセンという話ですが。)

良かったところ

  • 環境構築が不要
    他の記事でもよく触れられていますが、やはりユーザのローカルマシン環境に環境構築がまったくいらないのは大きいですね。機械学習コンテンツではJupyter NoteBookも触れます。
     サイトの開発スタッフの声にコンテナ技術で実現するのに苦労した……とあり、やはり最近DevOpsで流行のDockerを使って仮想環境を実現しているそうです。この形式が最近の学習サービスでは主流になりつつありますね。
  • 問題数が豊富
    プログラミングの学習ではとにかく手を動かしてタイプして書き方を体に覚えさせる(実際に覚えるのは頭ですが)ような練習が、ある程度必要になってきます。
     Python独特の書き方でファイルをオープンして as f:したら次の行はインデントして約束のfor row in f:とか。似たような問題で何度も練習できるので、このへんをみっちり修行できます。
  • 問題の粒度が割と丁度良い
     最初の1問は写経で2問目は似たような書き方の繰り返し。あるいは最初の1問は続く数問の処理の複合完成系の写経で、2問目以降でひとつひとつの要素を分割して改めて解説しコーディング……など、手を動かして沢山解きながら、理解しやすい粒度で各種構文や書き方やデータ型などを学んでいけます。
  • 設問がかなり考えられている
     やった人にしか分かりませんが、集合(set)の問題に出てくる入力データのお好み焼きとか、積・和・差集合の演算に出てくる入力データの太郎さんと次郎さんのスキルセットとか、あーこれは例題として理解しやすいうまいテストデータを用意してるなーと感心しました。
  • ヘルプが丁寧
    上のエラー時の対応方法の話でも触れましたが、演習中に参照できるPyQ 1.0 ドキュメントが、公式ドキュメントのボリュームには及びませんがなかなか丁寧に書いてあります。初心者がやりがちなミスも意識してサポートしている印象です。
     他にも演習中は公式ドキュメントへのリンクが張ってあったり、Qiitaの人気記事へ飛べたり、それぞれの問題の中で工夫がしてあります。

 この調子で本格的になってくる後半の設計とか仕様からの機能開発とか、一体どんな問題が用意されているのかなーと楽しみになってきます。

 ほか、クエストが一式終了すると書いたコードはPyQに保管されて、「クエスト一覧」ページの各クエストの「みんなの解答」から他の人のコードも見ることができます。
僕も含めて多くの人は先に進むのに精一杯と思うのでこの機能はあまり使わなさそうですが(笑)、最初の方は誰のコードでも同じような感じですが、後半の応用問題、「Python中級」~「実務でのPython」あたりになってくるとだんだん各自の解き方が違ってきて解答に幅が出てきます。
PyQ側のスタッフの人が解いたらしきコードもあったり、かなり高度にテクニカルな書き方をしている人がいたり、こういう解法もありか!Pythonはこうも書けるのか!と感心できたりします。

気になったところ

 個人の感覚的な所もあるのですが、列挙してます。

  • 問題文の中で「あっここは隣の問題のコピペミスだな」、というような細部の間違いはたまに見つかります。このへんは時間と共に精度も上がっていくでしょう。(幾つかは問題画面から呼べるフォームで報告させていただきました。)
  • チュートリアルやはじめの一歩などがカテゴリ(?)、「2. print()、変数」などがチャプター(?)、その下に「2-1.~2-5.」までのクエストがあって、クエストの下に並ぶ「■」ひとつひとつが実際の問題。想定学習時間はクエスト単位。
     という階層構造なのですが、これが進めるうちに自然と分かってくるのですが、最初の方だと現在位置どこだっけ?と若干迷って気になります。どこかで階層構造の説明があってもよいかと思います。
  • 会員登録した後のユーザのアイコンが、海外のなんかのサイトと紐づけないと設定できません。FacebookTwitterとサクッと連携できると楽です。
  • エストを始めるたびに新しいタブが開くので、タブブラウザだとPyQタブが一杯になっていきます。感覚によるのですが、ログインしてセッションを保持する形式のサイトは、1つ2つのウィンドウ(タブ)内で動きが完結する方がなんとなく安心感があるような。→直りました
  • 次のクエストを開くと画面のtitle属性が「PyQ」のみで、クエスト名がなかったような。
  • 「ホーム」を押すと自動的に算出されて最新のクエスト画面が表示されます。クエスト一覧のページがクエストの一覧と(ログインしていれば)達成度合いを兼ねているためだと思いますが、この動きがちょっと違和感。
     ふつうホームというと、ユーザ名やアイコンや達成のパーセンテージや一覧やリンク一覧が表示され、「次のクエストに挑戦」ボタン等で最新のクエスト画面に遷移する方が自然なような……
  • コーディングするエディタは現在黒背景ですが、将来的には白背景とかテーマを何種類か選べるようになったりすると至れり尽くせりでしょうか。まあでもヘルプ類のキャプチャなどもあるので1種類の方がよいのかな。

 エディタの背景色はプログラマは黒背景を好むと言われていますが、僕はどっちでもよい派です(笑)。仕事だとWindows環境でIDEをよく使うので白背景が多いかも。

 また、これも感覚なのですが「実務でのPython」から、今までの問題に出てこなかった関数や書き方がずらずらっと出てくるようになり、難易度の上昇が突然激しくなる印象があります。まあもう実務レベルだから自力で何とかしろということでしょうかね。

コストパフォーマンス

 僕もamazonを除くとmixi/pixiv/ニコ動/はてな等でしか普段Webサービスのお金は費やさないので最初は有料であることに躊躇したのですが、よくよく考えてみると……

  • 手元にある『みんなのPython 第4版』が単行本で2,916円。同じく言語経験者にはオススメされているオライリー本『入門 Python 3』が3,996円。『Pythonプロフェッショナルプログラミング 第2版』が本だと4,275円、『パーフェクトPython』が3,456円。本を読んで1~2か月勉強したと思えば環境構築がいらない分安い。
  • 日本の主要なオンライン学習サービスに月980円払うとすると、ドットインストールはレッスンが多いのでよしとしても、ProgateとCODEPREPはPythonについての講座のボリュームがそれほど大きくないので、他の言語の講座も受けてトータルでコストに見合うくらいになる。
  • よく広告で見る通学式のプログラミングスクールは、形態にかなり差がありますがだいたい月12万~15万ぐらい?が相場の模様。スクールでもてはやされることの多いRubyに比べるとPythonはまだそれほどでもないようですね。
  • 運営のビープラウド社さんがやっている企業向け座学Python研修が2日で14~16万。僕の会社もグループ全体で研修サービスいろいろありますが、座学7Hぐらいの研修が1日3万~、2日で6万~とか。DBのOracleなどベンダー企業が開いてる外部研修だと、2日で15万~とかけっこうお高い。(まあこういうのはふつう自腹でなく所属企業の教育費から出ますが。)

 と比較していくと、問題発生時は自力解決する覚悟完了してライトプランの月2,980円、あるいは万一の時はメールお助けのリスク回避手段を用意してスタンダードプランの月7,980円というのは、実はコスパ面では十分なのでは?と思います。
 個人向けでそのうえでメンターが付くメンタープラン月29,800円、そしてサービス全部もりもりの最高ランクのプレミアムプラン月98,000円になると、だんだんスクールに通うのと同じぐらいになってきますね。
 学生さんや中高生なら懐事情は別ですが、職業エンジニアで継続的なスキルアップや情報収集を心がけている方なら、自分への投資として本の1~2冊ぐらいさくっと買って読んだりしているでしょう。その分をちょいと数か月分の学習に充てたと思えば、十分お釣りがくる投資だと思います。

 追記:なお公式Twitterによると、2017年8月末時点でメンタープランは好評につき満員御礼だそうです。

みんなのPython 第4版

みんなのPython 第4版

  • 作者:柴田 淳
  • 発売日: 2016/12/22
  • メディア: 単行本
入門 Python 3

入門 Python 3

  • 作者:Bill Lubanovic
  • 発売日: 2015/12/01
  • メディア: 単行本(ソフトカバー)

 また個人的には後半にWebアプリケーション作成があり、WebアプリケーションフレームワークDjango(ジャンゴ)についても学べるのがかなりありがたいですね。

djangoproject.jp

 RubyといえばRailsJavaなら昔はStrutsやその後JSFVBC#ならASP.NET Web Forms/MVCと2系統、PHPは最近ならCakePHPやLaravel……というように主要言語にはたいてい有力フレームワークがあります。
不思議とPython界隈だとデータサイエンスに数値計算ライブラリ、機械学習回りの話はしょっちゅう出ますが、Webアプリケーションフレームワークの話はそれほど聞かない気がします。Djangoなどのまとまった情報がなくて困る……などの話もよく聞きます。この辺を断片的にでなく体系的に押さえられるのはかなり強いですね。

 余談ですがPythonの何かのイベント回りの感想か何かでDjango本制作の機運が高まった……とかいう話をどこかで見たような気がするのですが、そういう本欲しいのでぜひ実現してくれないかなあ。

まとめ:良コストでPythonがじっくり学べるサービス

 うたい文句にある「90日間でプログラマーに」はまあ塾や予備校の「XX日間で難関校に合格!」みたいなものでそれは本人と周りの環境次第ですし、PyQオンリーでなくそれ以外にも取り組みは必要になるでしょう。
 必ずなれるかは別として、未経験からプログラマーを目指す方、目の前の仕事で必要になって学ぶ方、在学中からスキル獲得を目指す学生さん、筆者のようにスキルの幅を広げるために学ぶ人のいずれにも、良コストでPythonが学べるおすすめのサービスだと思います。

 9/7~10なのでもう過ぎましたが、公式ブログ記事のPyCon JP 2017 チュートリアル: 明日から使えるプログラミング入門 ~Pythonを右腕にしよう~PyCon JP 2017カンファレンスにブースを出展しますによると、PyCon JP 2017 in TOKYOのチュートリアル(ビープラウドの4000円のやつかな)に参加することでもライトプラン1か月分の券がゲットできたそうです。ほかにもイベントで話題になったりしそうですね。

www.pycon.jp