見出し画像

Retro-gaming and so on

PythonとC言語脳な授業

教えて!gooで次のような質問があがっていた。



もうホント、これ見た時点で

「どーしよーもねぇな」

とか思った。
質問じゃない。一体何を教えてるのかと言う部分だ。

このリスト、あるいは他の言語で言うトコの配列を与えられて、とにかく要素をバラバラにしてprintせなアカン、って思うのがC言語脳の特徴なんだよ。
何度でも言ってやる。C言語脳の発想はクソだ。
データ型が得られた時に、データ型のまま出力して構わない、と言うのが真の高級言語の特徴であって、C言語みたいな所詮低レベルの言語ユーザーじゃ思いつかない事なんだ
Pythonじゃ全く無駄な事を教えてる以上、実は全く何も教えてないのと同じだ。

そもそも、インタプリタを使う以上、printは必要ない、ってこれまで5,000回くらい書いてるだろ?
って事はPythonインタプリタを使ってないで、なんかおかしな環境を学生に導入させてる、とかいずれにせよ何かロクな事をやってない可能性があるわけだ。
だから言ってるだろ。C言語脳がワンサカ蠅のように集ってるPythonはもはやプログラミング初学者用言語にはならない
これからPythonは理想的なコーディングスタイルを教授するプログラミング言語としてはサイテーな存在になっていく。まるで、ハッカーが見るVisual Basicのような存在になっていくだろう。
何故ならゴミのようなC言語脳がそこを食い荒らしてるから、だ。虫害だ。C言語脳害だ。

しかし、それを考えると、C言語脳が避けるプログラミング言語の方が、虫害を避けるには良い環境をキープする、って意味になる(笑)。C言語ユーザーのマジョリティはハッキリ言って存在が害悪でしかないんだ(※1)。寄ってくんな、ってのがホントのトコだ。

そして質問を良く見てみる。

別の文字列をくっつけるやり方がわかりません。始めの、aiueoのプログラミングを作成した上で数字をくっつけるやり方を教えてほしいです。

っつーこたぁ別に出力しろ、って事ではねぇんだよな。
要はこれもまた、本質的にはデータ生成の問題だ。
早速printせねば!って考えるヤツはC言語脳だ。

そして

プログラミングに関しては初歩中の初歩なので、なるべく簡単な解答をお願いしたいです。

なんつーexcuseは本来Pythonにとっては無駄だ。
Pythonが多くの人に愛用されてる1つの大きな理由はBattery Includedだからだ。極端な話、プログラムを書かなくても内蔵されてるブツを組み合わせれば「プログラムらしき」モノがでっち上げられる、ってこった。
一体どの時点での「簡単」を言ってるんだかさっぱり分からん。

さて、このブログを読んでる層は解はこうだ、ってすぐ分かるだろう。


あるいは、こう書く、とか。


いずれにせよ、出力にこだわる必要は全くない。データ生成さえしとけば、後で出力しようが他の何かに使いまわそうが、自由自在だ。
これが一番簡単でスタンダードな解だ。プログラミング初心者だろうが何だろうが関係ない。元々のPythonが想定している使われ方、なんだ。

ついでにこんな問題も上がってた。



これも前述の問題と全く同じだ、って事が分かるだろう。真のPythonistaに言わせりゃ(※2)、これも単にPython組み込みの関数、enumerateを使えるかどうか訊いてるだけ、だ。
よってこれも、


終了、だ。

繰り返すが、PythonはC言語と違って「出力が〜」と言うようなプログラミング言語じゃあないんだ。
しかし、作られた問題の前提自体がC言語脳な問題、なんつーのは、本当にもう、Pythonでのプログラミング教育環境はどーしよーもないトコまで来てるんだなぁ、と実感してる(※3)。
ホント、終わってる

※1: 何度も言うが、「真のC言語のエキスパート」と「ただCと呼ばれてるプログラミング言語"だろうモノ"を使ってる人」は全く違う。前者はハッカーだが後者は単なるC言語脳だ。後者はCの仕様も読まないし、学習せず、昔学んだANSI Cのコードのままプログラミングする奴らだ。
そもそもANSI Cを「C言語」だと21世紀の2022年現在で思ってる事自体が万死に値するし、自分でプログラミングするだけならばいざ知らず、「人に教える資格がないだろ」って言ってるわけだ。
自分が使ってる言語が何だか知らず、Python「だったら」簡単に教えられるだろう、って思ってる奴らはマジで死んだ方がいい。
僕が言ってる「C言語脳」と言う意味が分かるだろうか。数は少ないにせよ実在する「C言語のエキスパート」を指して言ってるワケじゃないんだ。

※2: ちなみに、僕はそうではない。どっちかと言えばLispプログラマだろう(Lisperとは言わん)。
いずれにせよ、C言語脳はPythonistaの域には決して達しない。

「C言語のように書ける」

で満足しちまうから、だ。
そして何度も言うが、自分でやる分には構わないが、それは「他人に教える域にまでは達してない」と言う事だ。
加えて、これも繰り返すが、「C言語での書き方がPythonで通用する」のは、「C言語がプログラミングの基礎」だからではない。方向性は全く逆で、むしろ、

「ある高級言語はそれより低レベルなプログラミング言語での"書き方"を全て受け入れてしまう」

からだ。C言語が自らより低レベルなアセンブリ言語での書法を全て受け入れるように、C言語より抽象度の高い言語はC言語での書き方を全て受け入れる、んだ。基礎云々、ってのは全くの見当違いも甚だしい。
(と言う事は、実際は「C言語ユーザーの方がJavaユーザーよりキレイなJavaコードが書ける」と言うよか、JavaはC言語より抽象度が高いんで、「C言語的書法」を受け入れてる、って捉える事も出来る・・・理論的にはな)

※3: あるいはフツーのプログラミング言語だとこういった問題が多いんだろうか。
ちなみに、Lisp(ANSI Common LispでもSchemeでも)の入門では、実際問題、「出力しろ」と結ぶ問題はまずお目にかからない。
何故なら、インタプリタ上で開発する以上、いつでも計算結果はリスナー上で見れるので、Lisperは全然出力にこだわらないんだ。
言い換えると、Lisperは、「print系が必要な場合」、それはスタンドアロンのプログラムで「パソコンの端末に結果を表示させる時」とハッキリ知ってるから、入門者にも絶対余計な事は言わない(むしろあらゆるトコで必要でも「言わなすぎる」傾向さえある・笑)。
なお、Rubyだけはモダンな言語の割には「出力しろ」系の入門問題が多いような気がしてる。と言うのも、Rubyの場合、実はインタラクティブなインタプリタ、irbが前面に出てくる事が少なく、C言語のようにテキストエディタでプログラムを編集 -> 端末で実行してテスト、と言う開発プロセスがメジャーだから、らしい。
つまり、現実的な意味に於いて、RubyとPythonは開発環境で見るとライバルではなく、RubyはよりC言語のコンパイラに近く、PythonはLispのインタプリタに近い、ってカンジになっている。

注: だから「C言語を使ってます」と言う人の言はアテになんない。ほとんどのケースでは「ANSI C」と言う30年前の仕様を使ってる、って意味で、それを言ってる人が「C言語とは」「仕様とは」を全く把握してない確率が高いんだ。
実際は既に「C言語モドキの何か別のモノ」を使ってる、って事に本人は気づいてないし、んなこたぁさすがにANSI Common LispユーザーやらSchemeユーザーやらRubyユーザーそして意外にもC++ユーザーだったらほぼ「口にしない事を」言ってる、って自覚が彼らにはない。
(ビックリするだろうが、C++ユーザーは積極的にC++の仕様のアップデートに対応しよう、って人が多い。Microsoftがガンガン新仕様を導入してるから、だろう。結果、CユーザーとC++ユーザーのメンタリティは乖離している、ってのが現実だ。)
「組み込みでは〜」とか言い出す奴らも無視してろ。標準を知らずに特定方面の分野を強調する、って事はどのみち同じ視点で話はできん、ってこった。
なお、星田さんに「Cを勉強する必要がない」と言ってるのは、現行仕様に準じた「C言語入門」が書籍にも無いし、Web上にも無いから、だ。海外のサイトまで探したが、現行のC11あるいはバグフィックス版のC17の仕様に準じた入門サイトの存在率は知ってる限りゼロだ。さすがにそんなプログラミング言語は、プロのプログラマとしてどっかで雇ってもらう、って前提でもなければ学ぶ価値がないだろう。そう、学ぶ価値が無いんだ。
結果、仮にC言語系のプログラミング言語を学びたい、となれば、Microsoft C#が一番確実だ、って事になる。C#はECMA/ISOで公式仕様が制定されているし、Microsoftが仕様に従ってC#を作ってるんで、紛れがない。
今後の発展を考えてみてもどっちかっつーとCに賭けるよかC#に賭けた方が遥かにマシだろう。
なお、現時点、2023年にC言語の国際仕様はまたもや更新される予定だ。誰も使わない仕様が更新される辺り、事実上、C言語は既に死んでいる
  • Xでシェアする
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする

最近の「プログラミング」カテゴリーもっと見る

最近の記事
バックナンバー
人気記事