はてなキーワード: 機械語とは
例えばJavaScriptでリストをコピーするとき
const newList = list.slice();
しかし、
「なんで const newList = listじゃダメなんですか?」
と聞かれると非常に困る。
例えばconst a = 123と入っているときに、bにコピーしたかったらconst b=aで良い。
プリミティブと配列の違いとして覚えてもらう、という方法もあるけれど
じゃぁ文字列はどうなんですか?となると非常に困る。
JavaScriptだけを教えるならそれでも問題ないかもしれないが、Pythonも一緒に教えるとかなるとカオスになる。
結局のところ、コンピュータの仕組みを理解してもらって、メモリのアドレスとかポインタを知ってもらい
それからプリミティブや配列の話をしないと根本的には説明できない。
単純なプログラミング教育ってこの辺が破綻してると思っているので、結局はPCの構造と機械語・アセンブリ言語・C言語と順番に教える必要があると思っている。
スキルというか"プログラミング"についての理解が足りてないだけだと。
適材適所。スキルレベルも含めて、そのとき一番"自分に"いい(楽とかスキルアップ)と思うものを選べばいいのでは?
なければ自分でやる。そもそも連携可能でなければ出てこないし、労力に見合わなければやらない。
Pythonからエクセルを動かすのは、試してみたが、VBAマクロの方が楽に感じる。操作を記録する機能はあるし、そこから不要部分削ったりすればよく、Pythonでエクセル動かそうとすると読みにくいし何やってるか結局わからない。
汎用型か、特化型か。Pythonで楽になるならVBAマクロはいらない。汎用性無双ならアセンブラか機械語でプログラミング言語は止まってる。
プログラマーの人はエクセルなどを嫌うけれど、matplotlibを細かい調整しようとすると調べて描画し直してを繰り返さないとならず、GUIでポチポチ調整する方が楽に感じてしまう。
エクセル含め便利なツールはがっつり使う。楽だから。エクセルで辛くなったら、GUI=>VBAマクロ=>自作ツール。GUIで楽なら無駄に自作ツールなんか作らない。楽になりたい時だけ
個人でGUIを作るとして、ボタンやプルダウンは簡単だけど、マウスを使ってインタラクティブになるとググってもすぐ出てこない。
Python使いじゃないのでなんともだけど、PythonオンリーならDjangoとか?
PythonはGUIが得意な印象がないので、自分ならJS(TS)+Pythonで。Python部分は必要最小限にして、Node.jsで呼び出しか、ReactでAPIコール。
今も昔も結局動くのは機械語に沿ってじゃないの?
低級言語や機械語、もっと言えば半導体中のエネルギー準位やドリフトが根本でそこからボトムアップという考え方がそもそも視野が狭い気がする。
実用的なコンピュータが登場する前からある種のプログラミングやアルゴリズムは存在したはず。
名前が残ってるような黎明期の有名人は軒並み「コンピュータに勝てた」的なエピソードがあるレベル。
ノイマン型コンピュータなんて筆記用具と同じ手段でしかないよ。
「ある世界(自分の望む世界)の理を限定的にエミュレートできる道具のローカルルールに仕方なしに合わせてやってるんだ」ぐらいの感覚でいた方が良い。
なんで中身の構造のうちで、IFとWHILEで組み立てられているロジックという
特定の階層の構造までを知らなければならないと考えるのですかか?
なぜ高級言語を成立させている機械語の構造まで理解しないのか。
なぜ機械語を成立させているCPUの論理回路まで理解しないのか。
なぜCPUの論理回路を成立させているトランジスタ特性まで理解しないのか。
なぜトランジスタ特性を成立させている物理法則まで理解しないのか。
なぜあなたは、フレームワークの中身まで理解しなければならないと考えるのに、
物理法則の中身までは理解しなくてもよいと考えているのですか?
プログラマだけど、これに関していつも思うのはそもそもプログラミング言語が英語ベースなのがよくないということ。
機械語が人間にわかりにくいから自然言語をベースにしたんだろうが、そうじゃなくて「人間にわかりやすい機械語」を開発すべきだった。
自然言語だとどうしても害しかないイレギュラーな文法の弊害に遭う。たとえばモデル名は単数形・テーブル名は複数形みたいな規約が多いけど後者は単語によってsだったりesだったりそのどちらでもなかったりとルールが違ってややこしい。その辺自動で生成してくれるフレームワークとかあるけどそのためにわざわざ不規則変化する単語の辞書持たせてんだぜ。そもそも単数形・複数形って何だよそもそも言語に必要なのか?日本語にはないぞ。
こういう自然発生した事故みたいな自然言語のクソ仕様に振り回されながら機械に指令を出すってアホらしくない?俺はもう老害だから若手はこの辺21世紀内に解決しろよ。
以下、プログラミングは出来ない俺の認識が間違っている場所があったら教えて下さい。あと、疑問2つを教えて下さい。
【俺の認識】
1. コンピューター(というかCPU)が実行する命令は【機械語】で書かれている。たとえばx86CPUの場合、0x04ならば『imm8をALに加算する』命令、0x90ならば『何もしない』などである。
2. 流石に機械語のままでは人間がプログラムするには不便なので、機械語をそのまま人間にも意味が分かるように1対1対応で書き直した【アセンブラ言語】というのがある。0x04ならば『ADD AL, imm8 』、0x90ならば『NOP』と表記される。
3. アセンブラ言語のように機械語と1対1対応している言語を【低級言語/低水準言語】と言う(この呼び方、4で書く高級言語が出来てから生まれたレトロニムか?)
4. アセンブラのままでプログラムするのも困難である場合が多いので、機械語と1対1対応していないプログラミング言語もある。このような言語を【高級言語/高水準言語】と言う。
5. 高級言語で書かれたものはそのままではコンピューターには実行できないので、【コンパイラ】というソフトによって機械語に変換している。
6. 高級言語で書かれた状態を【ソースコード】と言う。このソースコードをx86用のコンパイラでコンパイルすればx86で動くソフトになり、SPARC向けにコンパイルすればSPARCで、PowerPC向けにコンパイルすればPowerPCで動くソフトになる。
【疑問】
a. 認識6が正しいのであれば、(サポートするファイル形式の問題などを置いておけば)windowsとmacは現時点では同じCPUを使っているのだから、同じコンパイラでコンパイルしたソフトはwindowsでもmacでも動くのではないか?
これは昔からあったんだが、
コンピューターのC言語などを使うコンピュータープログラムという分野はマルチメディアと呼ばれる学問や、映像、表現技術ではなく
電子工学と電気工学の違いは、ものすごい大雑把に言うと、デジタルとアナログということも不可能ではない。
電子工学というのは電子デバイスつまり大雑把には半導体のことでありCPUなどのプロセッサなどの学問であり、コンピュータープログラミングを内包している。
他方、映像分野からきたひとからすると、メディア系学問でも当然プログラムは習うのだが、そりゃならうだろうが、学問的に分類するとC言語などのプログラミングは電子工学なのである。
Manycoreという技術そのものはIntelもだしてる。さらなるManyはGPGPUでやってる。
他方シングルコア性能は上がってはいるが4Gぐらいで、議論を呼んでる。
今議論を読んでいるのは、コンパイラの最適化と、マイクロコードの最適化
そこはかなり疎結合だからな。インタプリタで言うエンジンの最適化ではないが
CPUでどう最適化されるか?をインタプリタがもうすこし制御すればインタプリタのスクリプトコードをもう少し効率的な生成にできるのではないか?というアプローチがJava的ではなくPython的にあらわれはじめていて、けっこう、興味深い
デフォルトのPythonとコーダーが機械語の変換について学習させてあるPythonという考え方はとてもポケモン的で面白い