回答編集履歴
2
タイポ修正・文章修正
answer
CHANGED
@@ -38,14 +38,14 @@
|
|
38
38
|
僕はPaizaを調べてたんだけど、例えば僕が全くプログラムを書かないで、「出力例: こう出力してください」って書いてる部分をコピペして投稿しただけで「正解」貰ったトコまで調べたんで、こう言ってるわけなんだけど。
|
39
39
|
ぶっちゃけ、「こんな仕組みでO.K.なのかよ?」ってぶったまげた。もっと複雑な事してんのか、って想定してたから、なんだ。
|
40
40
|
|
41
|
-
要は「出力結果だけ調べて正誤判定」なんてやってる時点で、「プログラミングを組み立てるロジック」はこのテのWebサービスでは全く学べない、って事が分か
|
41
|
+
要は「出力結果だけ調べて正誤判定」なんてやってる時点で、「プログラミングを組み立てるロジック」はこのテのWebサービスでは全く学べない、って事が分かる。また、「とにかく出力を混ぜる」と言うスタイルを受講生に強要する以上、「マトモなスタイルでのプログラミングは学べない」と言う結論になる。
|
42
42
|
ダメなんだ、って。このテのサービスを利用すんのは。
|
43
43
|
|
44
44
|
まぁ、ひょっとしたらProgateはもっとマトモなシステムを組んでるかもしんない。あるいは最近の傾向だとA.I.によるアシスタンス付けてたりしてな。
|
45
45
|
ただし、A.I.なんつーのも全面的に信頼出来ないんだ。それは原理的には統計ベースのソフトウェアだから、だ。
|
46
46
|
統計ベースとはどういう事か。それはWeb上にあげられている無数のコードから「書くべきコード」を生成してる事を意味する。
|
47
47
|
意味するんだけど、「統計ベース」ってのが厄介なんだよ。つまり、サンプルなってるのは「コードを書くのが上手い人」「標準的な人」「下手くそな人」が書いたブツで、残念ながら標本としてはこの順で多くなる。
|
48
|
-
言い換えると貴方は「上手い人が書いたような」コードを学べない。
|
48
|
+
言い換えると貴方は「上手い人が書いたような」コードを学べない。結果、貴方は、A.I.が圧倒的に「下手くそな人」が書いたようなコードを提示する、って危険に晒される。「コードを書くのが上手い人」が書いたコードは大量に存在する「コードを書くのが下手な人」のコードに埋もれてしまうからだ(「取り敢えず」動くだろうが)。
|
49
49
|
それが「統計」の意味になるんだ。
|
50
50
|
生成A.I.はかなり賢くなってるのは認めよう。ただし、仕組みを考えると**全面的に信頼出来るわけじゃない**んだ。
|
51
51
|
そしてA.I.自身は「何が綺麗か汚いか」と言う概念をまるで持たない。
|
@@ -64,9 +64,9 @@
|
|
64
64
|
要はPaizaやProgateで「やれる人」ってのはPaizaやProgateに**頼り切らない**タイプなんだ。もう何か疑問があったらPaizaやProgateの説明だけに飽き足らず、果敢に納得行くまでWeb検索しまくるタイプ。
|
65
65
|
あと、もう一つ特徴的だったのは、その結果上手く行こうが行くまいが、**記録を取り続けられるタイプ**だったんだ。この人の場合ブログ記事にしてたんだけど、成功/失敗に関わらず、結果的に**ノートを別に取っていて**、Paiza/Progateの「進度」的な得点を全く意に介さなかった。要は過去どこで躓いたのか、どうすれば成功したのか、って探して読み返せる体制を自作してたわけ。
|
66
66
|
逆に言うと、こういう人じゃないとPaizaやProgateを使ってもプログラミングを出来るようにならないし、言っちゃえばPaizaやProgateじゃなくってフツーに古典的に本を使って学んでも「デキる」人だったろうと言う・・・・・・。
|
67
|
-
結局、この人は特異点だったわけで、通常、やっぱ、PaizaとかProgateやって「プログラミング出来るようになりました!」って人は見かけないね。結局「や
|
67
|
+
結局、この人は特異点だったわけで、通常、やっぱ、PaizaとかProgateやって「プログラミング出来るようになりました!」って人は見かけないね。結局「やるだけはやった」って自己満足させるだけのWebサービスでしかない気がする。
|
68
68
|
|
69
|
-
と言うわけで、独学するのなら本を買ってやるのが一番だ、って事なんだけど、一方、本を使うと難点がある。最大の難点だ。それは**
|
69
|
+
と言うわけで、独学するのなら本を買ってやるのが一番だ、って事なんだけど、一方、本を使うと難点がある。最大の難点だ。それは**プログラミングを勉強する際に本をどこに置いて読むべきなのかが分からない**って事だ。
|
70
70
|
パソコンは正面にある。キーボードも正面にある。本は開いてどこに置く?膝の上に、とかやってもやりづらくってしゃーない。
|
71
71
|
それが最大の難点で、結局お助けツールがあった方が良いよね、って話になる。読書台とかブックスタンドとか呼ばれるヤツの購入な。[ほんたった](https://edison-official.com/edison%E3%80%8C%E3%81%BB%E3%82%93%E3%81%9F%E3%81%A3%E3%81%9F%E3%80%8D%E3%80%9C%E5%8E%9A%E3%81%84%E6%9C%AC%E3%81%A7%E3%82%82%E5%AE%89%E5%AE%9A%E3%81%97%E3%81%A6%E7%BD%AE%E3%81%91%E3%82%8B%E3%83%96/)とか[actto BST-02BK ブックスタンド](https://www.amazon.co.jp/exec/obidos/ASIN/B00LLQW7UI/warakuru-22/ref=nosim/)とか。
|
72
72
|
いずれにせよ、この辺の商品は**必需品**になるんじゃなかろうか。
|
@@ -108,7 +108,7 @@
|
|
108
108
|
データ変換が要る、って知識も必要だし、それ以前に「イテレータとは何ぞや」と言う説明も要る。
|
109
109
|
ところが、そういう話を最初から書いている「Pythonを使ったプログラミング入門書」ってほぼねぇんだよ。
|
110
110
|
結果、「オマジナイ」としてこれらの存在をスルーしながら初心者に「プログラミングHow to」を解説していかなアカン。
|
111
|
-
要は事実上、Pythonは既に「プログラミング初学者
|
111
|
+
要は事実上、Pythonは既に「プログラミング初学者にも優しい」プログラミング言語ではなくなってるんだ。
|
112
112
|
|
113
113
|
他にも、Pythonはモダンでファンシーな機能がてんこ盛りなプログラミング言語ではあるんだけど、いくつか設計が失敗してるようなトコがある。
|
114
114
|
例えば
|
@@ -117,7 +117,7 @@
|
|
117
117
|
- デフォルト引数の挙動がおかしい
|
118
118
|
|
119
119
|
とか。
|
120
|
-
前者は、Pythonは関数スコープ、と言われるモノしか持ってない事だ。これはモダンな言語だとあり得ない設計で、結果、シーケンス(あるいはコンテナ)型のデータ以外では、[global](https://docs.python.org/ja/3/reference/simple_stmts.html#grammar-token-python-grammar-global_stmt)や[nonlocal](https://docs.python.org/ja/3/reference/simple_stmts.html#the-nonlocal-statement)みたいなアドホックな宣言をして凌がないとならないが、動的型付け言語ではこの「宣言」ってのが
|
120
|
+
前者が意味するのは、Pythonは関数スコープ、と言われるモノしか持ってない事だ。これはモダンな言語だとあり得ない設計で、結果、シーケンス(あるいはコンテナ)型のデータ以外では、[global](https://docs.python.org/ja/3/reference/simple_stmts.html#grammar-token-python-grammar-global_stmt)や[nonlocal](https://docs.python.org/ja/3/reference/simple_stmts.html#the-nonlocal-statement)みたいなアドホックな宣言をして凌がないとならないが、そもそも動的型付け言語ではこの「宣言」ってのが美しくない。
|
121
121
|
|
122
122
|
```Python
|
123
123
|
#!/usr/bin/env python3
|
@@ -152,8 +152,8 @@
|
|
152
152
|
果たしてこのコードは「一郎」を印字するのか「次郎」を印字するのか。
|
153
153
|
殆どの人は「次郎」になる、って思うだろう。そして一般的にはそれは正しい。しかしながらPythonは「一郎」を印字するんだ。
|
154
154
|
|
155
|
-
Pythonには正式な言語仕様書がない。言語仕様書があれば「理論的根拠(
|
155
|
+
Pythonには正式な言語仕様書がない。言語仕様書があれば「理論的根拠(Rationale)」が提示されてる筈なんだけど、それがない。
|
156
|
-
結果、Pythonの場合、典型的な「**実装のマズさをドキュメン
|
156
|
+
結果、Pythonの場合、典型的な「**実装のマズさをドキュメンテーションでカバーする**」って事をやってるわけだ。この例だと[ここ](https://docs.python.org/ja/3/tutorial/controlflow.html#default-argument-values)に**言い訳にならない言い訳**が書いてある。
|
157
157
|
が、繰り返すがこんな現象は、フツーのモダンなプログラミング言語じゃ**あり得ない**んだよ。
|
158
158
|
|
159
159
|
Pythonはちょくちょく、こういった**実装上のおかしさ**がある。
|
1
Pythonの落とし穴に例を追加
answer
CHANGED
@@ -160,11 +160,13 @@
|
|
160
160
|
|
161
161
|
```Python
|
162
162
|
# Pythonの落とし穴の一例
|
163
|
-
# さて、ど
|
163
|
+
# さて、どれが望ましい結果だ?
|
164
164
|
>>> [f() for f in [lambda: i for i in range(1, 6)]]
|
165
165
|
[5, 5, 5, 5, 5]
|
166
166
|
>>> [f() for f in map(lambda i: lambda: i, range(1, 6))]
|
167
167
|
[1, 2, 3, 4, 5]
|
168
|
+
>>> [f() for f in (lambda: i for i in range(1, 6))]
|
169
|
+
[1, 2, 3, 4, 5]
|
168
170
|
|
169
171
|
```
|
170
172
|
|