はてなキーワード: マシン語とは
>JAVAを最初に学んでその後に現場で実際に用いるであろう言語(例えばPHP+SQL)を習得するといったルートは現実的なのだろうか?
いろいろ言う人はいるけど、PHPでも、問題ないよ。
ただ、欲をいえば、PHPのモジュールをC++で書く拡張機能あたりをちゃんと勉強しておいたり、ちゃんとコードをチューニングして行けば勉強になると思う
SQLはただ使うんじゃなくて、データーの正規化やインデックスなんかをきちんとマスターしておくと、違う感じ。あとは、ストアードプロシージャ
>上記のケースで前段階として学ぶ言語はどの程度のレベルまで到達する必要が有るのか
というか、本気で学ぼうとすると、トランジスタから始まって、フリップフロップ、レジスタ、アキュムレーター、バスの配線、クロックというハードの構成がどうなっていて、
それに対応するマシン語があって、それがニーモニックに変換されて、
そこにスタックという概念が持ち込まれて、レジスタをスタックに退避するという概念が生まれて、関数コールができて、C言語が生まれて、さらにそこにthisポインタをコンパイラが自動補完して関数テーブルを保管することでオブジェクト指向というか、C++ができている。そこに(Cの世界に)BNFなどの構文があって、それを構文ツリーにするBisonなんかがあって、PerlやPHPができている。
という、なぜC++のオブジェクトはポリモルフィズムができるのか?というソフトからハードまでを一貫して知る必要がある。
そこまで理解していると、コードのレベルは確かにハンパないレベルにはなるけど・・・。正直、業務には必要ないというか、そんなクオリティーの仕事が少ない。
やりたければ、やってもいいけど、PHPからやったら?そして必要になったらPHPをCで拡張するという形でCに入ると良いと思うよ。
やりたい言語をやるのが一番だ。
でも、本気で知りたいなら、死ぬ気でアセンブラをやれ。それがすべての始まり。
わりといえば、普通に大学入って、授業を真面目に受けた方が早い。
>そもそも実際に現場で使用することを想定した言語で、今から学ぶのに本当に適しているのは何か?
PHPでいいでしょ。大差ない、むしろ、自分が気に入った言語で、どれだけコードを沢山書くか。日々の鍛錬。
ちなみにWeb系といわれたから、ライトウェイトな言語を中心に考えたけど、つぶしが効くのは意外とJavaやC++であることも。書いておく。
年明けに大掃除したら、実家から持ってきた書籍の中に小学生の時に
その中にチラシが入っていたのだが
「お知らせ
本機は日本電信電話公社より認定をうけており、キャプテンユニットMPC-CAP1などの機器との組み合わせで
とか書いてある。
当時はこんなチラシ見もせずにBASICとデーレコばかり操作していたからな。
このチラシが何を意味する物なのか今となっては謎になっている。
それよりも、その他にもBASICマニュアルなんぞ出てきたのだがEOFとかBSAVEとかON SPRITE GOSUBとか理論演算子とか掲載されてる。
おかしいなぁ・・小学生時代にはこれも覚えてスプライトを駆使してマシン語を16進数で作成、3色キャラクタなんぞを作ってBASIC
プログラムを作って遊んだはずなのに。今ではすっかり忘れてしまった・・。
あのままもっと色々とやっていれば勉強できたのかなぁ。
初めは小学生の頃か。
実物のスペースインベーダーの記憶はない。
しかし、それを皮切りにアーケードゲームのみならず、ゲームウォッチ、ケームセンター嵐などを経て、ファミコンが登場する「ゲーム」の時代だった。
「ゲーム」がコンピューターゲームの意味になった時代だった。小学生も「コンピューター」にワクワクした。
21世紀はコンピューターにより人工知能ができる。そんな時代だった。
でも、アルファベットを知らない小学生にBASICは難しかった。ぴゅう太がせいぜいだった。
「PRINT」で文字を表示する。「GOTO」で行き先を変える。それは分かった。でも何をすればよいか分からなかった。
だから「ベーマガ」で16進数を打った。でも動かなかった。何度も調べ、直し、試した。デバッグした。
でも動いた。自分の入れた文字で数字でコンピュータが動いた。自分で動かした。動かせた。
高専に進んだ。Turbo Pascalでコラムスもどきを作った。
小学生のころから6年が過ぎていた。
Turbo Cも使った。IDEで使うそれは、インタプリタのノリだった。
FM-Rでレイトレースもした。一晩かけて、エラーが起きていた。
でも、構造化プログラミングを学んだ。ポインタも学んだ。マシン語の知識が役立った。
Solarisも使った。EmacsやXも使った。オブジェクト指向も知らずC++にも触れた。
awkやsedで正規表現を学んだ。そしてperlに出会った。
コラムスもどきを作ってから6年が過ぎていた。
perlで掲示版の書き込みをチェックし、madokaで遊んだ。CGIを書いたりした。
perlと出会ってから6年が過ぎていた。
はてなに出会った。JavaScriptに出会った。
Bookmarklet、greasemonkey、Ajax。オブジェクトだらけだった。
初めはゲームだった。でも最初だけだった。
気が付いたら24年が経っている。
今、pythonで書いている。
ようやく、言語の違いには慣れてきた。でも、まだLISPを使った事はない。
道はまだまだある。未知の世界につながっている。
作りたい物が本当は何かは分からない。作れる物が本当は何かは分からない。
どんなふうに動くのかは分かってない気がするけれど、分かっている事もある。
それが今の私のstatusだ。
いま、自分でちょっとした Web アプリケーションなるものを作り始めたところ。プログラミングは前から趣味でいろいろやってたけれど、大学に入ってからはほとんど数値計算でしか使ってなかったから、とても新鮮な感じがしている。楽しい。
ところがちょっとでも規模が大きくなると、とりあえず MySQL が必要になって、 Perl とか Ruby とか PHP とか Python とか ... なスクリプト言語をもっと詳しくしる必要が出てきて、そしてそれ上で動くフレームワークを選んで理解して、さらに HTML とか CSS とかで表示させて、JavaScript リッチなユーザインタフェースを... なんて具合に、やらなきゃいけないことが急に増えてしまいます。どうしたらいいんですか?
HTML とか CSS の仕事っていうのは、刺身にタンポポを乗せる仕事なんですか?勉強するだけ無駄ですか?でもこの知識がなかったらみっともないデザインになっちゃいますよね。
フレームワークに頼って MySQL を学ばないなんて邪道ですか? Rails を信用しちゃだめですか? Django はどうですか?さすがにマシン語で書け、なんて言いませんよね。
それにセキュリティの知識も必要ですよね。SQL インジェクションとか、XSS とか CSRF とか、聞いたことあるけど意味なんて知りません。こういうのをちゃんとしてないと、悪用されたりしちゃいます?
C10K とか I17N とか L10n とか、もう許してください。
ここで書いたようなことが全部できないと、Web アプリケーションを作ることができないのでしょうか。
もしそうでないのなら、どの知識が必須で、どの知識は必須ではないのですか?
っていうのを疑問に思ったけれど、そういう技術の寄せ集めでできているってところが Web アプリケーションの本質なんだろうなぁ。たぶん。
マシン語の話
まず
だいたいそういう人達は人ハードウェア知識云々をもとより人から言われるまでもないだろうし
shi3z氏が檄を飛ばす想定読者もおそらく俺のようないわゆる受託業務システム開発を
しているような人間たちだ。
べつに低レベルアーキテクチャの知識はあればあったで困らないのは事実だし
プロなら最低限は知っとくべきレベルというのは実際あるし
無駄だと言う気はまったくない。
ただ
もし、仕事でその知識を認められたい、あばよくば給料やキャリアの足しにしたい、
などという下心があるのなら、下記のことは知っておくべきだ。
『少なくとも自分のいるチームのNo.1にならなければほとんど評価すらされない。』
はっきり言うと俺らの世界では
規模と場合によっては会社に一人か二人いれば十分なんである。
ある意味ではフルタイムで雇うほどの需要すらないとさえいえる。
たまに必要なときだけ相談したり調査を頼めればすんでしまうわけで、
地味なプログラムを組んだりしてるのだ。
ましてチーム全員がプロファイラやデバッガを使いこなせる必要なんか全然ないんである。
上で書いた「プロとしての最低限のレベル」ってのは
バイナリハッカーに相談すべきときに相談できる判断力があるかってことなんである。
(故にそれはできて当たり前であって評価の対象にはならない。)
しかし別の面から見ると
shi3z氏みたいなバイナリハッカーだけでは全然足りないのだ。
DBのインデックスやパラメータの最適化や分散設定ができるやつは身近にいるか?
Apacheやルータ、ロードバランサの設定や専門家は回りにいるか?
先輩から教わったCVS(やSubversion)の使い方がどうもgoogle様の
ご宣託と違うような気はしないか?
共通ライブラリやお仕着せのフレームワークの仕組みや動作に疑問はないか?
等など、、、
状況によっては
むしろ自分にとって手の届くニッチ(はまりどころ)があると喜ぶべきかもしれない。
上記のほとんど全部をこなせるような人間が稀にいないわけではない。
しかし臆することはない。
目と手は2つづつしかついていない。
人の時間とモチベーションは有限かつ希少な資源であり、
でま、ここからマシン語とかプログラミングの楽しさを子供に教えるのはどうすれば、という話につなげようと思ってたんですが、ちょっと手間な感じなので、あきらめました。
そ、そこ聞きたいのにwwwww!
俺はあるよ。いや、でも、完成はしなかった。座るとぐにゃりと接合部が曲がってな。もろくも崩れた。それは作ったとはいわんか。
確か小学生のころの話だ。角材とベニヤ板と釘で作ろうとした。今ならもっとまともな椅子が作れるかな。いや、どうだろう。今も難しい気がするな。椅子は接合部に強度持たせるのが難しいよね。筋交いで補強すればいいのかね。角材の上にベニヤ打ち付けて箱にしちゃえばある程度丈夫になるか。あんまり美しくないなあ。
素人の設計って必ず現実の前に挫折するよね。あ、しませんか? 俺が頭悪いだけ? 自分が初めて釣った棚は見事に落ちましたが。
まそんなわけで工作は下手だ。下手だけど好きだ。なんかいろいろ作る。無駄な改造をしたがる。半田ゴテとかもたまに握る。ホームセンター行くと燃える。まあ、男の子はだいたい燃えると思うが。
でま、ここからマシン語とかプログラミングの楽しさを子供に教えるのはどうすれば、という話につなげようと思ってたんですが、ちょっと手間な感じなので、あきらめました。
>駄文長文注意<
意識されている「きっかけ」が変なので報告してみる。
プログラミング歴約6年。
小学校高学年くらいから、父の職場で使われてたPC98で、Notepadに文字を打つのが単に好きだった。
なんでだったかよく覚えてないけど。
で、別にプログラムなんか興味なくて、中学校のときに「技術・家庭」の授業でBASICをいじるのが一回だけあって、女の子数人に「すごーい!教えて!」って寄ってこられたのは気分が良かったが、特に面白いとは感じなかった。
高校は世界系とかファンタジーのラノベばっか読んでた。オーフェンとかブギーポップとか、好きだったのはDクラッカーズ。
と言われそうだけど、こういうのが原点だったと自覚している。
小説って世界を数百ページの紙の中に構築するわけだ。
僕は想像力が豊かっていうか、ちょっと”イタイ”人っていうか、
読んだあとはラノベの世界がかなり身近に感じられてもうワクワクがとまらない人だったから、
自分も作り手になりたいと思った。
ほどなく、プログラムも、
「世界を作る」ツールだって認識して興味がわいたのね。
その時分は作れるものがかなり限定されていたけど、
大学もVirtual Realityに興味がわいて工学部に入ったわけで、
VR空間をプログラミングできたら!とか思ったんだ。
まあ多くの方はご存知のとおり、そんな段階じゃないんだよねあの分野は。
大学入ってすぐは社会学に興味もったりしてたわけで、興味はプログラムから離れていた。
一年でJavaのプログラミング授業とかやったけど、別にそんなに楽しくは無かった。
書き忘れたけど、高校のときに図書館の本でHot Soup Processorに触れている。
”日常を変える”プログラミングの楽しさをはじめて知ったのはこれだった。
そんなこんなで苦手ではなかったけど、大学3年のときのプログラミングとかも、
ちんたら遅いし、できることは大して増えないし、面倒だし嫌いだった。
ってか今でもそうだけど、光る箱に一人でカタカタやるってのが性に合わない。
*'``・* 。 | `*。 ,。∩ * こんな感じで + (´・ω・`) *。+゜ `*。 ヽ、 つ *゜* `・+。*・' ゜⊃ +゜ ☆ ∪~ 。*゜ `・+。*・ ゜
プログラム組みたいわけだ。僕は。
で、卒論になって、指導教官の希望順の関係でばりばり情報系のとこに配属されて、
Perlでやることになって、まためんどくさいなぁと思いつつやったわけ。
モジュールを使うことを覚えた分、ちょっと理想に近づいたけどね。
昨日まで彼女がいたりした僕は、大学入って4年間でちょっとはリア充さを身につけたので、
”(虚構)世界を作る”から”日常を変える”ほうに興味は移り、今に至る。
そうそう、高校は家から通学だけで2時間半かかる男子校だし、友達も少ないし、「非リア充」だったから、その状況では、”日常を変える”ことで幸せになるより”世界を作る”ことで幸せになるほうが簡単に思えたのね。
今は逆。
だらだら喋ったけど、結局プログラムは僕にとって手段でしかありません。
最近ホットエントリにあがってるマシン語わかんなきゃいけないとか「はぁ?」って感じ。
*'``・* 。 | `*。 ,。∩ * こんなプログラミング + (´・ω・`) *。+゜ `*。 ヽ、 つ *゜* `・+。*・' ゜⊃ +゜ ☆ ∪~ 。*゜ `・+。*・ ゜
が理想なんだから。
自分の手で作りたい何か、変えたい何かがあるって方が、
人権擁護法案騒動の時に
助かったと思ってた層と
総理就任からずっと叩きまくってて、辞めたら辞めたで喜んでて
安倍を叩いてる層
が2ちゃんねらに多いし、まとめて話すのは別にいいんだけどさ、それぞれが同じ層とは匿名だからわかんないんだよね。
別の層だったら何も矛盾はないし酷いこともない。
個として扱うから無意味に怒り出す。意味ないんだよ、マーケッティングしてるわけじゃないんだからさ、あの層がこれだからどうだとか言うのはさ。
言いたいことはわかりますよ。スタックを知っていれば、レジスタを知っていれば、メモリ管理の仕組みを知っていれば… そういう知識があればあるほど、問題に遭遇したときの解決が早くなる。
そういった事の体験学習の道具としてマシン語(というかアセンブリ)を薦めたい気持ちもわかりますよ。
でもね。煽りすぎなんです。あなたの文章は、「これは、こういう仕組みになっています。これの意味は、こういう事です」の後に必ず「こんな事も知らない奴は」「絶対に知っておくべきだ」という脅しをかける。だから攻撃的でイヤミになるんですよ。
あなたは、その文を読んだ人が「チクショウ!」と思って勉強することを期待しているんでしょうが、現実は「こんなイヤミな奴の言うこと聞きたくない」の方じゃないですか? そうして若い人たちがマシン語に背を向けてしまったら悲しくないですか。
思い出してください。マシン語がプログラミングの主役だったあの時代、なぜ人々はわざわざマシン語を選んでいたのか。“オールBASIC”のプログラムでは逆立ちしても実現できないことが、マシン語ならできる。家のPC-8001でギャラクシアンが動く。それに感動して、あのスパイの乱数表みたいなリストを打ち込んだんでしょう。どこかのイヤミな野郎にケツを叩かれて始めたわけじゃないでしょう。今はそれがRubyだったりJavascriptだったりするわけです。
マシン語を知らない子供たちも、プログラミングの喜びは知っています。だから、もうやめてください。
匿名相手じゃなくてもキツいことは言えるみたいですね。というか、キツいことを言えるのが嬉しいんですか?
あまりも当たり前過ぎて21世紀に入ってから言葉にだしたことはあまりないのですが、当然のことながら、プログラムというのは、マシン語を理解したからって「書ける」ものではないのです。
プログラムが書ける、という状態は「物事の仕組みを抽象化する」という状態の延長線上にあるべきで、それを理解していないということは仕組みを理解していない、つまりプログラムを理解していないのとほぼ同じだと思います。
最近はLLと呼ばれる、いわゆる軽量スクリプト言語がメインになってきていますし、僕も普段はRubyでプログラムを書くことが増えてきましたが、このおかげでますます、コンピュータというのはマシン語で動くものではあるが、プログラムはマシン語というバッドノウハウの塊から脱却して、やりたいことそのものを表現できるようになったと思いを強くしています。
その意識がないと、たとえRubyやJavaScriptのコードを書いていても、不可解な動きをしたり、あとから自分や他人がコードを見直したときに「なぜこんな風に書いたんだろう?」ということがピンとこないことになります。
まだ大学に入って無くて、趣味のプログラミングを楽しんでいる若い人たちには、ぜひアルゴリズムとデータ構造を勉強してみることを勧めます。
最近は素晴らしい時代になったもので、ごく初歩的なアルゴリズムとデータ構造は言語の標準ライブラリでも使うことができます。
しかし本格的にこれらで遊びたくなったら、内部実装を読んだりポインタだけで書いてみるのがお勧めです。
(中略)
さらにいえば、これらのさらに下のレイヤーである数学を理解しているとさらに理想的です。
最後に参考文献をまとめておきます。
ただ読むだけでもとても面白い本ばかりです。
・SICP
・解析概論