• ベストアンサー

効率的なプログラミング

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

  • backs
  • お礼率85% (564/660)

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

  • ベストアンサー
  • 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

  • プログラミング言語の入門書について

    今、PHPを独学しているんですが、ちょっとした疑問があります。 WEB系のプログラミング言語を選ぶためにいろいろ調べていたとき、 『PHPはPERLがわかれば、大体わかる。』と何かで見ました。 で、 『RUBYはPERLが進化した言語だからRUBYがわかるとPERLがわかる。逆は無理』という話も見たことがあります。 ということは、RUBYをマスターすると色々わかるのでは? と思ったのですが、RUBYの入門書の書評を見ると、『全くの入門者には難しい』とありました。 じゃぁ…とPERLの入門書の書評を見ても同じような内容が… PHPの入門書を調べてもこれまた同じ WEB系のプログラミング言語の入門書~初心者向きの本に良書は少ないものなのでしょうか? ついでに、『入門者にとって、これはいい本だよ』という本があれば教えてください。 ちょっとした疑問なので、お暇な時にでもお答えいただけたら幸いです。

  • perlのプログラミングセンスを磨くには

    C言語とperlを独学し、1000行程度のperlのコードを書けるようになりました。 ですが自分の書いたコードは 似たようなサブルーチンが何回も出てきたり、後から付け足したコードをあちこちにツギハギしたり、いわゆるグローバル変数を多用したりと、自分で見てもあまりセンスが感じられません。 そのため見た目に分かりづらく、メンテナンスもしにくくなってしまっています。 他の方が書かれたコードをダウンロードして見てみたりしていますが、なかなか上達できません。 センスのいいコードを書くには、個々の関数の働きがどうこうよりも、もっとマクロな視点で全体の構造やメンテナンス性に注目すべきだと思うのですが、この観点でプログラミングを解説したサイト、あるいは書籍をご紹介頂けないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Perl
  • C言語のデバッガ及びプログラミングツールについてお聞きしたいのですが

    私は只今,C言語の構文木を用いた教育支援システムの研究をしております.そこでお聞きしたいのですが,C言語のデバッガ,またはプログラミングツールで読み込んだソースコードの構文木を出力してくれるツールはありませんか?出力形式はどのようなものでもかまいません,そのソースコードの構文情報を抽出できるものであれば.心当たりのある方,どうぞご返信くださいますようお願い申し上げます.

  • プログラミングについて

    プログラミングを今年の四月にはじめたばかりなのでまったくプログラミングの知識がない状態で、大学の3年の授業でJSPをやっているのですが、ほとんどわかりません。(大学には3年次編入で入りました) ちなみにJSPは授業をとらないといけません。 しかし今、一年の授業でC言語を習っていますが、JSPで使うのはJavaなので、C言語をこのまま勉強するべきなのか、それともJavaをやったほうがいいのか迷ってます。プログラミングに関してもっている参考書はやさしいC、明解C言語入門編、 JSP業務アプリケーション短期開発入門です。 何かいい教科書や勉強法、アドバイスがありましたら教えてください。

  • プログラミング入門に最適な言語

    プログラミング入門に最適な言語 最近プログラミングに興味をもって、プログラミングに挑戦しようと思ってます。 最終的にC++へ行くつもりですが、何の言語からはじめるのがいいでしょうか。 よろしくお願いします。

  • プログラミング言語の習得について

    プログラミング言語の習得について こんにちは。某大学の理工学部数学科に通う4年生です。 プログラミング言語について質問させていただきます。 僕は先日基本情報技術者試験を受験しました。 その試験ではプログラミング言語を1つ習得しないといけなかったためC言語の入門書を一冊勉強しました。 今家にはC++とJavaの入門書、C言語の中級書もあります。 そこで質問なのですが、 続けてプログラミング言語を勉強するには、C言語の中級書、上級書というように1つの言語を徹底的にマスターした方がいいですか? それとも、C++、Javaの入門書を一通りやってC以外の言語も一応使えるようにした方がいいですか? ちなみに大学院に進学する予定なのでまだまだ勉強できる環境にあります。 宜しくお願いします。

  • プログラミングを突き詰めて考えると難しい

    プログラミング(C.C++)を勉強しているのですが、プログラムが実行されるまでの流れの”中身”が分かりません。 ■C言語で書いたプログラム ↓ ■コンパイラ ↓ ■マシン語 ↓ ■CPU だと思うのですが中でどのように処理されているかがよく分かりません。 あと、「マシン語によるプログラミングでは、基本的にCPUが直接解釈できるマシンコードと一対一に対応するニーモニックを使用する。この後アセンブラによってニーモニックをマシンコードに変換し、CPUで実行できるようにする。」と書いてるあったのですが、C言語との違いは何なのでしょうか?どちらもマシンコードに変換するのでおなじプログラムだと思うのですが。 色々調べているうちにこれを理解していくにはかなり難しく、マシン語がどのようにCPUで処理されて結果としてでてくるまでの過程など勉強しなければいけない気がするのですが、わかりやすい参考になる本やサイトがれば教えて頂けないでしょうか

  • UWSCはどのプログラミング言語?

    いつもお世話になります。 先日UWSCというものを知り、それがスクリプト言語で動くということを知ったのですが、 UWSCというのは、どのプログラミング言語を覚えれば使いこなせるのでしょうか? プログラミング言語にもC言語やperl,php等あると思うのですが、どれがどのように違うのかがさっぱりわかりません。 よろしくお願いします。

  • プログラミングの役立て方?使い道?

    こんばんは。 私は趣味でプログラミングを勉強している者で、Perl、PHP、JavaScriptをWebで役立てられるぐらいまでには習得できました。 現在Javaを勉強しているのですが、ここで質問です。 PerlやPHPはホームページ制作を実現する事が出来ますが、CやJavaなどのプログラミングは習得した後、どう役立てればいいのでしょうか? 私はCやJavaはWindowsアプリケーションを制作するためのものだと思っていたのですが、どうも違うようですし・・・(winアプリはVBが良い?) 入門書を読んでもコマンドプロンプトでforやらifやらプログラムの仕様を学ぶだけで、その後どういう風に役立てるのかが分かりませんでした。 ファイルの書き換えならPerlやPHPでも十分出来ると思いますし・・・。 CやJava等のWeb系じゃないプログラムの特徴や使い道?(何に向いているかとか)を教えていただけないでしょうか。 よろしくお願いします。

    • ベストアンサー
    • Java
  • プログラミング、C言語について・・・

    プログラミング、C言語について・・・ 大学の宿題でわからないところがありまして・・・ 課題は、 キーボードから入力した数だけ、*(アスタリスク)を表示するようなプログラミングを作成せよ また、表示を見やすくするため*が10個表示されるたびに改行を入れよ。 なんですが とくにキーボードから入力した数だけ、*(アスタリスク)を表示するようなプログラミング がわからなくて困ってます。 あとこのプログラミングではforではなくてwhileでお願いします。 わがまま多いですがよろしくお願いします。

専門家に質問してみよう