質問するログイン新規登録

回答編集履歴

2

タイポ修正・文章修正

2025/08/25 18:13

投稿

cametan
cametan

スコア182

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
- 言い換えると貴方は「上手い人が書いたような」コードを学べない。逆に貴方は、圧倒的に「下手くそな人」が書いたようなコードをA.I.は提示する、って危険に晒されるんだ。「コードを書くのが上手い人」が書いたコードは大量に存在する「コードを書くのが下手な人」のコードに埋もれてしまう(「取り敢えず」動くだろうが)。
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やって「プログラミング出来るようになりました!」って人は見かけないね。結局「やっただけはやった」って自己満足させるだけのWebサービスでしかない気がする。
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には正式な言語仕様書がない。言語仕様書があれば「理論的根拠(Rational)」が提示されてる筈なんだけど、それがない。
155
+ Pythonには正式な言語仕様書がない。言語仕様書があれば「理論的根拠(Rationale)」が提示されてる筈なんだけど、それがない。
156
- 結果、Pythonの場合、典型的な「**実装のマズさをドキュメンでカバーする**」って事をやってるわけだ。この例だと[ここ](https://docs.python.org/ja/3/tutorial/controlflow.html#default-argument-values)に**言い訳にならない言い訳**が書いてある。
156
+ 結果、Pythonの場合、典型的な「**実装のマズさをドキュメンテーションでカバーする**」って事をやってるわけだ。この例だと[ここ](https://docs.python.org/ja/3/tutorial/controlflow.html#default-argument-values)に**言い訳にならない言い訳**が書いてある。
157
157
  が、繰り返すがこんな現象は、フツーのモダンなプログラミング言語じゃ**あり得ない**んだよ。
158
158
 
159
159
  Pythonはちょくちょく、こういった**実装上のおかしさ**がある。

1

Pythonの落とし穴に例を追加

2025/08/25 13:38

投稿

cametan
cametan

スコア182

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