• ベストアンサー

美しいプログラムとは

プログラムを勉強中なのですが、あまり美しいプログラムではないような気がします。 行数が多いソースになると、どうしても 見た目の美しさに欠け、構造も使い回しができないようなプログラムになってしまいます。 美しいプログラムを書くはどうすればよろしいでしょうか? 参考になる書籍、サイトがあれば、教えていただきたいです。 よろしくお願いいたします。

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

  • ベストアンサー
  • Interest
  • ベストアンサー率31% (207/659)
回答No.4

美的センスは人によって違いますが、私も「保守しやすいプログラム」に1票。 ソフト屋さんとして仕事をしていると、まったく新規に開発するより、他人が書いたプログラムを拡張したり保守したりすることが圧倒的に多いです。なので、次のようなソースコードがありがたいのです。 1.コーディングスタイルが統一されている 2.適度にコメント文が書かれている(過剰なコメントはダメ) 3.コメント文が「正確」である (間違ったコメント文は混乱の元) 4.素直な設計 (変なテクニックが入っていると理解できない) 5.定石(セオリー)に従っている 6.汎用部と専用部が切り分けられている 7.仕様書が整備されている 8.テストしやすいこと 1、2は行儀というか作法の問題で、質問者さんもやろうと思えば今すぐできることです。すでに実践してらっしゃるかもしれませんが。コーディングスタイルの流儀はいろいろありますよね。使うプログラミング言語や開発ツールによって決まってしまうものもあるようです。 3は、間違ったコメント文ならない方がマシだ!ってことで。 4、5は「アルゴリズムとデータ構造」の教科書に出てくるような基本的なものからANo.2の方が書いてらっしゃるデザインパターンのレベルまで、先人が練り上げてきた洗練されたやり方に従うのが賢い、という意味です。 6は、再利用性に関する事項です。「使いまわす部分(汎用部)」と「使い捨てる部分(専用部)」を切り分けて作っておくと、後で楽できます。ドメイン(問題領域)に固有な処理を専用部に入れて、他のドメインでも使われる処理は別に切り出す。 7、8は仕事ではこれをやってもらわないと困ります。テストのしやすさは特に重要で、テストできないということ正くことを保証できないという意味です。品質を保証するのがプロの仕事です。 最後に、ちょっと古い本ですが本を紹介します。「Cプログラミング診断室」という本で、他人の酷いプログラムを病気に見立てて、診断、処方する過程を通してどうしたらよいプログラムになるか教えてくれます。 http://www.pro.or.jp/~fuji/mybooks/cdiag/ さらなるレベルアップを目指す際は、次のキーワードでいろいろ検索してみることをお勧めします。 ソフトウェア工学、構造化分析、構造化設計、DFD、オブジェクト指向、UML、デザインパターン、ソフトウェアアーキテクチャ、XP、アジャイルモデリング、ラショナル統一プロセス

ws_okwav
質問者

お礼

回答ありがとうございました! キーワードを元に勉強してみます!

その他の回答 (3)

noname#123613
noname#123613
回答No.3

こんばんは 他の人が見ても保守しやすいわかりやすいプログラムを書くことです。 あなたは美しいプログラムとは行数が少なくて、たくさんの処理ができるプログラムだと思っていませんか。 もし、そう思っていたら全然違います。 細かいことから言えばコメント、変数名がわかりやすいこと。 if文などでネストを使い過ぎるのは仕様が変更、削除になったとき修正しにくいのでダメです。 クラスの層が深すぎたり、クラス同士が強く依存し合っているプログラムも何をしてるか処理の流れがわからなくなるのでダメです。 そして、他の方も言っておられるようにファイルの切り分けが綺麗に整理されているプログラムは良いプログラムです。 例えばテキストファイルにシーケンシャルアクセスするプログラムをつくったとしましょう。 これをAccessに変更してもSQLSeverに変更してもファイルのどの部分を直してよいか他の人が見てもわかるようなプログラムは良いプログラムです。 ソフト会社に就職すると先輩から悪いところを指摘され何度も書き直しになりながら自然と覚えていきます。

ws_okwav
質問者

お礼

>細かいことから言えばコメント、変数名がわかりやすいこと。 なるほど。 この点が一番の課題だと感じました。 ありがとうございました。

  • tonton53
  • ベストアンサー率36% (4/11)
回答No.2

言語にもよると思いますが、 WEBをやっているのですが、MVCモデルというのをよく使います。 デザインパターンなどで検索をしてみるといいと思います。 参考になったら幸いです。

参考URL:
http://www.itarchitect.jp/methodology_and_design/-/38302.html
ws_okwav
質問者

お礼

MVCモデルですか・・・! 調べてみます!ありがとうございました!

  • arain
  • ベストアンサー率27% (292/1049)
回答No.1

「美しい」とは主観ですので厳密な解はありません。 一定のコーディング規約に則り、関数ヘッダや処理内容などきっちりとコメントがつけられて、他の人が見てもわかるようにすれば十分です。 まず一番は、頭の中だけで考えてソースを作るのではなく、しっかりと「設計」(紙に書く等)することです。 行き当たりばったりではいいものは作れません。 それにより内容が整理すればそれなりにきれいになっていきます。 あとは「オブジェクト指向」を勉強することです。

ws_okwav
質問者

お礼

回答ありがとうございます。 オブジェクト指向ですか!今検索してがんばって勉強します! ありがとうございました!

関連するQ&A

  • プログラムの勉強を始めたい

    プログラムの勉強を始めたいと思っています。 目的はゲーム(シューティングゲーム)や サイト巡回プログラムなど簡単なツールを作ることです。 自分で調べてみていくつも言語があることは分かったのですが どれが初心者に優しいか、などがいまいち把握できず 初心者に優しくてもその言語を学ぶ過程で覚えたことが 別の言語でも流用できるのか、等が知りたくて質問させていただきました。 知りたいこと ・参考資料が多い・メジャーな言語の中で分かりやすい、構造が複雑でないものを教えて欲しい ・それに関するお勧めの書籍があれば教えて欲しい よろしくお願いします。

  • ポケベルを呼び出すプログラムをVBでつくりたい

    VBの初心者なのですが、勉強のためにVBでポケベルを呼び出すプログラムをつくりたいと思っています(業務で少しからみがあるので....)。 モデムを使ってポケベルを呼び出して、PB信号を発行できるようなものです。 一から自分でプログラムするのはとても無理なので、そのようなソースプログラムをちょこちょこ改造するところから始めたいのですが、なかなかよいものが見つかりません(フリーでそのようなソフトはたくさんあるのですが、ソースが公開されているものは少なくて....)。 どなたか、参考になるソースプログラムが公開されているURLとか、書籍などご存じでしたら教えてください。

  • これからプログラムについて学ぼうと思っています。WEBやアプリ向け自動操作に適したプログラム言語を教えてください。

    パソコンを使って、ネットやアプリケーションの操作を自動化するプログラムを作りたいと考えています。 私はプログラムに関してはほとんど知識が無いので基本から勉強するのですが、上記のような自動操作をしたい場合はどのようなプログラム言語を勉強すれば宜しいでしょうか? お勧めプログラム言語とあわせて、プログラムの勉強に役立つ書籍やサイトもご紹介いただけるとありがたいです。 ちなみに、学生時代にC言語を少し学びました。(情報処理は専門外なのでほんの少しですが・・・) また、見よう見まねでVBを使った自動操作プログラムを組んだこともありますが、参考書を見ながら必要な部分を改造しただけなので基本は全然出来ていないと思います。 何卒宜しくお願いします。

  • プログラムはどうやって動いているのか?

    根っからの文系学生ですが、気になったので投稿しました。OSやiTunesなどのプログラムはどうやって機能しているのか仕組みが知りたいです。プログラムの仕組み等の書かれた書籍、詳しいサイト等があったら教えてください。

  • Javaの勉強をしています。何かプログラム集で参考になるものないですか?

    Javaの勉強をしています。何かプログラム集で参考になるものないですか?一応、文法とかオブジェクトの考え方は理解できました。サーバーサイドも始めていますが、クライアントサイドでも形になるプログラムを作りたいと思います。講師も、最初は雛形を参考に手を加える方がよいとの事でした。 講師の方は参考図書には詳しくなかったので、お尋ねするのですが、基礎から応用までのプログラムが載っていて解説してあるような書籍はないでしょうか? また、ネットも検索していますが、お勧めのサイトはないでしょうか? よろしくお願いします。

    • ベストアンサー
    • Java
  • PIC プログラムについて

    適当なカテゴリーが分かりませんでしたのでこちらで質問させて頂きます。 最近PICに興味を持ちはじめトライしてみようと思っているのですがプログラムに関する知識が全くありません。 学生時代から電子工作はいろいろとやってはいましたがプログラムに関する事になるとチンプンカンプンです。 これを機会に趣味の範囲ですがいろいろ勉強してみようと思っております。 自分なりに調べたのですが、コンパイラ・C言語でのプログラムが可能という事ですのでこのどちらかを選び勉強しようと考えています。 ただ、この2つの違いというのがいまひとつピンときません。 2つの違いやこれから勉強するにはどちらのほうがとっつきやすいかなどご意見があれば回答して頂きたいと思っております。 例えばこっちの言語の方がとっつきにくいけど参考に出来るサイトや書籍が多いなどのアドバイス頂ければ大変ありがたいです。 分かる人にとってはくだらない質問だとは思うのですがよろしくお願い致します。

  • シェアウェアプログラムを作りたいと考えておりますが、

    シェアウェアプログラムを作りたいと考えておりますが、 参考になる書籍又はサイトを教えてください。 開発はC#かVBかJAVAを予定してます。

  • プログラムの勉強は、書籍でしますか?ネットのサイトで十分でしょうか?

    プログラムの勉強は、書籍でしますか?ネットのサイトで十分でしょうか? 最近はネットで色々入門サイトが多いので、書籍を買わなくても十分勉強できるのでしょうか? 5年ー10年くらいの値段が下がった本を買い集めてcやjavaの勉強をするかネットだけで勉強するか 悩んでおります。よろしければアドバイスください。 実務レベルの実力をつけたいです。

  • 何かプログラムを作りたいのですが…

    はじめまして。プログラミングを猛(?)勉強中の中一です。 ところで、今、Cを勉強してるんですが、そろそろおおずめをむかえてきたので、本に載ってるようなプログラムでは我慢できなくて、もっと大きなプログラムを作りたいという衝動がおさえきれなくなってきました。 ですが、どうやって作ればいいのかわかりません。 はじめに作りたいものは、テキストエディタなんですが、はじめは「メモ帳」レベルからはじめて、高機能なものにしていきたいとおもっています。 なので、どうやってつくればいいかを詳しく教えていただけるとうれしいです(参考になるサイトでも結構です)。 また、言語はC/C++じゃなくてもいいです(勉強しますから)。 どうかご回答をよろしくおねがいします。

  • プログラムが書けない

    研修生としてJavaを勉強しています。 研修といっても書籍やインターネットで情報を調べて 自分で考えてやっていく形式でそれには課題があります。 課題を解いていくのですがいざプログラムを 書こうとしたときにプログラムが頭に浮かびません。 書籍を読み、インターネットで色々情報を調べ サンプルプログラムなんかもいくつか組んでみました。 人が完成させた課題のプログラムはある程度は 理解できるのですがやはり書けません... 真似したくないけど自分で書くとそうなってしまいます... こんな人にいい処方箋はありますでしょうか?

    • ベストアンサー
    • Java

専門家に質問してみよう