はてなキーワード: アセンブラとは
返答ありがとうございました。
頂いた意見を参考に、身の振り方も含めて考えて行こうと思います。
>http://anond.hatelabo.jp/20100224235723
ある意味で一番欲しかった回答かもしれません。
>基礎さえできちゃえば、言語による違いなんて方言みたいなもんだから
心強い言葉を頂けました。この部分に関する確信が無かったので心配だったもので。
資格取得を目指して勉強する、というのは目標設定としてもよさげですね。
確かに働き始めてから学ぶというのでもいいのかもしれません。
何にせよずっと勉強が続く分野では有るのだと思っています。頑張ろう。
>http://anond.hatelabo.jp/20100225001728
>でも、本気で知りたいなら、死ぬ気でアセンブラをやれ。それがすべての始まり。
そこまでの本気が自分の中に有るかと言うと、ちょっと違うかもしれません。
ですが、何が起こっているのか良くわからないままに
他のサイトから引っ張ってきたコードを手探りでいじくり回す様な事はもうしたくないので、
何がしたくてその為には何をどう使えばいいのかが分かるようになりたい、
せめてそれを考えられるだけのよすがとして知識が欲しい、という思いがまずありました。
お金持ちになりたいか、と問われるとそこまでの情熱は無いのですが、
自分ひとりの食い扶持を稼ぐだけの力を付けたいとは考えています。
>ちなみにWeb系といわれたから、ライトウェイトな言語を中心に考えたけど、つぶしが効くのは意外とJavaやC++であることも。書いておく。
となるとやはりJavaやC++を学ぶ事自体は無駄ではない、と考えて良さそうですね。
因みに並行してデザイン論もさらい直して、サイト作成技術に関しては専門書を購入して独習する事を考えています。
ソフト類は一応一通り扱えるので。
3つ全部を同時進行出来るかは微妙な所なので時期をズラしつつ1年計画くらいでどうにかできれば。
そして、
>http://anond.hatelabo.jp/20100225000159
>でも、Javaに慣れちゃったら、PHPなんて一番触っちゃいけない言語だよね
すみません、そこら辺もう少し詳しくお願いできますか!
何か致命的なセキュリティホールとかブチ開けてしまう可能性が有ったりって事?
>JAVAを最初に学んでその後に現場で実際に用いるであろう言語(例えばPHP+SQL)を習得するといったルートは現実的なのだろうか?
いろいろ言う人はいるけど、PHPでも、問題ないよ。
ただ、欲をいえば、PHPのモジュールをC++で書く拡張機能あたりをちゃんと勉強しておいたり、ちゃんとコードをチューニングして行けば勉強になると思う
SQLはただ使うんじゃなくて、データーの正規化やインデックスなんかをきちんとマスターしておくと、違う感じ。あとは、ストアードプロシージャ
>上記のケースで前段階として学ぶ言語はどの程度のレベルまで到達する必要が有るのか
というか、本気で学ぼうとすると、トランジスタから始まって、フリップフロップ、レジスタ、アキュムレーター、バスの配線、クロックというハードの構成がどうなっていて、
それに対応するマシン語があって、それがニーモニックに変換されて、
そこにスタックという概念が持ち込まれて、レジスタをスタックに退避するという概念が生まれて、関数コールができて、C言語が生まれて、さらにそこにthisポインタをコンパイラが自動補完して関数テーブルを保管することでオブジェクト指向というか、C++ができている。そこに(Cの世界に)BNFなどの構文があって、それを構文ツリーにするBisonなんかがあって、PerlやPHPができている。
という、なぜC++のオブジェクトはポリモルフィズムができるのか?というソフトからハードまでを一貫して知る必要がある。
そこまで理解していると、コードのレベルは確かにハンパないレベルにはなるけど・・・。正直、業務には必要ないというか、そんなクオリティーの仕事が少ない。
やりたければ、やってもいいけど、PHPからやったら?そして必要になったらPHPをCで拡張するという形でCに入ると良いと思うよ。
やりたい言語をやるのが一番だ。
でも、本気で知りたいなら、死ぬ気でアセンブラをやれ。それがすべての始まり。
わりといえば、普通に大学入って、授業を真面目に受けた方が早い。
>そもそも実際に現場で使用することを想定した言語で、今から学ぶのに本当に適しているのは何か?
PHPでいいでしょ。大差ない、むしろ、自分が気に入った言語で、どれだけコードを沢山書くか。日々の鍛錬。
ちなみにWeb系といわれたから、ライトウェイトな言語を中心に考えたけど、つぶしが効くのは意外とJavaやC++であることも。書いておく。
いや、どちらかと言えば、きちんと設計できさえすればよくて、オフだけで(サンプル無しで)全部出来るかどうかは関係ない。
プラットフォームが変わろうが、言語が変わろうが、実装の仕方が変わるだけだし、それこそサンプルを調べてでも構わない。
問題なのは、サンプルをそのまま使うことしか出来ないやつ、だ。
きちんと理解してるかどうかなんて、レビューすりゃ一発で判るだろ。
本気で、何を評価したいか意味不明なんだけど。
俺だったらテトリス作らせるよりは、4bitマイコンの仮想環境を提示して、2桁の乗算とかやらせてみるけどね。
乗算命令なしとかの条件つけて。
うーん、なんかやっぱり不正行為を前提として、配布と解析をごっちゃにしてる気がする。
・「このコックさんが作った料理のみ、このレストランで食べることができる」
・「コックが作った料理のレシピを調べることができる」←これがマジコン。
・「マジコンによって複製されたデータ」←ここまでは解析・複製でグレーゾーン(これが違法だと、グルメレポーターや研究家が他人の料理を研究して、作ってみた、でアウト(デジタルだからちょっと例えに適さないが、それでもグレー))
~~~~~~~ここが壁~~~~~~~
・「同じ料理であっても食べてはいけない」←これはデータの配布ありきなので、壁の向こう側とイコールではない。
※研究・解析した本人も「食べてはいけない」という話ではないはず。
その解析・研究結果はクックパッドにあげちゃいけないが、個人でやる分にはなんら問題なし、とはならないのか?
ちょっと訂正。
でも、世の中の常として、こういったツールの使用については、使用者にゆだねられるのであって、”ツール自体”を違法扱いするのは変だよね?>それこそWinnyと同じく
壁の向こう側である「配布」は置いておいて、マジコンの是非を考えるとやっぱりグレーでしかないんじゃないの?
いや、いまの30代40代で、いわゆる一線で活躍している人は
U-20の頃にアセンブラやCつかって
OSいじくったり、デバイスドライバ書いたり、ゲーム作ったりしていたわけだよw。
でも、それをみても、別に天才だとは思わなかった、単なる努力家だとしか。
努力でカバーできる範囲だよ。1日8時間~16時間、それ以外をすべて犠牲にしてやればできるレベル。
1年みっちり勉強すれば、当時で言えばデバドラぐらいには手が届く。天才でも何でもない。
大抵この業界の場合
天才と呼ばれている人は、実際はよく見てみると異常に練習時間が長くて人生の大半をつぎ込んでるレベル。
僕はこの業界に関してはそう思ってる。
中には、何の勉強もしないでスラスラ作れる人もいるのかもしれないけど、ぜひ見てみたい。
確かに。で、これまたエレガントではない対処法で、ループでかかってる時間を差っ引くのはどう?
次に、測りたい関数を入れたループを回して時間を測定。で、予め測っておいたループ処理分を差っ引く。
フツーに詳しい人のご名答を待った方が勉強になりそうです、降参!
ってか、降参ついでにいぢけてみると、昔のDOSマシンやマイコン/アセンブラ、遅っそいミニコン/WSならともかく、
イマドキの(パソコンでさえ)すっごい速い計算機のマルチタスクOS上で、10ms以下のような小さいプログラムの実行時間を、
実験的に評価する意味があるのかと、ふと思った。むしろ、手計算であれ機械計算であれ、論理的にステップ数を計算した方がいいような。
だって、ループ処理でかかる時間が誤差に効いてくるぐらいなら、ループしてる間に他のタスクから受ける割り込みの影響も出てしまうと思うもの。これはどうなんだろう。
C/C++はCPU依存性を減らしたアセンブラで、面倒くささを耐える代わりに速度を稼ぐという特殊用途言語なんだから、「プログラミングは面倒だ」の例としては局所的すぎるなー。大量のバッドノウハウを楽しんで乗りこなすマニアどもが、ゲームや組み込みや検索エンジンあたりの開発に使うプロ向けの道具で、間違っても「プログラミングの細かいところが嫌い」なんていうライトなプログラマが使うようなものじゃない。
もっとチャラい言語使いなよ。RubyとかActionScriptとか。よりによってPHP/C/C++とか選択がマゾヒスティック過ぎ。仕事だか学生の課題だかで無理矢理使わされてるの?
μiTRONなんてOSって言ってもファイルシステムもないし画面への表示もできないし本当に小さいものだよ
そこが出来合いだからと言っても他の99%以上が独自だったら、
そのシステムでの開発ノウハウを得たとしても殆どが他ではそのままでは使えない知識。
・これはOSにあたる部分が何かが未定義なのでこの議論は結論が出ない。糞ったれな意見だ
・CPU制御という言葉の定義も不明。アセンブラでないとできない制御なんて殆どない
・そんなの誰でもできるだろ。どう書けばどうハードが動くかなんてハードウェアのスペックシートと回路図見ればわかるし。
■http://anond.hatelabo.jp/20090312075947
もしも1から組んだ独自OSなら、それはそれでCPUなり何なりを直接いじってる部分まで見えるわけだから、かなりお得感溢れるし、それを盗んで独自OS作る技術持ったら、結構なひっぱりだこじゃなかろうか。
・独自OSが作れるくらいでひっぱりだこなんかにならないよ。
・「独自のものが作れる」程度のスキルは世の中に溢れていて所詮「誰でも出来る」
・「洗練されていて素晴らしい独自OSが作れる」というなら別だけど、
そういうのは複数のものを見比べて審美眼を養う必要がある
Cが最もアセンブラに近いわけだからすごい人ならやはり知っとくべきでは?
結局、なにがしたいか、なにが学びたいか、だろうな。
元増田も大元増田も、とりあえず言語を学んだ。てにをはと挨拶は分かった状態。それでどうするのか、とりあえず小説を書くのか、言語学を学んでみるか、ラノベを研究してみるのか。
SICPだと、プログラミングとは何ぞや?とメタな言語学的になるのかな。あと、アルゴリズムとか、より抽象的、数学的な方向へ向かうのか。
ブックマークコメントに多いのは、とりあえず作れってやつ。しかし、現状で作りたいものがあるなら、もう作っているはずで、特にないから困っているのだろう。
ジャンル的にはWebアプリかGUIアプリか。あと、サーバソフトウェアもある。
Webアプリだと、HTTPとかブラウザ側と、CGIとかapache等サーバ側とのインターフェースを知る必要がある。他にもデータベースマネージャーとSQLに手を出すとか、railsとかフレームワークに手を出すか。
GUIアプリだと、ライブラリやフレームワーク、OSとのインターフェースを知る必要がある。データベースを使っても良いし、ネットワークに手をだすならSOCKETとか。WindowsならWindowsの、XならKDEとかgnomeとかの作法があるし。
GUIアプリでもだけど、サーバソフトウェアならネットワークやプロトコルの他に、スレッドだとかある。
これらも、一から自分で始めてみるか、既存の、例えば自分が使ってるOSSに機能追加してみるとか。
あと、アセンブラって出てたけど、コンピューターの実際的な構造とか、OS内部、ドライバの作りなんかへ進む手もある。
元増田は標準ライブラリを使ったプログラミングとフレームワークの内部構造を把握すればよいんじゃないかな。
というわけで、よりフロントエンドなライブラリやフレームワークの方向か、バックエンドなシステムコールやOSへ向かうか、
より抽象的なアルゴリズムとか情報理論の方向か、実際的なネットワークやデータベースなどの周辺要素へ向かうか、
どういう方向に興味があるのか分からない事には。
オブジェクト指向で書かないと開発速度が10分の1になったけど、まぁ、よくね?って書いてあった。
開発期間を重視したプロジェクトが、数年後まで生き残れているか、という問題と。
開発期間を重視したプロジェクトが、数年後に同じ早さで動いているかwという問題がある。
たいていその手のプロジェクトは、追加開発でどんどん遅くなって、早くなったマシンスピードと相殺される。
東証の問題とかがなぜ起きるのか?といえば、そういう原因もある。
ちなみに、おおざっぱに言えば。速度の大小を決める要因となるのは、全体のコードの20%しかない。残りの80%は機能重視で十分。
その、最悪アセンブラ持ち出してまで高速化する20%と、オブジェクト指向だろうが、なんだろうが、とにかく動けばよい80%を分けるのが『設計』であり『上流行程』
これが、出来ない奴が多すぎる。
全部のコードを高速化するには、優秀なプログラマが不足する。全部のコードを凡庸に書いたら、まず実行速度が今のマシンじゃ足りないサービスになる。
じゃぁ、何がグッドノウハウかというとC++の継承、メンバ関数、Virtual関数
C++の継承やVirtual関数は中身はvtableでvtableって何のこと?っていうと
アセンブラがCALL命令
C++ではそれをうまくオブジェクト指向の継承という概念に持ち込んでいる。
ほとんど使われていないけど、いちおう、クラスのメンバ関数の関数ポインタという概念や
スタティック(メンバ)関数の中に素の関数ポインタは残ってはいる
だから、今でも関数ポインタを使うのは 本当に1部の残された領域と
高速化のために継承じゃ追いつかない所をハンドメイドで書くぐらいだと思う。
インタプリタのメンバ関数呼び出しとVtableによるメンバ関数呼び出しは
見かけは同じように見えても、(実行速度とか含め)全く別物だからという注釈は書いておこうかなと。