はてなキーワード: マシン語とは
せっかくなので、通信メディアの個人史を書いてみたい。自分のブログでやっても良いのだが、わざわざ誘導するのも申し訳ないので増田で書くことにする。あと、前半部分は「通信メディア」の話ではない。
ぼくが初めてパソコンに触れたのは小学校4年生のころだった。当時、既に型落ちだったNECのPC-6001を買ってもらったのだ。当時はまだ「パソコン」か「マイコン」かで名称が統一されていなかった時代でもある。記録媒体はカセットテープ。ゲームをするためにはまず、何十分もかけてロードをしなくてはならない。あとちょっとでロード完了というところでエラーが出たりすると泣きそうになった。
市販のゲームは高価だったので、ぼくは当時の多くのパソコン少年と同じく、雑誌の載っていたプログラムをよく入力していた。姉の使っていた譜面台にパソコン雑誌を乗せ、そこに掲載されたプログラムを延々と入力していく。もちろんミスが多発する。エラーが出ると雑誌とにらめっこをしながら、どこが間違えているのかを必死で探す。デバッグがすべて完了するころにはゲーム自体に飽きているということもよくあった。
当時はまだ、パソコンのメーカーがそれぞれの独自の規格でPCを開発していた時代だった。しかも、同じメーカーのパソコンであっても機種が違えば互換性がないことが多かった。だから、NECのパソコンのソフトがシャープのパソコンで動かないのは言うまでもなく、PC-6001はPC-8001よりも新機種であったにもかかわらず、後者のプログラムは前者では動かない。パソコン雑誌で他の機種用の面白そうなゲームプログラムを見ては悔しい思いをよくしていた。移植をする技術はぼくにはなかった。
その後、中学校に上がると、ぼくのパソコンはPC-8801mkII FRになった。名機と言われたPC-8801mkII SRの後継機だ。記録媒体は5インチのフロッピーディスクになり、一瞬でセーブやロードができるようになった。ただし、中学生にとってフロッピーディスクは高価な代物で、500円で10枚入りという安売りのものを愛用していた。ちなみに、安いディスクだとドライブに入ただけでシャカシャカシャカシャカ…という音がする。仲間のあいだでは「シャカシャカディスク」と呼ばれていた。
せっかくの新マシンではあったが、やはり用途はゲームだった。雑誌に掲載されるプログラムも徐々に高度になり、マシン語を使ったものも多かった。01 C3 AA 90…みたいな文字列を果てしなく入力していく作業はかなりの苦行で、エラーが起きると手に負えなくなることも多く、挫折ばかりしていた。
なお、当時はすでにパソコン通信が始まっており、PC-VANやアスキーネットなどの大手もすでにサービスを開始していた。当初は音響カプラという装置を使っていたのではないかと思うが、詳しくはわからない。ぼくにとってパソコン通信は遠い世界の話で、雑誌でたまに見る程度のものだった。
中学3年生になり、高校受験を控えたぼくは、何を思ったかパソコンで受験勉強をしようと思いついた。受験RPGなるものをN88-BASICで作ろうとしたのだ。街を歩いているとモンスターに遭遇する。そのモンスターが出してくる問題に正解すれば、プレイヤーは経験値を稼げる。最終目標は名門ナダール高校への合格という、ゲームと勉強の両立を目指したものだった。結果はまあ、書く必要もないだろう。世の中にそんな都合のいい話はないのである。
高校に入学すると、ぼくの関心はパソコンから遠ざかっていった。部活が忙しくなったほか、当時のバンドブームにのってギターなどを始めてしまったからだ。無論、このあたりはぼくの黒歴史になっている。
ちなみに、ぼくとほぼ同年代の英国人ライター、スティーブン・プールには『トリガー・ハッピー』(2001年)というテレビゲームの歴史を扱った著作がある。この本を読んでいると、高校時代にゲームから離れてバンドをやるところまでまったく同じだった。ここには国境を越えた何かがもしかするとあったのかもしれない。
しかし、大学受験を前にして、ぼくは再びパソコンに向かい始める。3年前に挫折した一大プロジェクトである受験RPGの製作にふたたび乗り出したのだ。アホだ。予備校の夏期講習を受けながら、頭のなかで構想がどんどん膨らんでいった。
技術は全く進歩していなかったが、根気だけはついていた。ゲームの目標を大学合格に切り替え、パソコンのメモリの少なさに苦労しながら様々なアイテムやイベントまで用意した。しかし、言うまでもなく受験には全く何の役にも立たなかった。大学受験が始まる数日前、ほんの気晴らしのつもりで始めたドラクエ3を受験日程がすべて終了するまでにクリアしてしまったのが悪かったのか、1年目のぼくは受験に失敗し、浪人生活に突入したのである。
1年間の辛い浪人生活を経て、ぼくは東京の私立大学になんとか滑りこむことに成功した。入学式当日、知り合いの誰もいないキャンパスを一人で歩いていると、同じく新入生とおぼしき一団が歩いていた。彼らの一人が「あいつのポケベルの番号、いくつだっけ?」と言うのを耳にしてぼくは衝撃を受ける。東京の学生はポケベルを持っている!ぼくにとってポケベルというのはサラリーマンのためのツールであって、普通の学生が持つようなものではないと思い込んでいたからだ。
入学式の時点でグループができているということは、彼らはおそらく付属校か東京の進学校の出身者のグループだったのではないかと想像する。この時点ですでに情報メディアの利用をめぐってかなりの格差が生まれていたのかもしれない。
いずれにせよ、その後のぼくの生活にやはりポケベルは無縁だった。女子高生のあいだでポケベルが流行っているというのも別世界の話題だった。女子高生の妹がいる友人によると、メッセージが来るとすぐに返信しないと仲間はずれにされかねないということだったので、それはそれで大変そうだと思ったのを記憶している。
その一方で、大学に入学してから、ぼくは固定電話と大変に仲が良くなった。一人暮らしを始めたこともあって、友人とよく長電話をするようになったからだ。コードレスではなかったので、硬い床に寝転がりながら何時間も話をした。「いやー、今日はよく話したよね。ところで、いったい何を話していたんだろうね」などと会話を振り返り始めることで会話がまた長くなるという、まったく生産性のないことをよくしていた。ただ、こうした長電話はぼくに限った話ではなく、わりと一般的に行われていたのではないかと思う。一人暮らしの寂しさを紛らわせるうえで固定電話は重要なツールだったのではなかろうか。
あるとき、風呂にお湯を張っていると、たまたま当時好きだった女の子から電話がかかってきたことがあった。話しているうちに浴槽が一杯になった。コードレスではないので電話をしたままではお湯を止めにいくことができない。だが「お湯を止めてくる」と言えば、電話を切られてしまうかもしれない。そのため、浴槽からお湯が溢れるのをただ眺めながら会話を懸命に続けていたことを思い出す。
ぼくが「インターネット」という言葉を初めて聞いたのは国際政治の授業だった。大学2年生のころだったから1994年のはずだ。日本でもインターネットの商業利用は1992年にすでに始まっていたが、パソコンに関心を失っていたぼくには全く無縁の話だった。大学のパソコン室でタッチタイピングは修得したものの、授業で履修したC言語はあっさり挫折した。数学が果てしなく苦手だったぼくは、理解できない数式をパソコンに解かせるという作業について行けなかったのだ。
大学2年生の終わりごろ、ゼミの選考があった。メディア系のゼミを志望したせいか、志望者には新しいもの好きが多かった。面接の待機場所では多くの志望者が携帯電話を持ち、お互いの番号を交換していた。衝撃的な光景だった。彼らは無意味に相手を電話にかける遊びなどをしていたので、単に見せびらかしたかっただけかもしれない。
しかし、ぼくが携帯電話、というよりPHSを購入したのは大学4年生も終わりに差し掛かったころだった。1996年から1997年にかけて携帯電話・PHSの普及率は25%から46%に跳ねがっているが、こうした指標では若者が先行しがちなことを考えると平均的か、やや遅いぐらいではなかったかと思う。
当時は街のいたるところでPHSの安売りをしていた。今川焼を売っている店でさえ扱っていたぐらいだ。PHSを1年ほど使い、その後はドコモの携帯電話に切り替えた。通話が途切れやすいという難点はあったものの、PHSのほうが音質は良かったのではないかと思う。
他方で、大学3年生になると、ぼくは再びパソコンに関心を持つようになった。1995年、ウィンドウズ95が発売された年である。「インターネット」という言葉が急激に人口に膾炙していった。大学のパソコン室で友人に電子メールを送るようにもなった。当時はメールが来るだけで嬉しかったものだ。ブラウザはまだモザイクを使っていた人が多かったのではないかと思う。しかし、当時のぼくはまだブラウザという概念を理解していなかった。周囲のひとが「モザイク」という言葉を口にするたび、それはエッチな何かなのかとあらぬ妄想に浸っていたのだった。
ともあれ、エプソン製のノートパソコンを購入し、自宅からインターネットに接続するようにもなった。大学の授業でホームページを作ったという友人に刺激を受け、自分でも卒業の直前ぐらいに朝日ネットでホームページを立ち上げた。いまでもそのアドレスにはぼくのホームページが置いてあるので、もうかれこれ20年近くになる。先日、インターネット・アーカイブで自分のページを探してみたところ、16年ぐらい前まで遡ることができた。若気の至りというのは本当に恐ろしいものである。
もっとも、ぼくの目線からすると、当時のインターネットはそれほど面白いものではなかった。今ほどに情報が充実していたわけでもなく、それを探すためのスキルもなかった。ぼくにとってインターネットよりも面白かったのがパソコン通信だった。当時、すでにパソコン通信の時代は終わりつつあったはずだが、それでも見知らぬ人たちとやりとりをするのが面白くて仕方がなかった。もちろん喧嘩も多く、罵り合いをなんとか仲裁したいと思いつつ、結局はうまくいかないということばかりだった。
ぼくが参加していたのは朝日ネットのフォーラムだが、恐ろしいことにいまでもログインすれば当時のログを見ることができる。「ネット上からはとうに消え去ってしまったはずの今なき父親の情報が、パソコン通信のログに残っていることを主人公が発見する」というフィクションを考えていたのだが、興味のあるひとは使ってみてください。
その後、パソコン通信は急速に退潮し、インターネットの時代が本格的にやってきた。ネット上で怪しい情報が飛び交うサイトがあるということを最初に教えてくれたのは知人だった。言うまでもなく「2ちゃんねる」である。それ以前にも「あやしいわーるど」や「あめぞう」といった掲示板はあったはずだが、それらはぼくの全く知らない領域の話だった。
…と、ここまで書いて力尽きた。ここから先は特筆すべきこともあまりないので、唐突ではあるが、このあたりで終わろうと思う。ずいぶんと長くなったが、最後まで読んでくれたひとは果たしているのだろうか…。
>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
・解析概論