で、暇つぶしもあって、完全無料と謳ってるPython3入門編と言う講座を見てみたんだ。星田さんがやってたヤツだな。
う〜む、驚いてしまった。こんなんで「プログラミングが出来る」ようにはならんだろ・・・・・・。
以前から教えて!gooにも「どーゆーわけか」paiza関連の質問が来てたりしてて、
「paizaの講座を終わったんだけど何のプログラムを書けばいいのか?」
とか「知るか!」と言うような状態だったんだけど、うん、こんな講座を終えてもプログラミングが出来るようにはならんわ。
同時に思った。星田さんが異常なんだわ(笑)。
こんな講座終わってもプログラムは書けるようにならんのに、積極的に自分でネタを探してプログラムを書こうとして実際書いてしまう星田さんって相当異常だ(笑)。
いや、褒めてるんだよ(笑)?
こう、星田さんの過去記事とか見ても思うんだけど、通常の「ダメな人」ってのは、「プログラミングを勉強する」とpaizaに頼りっきりになるんだけど、星田さんは違うんだよな。とにかく検索の鬼。ここが凡百の人と違うわけだ。
いや、マジな話、paizaで学んで性交成功しました、ってのが星田さんしか見たことねぇ、ってのはpaizaがどーの、っつーより単純に星田さんに才能があった、って事なんだろ。
いや、暗記的な事言うと、見てると星田さんだって当然色々忘れるわ。でもそれを補うくらいに「検索しまくって」「メモしまくってる」んだよな。こういう人が上達しねぇわけがねーだろ、と言う。正直言って、僕より遥かにマメだと思ってる(笑)。
いや、これくらいの人じゃないとpaizaでの経験を役立たせられないし、また、星田さんくらいの人ならpaizaじゃなくてもプログラミングは出来るようになるわけ。
ぶっちゃけ、paizaは全く関係ない。っつーか、キッカケ、としては仕事したかもしんねぇけどな。
まぁ、前にも書いたけど、別にpaizaを使って悪い、とは言わない。ただし学習の中心にすればダメだ。あくまで補助に留めるべきだ。
星田さんだって結果、paizaで新しい概念を知った際に、それを取っ掛かりにしてとにかく検索しまくってんだよな。そして検索に費やした時間はpaizaで過ごした時間より多い筈だ。だから出来るようになる。星田さんはpaizaの「活用法」を結果良く知ってた、って事だろう。決して頼り切りにはなってないんだ。
今回paizaラーニングで遊んでみて、まずは良かったトコ。
「よいしょ」「どっこいしょ」
が良かった(笑)。
いや、何のこったか分かんねぇだろうけど、プログラミング動画での解説/ナビゲータのヘンな女がいて(笑)、そいつがプログラムの実行ボタンを押すトコの掛け声だ(笑)。
ヘンな女。誰?
なんかオッサンくせぇセリフで思わず笑っちまった(笑)。
オヤジかお前は(爆
あるいはかぶでも抜いてんのか(笑・※1)。
ただ、良いとこはそれだけ、だ(爆
と、ここまで書くと「C言語脳でしょ?」って思う人もいるだろう。
その通りなんだけど、それより問題なのが、やっぱ実行環境なんだよな。
全ての悪しき原因はやっぱブラウザでプログラミングをさせよう、って辺りなんだよ。これが全然ダメで、C言語脳な問題を初めとしてprint塗れになる原因なんだ。
もっとマシなシステム使ってんのか、とか思ったんだけど、全然違ってた、って事だ。
教育向けのシステムじゃない。
基本的に、paizaラーニングのシステムもpaiza.ioのシステムを流用してる。
つまり、例えばPythonをやっても真っ当なインタプリタを提供してるわけじゃない、ってこった。
以前説明した事もあるが、元々、ネットワーク越しにインタプリタを使わせる、ってのはサーバーにとっては非常に危険な行為ではあるんだ。
現時点、それやって上手く行ってるのはGoogle Colabくらいしかない。これを実現するにはセキュリティを物凄く上手に設計するしかなく、それをやれてるGoogleの技術力は驚嘆に値すると思う。
まぁ、単純に言うとpaizaの技術力はやっぱGoogleに劣ってる、って事なんだけどな。
お陰さんで、paizaではインタプリタでの開発、ってものは学べない。
大体、インタプリタの何が美味しいのか、と言うと、小さいコード片でインタプリタ上で上手く動けばそれをコピペして本体に書き加えられるトコにある。
あれ?知らんかった?インタプリタでの開発って何も「実行する」だけじゃないんだよ。インタプリタ上で小さなコード片をテストして、上手く行ったらそれを本体にコピペする、ってなぁ常套手段なんだ。
例えば使うべき関数を知ってても、「引数ってどうだったっけ?」とか記憶が怪しかったりした場合、インタプリタ上でテストしてみて、上手く行ったコマンドをコピペして、本体に貼り付ける、なんつーのはインタプリタでは良くある開発手法だ。
これが出来ない為、とにかくエディタに何か書いては不必要な程print塗れのコードばっかになる。
星田さんが、当初、
はっきり言って関数を使うのも初めてなので、どういう時に関数を使うべきなのかがはっきりしないんですよね。何でも関数にすれば良いのかな?
とか書いてたんだけど、さもありなん。
大体、paizaラーニングで出してる関数とかこんなカンジだぜ?
def foo(arg):print("Hello, World!")
これじゃ旨味がないだろう・・・。returnもクソもない。
しかも演習問題で「関数を作れ」とか言う問題もなく、これを(と言うよりこの程度を)呼び出す問題ばっか・・・・・・。
いや、ホントそれじゃダメなんだよ。
そしてブラウザでやる、ってモノの最大の問題はここだ。少なくともpaizaでは演習問題の質が極端に悪くなってんだ。
ちと説明しよう。
実はpaizaの演習問題の回答チェックは、受講者の書いたコードのロジックを全くチェックしていない。もっと単純な判定方法を用いてるんだ。
何でもかんでもprintを使う、って事はどういう意味か。平たく言うと、標準出力上に文字列が表示されてるんだけど、つまり、回答例として与えられた文字列とユーザーが作ったプログラムが表示した文字列が同一かどうかを判定してる、って事なんだわ。
回答データベース上の文字列 == ユーザーが書いた演習問題の解の出力文字列
従って、例えばユーザーが書いたプログラムが次のような文字列を表示するとしよう。
paiza!
しかし、回答データベースに入ってる回答例の文字列が次のようなケースの場合、いくらその章で学んだロジックの通りに書いたとしても「正解判定」は貰えない。
paiza!
違いが分かる?そう、前者はエクスクラメーションマークが英字の半角なんだけど、後者は日本語入力の全角なんだ。
つまり、ロジックが正しくても文字列の構成要素が違うと「間違い」になっちまうんだよ(笑)。んなバカな、とか思った(笑)。
いや、実は一回ハマって、問題文が「才」を採用してるのに、ウッカリと「歳」って書いちまって、間違いだと言われたんだけど、しばらく原因に気づかんかったんだよな(笑)。
とにかく、paizaの「問題の正解/誤り判定」は出力されてる文字列しかチェックしてない。確かに終わりよければ全てよしってのがプログラミングなのは事実なんだけど、教育として考えると全然ダメな事やってんだわ。
だから極端に言うと、問題文の指示なんかを無視しても丸っきり構わない、って状態になってんだよな。
例えばリストのappendメソッドを使え、なんつー指示を無視しても正答になる。
appendを使え、と言う指示を無視してリスト同士を結合してみる。
しかし、出力自体は同じ結果なんで「正解」と判定される。
もちろん、以前から「appendなんざ使うべきじゃない」と言ってるんで、別にこれくらいはいいだろう。
が、もっと大きな問題がある。
実は「出力文字列が同じなら正答と判定される」のなら、問題文の下に例示として挙げられている「期待する出力値」をコピーして、出力関数の引数としてペーストするだけで正答と判断されてしまうんだ。
出力例をコピーする
printの引数にペーストする
プログラムなんざ書かなくてもこれだけで正答になる。
もちろん、初めてプログラミングに挑戦する人はもっとマジメにやってて、僕のように裏技を発見するような余裕はねぇだろう(笑)。
が、要するに教育システムとしてはあまりにもお粗末なんだよな。
プログラミングを学ぶにはプログラミング独特のロジックを学ぶ必要があるんだけど、そこにチェックが入らないのは、教育としては果たして良い事なんだろうか。
他にも、説明で関数とメソッドがごっちゃになってたり、とかツッコミどころがいっぱいあるが、一番の問題は今まで見てきたように、ブラウザでの実行環境と言う制限のせいでprint塗れのプログラムを書かなアカンくて、そして演習問題の正答/誤答判定もprint頼り、と言う、明らかに教育システムにそぐわない単純なシステムになってる辺りだ。
繰り返すが、自習の補助として悪い、たぁ言わない。が、「これだけやっとけばなんとかなる」とか言う性質のサービスじゃない、ってのは間違いないだろう。
paizaをやったから、つったって「就職に役立つ」くらいのプログラミングの知識を得ることは出来ない。
※1: 福音館書店刊「おおきなかぶ」より。