アカウント名:
パスワード:
構造体の可変長配列のメンバーに可変長配列があって・・・なんてことを昔にやってしまった人間としては、C++のコンストラクタ&デストラクタは福音でした。STLに至っては言うに及ばずです。 似たような構造体の定義が山ほどあって、こいつの整理に継承と多態が非常に有効であることを知ったときは目から鱗が落ちました。
なぜ、ポインタが必要なのか。なぜ、仮想関数が必要なのか。スクリプト系言語の怠惰さとか、今まで理解できなかった事を理解できたときの喜びって最高だと思うんですけどね・・・。 ぶっちゃけ、僕なんかその快楽を得るためにプログラマをやっているようなものですけど。
可変長配列メンバと同じようなものですが、継承を使うと共用体(可変長レコード)を殆ど使わずに済む(メモリ上で同じ位置に異なる型のデータを置きたい特殊な場合を除いて)のも中々の福音でないかと。
オブジェクト指向は戦場では役に立たない。そんなことふうに考えていた時期が俺にもありました。
構造体の延長として作った set/get しまくりのクラス。関数ポインタで作ったオレオレ仮想関数。構造体を第一引数に渡した オレオレthis。継承をむやみに使いまくって、追いきれなくなったゴミコード。
オブジェクト指向なんて誰も必要としていない。Bjarne Stroustrup インタビュー (?)をガチだと信じていた時期さえありましたwhttp://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html [rim.or.jp]
そんな風にOOをdisっていたら、とある恩師に、こんなこといわれました。キミがC言語を理解して使いこなすまでに何年かかった。そうか3年ぐらいかかったか。C++は、Cと似て異なる別の言語だ。だから、キミがC++を理解して使いこなせるようになるまでは3年ぐらいかかるよ。
それから、いやいやC++を利用してゴミコードを量産していたのですが、3年ぐらいすぎたあるときから、急にOOで書くのがすごく楽になりました。
恩師の言葉は事実だったんだなと思いますた。何がいいたいかというと、非OOの言語になれまくった人がOOを理解するのには、非OO言語を使いこなしたぐらいの時間がかかるんぢゃないのというお話ですた。
めでたしめでたし。#3年もかかったのは馬鹿といわれそうですが、アホなんで許してください。
> オブジェクト指向は戦場では役に立たない。確かに、TOPCODERのアルゴリズムコンペで上位の方のソースは、言語選択はC++でも、普通のCプラスアルファみたいなやつが多い気がする。
オブジェクト指向こそ約束の地!と言う感じでC++のアカデミズムに辟易した(付いて行けなかった)人が集まって出来たのがJavaなんじゃないですかね。誰も何も言わなければそのまま明後日の方向に突き進んでしまう事もよくあると言えばよくある事です。それが無意味な事であるとも限りませんが。
どこにぶら下げるかなやみつつ。
C++ってば、アカデミズムあふれるオブジェクト指向言語なんかじゃ全然ないです。オブジェクト指向もサポートしている変態(本気で考えないと理解できない微妙な制限てんこ盛りのなんでもあり)言語です。
いや正直、テンプレートでメタプログラミングとか、楽しくてしょうがない。でもね、どんなに頑張っても、すらっとスマートポインタとか作れないですよ。なんちゃってレベルならすぐ作れるけど、あまりにもバッドノウハウが必要すぎる。ここ [wikibooks.org]とかよむと、自信なくしちゃいます。
以前はC++最高と思ってたけど、なんかもう疲れたよ。お願い、もう仕様を増やさないで。
http://www.aoky.net/articles/steve_yegge/tour_de_babel.htm [aoky.net]
とは言え、C++コードでいいものを書くことは明らかに可能だ。それはつまり、ほとんどCのコードに、いくらかのC++の機能が、最低限だけうまく使われているような場合だ。しかしそういうことには決してならない。C++はすごい遊び場であり、そのすべてを知るとすごく賢くなった気分になる。だからあなたはそのすべてを使おうとすることになる。しかしそれはうまくやるのが本当に難しいのだ。
親コメントのACです。アカデミズムと言いましたが、C++の形式と伝統(互換性)を堅持しつつ理論的探求を怠らない姿勢について言ったつもりです。形式の点はISO標準と言う国際規格である以上拘らないと言う選択肢はありませんが、それ以上にStroustrupの方針がそういった(学者的かつ技術者的な)妥協の無い、言ってしまえばエリート的な利用者層を強く背景にしているのではないかと思う事はあります(Stroustrup自身がそのような能力ある人々に囲まれている故、本人はそれに明確には気付いていないのではないか、と考えるのは下衆の勘繰りになりますが)。
「と言う感じで」がC++とJavaのどちらにかかるのかわかりませんが、別に Java もとってもオブジェクト指向な言語ではないですよね。だいたい、プリミティブ型があることからして不純です。
逆に、プリミティブ型が存在しない言語は、純粋すぎるでしょう。仮想的な理想を夢見すぎてて、必要充分な現実を直視していない感じがします。
# もっとも、そういう純粋すぎる言語はなかなか使う機会がないので、# 実は個人的なただの印象なんですけど。
> 別に Java もとってもオブジェクト指向な言語ではないですよね。
そうですね。一番の眼目はネットワークコンピューティングでしょうね。かつてのサンの標語、The Network is THE Computer に目指す世界が端的に表現されています。まあしかし、Plan9みたいな分散OSよりはJavaは成功しているとはいえ、主たる活躍の場は、当初の目論見とは違ってサーバサイドだったわけです。で、サーバサイドにJavaはとっても向いてるのかというと、どうもそうは思えない。COBOLで間に合う仕事にわざわざインスタンスこしらえてるのが大半じゃないかと。
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
人生unstable -- あるハッカー
このはてしなく長いプログラマ坂をよ・・・ (スコア:3, おもしろおかしい)
ということは、知らずにやってた時期があったわけですね。
それはさておき、新たな技法を手に入れて過去の所行を見直したり、教科書に書いてある技をそれと知らず再発明したり、 逆についうっかりおっちょこちょいな独自の技法を編み出してしまったり、 「いやお前の考えはおかしい。エライ人が書いた教科書にもこっち方が正しいと書いてある」と言う実はもっともなアドバイスに反発してみたり、 後になって自らの過ちに気付いたり。 プログラマはそうやって、一歩一歩、成長を遂げるもんでしょう。
このトピックの話題も、そういう階段を一段上がり損ねた一事例に過ぎないでしょうから、ほほえましく見守ってあげれば良いんじゃないでしょうか。
# そうだそうだ!と言う賛同者をたくさん集めちゃって、階段の踊り場なんかが形成されたら嫌だけど
Re:このはてしなく長いプログラマ坂をよ・・・ (スコア:2)
構造体の可変長配列のメンバーに可変長配列があって・・・なんてことを昔にやってしまった人間としては、C++のコンストラクタ&デストラクタは福音でした。STLに至っては言うに及ばずです。 似たような構造体の定義が山ほどあって、こいつの整理に継承と多態が非常に有効であることを知ったときは目から鱗が落ちました。
なぜ、ポインタが必要なのか。なぜ、仮想関数が必要なのか。スクリプト系言語の怠惰さとか、今まで理解できなかった事を理解できたときの喜びって最高だと思うんですけどね・・・。
ぶっちゃけ、僕なんかその快楽を得るためにプログラマをやっているようなものですけど。
共用体 (スコア:1)
可変長配列メンバと同じようなものですが、継承を使うと共用体(可変長レコード)を殆ど使わずに済む(メモリ上で同じ位置に異なる型のデータを置きたい特殊な場合を除いて)のも中々の福音でないかと。
Re:このはてしなく長いプログラマ坂をよ・・・ (スコア:2, 興味深い)
オブジェクト指向は戦場では役に立たない。
そんなことふうに考えていた時期が俺にもありました。
構造体の延長として作った set/get しまくりのクラス。
関数ポインタで作ったオレオレ仮想関数。
構造体を第一引数に渡した オレオレthis。
継承をむやみに使いまくって、追いきれなくなったゴミコード。
オブジェクト指向なんて誰も必要としていない。
Bjarne Stroustrup インタビュー (?)をガチだと信じていた時期さえありましたw
http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html [rim.or.jp]
そんな風にOOをdisっていたら、とある恩師に、こんなこといわれました。
キミがC言語を理解して使いこなすまでに何年かかった。
そうか3年ぐらいかかったか。
C++は、Cと似て異なる別の言語だ。
だから、キミがC++を理解して使いこなせるようになるまでは3年ぐらいかかるよ。
それから、いやいやC++を利用してゴミコードを量産していたのですが、3年ぐらいすぎたあるときから、
急にOOで書くのがすごく楽になりました。
恩師の言葉は事実だったんだなと思いますた。
何がいいたいかというと、非OOの言語になれまくった人がOOを理解するのには、
非OO言語を使いこなしたぐらいの時間がかかるんぢゃないのというお話ですた。
めでたしめでたし。
#3年もかかったのは馬鹿といわれそうですが、アホなんで許してください。
by rti.
Re: (スコア:0)
> オブジェクト指向は戦場では役に立たない。
確かに、TOPCODERのアルゴリズムコンペで上位の方のソースは、言語選択はC++でも、
普通のCプラスアルファみたいなやつが多い気がする。
Re:このはてしなく長いプログラマ坂をよ・・・ (スコア:1, すばらしい洞察)
でも、1962年生まれの人ですからねぇ。
会社ではそれなりにえらい立場な人なはずです。(なんでそんな人がコードを書いているのかは知りませんが)
そういう人が自分は分かってる、って思い込んでるわけで、そうなると現場の若い人たちにもstatic pubulic宣言を
押し付けている可能性が高いです。だから、声を上げずにはいられないのでしょう。
Re: (スコア:0)
オブジェクト指向こそ約束の地!と言う感じでC++のアカデミズムに辟易した(付いて行けなかった)人が集まって出来たのがJavaなんじゃないですかね。誰も何も言わなければそのまま明後日の方向に突き進んでしまう事もよくあると言えばよくある事です。それが無意味な事であるとも限りませんが。
Re:このはてしなく長いプログラマ坂をよ・・・ (スコア:1, 興味深い)
どこにぶら下げるかなやみつつ。
C++ってば、アカデミズムあふれるオブジェクト指向言語なんかじゃ全然ないです。オブジェクト指向もサポートしている変態(本気で考えないと理解できない微妙な制限てんこ盛りのなんでもあり)言語です。
いや正直、テンプレートでメタプログラミングとか、楽しくてしょうがない。でもね、どんなに頑張っても、すらっとスマートポインタとか作れないですよ。なんちゃってレベルならすぐ作れるけど、あまりにもバッドノウハウが必要すぎる。ここ [wikibooks.org]とかよむと、自信なくしちゃいます。
以前はC++最高と思ってたけど、なんかもう疲れたよ。お願い、もう仕様を増やさないで。
http://www.aoky.net/articles/steve_yegge/tour_de_babel.htm [aoky.net]
Re: (スコア:0)
親コメントのACです。アカデミズムと言いましたが、C++の形式と伝統(互換性)を堅持しつつ理論的探求を怠らない姿勢について言ったつもりです。形式の点はISO標準と言う国際規格である以上拘らないと言う選択肢はありませんが、それ以上にStroustrupの方針がそういった(学者的かつ技術者的な)妥協の無い、言ってしまえばエリート的な利用者層を強く背景にしているのではないかと思う事はあります(Stroustrup自身がそのような能力ある人々に囲まれている故、本人はそれに明確には気付いていないのではないか、と考えるのは下衆の勘繰りになりますが)。
Re:このはてしなく長いプログラマ坂をよ・・・ (スコア:1)
「と言う感じで」がC++とJavaのどちらにかかるのかわかりませんが、
別に Java もとってもオブジェクト指向な言語ではないですよね。
だいたい、プリミティブ型があることからして不純です。
Re:このはてしなく長いプログラマ坂をよ・・・ (スコア:1)
逆に、プリミティブ型が存在しない言語は、純粋すぎるでしょう。
仮想的な理想を夢見すぎてて、必要充分な現実を直視していない感じがします。
# もっとも、そういう純粋すぎる言語はなかなか使う機会がないので、
# 実は個人的なただの印象なんですけど。
Re: (スコア:0)
> 別に Java もとってもオブジェクト指向な言語ではないですよね。
そうですね。一番の眼目はネットワークコンピューティングでしょうね。
かつてのサンの標語、The Network is THE Computer に目指す世界が端的に表現されています。
まあしかし、Plan9みたいな分散OSよりはJavaは成功しているとはいえ、
主たる活躍の場は、当初の目論見とは違ってサーバサイドだったわけです。
で、サーバサイドにJavaはとっても向いてるのかというと、どうもそうは思えない。
COBOLで間に合う仕事にわざわざインスタンスこしらえてるのが大半じゃないかと。