No.2ベストアンサー
- 回答日時:
<半分冗談として聞いてください>
美しいプログラムとは、「プログラミングは、芸術であり、文学である」と主張する「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/
No.8
- 回答日時:
「美しい」かどうかの基準は、ごく大雑把なものであれば一般的なものもあるのでしょうが、ちょっと突っ込んだ内容になると、用途に応じてかなり異なると思います。
例えば、オブジェクト指向的にどんなに美しくても、それを単純なデバイスドライバに適用しようとすると、その設計思想自体が美しくありません。
C++という言語は、適用範囲が非常に広いですから、アプリケーション領域によって、その美的感覚は変わると思います。
また、カーネルやデバイスドライバ、ライブラリ、ミドルウェア、そして(いわゆる)アプリケーションでは、やはり美的感覚が変わるはずです。
アプリ屋にとっては美しくても、OS屋やデバドラ屋にとっては、激遅、激重で使い物にならない書き方もあれば、ハードウェア周りの泥臭い書き方を、上っ面のアプリに適用しようとしてもうまくいきません。
自分の守備範囲がある程度広いのであれば、(プログラミングに限れば)C++の機能や書法を一通りマスターして、どの機能や書法をどこに適用するのが最適であるかを、見極めるセンスが必要なのだと思います。
No.7
- 回答日時:
C++、もとい「クラス」って本当にいろいろ出来ちゃうんですよ。
単純にで、わかって来ると本当にプログラマにとって面白いおもちゃになり得ちゃいます。
「美しい」と言うかある種の「自己満足」すら得られます。
いや、別にその先生が悪いとか言うつもりもないんですけど、私自身が
「俺って凄くね??」とか思う時があったもんで、でそれを「美しい」と・・・
・・本当にすいません。今はどんなに自分で凄いと思っても、所詮他人のプログラム
など基本は「古文書」だと思っています。まあコレも正しいかどうかわかりませんけどね。
問題はその古文書をいかに他人にわかり易く伝えることが出来るか?だと思っています。
美しいというかわかりやすいプログラムは「イメージ」がつかみやすいです。
ぱっと見たとき「ああ、アレだ。」と感覚でつかむ事が出来ます。保守や修正、バグが発生
したときも、「コレはあそこだ」で完結しやすいです。いちいちつまずかないんですよ。
コレはあらゆる面で大きなアドバンテージになりえます。
ただ、難しいです。本当に個人差が出てしまうので、書くほうにも読むほうにも・・・
そこは注意したほうがいいです。状況や環境に左右されることもあると思います。
実は言ってることは他の回答者様と一緒なのかも知れませんが、私はざっくばらんな
感じで語ってみました。基本は同じこと言ってるのに、人によって結構違う。コレも
先生が熱くなる一つの理由かも知れませんね。
No.6
- 回答日時:
2つの観点から。
まず、
> 最終的に効率よく動けば良いのでありますから
これは、多くの場合間違いです。
動いているプログラムは、2つに分類されます。「動くべくして動いている」ものと、「たまたま動いているもの」です。
後者は、ちょっとした変化――データの形を間違えたり、予想しなかったデータが入ったり、たまたま特定のタスクが一緒に動いていたり――で、突然「動かないプログラム」になります。
そして、美しいプログラムは多くの場合間違い前者であり、そうでないプログラムは後者です。
さて、C++に移ってから、「美しいプログラム」が頻発するようになったのは。
C++はオブジェクト指向を実現するための、良くできた言語です。ただし、その設計思想は、少なくとも当初は、「完璧さよりも効率」「動かない理想よりも、実際に動くもの」であったのも確かです。
その結果、C++の機能は、ある意味では、「オブジェクト指向に使えるように、無理矢理こじつけた」ところがあります。(設計と実装の違い――などという言葉も耳にするようになるかもしれません)
ですから、C++は、(C言語以上に)間違った使い方ができてしまいます。たとえば、class が、単なる関数付きの構造体だったりする。
そういう意味で、C++においては、C++の正しい使い方(C++の実装に基づいた使い方ではなくて、C++の設計思想に基づいた使い方)により注意を払う必要があるわけです。
ま、C++における、美しいプログラムとそうでないプログラムの落差は、C言語における落差よりも大きいというわけですね。
No.5
- 回答日時:
>CからC++の授業に移って「美しいプログラム」と良く
>先生が口に出すようになりました。
C言語はコーディング書式や方法がかなり自由にできる為
プログラムを書く人の技量の差が出やすい言語でもあります。
過去にも他の人が作成したプログラムをメンテする機会が
ありましたが、このまま封印して世の中に出さない方が
世界平和の安定につながるのでは?といったものを良く
目にしてきました。
先生も同じ様な経験をしてC言語に対するトラウマを持って
いるのではないでしょうか?
No.4
- 回答日時:
No1-3 のご回答はその通りと思いますが、敢えて違う視点で。
確かに工学的な「美しさ」は、プログラムだけでなく、他のハードウェア(工業製品)にも(機能)美というものが存在します。
そしてその美的センスを「磨く」ために専門書を読むことは基本を身につけるという意味で勿論大事ですが、いちばん有効なのは「美しい」(あるいは反面教師的に「汚い」)プログラムを読むことであり、あるプログラムを書く時に、時間をかけてどうすればより「美しいか」をご自分で研究されてみることでしょう。私は美しいプログラムを読んで「目から鱗」状態になったことがあります。
とはいっても、所詮「美学」なので、ふたつのプログラムでどっちがより美しいか、という議論は不毛に終わることがあるので、注意してください。ましてやプログラミング言語どうしを比較してどっちが美しいか、という議論は、水彩と油絵でどっちが美しいかを議論するようなものです。古ーい言語でも美しく書くことは十分可能だと信じています。
ということで「美しいプログラムの条件」なんてものはなく、美しいプログラムを書くための「センス」が必要なのではないでしょうか。また、なんで美しいプログラムを求めるか、についてですが、世の中なんでも汚いよりも美しいに超した事はないですし、プログラムを教える立場の先生としては「良いプログラム」のひとつの尺度として美しさを無視できない訳です。
「美しさ」という尺度でプログラムの善し悪しを判断する風潮にちょっとうんざりしているので、上のように書いてみました。しかし実際には、プログラムで解決しようとしている問題の本質が分かっていないことによる結果として「汚い」プログラムになってしまうことが非常に多いです。
以下は全くの蛇足ですが、工学の分野に美的な尺度が存在するものは建築等でありますが、ソフトウェアの場合、利用者にそれが見えないのは他にない特徴ですよね。せっかく奇麗に書いても、それを他の人に理解してもらう可能性はゼロに近いのですから、ちょっと悲しいですね。
たしかにユーザーはきれい・ばっちいはわかりませんね。
(動きがぎこちないなどでわかることもありますが…)
でも、私は開発上メンバー同士に対しての「美」だとおもいます。
どうも、ご回答ありがとうございました。
No.3
- 回答日時:
実際にはプログラムは一人で作るものではありません。
美しいプログラムは保守しやすく、プロジェクトの仲間に喜ばれます。
汚いプログラムは保守しにくく、明日の自分にさえ嫌われます。
http://hiki.cre.jp/computer/?CodeComplete
「高品質なプログラム」について書かれた本だそうです(私もまだ読んでいませんが…)。
別に、Cだから汚くて良い、C++だから美しくなければいけない、というわけではありません。
CだろうがC++だろうがJavaだろうがBASICだろうがプログラムは美しくあるべきです。多くの場合、それは効率よく動くものになります。
ばっちぃプログラムは改善・補修などで、
あとからが大変でかつ、仲間との開発もうまくいかず、動きも鈍いわけですね。
では、きれいなプログラムにするため、開発チームと決める事とは?これは又別で質問することにします。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) プログラムの勉強のおすすめは 7 2022/12/09 20:09
- C言語・C++・C# 参考にいろいろとc言語、c++言語プログラミングでレジストリーを操作したいのですが、無料配布のc++ 3 2022/12/22 01:49
- 中学校受験 この状況、誰が悪いと思いますか 3 2022/06/01 15:15
- C言語・C++・C# c言語 コマンドライン引数 4 2023/02/09 18:47
- 芸術学 学校の教師に勝手に絵の具等の画材を捨てられたんですが、これって罪に問えますか? 3 2023/05/31 21:37
- Visual Basic(VBA) ファイル全てを .xlsm に変更したところ、プログラムが途中で落ちてしまっています 17 2022/12/07 12:03
- C言語・C++・C# C言語で移動平均のプログラムを作りたいのですが、数値をファイルから取ってきて計算をするプログラムはど 1 2022/09/29 01:21
- その他(プログラミング・Web制作) 大学のゼミのレポートがムカつきます。 R言語というデータ分析に特化したプログラム言語を用いた授業の課 1 2023/06/29 00:50
- その他(プログラミング・Web制作) 大学一年でVBAのプログラミングを勉強しているものです。来週の情報の授業で以下の問題のプログラムを勉 4 2023/01/19 16:15
- 大学受験 AO、総合型選抜出願時に使用する活動実績報告書について 4 2022/06/27 01:21
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Vba 実数および実数タイプの変...
-
VBAにてメール作成した際、一部...
-
あるプログラムのコマンドライ...
-
パックマンプログラム
-
Notepad++の関数リスト表示でC...
-
VBAが止まります。
-
「Outlookが他のプログラムによ...
-
自動クエリとはどういうもので...
-
これはDos攻撃になりますか?
-
Excelで4096点以上のFFTの方法
-
VBでのPublic変数につ...
-
Excelに埋め込んだVBAのプログ...
-
VBAでユーザーフォームが自動的...
-
読み込み中にアクセス違反が発...
-
寿命
-
セルフイメージを高める21日...
-
binファイルってiphone専用です...
-
プログラムのループの周期を設...
-
RSAのCプログラム
-
自作のプログラムがウイルスと...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あるプログラムのコマンドライ...
-
Excelで4096点以上のFFTの方法
-
「Outlookが他のプログラムによ...
-
Excelに埋め込んだVBAのプログ...
-
VBAにてメール作成した際、一部...
-
Notepad++の関数リスト表示でC...
-
自動クエリとはどういうもので...
-
読み込み中にアクセス違反が発...
-
PICマイコンのコピー(クローン...
-
XnViewにwebpを「いつも開く」...
-
未使用の変数を一括検索する方法
-
VBAでユーザーフォームが自動的...
-
UWSCで指定のフォルダを開きたい。
-
パックマンプログラム
-
このプログラミング誰か教えて...
-
モジュール、アプリケーション...
-
Vba UserFormを前面に出す方法...
-
特定のwebサイトのタイトルや記...
-
ドロップダウンリストの文字を...
-
テキストボックスのエンターキ...
おすすめ情報