回答編集履歴
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 |  | 
