はてなキーワード: 高級言語とは
なんで中身の構造のうちで、IFとWHILEで組み立てられているロジックという
特定の階層の構造までを知らなければならないと考えるのですかか?
なぜ高級言語を成立させている機械語の構造まで理解しないのか。
なぜ機械語を成立させているCPUの論理回路まで理解しないのか。
なぜCPUの論理回路を成立させているトランジスタ特性まで理解しないのか。
なぜトランジスタ特性を成立させている物理法則まで理解しないのか。
なぜあなたは、フレームワークの中身まで理解しなければならないと考えるのに、
物理法則の中身までは理解しなくてもよいと考えているのですか?
以下、プログラミングは出来ない俺の認識が間違っている場所があったら教えて下さい。あと、疑問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でも動くのではないか?
まつほろひとゆきが作った日本産のコンピューター言語。パールというコンピューター言語を元に作られていてWebサービスを作るためのフレームワークを搭載している。代表的なWebフレームワークはtDiary
C
デニス立地さんがNTTで開発した言語。マルチクスというOSを作成するために作られた。わざと複雑な言語仕様にすることで自分の役職ポジションを守ろうとしていたが、思った以上に世の中の人間はこの言語を使いこなしてしまい、超有名な言語になってしまった。スーファミのゲーム制作にさえ使えなほどの超高級言語
おまじないと呼ばれるプリプロセッサでの書き換えが必要な謎の文字列を埋め込む必要があったり、言語仕様に曖昧な部分も多く、同じソースなのに実行環境によって動きが異なる、欠陥言語である。(32bit向けプログラムが64bit環境で動作しないなど)
オブジェクト指向言語。すべてのオブジェクト指向言語はこいつから始まった。
主にWindows上で動作するゲームを作るための言語。今ではUnityとか色々なゲーム開発の環境とかあるが、結局はパフォーマンスとか考えたらC++使うことになる。
代表作はOpenGL、DirectX、Window10、LibreOffice など
JavaScriptから派生した言語。読み方は(ジャワ。ジャワ島のジャワ。)。もともとはOracleの創始者の博士が趣味で作成して、現在のOracleデータベースの基礎となるテクノロジー。アプレットという実行するための専用プログラムをインストールしないと、Javaで作ったプログラム(.classファイル)は動作しない。マークはコーヒーだと思われがちだが、紅茶(ジャワティー)である。
アンドロイドOSを作成するためにも使われており、アンドロイドのOSカーネルはJavaで制御されている。そのため定期的にGCが走るので、アンドロイド端末は定期的に動作を停止することがある(いわゆるプチフリーズ)。
対策するためにはGC戦略を見直してヒープ領域のサイズやメモリに乗せるキャッシュのサイズなどの調整が必要であるが、げんざいのGoogleにはこれらを調整する人員はすでにいない。
このように業務用データベースから携帯電話まで幅広く使われているので、Javaの技術があっても市場価値は殆どないと言われている。(みんな使えて当たり前)
晩年政界への進出を目論んでいた松下幸之助が、未来社会を見据えて開発した言語。主にWebアプリケーションを作成するために使われている。PはパナソニックのP。を略してPHP
かんたんにシェルコマンドを実行できたり、クエリストリングに代入した値を直接グローバルで評価できたりするなど、洗練されていてとても便利な言語である。
HTMLやメール本文の中にもPHPの処理を書き込むことができる。
この世のすべてのサーバーに実行環境が存在するので、PHPのコードさえあれば、コンパイルも不要でどのような環境でも動作する。
C言語の100倍生産性が高く、Wikipedia、Facebook、Slackなどの超一流のサイトやサービスで大量のアクセスを捌いている。
WardPressと呼ばれるフレームワーク(全世界のWebサイトの3分の1以上はWardPressで作成されている)を作成している言語であり、この言語なくして今のWebは存在していない。
データベースとも親和性がある、などと言われることもあるが特に根拠はない。
韓国人棋士を倒したAIに特化したプログラム言語。Googleが開発しており、もともとはDartという名前だったが、汚いという理由でなまえがGoに変わった。そのため現在はDartという言語は存在していない。
AIに特化しているというだけあり、低レイヤむけの実行ファイルを作成する必要があるため、コンパイルが必要ではあるが、だいたいどの環境向けのバイナリも生成することができる。
デフォルトでディープラーニングを使うための機能を持っていたり、プログラムを並列実行するための機能が備わっているので、コア数の多い環境で高速に動くプログラムを作りやすい。
JavaScript
Javaの元になったプロトタイプベースのオブジェクト指向言語。読み方はジャワエスクリプト。W3Mというブラウザの上でインタラクティブにWebサイトを動かすために作成された言語。もともとブラウザの上で動くための言語だったが、後にSafariブラウザに搭載されていたV6エンジンというJavaScript言語の実行エンジンを分離してNPMというJavaScriptを直接実行できる環境となった。
それ以降JavaScriptはブラウザ以外にVRゴーグルの中などで動くようになった。
並列プログラミングが不可能な作りのため、コールバックを多用して、スパゲッティーコードを量産することができる。
NPMを使う奴らは、JSがブラウザ環境で使われる言語であることを全然考えてないため、WebpackとかBabelといった謎の開発環境をシコシコ積み上げている。いつかその塔は爆発し崩れ去ることになるであろう。
Javaと同じくJavaScriptから派生した言語。Javaとは互換性は無いが、JavaScriptの上位互換があるため、JavaScriptのコードをそのまま実行することができる。
$マークから始まる命令のみで構成されているとても縁起のいいプログラミング言語。おもにパララックスなどを実現するために利用されていて、WardPressなどのドライバとしても使われている。
JavaScriptの改良版であり、現在JavaScriptと言われているプログラム言語の99%はjQueryのことである。そのため現在慣習的にJavaScriptと呼ばれているもののほぼ全てはjQueryである。
jQueryを覚えればJavaScriptは覚えなくても良い。などと言われるが、正確にはjQueryを覚えた頃にはJavaScriptも覚えている。というのが正確である。
JavaやjQueryなどと同じくJavaScriptから派生した言語。Microsoftが開発した関数型言語。開発時はF#(エフシャープ)というコードネームだった。
型に特化した言語であり、Microsoft製のVSCodeというIDE環境でしか開発、実行が出来ない。(ただしMacやLinux上でも動作可能)
TypeScriptを動かすにはサーバーにVSCodeもインストールする必要があり、言語やIDEのバージョンアップも多いため、メンテナスンスが困難である。
前進となるObjectiv-Cという言語が、気持ち悪い構文であったため開発者が不足しており、このままではOSのメンテナンスもままならない、という理由で最初のバージョンがわずか14日間で作られた言語。
すごく面白いな。多品種少量生産で製造業が付加価値を出していくには、バリエーション出す土台となる、ある程度シンプルな生産設備があるということなのだろうか。
スコットランドの博物館で初期の蒸気機関を見たことがあるんだけど、もう天井に届きそうなくらい、とにかくでかいんだ。プリミティブな機械って、部品がそれぞれ独立性が高くて、ゴツゴツとおおざっぱに大きいということがよくわかる。
機械が洗練されていくにしたがって、機能がしっかり分節された部品同士の有機的な結合度合いが高まって、見た目にはコンパクト&シームレスで美しいんだけど、素人が触ると、ぎりぎりのところで成立しているバランスがすぐに壊れてしまう。メーカー側の想定範囲内のチューニングでしか動かないようになっている。コンピュータも道具としての洗練度が高まるにつれて、そういう方向に向かっているように思う。
ユーザーがあれこれカスタマイズして試せるようにするには、そうすることを最初から設計思想に取り込んでいくしかないのだと思う。Raspberry Piとか、IOTデバイスを高級言語のコーディングで作れるブロックとか、カスタマイズを前提としたコンピュータは、昔ながらのいわゆるパーソナルコンピュータとは別方向に進化を始めていて、これはこれで、PCとは別の使いこなし方を要求しているように見える。難しそうだな、と思ってたけれど、こういう製造業の人たちの創意工夫を見て、なんだか自分もセルフビルドしてみたくなってきたよ。
君は君のスマホがどのように情報をやりとりしているか理解できているか。情報が電波に、光に、導体に、どのように乗るか理解できているか。OSが何をしているか理解できているか。アセンブラから高級言語まで、どのように組み立てていくのか理解できているか。ネットワークがどのように構築され背景にどのような理論があるのか知っているか。待ち行列理論を知っているか。情報理論を知っているか。エントロピーを知っているか。統計的機械学習がどのように動くのか理解できるか。グレブナー基底を用いた数学証明をコンピュータで構築できるか。君が情報に関わる者全てを工事現場の土方だと思うなら視野があまりにも狭い。君が土方なら私は君の何千倍も優秀な土方であり、そしてかつ何よりその前に建築家だ。
第1の理由はもちろん、高級言語の普及により本当にやりたいことだけを書けば良くなってきたことだろう。
コメントを書かない派もCやあるいはアセンブラを書くときはコメントが欲しくなるはず。
それともう一つ、最近のエディタのシンタックスハイライトにも理由があると思う。
Atomのデフォルトのテーマは黒背景で、コメントはグレーで表示される。
背景とコメントのカラーコントラストが小さいので、「コメントの部分は重要でない」という印象を無意識のうちにユーザーに与えていると思う。
自分は適度にコメントを書いたほうがよい、むしろプログラムの見出しの役目を果たすと考えているので、エディタ上でもコメントはもう少し目立つ色にしている(文章でも見出しは本文よりフォントが大きいように)。
最近クラウドが流行ってるからって全部クラウドに移行するなんていうのをたまに聞く
自分で面倒なことしなくていいから楽だとは思うけど、それってインフラ面をできる人がいなくなるということじゃないの?と心配になる
ほとんどの人がクラウド使うのが当たり前になった頃に、AWSなどが値上げしても、もう1から環境作れる人がうちにいないから高いけど払うしか無いみたいなことになりそう
他にもクラウド提供してる会社がなにかの理由でやめたりしたらすごく大変そう
だからクラウド使うにしても全クラウド頼りってなんか賛成できない
でも考えてみたら、今って高級言語とかばかりでCとかアセンブリ書ける人は減ってると思うし、IT系の会社でもC言語とか低レイヤー系を扱える人が全然いないところだって普通にあるわけだ
私自身それらの言語はあんまり詳しくないが、必要になることがないから困ってはない
同じようにクラウド化もインフラの設定や環境作りなんて専門の人に任せておいて、それらに興味がある人でもなければ基本は知る必要もないことになりつつあるのかな
自分は不器用なせいかグラフの手書きが致命的に遅かったので、2年前期の実験で危機感を感じた自分は2年の夏休み中にpythonを覚え、今まで苦労していたグラフのプロットなどをパソコン上で全部自動化しようと考えた。日本語の情報が少ないため(あっても多少古かったりすることが多かった)、情報をかき集めるのに相当苦労したが、夏休みが終わるころにはjupyter notebook(名前通りノートブックのような実行環境でセルごとにコードを実行するという形をとっている)上で統計処理をしたりそのデータを基にグラフをプロットするのはある程度できるようになっていた。
早速2年後期の実験でpythonを試してみたが、その威力は凄まじく、今まで時間のかかっていた作業が劇的に効率化した。pythonのモジュールであるpandas,numpyを使えばデータ列を文字式のように扱えるので(例えば実験データをdataとして、そのデータをすべてcos関数に代入したかったらnumpy.cos(data)と書けばよい、Excelと似たようなものだがこちらは変数として扱っているので使いまわしが容易である)、Excelでちまちま関数をセルに入力して列全体に引き伸ばすという操作もしなくていい。グラフもコマンドで出力するので当然だが今まで苦労していた手書きのプロット作業はなくなった。GUIありきのExcelと違ってコードひとつでグラフの罫線の調整などもかなり簡単にできる。高級言語だけあってコードは組みやすく、実験中に即興でプログラムを組むことも割りとできる。しかもコードさえ組んでしまえばあとは実行するだけで計算、グラフの描画を一気にやってくれるので、実験結果の確認が極めて素早く行えるようになった。しかもjupyter notebookはmarkdown形式の文章を埋め込めてメモ書きも残せるし、mathjaxに対応しているのでlatex形式の数式も途中に挟むことが出来る。最高の環境だと思った。しかし良いことばかりではなかった。
パソコンで全部やろうとする自分を見た一部のTAはなぜか自分にグラフを手書きにしろと要求してきた。自分は反論した。「グラフならパソコンですでに出力できているのになぜわざわざ手書きにする必要があるのか?」これに対するTAの答えはだいたい「平等性を保つため」、「他のみんなは手書きでやっている」、「理解を深めるため」、「他学科は手書き必須だから」というような感じである。自分にとっては、これらすべてが理解できなかった。そもそも手書きにすることによって実験に対する理解がどう深まるというのか?自分はむしろ手書きを徹底的に排除することによって、煩雑な作業をする時間を考える時間に充てた。そのおかげで実験に対する理解は以前と比べ物にならないくらいに深まった。手書きじゃなければ理解が深まらない理由はない。そもそもパソコンのほうが厳密にコードを組まなければならない分だけ理解力を要求されるはずである。「理解を深めるため」といっている本人だって結局その言葉の意味もわからず言っているにすぎない。
「平等性」に関しては全く別のTAから複数回言われた。「パソコンを使って効率化しようとするのはずるい」と言いたいのか、このTAは?pythonだって1ヶ月間死に物狂いで情報をかき集めて覚えたのに、それのどこがずるいというのだろう。平等性を掲げて効率化を否定し、全員に同じ作業を強要させ、「成績」をちらつかせて脅すのはずるくないのか?みんな一緒に抑圧されましょうということか?これを言われたときに感じた何とも言えない吐き気のようなものは今でもうっすらとだが覚えている。正直なところ、プログラミングが出来るというだけでむしろ褒められると思ったのだ。パソコンが使いこなせるほうが印象はいいに決まってると思っていたのも、結局は自分の勘違いだった。
pythonを使い始めてからの2年後期、3年前期を通して4,5回ぐらいTA(全員別の人)に「手書きにしろ」と言われたが、言われるたびに反論するのもいい加減に疲れてきた。なぜ手書きにする必要があるのか、自分は聞かれるたびにこう聞き返した。まともな答えを返したTAは一人もいなかった。大学の先生が担当する実験でPCは駄目なんて言われたことは一度もなかったし、どうもTAが勝手に「手書きにしろ」と言っているだけらしい。「他学科がパソコン禁止だから」とかいう非論理的なルールを鵜呑みにしてそれを適用しようとする姿勢にも無性に腹が立った。
TAがいうには手書きはコピペ防止の意味もあるらしい。本当に手書きにしたらコピペが減るのか?パソコンにしたらコピペが増えるというが、それは果たして本当に「増えた」のだろうか?確かにコピペするのは手書きと違って簡単だが、コピペするやつは手書きだろうがパソコンだろうがコピペする。そもそも自分の頭で文章を書く能力がないからコピペするのであって、パソコンを制限したからコピペがなくなるという理屈はおかしい。そんなにコピペが嫌だったらむしろ最初からコピペをチェックしやすい電子データに限ってしまえばいいと思う。パソコン有りにしてコピペが増えたというのは、手書きレポートでは見逃していた分のコピペがばれて、それで数が増えたように見えたという可能性もある。むしろパソコンだからこそコピペを見破れるのではないだろうか?
自分は、手書きは不正の温床ぐらいに思っている。手書きの場合見かけ上はコピペしたことがばれにくいし、グラフもそれっぽく適当に書いても適当にプロットしたことはほぼばれないし、そもそもアナログデータは機械の検閲にかけにくいためどの程度コピペなのかを判定する労力だって膨大過ぎる(別のTAに話を聞いたところ、採点する側から言わせるとコピペしたこと自体は結構分かるものらしい)。手書きを強制するということは、すなわち不正をごまかす余地を与えているに過ぎない。本気でコピペをなくそうとするならば、いっそのことすべて電子化してしまったほうがよいとすら思う。
pythonを使い始めてから1年経ち、「手書きにしてください」と言われるたびに反論していったが、元々自己主張の弱い引っ込み思案なタイプのために、自己主張してちゃんと言い返すというのは精神的な負担が大きかった。「パソコンではなぜ駄目なのか」を強く主張するたび、ものすごく疲れがたまってしまい、実験がない日でも「なぜこんな当たり前のことをわざわざ言わなければならないんだろう」と思い返してしまうせいでどんどんやる気を無くしていった。
なぜ大学の一部にはパソコンを使わせたがらない空気があるのだろう。この人たちは、手書きが苦手な自分にとっての最後の砦すら壊すつもりなのだろうか。なぜ手書きにこだわるのだろうか。