アカウント名:
パスワード:
コンピュータサイエンスの初級コースってのがどんな教育をする場かは知りませんが、アルゴリズムのお勉強とかは、C/C++ がベストと思うんですよね。使える機能がもっとも原始的という意味で。ま、最低、Java でもいいとは思うけど。
数あるプログラミング言語でも飛び抜けて多機能なC++を、「使える機能がもっとも原始的」とは恐れいった
そうかもしれない。私がイメージしたのはGCとかに邪魔されず。基本的なデータ構造を自作しても効率が悪くないくらいに原始的という感じ。確かにSTLとか使っちゃったらアルゴリズムのお勉強にならないね(^^;
STLの存在がデータ構造のアルゴリズムの学習を妨げるとしたら、qsortがあるCだってソートの学習に向いていないことになってしまうある機能が学習の妨げになるというのなら、それを使わないようにすればいいだけそれに、より原始的なほうが適しているというのなら、マシン語やアセンブリ言語から学ぶべきだし、GCがアルゴリズムの学習を阻害するというのも意味がわからないな
> GCがアルゴリズムの学習を阻害するというのも意味がわからないな
ここだけ説明、GC のある言語でマージソートのようなメモリを確保するアルゴリズムを実装すると、実装に仕方にもよるけど、正体不明の速度低下を引き起こすことがあったりするんですよ。私自身の体験ですけどね。で、アルゴリズムの素の性能を見極めるときの邪魔にならないかなぁと思ったと。
C++がとんでもなく多機能なのは誰が見ても明らかで、「使える機能が原始的」という根拠はまったく説得力を持たない。そして「アルゴリズムの素の性能を見極めるときの邪魔にならないかなぁと思った」とのことだが、もちろん現実にはデータの個数やデータの並びの乱雑さ、比較関数の複雑さなどによって結果は異なるため、実際のコードを走らせても「素の性能」を測ることはできない。「アルゴリズムの素の性能」を測るときに用いるのは数学的な計算量だ。
「基本的なデータ構造を自作しても効率が悪くない」と、C++が効率に優れることも根拠としているようだが、Javaは通常の用途ではC++と遜色ないレベルまで効率的になっており、情報科学の学習の初期段階でそのようなわずかな効率の差にこだわる理由はまったくない。
実は、「私自身の体験だ」と持ちだした根拠が客観的に認められないだろうということも自覚していると思われる。おそらく本人も自説に根拠が乏しいことは理解しているのだろうが、それでも「C++が学習に向いている」という自説には揺るぎない自信があるようだ。たぶんこれ以上根拠を検討しても説得は不可能なんだろう。人を説得する際に科学的事実を並べるのは無駄? [srad.jp]とも関連しそうだと思うんだけど、この人を説得できる方法があるとしたら、それは何なのだろうか
>C++がとんでもなく多機能なのは誰が見ても明らかで、「使える機能が原始的」という根拠はまったく説得力を持たない。
私は「原始的なほど多機能」だという感覚があるから、全然違和感ありませんが。
(私にとって)超高級言語の LOGO とか、他の言語に比べて機能が少ないどころの話じゃないですし。
そうですね、アルゴリズムの性能は計算量のオーダーで議論する。その通りと思います。マージソートの話は私の気の迷いです。はい。
ところで、私は最低 Java でも悪くないと書いてます。Java を否定するつもりはないですよ。
C++がアルゴリズムの学習に向いているという自説に揺るぎない自信というのもちょっと(^^;C++は多機能だろと突っ込まれた段階で揺らぎまくりです。よろしければ、あなたのおすすめの学習法とか教えていただけませんか?
クラスの生成・破棄のコストが高い。2〜3次元座標程度のクラスでも常に動的確保してGCで回収する必要がある。構造体やクラスをスタックに確保できるC++なら殆どの場合スタックポインタを書き換えるだけですむ。
型推論がない、pairやtuple等で関数から複数の値を返したいときに変更箇所が増える。
演算子オーバーロードがないジェネリクスを使っても自前の数値演算クラスと、組み込みの数値型の処理を共通化できない。
Pythonというもっとよい選択肢がある。動的型付け言語で、演算子オーバーロードがあり。クラスの生成にnewという古の呪文を必要としない。
と、いつの間にか最強論争を始めてしまう残念な人でしたいったいどういう教育を受けてきたんでしょうね
より多くのコメントがこの議論にあるかもしれませんが、JavaScriptが有効ではない環境を使用している場合、クラシックなコメントシステム(D1)に設定を変更する必要があります。
ソースを見ろ -- ある4桁UID
アルゴリズムのお勉強 (スコア:0)
コンピュータサイエンスの初級コースってのが
どんな教育をする場かは知りませんが、
アルゴリズムのお勉強とかは、C/C++ がベストと思うんですよね。
使える機能がもっとも原始的という意味で。
ま、最低、Java でもいいとは思うけど。
Re: (スコア:0)
数あるプログラミング言語でも飛び抜けて多機能なC++を、「使える機能がもっとも原始的」とは恐れいった
Re: (スコア:0)
そうかもしれない。私がイメージしたのはGCとかに邪魔されず。
基本的なデータ構造を自作しても効率が悪くないくらいに原始的という感じ。
確かにSTLとか使っちゃったらアルゴリズムのお勉強にならないね(^^;
Re: (スコア:0)
STLの存在がデータ構造のアルゴリズムの学習を妨げるとしたら、qsortがあるCだってソートの学習に向いていないことになってしまう
ある機能が学習の妨げになるというのなら、それを使わないようにすればいいだけ
それに、より原始的なほうが適しているというのなら、マシン語やアセンブリ言語から学ぶべきだし、
GCがアルゴリズムの学習を阻害するというのも意味がわからないな
Re: (スコア:1)
> GCがアルゴリズムの学習を阻害するというのも意味がわからないな
ここだけ説明、GC のある言語でマージソートのようなメモリを
確保するアルゴリズムを実装すると、実装に仕方にもよるけど、
正体不明の速度低下を引き起こすことがあったりするんですよ。
私自身の体験ですけどね。
で、アルゴリズムの素の性能を見極めるときの邪魔にならないかなぁと思ったと。
Re:アルゴリズムのお勉強 (スコア:0)
C++がとんでもなく多機能なのは誰が見ても明らかで、「使える機能が原始的」という根拠はまったく説得力を持たない。
そして「アルゴリズムの素の性能を見極めるときの邪魔にならないかなぁと思った」とのことだが、
もちろん現実にはデータの個数やデータの並びの乱雑さ、比較関数の複雑さなどによって結果は異なるため、
実際のコードを走らせても「素の性能」を測ることはできない。
「アルゴリズムの素の性能」を測るときに用いるのは数学的な計算量だ。
「基本的なデータ構造を自作しても効率が悪くない」と、C++が効率に優れることも根拠としているようだが、
Javaは通常の用途ではC++と遜色ないレベルまで効率的になっており、
情報科学の学習の初期段階でそのようなわずかな効率の差にこだわる理由はまったくない。
実は、「私自身の体験だ」と持ちだした根拠が客観的に認められないだろうということも自覚していると思われる。
おそらく本人も自説に根拠が乏しいことは理解しているのだろうが、それでも「C++が学習に向いている」という自説には揺るぎない自信があるようだ。
たぶんこれ以上根拠を検討しても説得は不可能なんだろう。
人を説得する際に科学的事実を並べるのは無駄? [srad.jp]とも関連しそうだと思うんだけど、
この人を説得できる方法があるとしたら、それは何なのだろうか
Re:アルゴリズムのお勉強 (スコア:1)
>C++がとんでもなく多機能なのは誰が見ても明らかで、「使える機能が原始的」という根拠はまったく説得力を持たない。
私は「原始的なほど多機能」だという感覚があるから、
全然違和感ありませんが。
(私にとって)超高級言語の LOGO とか、他の言語に比べて機能が少ないどころの話じゃないですし。
Re: (スコア:0)
そうですね、アルゴリズムの性能は計算量のオーダーで議論する。
その通りと思います。マージソートの話は私の気の迷いです。はい。
ところで、私は最低 Java でも悪くないと書いてます。
Java を否定するつもりはないですよ。
C++がアルゴリズムの学習に向いているという自説に揺るぎない自信というのもちょっと(^^;
C++は多機能だろと突っ込まれた段階で揺らぎまくりです。
よろしければ、あなたのおすすめの学習法とか教えていただけませんか?
Re: (スコア:0)
クラスの生成・破棄のコストが高い。
2〜3次元座標程度のクラスでも常に動的確保してGCで回収する必要がある。
構造体やクラスをスタックに確保できるC++なら殆どの場合スタックポインタを書き換えるだけですむ。
型推論がない、
pairやtuple等で関数から複数の値を返したいときに変更箇所が増える。
演算子オーバーロードがない
ジェネリクスを使っても自前の数値演算クラスと、組み込みの数値型の処理を共通化できない。
Pythonというもっとよい選択肢がある。
動的型付け言語で、演算子オーバーロードがあり。クラスの生成にnewという古の呪文を必要としない。
Re: (スコア:0)
と、いつの間にか最強論争を始めてしまう残念な人でした
いったいどういう教育を受けてきたんでしょうね