プロが教える店舗&オフィスのセキュリティ対策術

CからC++の授業に移って「美しいプログラム」と良く先生が口に出すようになりました。
特に「クラス」とか「モジュール」とかになると、Cのときと比べて先生は興奮気味となり授業がワンマンっぽくなくことが、しばしば目立つようになりました。
CもC++でアプリ作ろうが最終的に効率よく動けば良いのでありますから、どうしようが同じに感じますが…
なんでC++になると先生興奮気味になって美しいプログラムを求めるのでしょうか?
では、美しいプログラムの条件ってなんでしょうか?

A 回答 (8件)

<半分冗談として聞いてください>


 美しいプログラムとは、「プログラミングは、芸術であり、文学である」と主張する「Donald E. Knuth」 の「The Art of Computer Programming 」のアルゴリズムを「文芸的プログラミング(Literate Programming)」で記述した物ではないでしょうか?
  http://sunburn.stanford.edu/%7Eknuth/taocp.html
  http://ja.wikipedia.org/wiki/TeX
  http://ja.wikipedia.org/wiki/%E6%96%87%E8%8A%B8% …

 まず、「基本に効率的なアルゴリズムがあり、それが「見やすく、分かりやすく、簡潔にプログラムした物」が、美しいプログラムではないでしょうか? CやC++などの言語に依存する物では無いと思います。
 

参考URL:http://www-cs-faculty.stanford.edu/~knuth/
    • good
    • 0

「美しい」かどうかの基準は、ごく大雑把なものであれば一般的なものもあるのでしょうが、ちょっと突っ込んだ内容になると、用途に応じてかなり異なると思います。



例えば、オブジェクト指向的にどんなに美しくても、それを単純なデバイスドライバに適用しようとすると、その設計思想自体が美しくありません。

C++という言語は、適用範囲が非常に広いですから、アプリケーション領域によって、その美的感覚は変わると思います。
また、カーネルやデバイスドライバ、ライブラリ、ミドルウェア、そして(いわゆる)アプリケーションでは、やはり美的感覚が変わるはずです。

アプリ屋にとっては美しくても、OS屋やデバドラ屋にとっては、激遅、激重で使い物にならない書き方もあれば、ハードウェア周りの泥臭い書き方を、上っ面のアプリに適用しようとしてもうまくいきません。

自分の守備範囲がある程度広いのであれば、(プログラミングに限れば)C++の機能や書法を一通りマスターして、どの機能や書法をどこに適用するのが最適であるかを、見極めるセンスが必要なのだと思います。
    • good
    • 0

C++、もとい「クラス」って本当にいろいろ出来ちゃうんですよ。

単純に
で、わかって来ると本当にプログラマにとって面白いおもちゃになり得ちゃいます。
「美しい」と言うかある種の「自己満足」すら得られます。
いや、別にその先生が悪いとか言うつもりもないんですけど、私自身が
「俺って凄くね??」とか思う時があったもんで、でそれを「美しい」と・・・
・・本当にすいません。今はどんなに自分で凄いと思っても、所詮他人のプログラム
など基本は「古文書」だと思っています。まあコレも正しいかどうかわかりませんけどね。
問題はその古文書をいかに他人にわかり易く伝えることが出来るか?だと思っています。

美しいというかわかりやすいプログラムは「イメージ」がつかみやすいです。
ぱっと見たとき「ああ、アレだ。」と感覚でつかむ事が出来ます。保守や修正、バグが発生
したときも、「コレはあそこだ」で完結しやすいです。いちいちつまずかないんですよ。
コレはあらゆる面で大きなアドバンテージになりえます。

ただ、難しいです。本当に個人差が出てしまうので、書くほうにも読むほうにも・・・
そこは注意したほうがいいです。状況や環境に左右されることもあると思います。

実は言ってることは他の回答者様と一緒なのかも知れませんが、私はざっくばらんな
感じで語ってみました。基本は同じこと言ってるのに、人によって結構違う。コレも
先生が熱くなる一つの理由かも知れませんね。
    • good
    • 0

2つの観点から。



まず、

> 最終的に効率よく動けば良いのでありますから

これは、多くの場合間違いです。
動いているプログラムは、2つに分類されます。「動くべくして動いている」ものと、「たまたま動いているもの」です。
後者は、ちょっとした変化――データの形を間違えたり、予想しなかったデータが入ったり、たまたま特定のタスクが一緒に動いていたり――で、突然「動かないプログラム」になります。
そして、美しいプログラムは多くの場合間違い前者であり、そうでないプログラムは後者です。

さて、C++に移ってから、「美しいプログラム」が頻発するようになったのは。
C++はオブジェクト指向を実現するための、良くできた言語です。ただし、その設計思想は、少なくとも当初は、「完璧さよりも効率」「動かない理想よりも、実際に動くもの」であったのも確かです。
その結果、C++の機能は、ある意味では、「オブジェクト指向に使えるように、無理矢理こじつけた」ところがあります。(設計と実装の違い――などという言葉も耳にするようになるかもしれません)

ですから、C++は、(C言語以上に)間違った使い方ができてしまいます。たとえば、class が、単なる関数付きの構造体だったりする。
そういう意味で、C++においては、C++の正しい使い方(C++の実装に基づいた使い方ではなくて、C++の設計思想に基づいた使い方)により注意を払う必要があるわけです。

ま、C++における、美しいプログラムとそうでないプログラムの落差は、C言語における落差よりも大きいというわけですね。
    • good
    • 0

>CからC++の授業に移って「美しいプログラム」と良く


>先生が口に出すようになりました。

C言語はコーディング書式や方法がかなり自由にできる為
プログラムを書く人の技量の差が出やすい言語でもあります。
過去にも他の人が作成したプログラムをメンテする機会が
ありましたが、このまま封印して世の中に出さない方が
世界平和の安定につながるのでは?といったものを良く
目にしてきました。

先生も同じ様な経験をしてC言語に対するトラウマを持って
いるのではないでしょうか?
    • good
    • 0

No1-3 のご回答はその通りと思いますが、敢えて違う視点で。



確かに工学的な「美しさ」は、プログラムだけでなく、他のハードウェア(工業製品)にも(機能)美というものが存在します。

そしてその美的センスを「磨く」ために専門書を読むことは基本を身につけるという意味で勿論大事ですが、いちばん有効なのは「美しい」(あるいは反面教師的に「汚い」)プログラムを読むことであり、あるプログラムを書く時に、時間をかけてどうすればより「美しいか」をご自分で研究されてみることでしょう。私は美しいプログラムを読んで「目から鱗」状態になったことがあります。

とはいっても、所詮「美学」なので、ふたつのプログラムでどっちがより美しいか、という議論は不毛に終わることがあるので、注意してください。ましてやプログラミング言語どうしを比較してどっちが美しいか、という議論は、水彩と油絵でどっちが美しいかを議論するようなものです。古ーい言語でも美しく書くことは十分可能だと信じています。

ということで「美しいプログラムの条件」なんてものはなく、美しいプログラムを書くための「センス」が必要なのではないでしょうか。また、なんで美しいプログラムを求めるか、についてですが、世の中なんでも汚いよりも美しいに超した事はないですし、プログラムを教える立場の先生としては「良いプログラム」のひとつの尺度として美しさを無視できない訳です。

「美しさ」という尺度でプログラムの善し悪しを判断する風潮にちょっとうんざりしているので、上のように書いてみました。しかし実際には、プログラムで解決しようとしている問題の本質が分かっていないことによる結果として「汚い」プログラムになってしまうことが非常に多いです。

以下は全くの蛇足ですが、工学の分野に美的な尺度が存在するものは建築等でありますが、ソフトウェアの場合、利用者にそれが見えないのは他にない特徴ですよね。せっかく奇麗に書いても、それを他の人に理解してもらう可能性はゼロに近いのですから、ちょっと悲しいですね。
    • good
    • 0
この回答へのお礼

たしかにユーザーはきれい・ばっちいはわかりませんね。
(動きがぎこちないなどでわかることもありますが…)
でも、私は開発上メンバー同士に対しての「美」だとおもいます。
どうも、ご回答ありがとうございました。

お礼日時:2006/06/03 16:11

実際にはプログラムは一人で作るものではありません。


美しいプログラムは保守しやすく、プロジェクトの仲間に喜ばれます。
汚いプログラムは保守しにくく、明日の自分にさえ嫌われます。


http://hiki.cre.jp/computer/?CodeComplete
「高品質なプログラム」について書かれた本だそうです(私もまだ読んでいませんが…)。


別に、Cだから汚くて良い、C++だから美しくなければいけない、というわけではありません。
CだろうがC++だろうがJavaだろうがBASICだろうがプログラムは美しくあるべきです。多くの場合、それは効率よく動くものになります。
    • good
    • 0
この回答へのお礼

ばっちぃプログラムは改善・補修などで、
あとからが大変でかつ、仲間との開発もうまくいかず、動きも鈍いわけですね。
では、きれいなプログラムにするため、開発チームと決める事とは?これは又別で質問することにします。
ありがとうございました。

お礼日時:2006/06/02 01:06

『美しいプログラム』といっても解釈の幅が広すぎるのですが、「オブジェクト指向」の事を仰っているのかもしれません。



なお、開発現場的に「美しいプログラム」とは誰もが読めるメンテナンス性の良いものを指します。
    • good
    • 0
この回答へのお礼

ふむふむ。
さっそくのご回答ありがとうございます。

お礼日時:2006/06/02 00:57

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!