No.3
- 回答日時:
#2さんと同じですが、「可読性が高い」
一行に詰め込まず、何行にもコマンドを分けて書いてあれば、処理の流れが追えますし、デバッグもしやすいです。
もうひとつ、「他のモジュールやアプリから独立性が高い」
たとえ、冗長になっても、変数の定義や読み込みをいちいち行っていれば、他のモジュールの設計変更があっても影響が及ばず、改修作業が楽です。それはすなわち修正ミスによるバグの発生防止にもつながります。
ただ、プラットホーム・プログラミングの場合は、変数の受け渡しが仕様書にしっかり書いてあるので、よっぽどだ丈夫とは思いますが・・・。
No.4
- 回答日時:
「良いプログラム」って何だろうね?
ぶっちゃけた事を言うと、それは「貴方が決める事」であって、他人に問うことではない、と言う事は言える。
まぁ、なんかのSurveyのつもりかもしれないけど。
例えば、だぜ。
大まかにユーザーとプログラムする側に分けてみよう。
ユーザーが言う「良いプログラム」とかは、単に「バグがなく」「動作が早く」「UIが分かりやすい」ってのになるだろ。
ユーザー的に言うと「出来たプログラム」がどういう動作なのか、が重要なんであって、「どう書かれてるのか」ってのは関係ねぇんだよな。
言っちゃえば「何の言語で書かれてるのか」も関係がない。「可読性」なんかも関係がない。
と言う事は、プログラマ側が考える「良いプログラム」とユーザーが評価する「良いプログラム」ってのは全く関係がない、ってこった。
どっちの立場で言ってるのか、ってのが明確じゃないとどうにも答えづらい話になるわな。
例えば、だぜ。
ユーザーの立場から言うと、「ディスク専有スペースが少なく」「メモリ占有率も低く」「高速に動作する」プログラムが「良いプログラム」って事になるだろう。
ここで例えばモジュール化、ってのを見てみよう。関数だろうがクラスだろうが構わないけど。
構造化プログラミング言語の雄、C言語がAT&Tで初めて作られた際。AT&Tの連中はC言語を使う事を嫌がったそうだ。何故なら、「構造化プログラミング」技法で書かれたプログラムは低速化する、と信じてた人たちが多かったから、だそうだ。
事実、C言語開発者のデニス・リッチー達はその事実を知ってたそうだ。現代のコンピュータは速いんで全然気にならないレベルになってるけど、モジュール化するとプログラムは遅くなる。つまり明らかに「当時のハードウェアのレベル(って事はメインフレームだ)」だとユーザーが不利益を被ってたわけだよな。
デニス・リッチー達は「そんな事は起こり得ない」と「嘘を言って」まずはAT&T内で自分達以外のプログラマを説得しまくったそうだ。
当時のプログラマは圧倒的にマシン語/アセンブリ言語を使ってて、良くってFortranを使ってた。今で言う「バッチ式のプログラム」を書いてて、それで高速なプログラムを書く事が「良い事だ」って思ってて、それはそれでメリットがあったわけだよな。それが「良いプログラム」だった。
一方、デニス・リッチー達の「布教」のお陰で、徐々にAT&T内でのC言語の使用率が上がっていった。モジュール化すると「書きやすい」って事にプログラマ側が気づいていった、って事だ。
ただし、そこではトレードオフが生じる。それは、ユーザー側がある意味「不利益を生じる」って事だよな。出来たプログラムはアセンブリ/マシン語で書かれたプログラムより低速化する。
分かる?「プログラマ側にとって書きやすくわかりやすくなった」開発環境が直にユーザー側にメリットがある、とは限らない、と言う事を。今はハードウェアが速くなったから気にならなくなったけど、立場によっては「良いプログラム」の意味が変わるんだ。
同じような事は90年代初頭までのゲーム機でも起きてたでしょ?当時のゲームプログラマはアセンブリゴリゴリ書いてたし。「コンパイラで高級言語で書かれたソースコードをコンパイルする」ってのはゲームの低速化に繋がる、って信じられてたし事実そうだった。だから殆どのゲームプログラマはバリバリのアセンブリユーザーだったし、「コンパイラが自動生成したアセンブリのコード」なんざ全然信用してなかった。「絶対低速化する無駄がある」って思ってたし、そんな軟弱な事をするんだったらアセンブリを直書きするのが性技もとい正義だった。
UIに付いても考えてみよう。
例えばWindowsで良くあるGUIの「決定ボタン」とか。何らかの設定を変えて「決定ボタン」をクリックすると設定の改変が確定する。
ところが、大方のLinuxのGUIだとこの「決定ボタン」が存在しないケースが散見する。設定編集のラジオボタンなんかを選ぶともう「設定改変」が反映するようなインターフェースになってるブツが結構多いんだよ。
実の事言うと、「余計なプロセスを要求しない」Linuxのスタイルの方が「プログラムする側」としては「良い」って事になる。プログラマ側の観点としては「無駄なコードを実装しない」方がシンプルで「良い」って事になるわけだ。
一方、ユーザー側の立場から言うと「気持ち悪い」だろ(笑)。一体いつ、どのプロセスで「設定変更」が実行されたか分からん。エルゴノミクス的な観点だと、敢えての「決定プロセス」があった方がいいんだわ。
こう言うカンジで、特にユーザー側が思う「良いプログラム」とプログラムを組む方が考える「良いプログラム」はしばしば同じにならないんだ。
他にも、オープンソースでのプログラマだとEmacs愛用者が多いんだけど、Emacsのキーバインドを採用したWebブラウザとか、一体誰が使いたがるんだ、なんつー事も起きる(過去のFirefoxがそうだった)。
いずれにせよ、「一般的な話として」の良いプログラム、なんて定義出来ないよね。
貴方の立場で、貴方が考える「良いプログラム」が何なのか、って定義がないと条件なんて一般論では出てこないと思う。
No.5
- 回答日時:
よいプログラムってことではないですけど、
読みやすいプログラムなら
「リーダブルコード ―より良いコードを書くためのシンプルで実践的なテクニック (Theory in practice)」という本を読んでみてください。
No.6ベストアンサー
- 回答日時:
良いプログラムの「良い」にはいろんな観点が有る。
私の今携わったいるプロジェクトでは
①機能追加が簡単
②仕様変更が容易
が良いプログラム。
枝葉末節よりプログラムの「構造」が大事。
個別のコードよりモジュール/コンポーネントの「設計」
が様々な原理やベストプラクティスを満たしていることが大事。
IOCとかをきちんと使ってモジュール間の依存性をきれいに
分離できてるプログラムは良いプログラム。
その辺がぐちゃぐちゃなのはごみ。
但し、こうした優れたプログラムは力量の無いプログラマには
難解だ。必ずしも読みやすくはない。依存性を無くすための
仕掛けはちゃんと勉強しないと何が書いてあるかわからない。
頭が痛い問題です。
No.7
- 回答日時:
#3ですが、#6さんに1票。
確かにモジュール間の独立性を担保すると、可読性は落ちますね。
となると、最優先は、#6さんのおっしゃる通りだと思います。
今は、オンラインで機能更新とかやる時代です。それをプラグインで実現するには、モジュール間の独立性の担保が重要ですね。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- C言語・C++・C# 良いプログラムの条件 5 2023/03/03 07:39
- Visual Basic(VBA) VBAにてメール作成した際、一部指定箇所のみ赤文字にしたいです。 下記の内容ですと作成されたメール本 1 2022/04/27 13:31
- サーバー 無料のレンタルサーバで、スクレイピング(?)はできますか? 2 2022/05/07 10:09
- 教えて!goo 最近、教えて!gooアンドロイドアプリの動作具合が良くない件について、いつ頃にアプリのプログラムの修 5 2022/10/05 22:00
- Visual Basic(VBA) VBAが止まります。 2 2022/09/02 14:02
- その他(プログラミング・Web制作) AtCoder プログラムにまだまだ素人の私にはAtCoderのビギナーアルゴリズム問題もとても難し 2 2023/07/29 16:34
- C言語・C++・C# 参考にいろいろとc言語、c++言語プログラミングでレジストリーを操作したいのですが、無料配布のc++ 3 2022/12/22 01:49
- その他(プログラミング・Web制作) pythonのプログラムについての質問です。 1 2023/05/26 10:31
- C言語・C++・C# 現在プログラムを作っているのですが、実行したときに写真のように結果が表示されるのですが、これを CH 2 2023/01/18 16:22
- C言語・C++・C# c言語 1 2022/11/09 13:05
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Excelで4096点以上のFFTの方法
-
Notepad++の関数リスト表示でC...
-
自動クエリとはどういうもので...
-
あるプログラムのコマンドライ...
-
未使用の変数を一括検索する方法
-
インクリメント演算子のみを用...
-
テキストボックスのエンターキ...
-
UWSCで指定のフォルダを開きたい。
-
VBAにてメール作成した際、一部...
-
「Outlookが他のプログラムによ...
-
main関数を先頭に置くデメリット
-
CASLIIのプログラム(並び替え...
-
Vba 実数および実数タイプの変...
-
「コンポーネントが見つかりま...
-
2次関数のグラフを書くには・...
-
メモリ上にプログラムをロード...
-
エクセルとワードをデスクトッ...
-
VB6から他のプログラムを強制終...
-
COMポートが開けません。
-
Excelに埋め込んだVBAのプログ...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
あるプログラムのコマンドライ...
-
Excelで4096点以上のFFTの方法
-
Excelに埋め込んだVBAのプログ...
-
「Outlookが他のプログラムによ...
-
VBAにてメール作成した際、一部...
-
Notepad++の関数リスト表示でC...
-
自動クエリとはどういうもので...
-
読み込み中にアクセス違反が発...
-
PICマイコンのコピー(クローン...
-
XnViewにwebpを「いつも開く」...
-
未使用の変数を一括検索する方法
-
VBAでユーザーフォームが自動的...
-
UWSCで指定のフォルダを開きたい。
-
パックマンプログラム
-
このプログラミング誰か教えて...
-
モジュール、アプリケーション...
-
Vba UserFormを前面に出す方法...
-
特定のwebサイトのタイトルや記...
-
ドロップダウンリストの文字を...
-
画像を読み込むのと取り込むの...
おすすめ情報