【プログラミング言語】「京大生でもx=x+1が分からない」、喜多教授が明かすPython教育の実態 [すらいむ★]
■ このスレッドは過去ログ倉庫に格納されています
「京大生でもx=x+1が分からない」、喜多教授が明かすPython教育の実態
大森 敏行
プログラミング言語「Python」の大規模イベント「PyCon APAC 2023」が2023年10月27日と28日の2日間にわたって開催された。
1日目に行われた京都大学国際高等教育院の喜多一教授による基調講演を中心に、イベントの内容をリポートする。
PyCon APAC 2023は、1日目の基調講演「Why University Teachers Wrote a Python Textbook?」で幕を開けた。
京都大学でPythonを使ったプログラミング教育を担当している喜多教授が、その実態について英語で講演した。
(以下略、続きはソースでご確認ください)
日経クロステック 2023.11.07
https://xtech.nikkei.com/atcl/nxt/column/18/02629/110200002/ プログラミング言語は、もうちょっと
数学的な記号の使い方や一般的な数学的概念に寄せる努力をした方が良いんじゃ無いかな?
と思う時はある for文も、reptitionとかrepeatとか略してrepとかに…と思わなくもない
x86アセンブラの繰り返しはrepだし
そこら辺を変えようってならないのは
過去からの慣れと言うか惰性な気がしなくも…
英語苦手にしてみりゃ、どっちでも良いわ…ってなる… 言語の違いで演算子自体の動きが違ったりすんの地味にめんどくさいよな
演算子は一番基本的な部分なんだから、言語によっての違いはなくしてほしい C言語のポインターの習得には時間を取った。
しかし、考えてみると、ポインターの使い方を
憶えることがプログラミングの理解を深めるには
最適だと思うようになった。
単なる変数はユーザーには便利でも本質からは遠い。
ポインターは覚えにくいが機械の本質に近い。 特定のプログラミング言語に於いては等号ではなくて代入記号なんだ、と教育しても理解できない学生がいるってことか?
もうそれだったら知能の問題じゃないのかな・・・ >>9
そりゃあ元々はCPU命令をC言語で実現するための実装だからな
大昔はアセンブラの次にC言語を覚えるパターンも多かったから
そういう人はポインタを理解するのにほとんど苦労しなかった アセンブラがわかると高級言語のわかりにくい概念でも結構自明なものは多いぞ。
問題は最初に教える言語がアセンブラというわけにはいかないところだが。 (問題:間違いを見つけなさい。)
2の2乗を、2^2とする。
即ち2^2=2×2=4
3^2なら、3×3=9
4^2なら、4×4=16となる。
これを足し算で表すと、
2^2=2+2=4
3^2=3+3+3=9
4^2=4+4+4+4=16となる。
つまり2^2なら2を2個足し、3^2なら3を3個足し、4^2なら4を4個足す。
ならば一般化し、n^2とはn×nであり、nをn個足すということになる。
(ここで、n≠0とする。・・・条件@ )
即ちn^2=n+n+n+…+n(←nがn個足されてる。)
ではここで上式の、n^2=n+n+n+…+nを、A式と置き。
A式の左辺をnで微分すると、2nとなる。
同じくA式の右辺をnで微分すると、
1+1+1+…+1(←1がn個足されてる。)=nとなる。
まとめると、A式の両辺をnで微分した時の左辺=2n、右辺=n。
つまり2n=n
条件@よりn≠0だったので、上式の両辺をnで割ると
2=1
数学もプログラミング言語もそれぞれのルールがあって
=の役割が違うだけ
関数だって数学的な関数とは違う >>13
プログラミングと電子回路の繋がりを学ぶという点で
アセンブラは基礎知識として知った方がいいね x++にしろx=x+1にしろ何の説明なしに解れと言う方が無理
出題者の心の中を読む超能力テストかよと >>14
>即ちn^2=n+n+n+…+n
ここが間違い。n=1の場合には上式は成立しない。 >>19 の補足。
同じくA式の右辺をnで微分すると、
1+1+1+…+1(←1がn個足されてる。)=nとなる。
ここが、n=1 の場合には、1が1個足されるのだから
n^2=n 両辺をn(=1)で割ると n=1 >>16
さらにデジタル回路論もやっておいた方が良い。学生時代は若くて頭が柔らかいから半年もやれば回路図がスラスラ読めるようになる。 >>6
そんなあなたにc++
演算子を自由に再定義出来ます プログラミング未経験者がプログラム中のx=x+1を数式だと思ってしまうのは仕方ないでしょ 根拠はないがアセンブラ、アセンブリ、アセンブルの違いもわからん奴が
雰囲気だけでアセンブルと言ってそう 普通に論理的思考が出来るならchatgptにコメント付きでコード書いて貰えば演算子の意味なんかいちいち覚えんでもなんとかなりそう 「x=x+1」はそらプログラミング知らんヤツが
いきなり見ても理解できなくて当然だと思うが
数学的にはありえないもん >>14
nは自然数なのにどうやってnで微分すんだよw >>18
言語のマニュアル読まずに使っている時点でアホ
まぁ言語のマニュアル読むんだったら講義受ける必要ないんだけどねw 初学者がいきなりPythonから学ぶのはやめたほうが…… 今は亡きハイパートークだとadd 1 to x又はput x+1 into x 数学者でもε-δ論法を最初は理解できなかったというのは珍しくない
それと同じようなもんだろ 数学的にはy=x+1と書くべきなんでしょうが
コンピューターの記憶容量は有限で
変数を使い回して節約する手法なのでしょう
特にレジスタは数える程、キャッシュも
メインメモリに比べたら少ない 笑わない数学面白いよなあ~
1+1=2の回を何べんも見返してるがいまだによくわからん 5 x=0
10 for y=1 to 100
20 x=x+1
30 next y
40 print “x=“;x
run
x=5050 >>36
違う
数学じゃない
数学ならxとか文字は特定の数字自体を表すんだろーが
プログラミングはxという入れ物を指してるだけで
中身がどうなろうとも入れ物自体は変わらない
これはレジスタというハード的な入れ物を指してたのがソフト的にメモリを差しても同じ発想だからだ
だから入れ物(お皿でも受け皿でもいいが)そのxという入れ物の中身に1加えるだけだ
x+=1
でもいいんだよ そういう書き方もある
入れ物xの中身に1たしてもxはxだからな いいか
プログラミングは数学とイコールじゃない
数学的な問題を解決するときは数学を使う時もあるくらいってなもんだ
奥底では数学的に動いてるといえるところもおおい
がー
そんなことは忘れろ
1番大切なのは
コンピュータで扱えるように定義をすることだ
定義がうまいやつらはコンピュータをうまく使えてる
人がいちいち動いて時と場合によって対応が違うような日本では定義があってなきもの
だからパッケージもうまく使えなけりゃ
プロトコルも合意できない
んで世界の標準化団体が作った決まりにひれ伏してしまう
ノーベル賞をありがたがってばかりで
日本国内の優秀な奴らは貶してばかりってのが日本
何も決められずそして諸外国に対してこれでやりましょうなんて説得なんて全くできない だからーー
x=x+1
ってのは決まりごとなの
それに他の概念持ち込んでケチつけてるよーな>>1がバカなの
そんなのに話合わせてるのはもっとバカなの 生成AIでも「文脈」を設定するのが最初にやること
どこに行っても敬語使って
生成AIにまで敬語とか丁寧語使うのがバカなの
敬語ってのは使う場所がわかってこそな
それと同じで
x=x+1
の表現の使われている場面を考えろよ
どこでも数学のあたまなのか?
そんなわけないだろ
>>1の話こそ作り話だ そもそもxなんて文字を使うのが古典的すぎる
いまは
goulei
とか
saifu_no_nakami
とか
中身がわかるように具体的な名前を使うように最初からおしえろよ
昔はメモリ小さいから少ないバイト数だったが今はわかりやすさ優先だ
saifu_no_naka = saifu_no_naka + kyo_no_okozukai
だ
財布の x <= x+1
みたいな言語をつくればいいんじゃねえの
変に数学っぽい書式なのが問題なんでしょ 数学じゃねーからそんなの必要ないつーことでこれなんだなあ
そこだけ取り出して文句つけてるのが
この辺でよくいう切り取りな
前後左右プログラミングお作法なんだからそこだけ変えても意味ねーんだよ >>47
大昔から、そこら辺を気にしてる言語設計者は多いけどね
FORTRAN由来のキーワードを、無批判無条件に使っちゃう言語も多くて… そもそも言語違えば違うし
言語だけじゃプログラミングできないし
いろんな決まりごとをそのときそのときで使いこなすわけで
今覚えたやつも明日変わるかもしれない世の中だぜ
LangChainなんて繋ぎだからもーあっちこっち
そういう対応能力こそ必須だ
こんな話世界からバカにされるぜ AWSのクラウドとAzureとGCPとdockerとクバネティスかあれかこれかそれか全部か
react?GrapgQL?
いやLLMならRAGでパインコーンかChromeDBでとりあえずか
GPUはCUDAはPyTorchでふむふむ やっぱりマイクロサービスはエンタープライズじゃないとね
イベントドリブンやラムダやら
プログラミングというより取説扱いだもん
プログラミングレベルはライプラリを賢い奴が作ってくれてる
車輪の再発明ではなく、自動車の取説をよめよ >>47
> x <= x+1
> みたいな言語をつくればいいんじゃねえの
> 変に数学っぽい書式なのが問題なんでしょ
使う記号の問題だけじゃなくて
「代入ってどういう処理?」ってことも説明しないと伝わらないものよ
「右辺のxの値に1を足して左辺のxの値にするのか?」
「でもそうすると右辺のxもそのときには1増えてるよな?」
「だとすると左辺のxはさらに1増えるのか?
」
「でもそうすると右辺のxもさらに1増えるよな?」
「だとすると左辺のxはさらに…」
「…いったいどうなるんだ?」
みたいに考え込んでしまう初心者もいる やっぱり最初にアセンブラをやるべきなんかなあ。やっていたら自明だと思うんだけど。 >>36
少し違う
+と=はあくまで演算子で、xは単体ではアドレスを指す
+→add(i,j)関数、=→move(k,l)関数とすれば、move(x,add(x,1))という記述になる
無理矢理数学的に書くなら
f(x)=x_i+1 , x_i=x_(i-1)+1
x=、で始まるから数学的に勘違いしてしまうけど、"=は左辺を右辺に代入する関数"だと考えたら分かりやすい >>54
実際問題、実用面で代入文で躓くことは無いからどうでも良いと思うけどね
アルゴリズム書いたりゴリゴリに最適化しないならライブラリ呼び出してデータ渡すだけでしょ >>56
なんていうか計算機という道具の癖がわかるから。
「ここが面倒くさいから抽象化したのか」とか「高級言語でこう書くと簡単だけど実際はこんなコードになるのか」とか
「こう書いたら性能が出ないけど、こう書き替えたら性能が出る」とかがわかるようになるんだよ。 PythonとVBAってどっちを勉強したらいいの? おっさんホイホイのBASICスレかと思ったら違った >>55
if x = 1 then ~
みたいに等号としても
使うんじゃないですか? x ← x + 1 とかもう少し分かりやすい記号にしておけば良かったねって話だったのに、
「=」なんていう数学で一般的に使ってる記号を用いて設計したことが以後数十年にも渡る混乱の原因だったって話だし。
それを予見できなかった設計者は迂闊だったって話だし。
「教育の実態」はそれをちゃんと説明できない力不足って話だ。
京大生の頭が悪いとかそういう話じゃない >>57
演算子の説明を、アセンブリのaddやmoveで説明するのは良いけど、x=x+1を理解できない人間ならアセンブリから初めても難しいかと
最初から仕様として覚えてもらった方が効率は良い
高級言語の仕様を理解するにはコンパイラの知識も必要になるから、アセンブラだけ教えても大して変わらないと思う
>>61
C言語系なら等号の演算子は==
Basic系なら= x ← x + 1 とかもう少し分かりやすい記号にしておけば良かったねって話だったのに、
「=」なんていう数学で一般的に使ってる記号を用いて設計したことが以後数十年にも渡る混乱の原因だったって話だし。
それを予見できなかった設計者は迂闊だったって話だし。
「教育の実態」はそれをちゃんと説明できない力不足って話だ。
京大生の頭が悪いとかそういう話じゃない 混乱なんかしてねーし
素人が戸惑うってだけの話をよくもまーそー盛れるもんだ
マーケティングでもして日々盛った話をねつ造でもしてんだろな
←なんて使えると思ってるよーな奴はプログラミング経験ゼロだし >>63
いや
アセンブリなんて簡単
いったように箱が並んでるだけだからな
アセンブリの話を難しく説明する奴が頭悪いだけ
そーゆー奴はたいていにしんほーがどーこー言い出すアホ >>61
だから文脈だっての
文脈読めない奴は日本語も話せないだろ 2進法とかじゃなくてスイッチが並んでるだけだ
それを小難しく数学わかんねーのみたいに言うからみんなアホになる >>63
車を運転するのに車の作り方は知らなくて良い
プログラミングするのに仕様の理解は当座必要ない
だからコンパイラの知識はとりあえず必要はない 代入演算子と比較演算子がどちらも「=」なクソ言語があるそうな 目に見えないけどレジスタって箱があって、
レジスタ ← x + 1
x ← レジスタ
ってやってるのだ、それをいちいちレジスタを書かないで
済むようにしてるんだ、と教えると小学生でもわかってくれる。
そもそもこれがアセンブラがやってることだよ。 初めてなんだから分からないの当たり前じゃないの?
理解し始めたらすぐにそこらの日曜プログラマーよりできるようになるだろ x = x + 1とか最初は混乱するかもしれんけど
まあそういうもんと理解してもらったらそれまでだろ
ソースにも
>学生が学習を進めることで、こうした問題はいずれ解決する。
ってあるくらいだから騒ぐほどのことでもない それを改善したPascal記法も
もう誰も使わなくなったほど
周回遅れすぎる話題。
京大はタイムマシンでも開発したのか [男] 好きな人=元カノ+今カノ
[女] 好きな人=今カレ
これが女の数学者が少ない理由 >>1
プログラムで「x」は横座標の表現くらいにしか使わない。
iとかjで書けよ >>79
そんな細かいことに構ってるからでかいことができないんだぞ >>30
先に宿題をやらせて、その結果を講義中に採点する進め方だから
最初は言語のマニュアルすら読めないと思う >>14
1. 条件①に問題がある
n≠0だけが条件ならば、n=1やn<0の時に、式は成り立たなくなる
2. ②の右辺のnを微分しているが、それはnの1乗の微分、すなわちnの0乗を求めている事で、条件①のn≠0に反している TikTok LiteでPayPayやAmazonギフトなどに交換可能な4000円分のポイントをプレゼント中!
※既存TikTokユーザーの方はTikTokアプリからログアウトしてアンインストールすれば参加できる可能性があります。
1.SIMの入ったスマホ・タブレットを用意する
2.以下のTikTok Litのサイトからアプリをダウンロード(ダウンロードだけでまだ起動しない)
https://lite.tiktok.com/t/ZSNfeYxHq/
3.ダウンロード完了後、もう一度上記アドレスのリンクからアプリを起動
4.アプリ内でTikTok未使用の電話番号かメールアドレスを使用して登録
5.10日間連続チェックインで合計で4000円分のポイントゲット
ポイントはPayPayやAmazonギフト券に交換可能!
家族・友人に紹介したり通常タスクをこなせば更にポイントを追加で獲得できます。 8bitのBASIC時代の初歩的話題じゃん。
雑誌の初歩的記事の定番みたいな。 まあプログラミングに慣れるために
高校時代あるいは大学初年級の数学の教科書引っ張り出して
基本例題のシグマ数列和とインテグラル積分のある例題を
全部for文やwhile文で書き直してn=100、積分なら⊿x = 0.01くらいで和を出す練習でもしとけば
終わった頃にはx=x+1だろうとx != kだろうとif文だろうと
使えるようになってるだろ
そして京大生の8割はそれより効率的な学習方法で覚えられるだろ 2ページ目以降は読んでないけど、京大生でものタイトルは言い過ぎちゃうん そんなもの、知らなきゃ分からないし、説明聞けば誰でも分かるだろうに。 print("Python is easy")
a = []
for i in range(6):
__a.append(i)
print(a)
da = {}
fruit = ["persimmon","apple","orange","banana","avocado","strawberry",]
for i in range(6):
__da[a[i]] = fruit[i]
print(da)
for i in range(1,7):
__print("家には" + da[a[i-1]] +"が" + str(i*i*i) + "個あります")
_を半角スペースで置き換えて実行 代入だろうが等号だろうがふつうの数学用語ではプログラムが進行していくと変化していく変数を扱っていないからしょうがない 数学のイコールと意味が違う使い方しちゃってるってだけだから
説明してもわからない京大生はさすがにいないだろ
大げさに言い過ぎ >>83
科学板に投稿するとは良い根性してるな
科学者にもバカが居るとでも・・ プログラミングそのものより
実行環境の設定の方が難しいかもなあ だがPCそのものをセットアップする時に名前を日本語にしてしまって
Anacondaに別環境作れないとかもある
pyenvとかでも同じか 今ってC言語やらない大学も増えてきた?
Pythonやるとこが多い?
15年前はまずはC言語からってイメージだったが 昔はベーマガで x=x+1 とか手打ちしてたもんだ 昔はハードウェア偏重で
コンピュータとはハードウェアを売ること使うこと
そう思い込んでる人たちが
ハードウェアの仕組みを教えるために
アセンブラとかCで教えてた
そうじゃなくてコンピュータで何ができるかと言う立場の人たち
初期は数学者とかは数学的な発想で使えるように
した
自分たちの仕事のためにどう使えるか
それがアプリケーション的発想
いまは統計そして機械学習的観点は
Pythonライブラリが一番充実してるから
ChatGPTもPython
もちろんライブラリはCなど高速で作られてる
しかし自動車のエンジンや動力とかの作り方を教える時代じゃない
コンピュータもそう
そんなことよりもネットがどう動いてる
プロトコルはどうなってる
全体はどうデザインされてる
ユーザー満足度は何でもたらされる
そういう観点が大切
それを使ってどう仕事をこなすか
どうしたら使ってもらえる仕組みを構築できるか
すぐ陳腐化するなら時間かけても意味はない
そういう時代だ そしていちばん日本が遅れてるのは
コンピュータで使えるように仕事をデザインすること
文字コードレベルから始まって
プロトコルのデザイン
業務関連のフォーマット定義
身近なところで日本人にわかりやすいのは
絵文字の定義
日本じゃすごく前から使ってたのに携帯会社独自の仕様だった
最近ユニコードになったとたん世界中emojiとして最新のものとあつかわれ
しかもemojiは世界語
日本人は日本語が英語になったとか言い出すやついるだろうがそうじゃない
最初から世界語
誰も英語とも思ってないしまして日本発で日本語とも思わず使ってる言葉であり文字よ
日本が会社別や省庁別で狭いところで競い合って閉じこもってるうちに世界は当たり前のものとしてみんなが使えるようにしてしまう
これ殖民地経営の西洋的発想
自分はできなくとも
文書にして定義してしまう
ISO規格とかそれ
やるのは奴隷がやればいい
やることの定義だけ作ってしまって全部持っていく
日本は逆
ものが動かないと軽蔑
動いたら秘密にして独占(したつもり)
いつのまにか負けてる それは結局国に囚われてるから
なぜ国か
それは官僚が税金で縛りをかけてる国だから
国に囚われてるなら世界の規格は作れない
世界は国では動いていない
動いてるように見えるなら税金で食ってる人ってことだ 京都市のアレとか
大銀行のアレとか
見る限り
結局、おらがシステムが世界一ぃぃ!って思ってるから仕方ない
社内部でしか使わない操作画面の、良くわかんねーウインドウの背景色とか
デフォルトでよくね~?ってのまで
仕様に盛り込むお国柄ですもの >>100
大学では必修ではFORTRANしかやらなかった 昔は情報系の学科はC言語、機械、電気とか他の学科はFORTRANをやってた。
徐々に機械、電気の学科もC言語だけやるようになった <marquee>⊂二二二(^ω^)二⊃</marquee> chatGPTにタイトル直してもらった
"Why did university teachers write a Python textbook?" 元京大生だがFORTRAN77やったなあ
まああの代入文わからん奴はメッタにおらんで こんなの8bit時代のパソコン雑誌の記事持ってこいよ、って感じ。
山ほどあるだろ、これの解説。 >>14
なるほど~おもしろいね
出題意図としては
n^2=Σnみたいのが微分可能でない∵n={n∈ℕ∣n≠0}
が正解?
逆に、nをℝにまで拡張して左辺を微分可能にしたならば、今度は右辺がΣで書けなくなって∫か
これ自分で考えたの?
ttps://ja.uncyclopedia.info/wiki/1%3D2
に紹介したらどう?
スレ的には、解ってて駄々こねてんだからほっとけば良いと思うがね
じゃy=x*xなら複素共役と内積ですか?って話
一つの嘘は嘘である。二つの嘘も嘘である。三つの嘘は政治である。
~ 1=2 について、ユダヤの諺 >>14
微分を整数であるnについて行なってる時点でおかしい
整数で微分の代わりにするなら差分だがそれなら右辺と左辺は等しくなる y = C
※Cは定数
の定数関数と考えると
微分って「変化の割合」だからこの関数を微分すると0じゃねーの? 「Pythonプログラミング入門」©2020–2023, 東京大学 数理・情報教育研究センター
(CC BY-NC-ND 4.0) https://utokyo-ipp.github.io/IPP_textbook.pdf 人間に独立した人格が有るように、チンポにも独立したチン格が有る
これは親クラスと子クラスの継承関係である
チン格とはつまり「愚息」であり、自分にも他人にも成り得る
これがオブジェクトの多態性と表現される
オシッコするときのチンポは随意筋、勃起するときのチンポは不随意筋
このように時と場合によって真逆の性質を併せ持つことができる
随意筋 不随意筋
↖ ↗
チンポ
自然言語処理において語の意味は文脈によって変わるので、Pythonのような多重継承が不可欠ね! 小学生にプログラミング言語を教える、みたいな話があるけど
この「代入構文が分からない大学生」と逆の現象が起きるんじゃないかな。
先にプログラミングで x = x+1 を覚えて「変数は任意に操作できる」と思い込んで
方程式で使う = の「変数の取りうる値を制限する」働きが理解できない、と。 >>125
1980~90年代にも既に
「せんせー、プログラミングの配列なら分かるけど
数学の数列がわかりませーん
あと変なちっちゃな字の添え字じゃなくて[ ]の中に添え字書いても点数下さい」という
高校生が一杯いたぞw >>125
小中学生はビジュアルプログラミングが主で言語を学ぶのは高校生から ■ このスレッドは過去ログ倉庫に格納されています