はてなキーワード: BNFとは
手順を考えて、その手順を書くだけ。
言語もあらかじめ決められた手順に沿って解析されて実行されるから、オートマトンやBNF記法、構文木などの仕組みを一通り覚えてどういう機構でチューリングマシンが原理的に実行可能なコードへと落とされるかを理解すれば言語自体も覚えるのなんてそんなに難しくない。
手順を考えるなんて、人間が生活する上でいつもやっていること。
プログラムを走らせるためのデータ構造を考えるのに苦労するという話も聞くけど、プリミティブな要素が数値、型へのリファレンス値しかないんだから大体は離散数学で使うグラフの初歩的な知識があれば事足りる。GoFのデザインパターンなんてまさにそう。
>JAVAを最初に学んでその後に現場で実際に用いるであろう言語(例えばPHP+SQL)を習得するといったルートは現実的なのだろうか?
いろいろ言う人はいるけど、PHPでも、問題ないよ。
ただ、欲をいえば、PHPのモジュールをC++で書く拡張機能あたりをちゃんと勉強しておいたり、ちゃんとコードをチューニングして行けば勉強になると思う
SQLはただ使うんじゃなくて、データーの正規化やインデックスなんかをきちんとマスターしておくと、違う感じ。あとは、ストアードプロシージャ
>上記のケースで前段階として学ぶ言語はどの程度のレベルまで到達する必要が有るのか
というか、本気で学ぼうとすると、トランジスタから始まって、フリップフロップ、レジスタ、アキュムレーター、バスの配線、クロックというハードの構成がどうなっていて、
それに対応するマシン語があって、それがニーモニックに変換されて、
そこにスタックという概念が持ち込まれて、レジスタをスタックに退避するという概念が生まれて、関数コールができて、C言語が生まれて、さらにそこにthisポインタをコンパイラが自動補完して関数テーブルを保管することでオブジェクト指向というか、C++ができている。そこに(Cの世界に)BNFなどの構文があって、それを構文ツリーにするBisonなんかがあって、PerlやPHPができている。
という、なぜC++のオブジェクトはポリモルフィズムができるのか?というソフトからハードまでを一貫して知る必要がある。
そこまで理解していると、コードのレベルは確かにハンパないレベルにはなるけど・・・。正直、業務には必要ないというか、そんなクオリティーの仕事が少ない。
やりたければ、やってもいいけど、PHPからやったら?そして必要になったらPHPをCで拡張するという形でCに入ると良いと思うよ。
やりたい言語をやるのが一番だ。
でも、本気で知りたいなら、死ぬ気でアセンブラをやれ。それがすべての始まり。
わりといえば、普通に大学入って、授業を真面目に受けた方が早い。
>そもそも実際に現場で使用することを想定した言語で、今から学ぶのに本当に適しているのは何か?
PHPでいいでしょ。大差ない、むしろ、自分が気に入った言語で、どれだけコードを沢山書くか。日々の鍛錬。
ちなみにWeb系といわれたから、ライトウェイトな言語を中心に考えたけど、つぶしが効くのは意外とJavaやC++であることも。書いておく。
正規表現とかもライブラリ使えば良いし、そもそもC系列ならBison とかLRとかだろうと。C系列の使い手ならBNFを使え。
http://d.hatena.ne.jp/faith_and_brave/20100220/1266673222
まず第一にエンタープライズでの開発が考慮されていない。エンタープライズの開発だと100人200人 マスタークラスから ジュニアーまで様々なレベルの開発者が携わる。
その中で重要になってくるのは可読性。
はっきり言って、歴史的な可読性を犠牲にして効率が上がるならともかく、気持ちの問題程度の効率では意味がない。
第2に
スレッドとファイバーの違いぐらいわかれ、わざわざスレッド起こしたらコンテキストスイッチにどれだけコスト食うんだよ。
関数コールするとレジスタとかが、スタックにPUSHされるんだよってわからん奴が、IF書くなと同じで、スレッドってコンテキストスイッチの塊なんだよってのがわかんないのに下手にスレッド書かせるな。
3にラムダ式・・・いらん・・・必要なのは曲芸じゃない、可読性。可読性を犠牲にして早くなるならともかく・・・
4にforeachではlastを変数に取るな。途中でReallocしたり、eraseしたりしたときに余計なバグを生んで面倒だ。レビューの時も邪魔。速度?速度が必要な背景でSTLのVector使うな。配列使うかポインタ使え。
なんつーか、トータルで見て、次はC++と各種OpenCLとかGLとかのライブラリの集合だな。C++0xはまともに使う人もいなさそう。正規表現とかもライブラリ使えば良いし、そもそもC系列ならBisonとかLRとかだろうと。C系列の使い手ならBNFを使え。正規表現使いたければそれこそ、Perl使え。
適材適所
perl そこそこの文書処理に
Java わりと何でもいけるが、わりと平均的にめんどくさい
JSP メモリ64K制限さえなければすばらしかったが、Java展開されたときのPrintfにサイズに制限があるので、小さいHTML向け
PHP Perl的に使う人大杉、あくまでも、HTML埋め込み言語として使うと最適print("HTMLほげほげ")とかみると悲しくなる
C/C++ 速度が必用なときに。まぁ、今では巨大トランザクションサーバーとか、CGの世界とか
速度マニアで正規表現マニアな人はlex/yacc/bison (BNFな人はANTLRらしい。最近知った)。
って感じか? 用途と違う道具を選んで、道具がどうのこうの言う前に、適切な道具を選べばいんじゃねーかと。
プログラマーは道具の善し悪しを語るんじゃない、道具を使いこなす自分の腕の善し悪しをかたらなくっちゃーだめなんだーーーーーーーー
とか、増田るあたり、俺もまだまだ、若いなぁって安心するけど・・・そろそろ、大人にならなくちゃと思う。
もはや何年も前から言われてることだが、「2ちゃんねらー」でひとくくりにする人が未だに後を絶たない。
それは「VIPPER」なのか「ニュー速民」なのか「プラス民」なのか「毒男住人」なのか。
各板で全然特色が違うし、住人も多種多様すぎる。
うちの教授もコテハン持ってるし、BNFだって2ちゃんねらー(だった?)わけだし。
まぁ、「これだから韓国人は」とか「アメリカ人は」とか一くくりにしたがるのは昔から変わってないから仕方ないかもしれないが
まともな議論をしていると思っている人が「2ちゃんねらーは」とか言ってるのをみると「やれやれ」と思ってしまう。
もっとひどいのは「2chスレまとめサイト」を指さして「あいつらは」という人。
そのブログに付けられたコメントを指して「痛ニューに集まる奴らは」というのならまだしも
スレ番号飛びまくりのブログ主の好み出まくりの2chスレを見て
「これだから2ちゃんねらーは」とか言われるとどこから突っ込んでいいやら。
痛いニュースを見て「これはひどい」とか思って現行スレを覗いてみたら割とまともだったなんてのはしょっちゅうあること。
2ch見たことない人間がまとめスレ見て批判するとか、勘弁していただきたい。
中学生に向かって言うのならまだいいのだが、割と大人な人の主張に対してこういう言葉を使う人はもうちょっと考えた方が良いかと。
ほとんどの場合は「上からの視点」なんてなくて、それはただの「横からの視点」なわけで。
見方を変えただけで上から見た気になって
「お前らの意見はまだまだ」
と議論放棄する人が割と多い。
「そんな風に考えていた時期が俺にもありました」
の一言で片づけて終わり。
同じように「多角的な視点で議論しよう」という感じで「広くが全て」という人も多い。
もちろん、広い視野も大事ではあるのだが、「深さ」も重要だと分かっている人が少ない。
どれだけ深く洞察したかを加味せず、自分より下の視点(狭い視野)だと判断すると議論放棄する人をたまに見かけるが
もう少し相手を敬ってもいいんじゃないだろうか、と思う。
相手もそれなりの洞察を経て、その意見にたどり着いているのだから。
人の意見に感銘を受けて、それを他者に話すというのはよくあること。
実は人の意見なんてそれがすべてかもしれない。
ところが、その2ホップ後の意見を聞いて、それを批判して、元の1次ソースに対して「たいしたことねーな」と言ってしまう人が多い。
割と有名なAという人に感銘を受けたBという人が、CさんにAさんの言ってることを鸚鵡返しのごとく話したところ
Cさんはそれに対して反論して、Bさんがそれにこたえられなかったときに
「Aは大したことねーな」
という人のこと。正しくは
「俺にはよくわからなかった」
割と2chに偏ったけれどこんなところかなぁ。
いやさ、これ、ほんとどう対応したらいいんだろ?
逃げ道がおもいつかない。
今から地下壕掘っても間に合わないし・・・。
崩れるまえに外にとびだすったってどこへ?
金とかいっても意味なくね?
食料ぐらいしかおもいつかないよ。
BNFが資産の半分を神田という一番資産価値の毀損がすくないであろうビルに替えたけど、
ビルなんて買えないしな・・・。
シティタワー品川が114平米が4347万円だってさ。
品川の70平米が2000万ちょい。
こういうときに買い向かえれば資産のばせるんだろうけど、
貧乏人はどこに逃げても被弾って感じじゃない?
一番揺れがすくないのどこだろう。
農業かな?
諸君、私はC++が好きだ
諸君、私はC++が好きだ
諸君、私はC++が大好きだ
テンプレートが好きだ
STLが好きだ
Boostが好きだ
FC++が好きだ
Macで
BSDで
演算子の意味が変わり、直感的なコードが書き下せる時など心がおどる
動的言語の優位性を語っている奴等にそれを見せた時など胸がすくような気持ちだった
Boostが好きだ
Boost::lambdaを使って(_1 + _2)と二つの引数を足算した結果を返す無名関数を定義した時など感動すらおぼえる
Boost::regexで正規表現を書く時などもうたまらない
Boost::shared_pointerでオブジェクトが自動的に解放されるのは最高だ
納期に追われて急いで書かなければならないパーサを
Boost::spiritでBNFを記述して書いた時など絶頂すら覚える
そんなC++が複雑だと思われているのはとてもとても悲しいものだ
テンプレートが好きだ
諸君 私に付き従うC++好きの諸君 君たちは一体何を望んでいる?
更なるC++を望むか
糞の様なC++を望むか?
BoostやFC++によってさらに変態的になっていくC++を望むか?
よろしい ならばC++だ
だが、LL全盛の時代の陰でもはや組み込みかHPCぐらいでしか使われないという中傷に耐え続けて来た我々には
ただのC++ではもはや足りない!!
我々はわずかに小数
Perl、PHP、Python、Ruby、JavaScriptに比べれば物の数ではない
だが諸君は一騎当千のBinarianだと私は信じている
ならば我らは諸君と私で総兵力100万と1人のコンピュータサイエンティスト集団となる
我らを忘却の彼方へと追いやり、インタプリタしか知らない連中を叩きのめそう
髪の毛をつかんで引きずり下ろし 眼(まなこ)をあけて思い出させよう
連中にインタプリタでは実用的なプログラムが書けないということを思い出させてやる
C++には奴らの哲学では思いもよらない書き方がある事を思い出させてやる
1000人のBinarianの集団で 世界を変態的なコードで埋め尽くしてやる
逝くぞ 諸君
http://b.hatena.ne.jp/entry/http://www.zakzak.co.jp/top/2008_02/t2008020802_all.html
ほんと、官僚って些細なミスも許されないんだな。ああ怖い怖い。はてなの人間も普段はねらーにいろいろ言ってるのに、相手が政府になるととたんにバッシングOKですか。「発言の一部を切り取るな」っていってるのに、発言の一部を切り取って血祭りですか。10年近くデイトレばかりをやって「市場」しか知らない人間と、ずっと官僚として「市場」と「社会」を見てきた人間、どちらが有能かといえば後者なんじゃないんですか。そりゃBNFはすごいとはおもうけど、さすがに官僚を叩きすぎな気がする。社会は市場だけで回っているわけではないし、失言が全く許されないのは本当に恐ろしい。