• ベストアンサー

効率的なプログラミング

データ処理や数値計算のために簡単なプログラミングをしている者です。大体,一般的な入門書レベルの内容をマスターしている程度と考えていただければ良いと思います。 それで,プログラミングで重要なことは「より単純に,より速く」というコードを書くことが1つあげられると考えていますが,そういったより効率的なプログラミングをするために良い参考書などないでしょうか? 例えば,「こういうコードの書き方は良くないですよ」とか「このように記述することによってより高速に動きますよ」といったような,初心者がはまりやすい罠とか,より上達するために良い書籍ということです。 こういったことは,原則としてどの言語でも共通なことであると認識していますが,全く分からない言語の説明を受けても理解できないので,PerlかCかVBのいずれかの言語でお願いします。 あと,頼みついでに1つ教えて欲しいのですが,同じ繰り返し処理を行う場合,(例えばCでいうところの)for構文とwhile構文の使い分けというのがイマイチよく分かりません(それぞれのメリットとデメリットが分からないということ)。基本的にはどちらでも同じことができますが,私はほとんどfor構文しか使わないのです。

質問者が選んだベストアンサー

  • ベストアンサー
  • Oh-Orange
  • ベストアンサー率63% (854/1345)
回答No.5

★回答者 No.1 さんと同じく速度にはこだわらない方が良いでしょう。 ・今の時代、パソコンの性能がいいのでコンパイラ型の言語ならば速度よりも  ソースファイルの見易さや、分かりやすさを重要視して下さい。 ・回答者 No.3 さんが既に『Cプログラミング診断室』を紹介しているので  私は『プログラミングの禁じ手Web版 C言語編』を紹介します。  下の『参考URL』をどうぞ。 ●for、whileについて ・私は次のような法則で使い分けています。  (1)ループ・カウンタのみしか変数『i,j,k…』を使わない場合は『for』文。  (2)初期化部、繰り返し部がある場合も『for』文。  (3)初期化部が特になく繰り返す場合は『while』文。 ・あと無限ループの場合は『while(1){…}』ではなくて『for(;;){…}』という  『for』文を使います。for 文は3つの式を個別に省略できますのでこのような  方法が行えるのです。→特に真ん中の式(繰り返し条件)を省略すると無限ループ  になります。『while(1)』でも無限ループできますが、コンパイル(ビルド)時に  警告メッセージが出るため私はいつも『for(;;)』としています。 ・下に『while』文の使用例を載せます。→この場合は『for』よりも『while』です サンプル:文字列『string』を『buff』領域にコピー while ( (*buff++ = *string++) != '\0' ){  ; } 余談: ・今のパソコンは 1990 年代初頭のスーパー・コンピュータと同じか、それ以上の  速度で処理しています。昔は速度を優先するあまりに『トリッキー』なソースを  書いていました。→今、自分で見ても分かりません。自分で書いたソースなのに…。 ・以上。おわり。

参考URL:
http://www.cmagazine.jp/src/kinjite/c/index.html
backs
質問者

お礼

回答ありがとうございます。 やはり今ではパソコンの性能自体が格段に良くなっているので,特別に速さを重視する必要性はなくなっているのですね(やはりメンテナンス性重視ということか)。 > ●for、whileについて 詳しい説明ありがとうございます。こういう説明を見ると,やはり自分で試行錯誤するのが大事なのだと考えさせられますね。 > 今のパソコンは 1990 年代初頭のスーパー・コンピュータと同じか、それ以上の 速度で処理しています。 ホント,便利な世の中になったものです。

その他の回答 (6)

  • sakusaker7
  • ベストアンサー率62% (800/1280)
回答No.7

確かに効率がよい(高速でサイズが小さい)といったことは重要かもしれません。 しかし、小手先の技術に走って可読性を落としたりしてはあまり意味がありません。 カーニハン博士(K&RのKの人)はその著書で 「プログラムの最適化の第一原則は『最適化しないこと』である」 とおっしゃっています。 適切なアルゴリズムを選択し、正しいスタイルでプログラミングすることが重要だと思います。 その上でさらに高速化などを施す必要があるのなら、 むやみやたらに手を入れるのではなく、 計測し、手を入れるべき場所を見極めた上で行うべきでしょう。 プログラミング作法: ブライアン カーニハン,ロブ パイク http://amazon.jp/dp/4756136494

backs
質問者

お礼

回答ありがとうございます。 > プログラムの最適化の第一原則は『最適化しないこと』である そうなのですか!? やはり,むやみやたらに手を入れるのはよろしくないことなのですね。でも,確かに少し技術を覚えた時ほど小手先の技術にこだわってしまうのだと思います。あくまでも慎重に扱いなさいということですね。

  • a-saitoh
  • ベストアンサー率30% (524/1722)
回答No.6

速度にこだわらないでいいという意見もありますが。そんなことは無いです。速度は重要です。どんなに高性能なコンピュータでも、馬鹿なプログラマが一人居れば鈍重になります。ただ、プログラムの読解が困難になるような高速化はしないというのはもちろんそのとおりです。 コード最適化の議論で出てくるようなミクロなことは考えなくていいでしょう。マクロなレベルで、無駄をしないようにすることが必要です。 まずは、自分が書いているプログラムがだいたいどの程度の効率で動くのか自覚できるようにならなければなりません。そのためには、アルゴリズム論と計算論の本を読むのがいいです。

backs
質問者

お礼

回答ありがとうございます。 > プログラムの読解が困難になるような高速化はしない 基本的には速度が重要であるが,ややこしくてワケのわからないコードにしてまで追求はするな,ということなのですね。 > 自分が書いているプログラムがだいたいどの程度の効率で動くのか自覚できるようにならなければなりません。 なるほど,そうなのですか。そういうことなら早速,アルゴリズム論に関する本を読んで勉強してみます。

  • root139
  • ベストアンサー率60% (488/809)
回答No.4

コーディング周りの書籍でしたら、『コードコンプリート』が良いと思います。この書籍では、特定の言語に依存しなく、かつ比較的具体的な問題を扱っています。 サンプルもVB、Javaなどの数種類の言語で書かれていますが、それらの言語に詳しくなくても分かるように書かれています。 http://www.amazon.co.jp/dp/489100455X/ 『達人プログラマー』でも、特定の言語に依存しい問題を扱っていますが、こちらは要件定義やテストなどまで幅広い分野の心得的なことが多いです。 http://www.amazon.co.jp/dp/4894712741/

backs
質問者

お礼

回答ありがとうございます。 前者の本はずいぶんとボリュームのある本なのですね。それでも第2版がでるくらいですから,相当に良い本なのでしょうね。『達人プログラマー』もよさそうな本なので,書店にあるかどうか品定めに行ってきます。

  • don_go
  • ベストアンサー率31% (336/1059)
回答No.3

>プログラミングで重要なことは「より単純に,より速く」 >というコードを書くことが1つあげられると考えていますが 制御系や計測系のシステム等でミリ秒・マイクロ秒単位での 精度が必要な場合には重要視されることも有りますが、事務 処理系などの人間を相手とするシステムでは、それほど重要 視はされません。 但し、無駄に複雑なプログラムはメンテナンス性を悪くする と共にバグの温床となることも多いので避ける必要が有ります。 >そういったより効率的なプログラミングをするために良い >参考書などないでしょうか? http://www.pro.or.jp/~fuji/mybooks/cdiag/index.html#mokuji Cプログラミング診断室

backs
質問者

お礼

回答ありがとうございます。 なるほど,より速さを求める必要があるのは"そういうレベル"での話なのですね。URLはまだ少ししか見ていないのですが,とても役に立ちます。ありがとうございました。

  • noro6677
  • ベストアンサー率21% (34/158)
回答No.2

速さを求めるならスクリプト(インタプリタ)言語やJAVAや.NET言語のように OSのネイティブな実行ファイルを作るのではない言語ではなくて コンパイラ型の言語を選びましょう。 最近のPCは早くなってきたのでだいぶ問題はなくなってきましたが やはりそこら辺を気にするなら >こういうコードの書き方は良くないですよ #1さんの言うように見やすいコードを書くことを心がけた方が良いでしょう。 コメントを適度に入れる。 ループ回数が決まっていてi++の様に一定の増減があるならfor文 それ以外ならwhile文

backs
質問者

お礼

回答ありがとうございます。 > 最近のPCは早くなってきたのでだいぶ問題はなくなってきましたが プログラミングの話とは関係ないのですが,数年前までは10ギガあるとすごいモノでしたが,今では100や200くらいが当たり前になってきてしまいましたね。そもそも,DVDを見れたりCDに書き込みするパソコンなど数少なかった、、、

  • hana-hana3
  • ベストアンサー率31% (4940/15541)
回答No.1

>プログラミングで重要なことは「より単純に,より速く」というコードを書くことが1つあげられると考えていますが 昔はそうでしたが、今では速度はあまり関係無いでしょう。 トリッキーなコードを書くよりも、見やすい、読みやすいなど、メンテ性の方が問題かと思います。 >for構文とwhile構文の使い分けというのがイマイチよく分かりません どちらでも関係は無いでしょう。 ループの途中で抜ける事が無い(規定の回数の実行、最低1回の実行)ならFor文、何らかの脱出条件をチェックしながらループする(場合によってはループしない:0回)ならwhile文という事になります。

backs
質問者

お礼

早速の回答ありがとうございます。 > 昔はそうでしたが、今では速度はあまり関係無いでしょう。 そうなのですか?私が思っているほど,速度にはこだわっていないのでしょうかね。でも確かに,後から見て分かりやすいコードでなければ,書き直すときにも非効率的ではありますね。

関連するQ&A