タグ付けされた質問 「programming-practices」

プログラミングプラクティスは、ソフトウェアの開発で一般的に使用される、またはあまり使用されないプラクティスです。これには、アジャイル開発、かんばん、コーディングのショートカットなどが含まれます。

10
アルゴリズムプログラミングのためのC上のPythonの優先
私は少しアルゴリズムを勉強していて、SPOJ.pl TopCoderなどのサイトを見てきました。プログラマーは通常、ほとんどのアルゴリズムプログラミングコンテストでCまたはC ++を好むことがわかりました。 今、私は最近いくつかの問題を抱えています。私は少しのCとPythonの両方を知っています。コードを書き込もうとすると、ほとんどのアルゴリズムでCよりPythonを好むようです。CIでコードを書くために座るたびに、約15分後にあきらめます。これは面倒で、Pythonに移行する傾向があるためです。マトリックスポインターなどを渡すことは、無駄な時間の無駄であるように思われ、実際にアルゴリズム自体について考えるために利用できます。 今、私はCが非常に重要な言語であり、多くのプログラマーのパンとバターであ​​ることを多くの人々から知っています。 私が知りたかったのは、私のこのアプローチに欠点/結果/欠点などがあるかどうかでした。 これはPython対Cの議論ではありません。これは、使いやすさのためにCよりもPythonを好むというこの特定の慣行が、長期的には私や他のプログラマー/コンピューター科学者にどのように影響するかについての質問です。 私は、これらの言語を業界で使用したことのある人々から、および/または大規模なソフトウェア/ライブラリなどを開発したいのです。

4
アプリケーションは電力消費に大きな影響を及ぼしますか?
単一の汎用アプリケーションで、実行中のデバイスの電力消費に影響を与えることができるものはありますか? 個々のアプリケーションの最適化が一般的な方法で消費電力にどのように影響するかについてよく知らないのですが、アプリケーションを作成するさまざまなアプローチが実行中のデバイスの消費電力に影響するかどうかを誰かが説明できますか? つまり、機能的にまったく同じことを行い、さまざまな方法で記述された単一のプログラムがデバイスの電力消費に大きく影響するのではなく、デバイスの電力消費に大きく影響します。

2
最新のC ++パラダイムの概要 [閉まっている]
閉まっている。この質問はトピック外です。現在、回答を受け付けていません。 この質問を改善したいですか? 質問を更新して、 Software Engineering Stack Exchangeのトピックになるようにします。 4年前に閉鎖されました。 私は8〜10年前にC ++を広範囲に記述していました。それ以来、専門的な理由でC#に移行しました。しかし、時々私は次のような声明を見ます 「まだポインタ参照を手動で追跡している場合は、間違っています」 または 「C ++は、RAIIのような最新のコンセプトを使用しており、回復中のC開発者のようにメモリを手動で割り当てない限り、完全に安全です。」 どちらも10年前の標準的な手順でした。最近、C ++がかなり改善されているのを見てきました。特にC ++ 0xには、いくつかの新しい機能があるようです。「C / old C ++」プログラマーが「最新」のC ++パターンとプラクティスに追いつくための最適なリソースは何ですか?

4
パターンベースのプログラミングとは何ですか?
プログラミングのパターンとアンチパターンに対する強迫観念を誰かが説明できますか?どんなパターンが何を意味するのか全くわからないからです。プログラミングタスクに直面したとき、問題について少し考え、関連すると思われるデータ構造を書き留め、ソリューションのプロトタイプを作成し、いくつかのモジュールを分離して繰り返します。プロセスのどこにも「ああ、ここにFunkyLookyTasticパターンが必要」とは思いません。

4
依存関係の注入は、ctorで実行するか、メソッドごとに実行する必要がありますか?
考慮してください: public class CtorInjectionExample { public CtorInjectionExample(ISomeRepository SomeRepositoryIn, IOtherRepository OtherRepositoryIn) { this._someRepository = SomeRepositoryIn; this._otherRepository = OtherRepositoryIn; } public void SomeMethod() { //use this._someRepository } public void OtherMethod() { //use this._otherRepository } } に対して: public class MethodInjectionExample { public MethodInjectionExample() { } public void SomeMethod(ISomeRepository SomeRepositoryIn) { //use SomeRepositoryIn } …

2
コードの抽象化をどのように処理しますか?
新しいコードベースを見るとき、ボトムアップのアプローチから始めたいと思います。 1つのファイルを理解してから、次の抽象化に移動します。 しかし、多くの場合、低レベルの抽象化が行っていることを忘れています。 だから、私はこの時点で、私が以前完全に理解していたファイルに戻って、それらを再学習しようとするほぼ無限のループにいることに気付くでしょう。私の頭の中で互いに接続する他の多くの抽象化をジャグリングしようとしながら。 この状況に対処するためのより良い戦略はありますか? 下位レベルの詳細を忘れて、それを当然のことと考えるべきですか?しかし、それでも、現在の抽象化が何をしているのかを理解するには、以前に低レベルの抽象化を理解しておく必要が何度もあります。

5
古いコードを更新して新しい言語構成を使用する必要がありますか、それとも古い構成を使用する必要がありますか?
プログラミング言語が機能で成長する前に、ずっと前に書かれたまだ機能しているコードでいくつかの拡張を行いたいです。理論的には、プロジェクト全体が最新バージョンの言語を使用しています。ただし、この特定のモジュール(および実際には他の多くのモジュール)は、まだ古い方言で書かれています。 したほうがいい: 触れる必要のないコードの部分には触れませんが、パッチの記述を容易にするが、モジュール内の他の場所の類似の状況では使用されない新しい言語機能を使用してパッチを記述しますか?(これは私が直感的に選択するソリューションです。) 数年が経過したという事実を無視し、パッチの作成中にコードの残りの部分で使用されるスタイルを反映して、何年も前に同じタスクを実行しているかのように効果的に動作しますか?(このソリューションは直感的にばかげていると思いますが、「良いコード」について話す誰もが大騒ぎするので、すべてのコストで一貫性を保つことになります。おそらくこれが私がすべきことです。) モジュール全体を更新して、新しい言語構成と規則を使用しますか?(おそらくこれが最善の解決策ですが、別のタスクに費やすことができる多くの時間とエネルギーが必要になる場合があります。)

4
テスト駆動開発を行う方法
アプリケーション開発の経験はたった2年です。この2年間で、開発に対する私のアプローチは次のようになりました。 要件を分析する Identity Coreコンポーネント/オブジェクト、必要な機能、動作、プロセス、およびそれらの制約 クラスの作成、クラス間の関係、オブジェクトの動作と状態の制約 機能を作成し、要件に従って動作上の制約を使用して処理する アプリケーションを手動でテストする 要件の変更によりコンポーネント/機能が変更された場合、アプリケーションを手動でテストします 最近、TDDを紹介し、開発されたコードが存在する強力な理由があり、展開後の問題の多くが軽減されるため、これは開発を行うのに非常に良い方法であると感じました。 しかし、私の問題は、最初にテストを作成できないことです。むしろ、実際にコンポーネントを作成する前に、コンポーネントを特定し、テストを作成しています。私の質問は 私はそれをやっていますか?そうでない場合は、正確に変更する必要があります 書いたテストで十分かどうかを確認する方法はありますか? 1 + 1 = 2に相当する可能性のある非常に単純な機能のテストを記述するのは良い習慣ですか、それとも単なるやりすぎですか? 機能を変更し、それに応じて要件が変更されたかどうかをテストするのは良いですか?

7
ほとんどが1つの正規表現で構成される大きな関数をリファクタリングする必要がありますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 約100行にわたる関数を作成しました。それを聞いて、あなたはおそらく私に単一の責任について教えて、私にリファクタリングを促すように誘惑されるでしょう。これは私の本能でもありますが、問題は次のとおりです。関数は 1つのことを行います。複雑な文字列操作を実行し、関数の本体は主に1つの冗長な正規表現で構成され、文書化された多くの行に分割されます。正規表現を複数の関数に分割すると、実際に言語を切り替えているため、実際に読みやすさが失われ、正規表現が提供する一部の機能を利用できなくなるためです。ここに私の質問があります: 正規表現を使用した文字列操作に関しては、大きな関数本体は依然としてアンチパターンですか?名前付きキャプチャグループは、機能と非常に似た目的を果たしているようです。ところで、正規表現を通るすべてのフローのテストがあります。

2
どちらが良いですか:選択文字列パラメータを持つゲッターの束または1つのメソッド?
私たちの知識領域には、素足で圧力記録プレートの上を歩く人々が含まれます。センサーデータで人間の足が認識されると、「Foot」クラスのオブジェクトを生成する画像認識を行います。 足のデータに対して実行する必要がある計算がいくつかあります。 さて、どのAPIの方が良いでしょう: class Foot : public RecognizedObject { MaxPressureFrame getMaxPressureFrame(); FootAxis getFootAxis(); AnatomicalZones getAnatomicalZones(); // + similar getters for other calculations // ... } または: class Foot : public RecognizedObject { virtual CalculationBase getCalculation(QString aName); // ... } 今、私が思いつくことができる多くの賛否両論がありますが、どれが最も重要かを本当に決めることはできません。これはエンドユーザーアプリケーションであり、当社が販売するソフトウェアライブラリではありません。 何かアドバイス? 最初のアプローチのプロには次のようなものがあります。 KISS-すべてが非常に具体的です。APIですが、実装も同様です。 強く型付けされた戻り値。 このクラスを継承するのは簡単です。上書きすることはできず、追加するだけです。 APIは非常に閉じられており、何も入れられず、オーバーライドされることもありません。 いくつかの短所: 新しい計算がリストに追加されるたびに、ゲッターの数が増えます APIは変更される可能性が高く、重大な変更が導入された場合、新しいAPIバージョンであるFoot2が必要です。 他のプロジェクトでクラスを再利用する場合、すべての計算が必要になるとは限りません …

3
子から親へのリンク-悪い考えですか?
私は私の親がそれが子供だと知っている状況がありますが(duh)、子供が親を参照できるようにしたいです。その理由は、子供が自分がそう感じたときに、自分自身を最も重要または最も重要でないものとして指定できるようにすることです。子がこれを行うと、親の子の上部または下部に移動します。 過去に、親に対して参照するために子のWeakReferenceプロパティを使用しましたが、面倒なオーバーヘッドが追加されると感じていますが、それが最善の方法かもしれません。 これは悪い考えですか?この機能をどのように異なる方法で実装しますか? 更新1:コンテキストの追加。これはレンダリングシステムなので、親コンテナはグループ化されたウィンドウのリストです。「私は最も重要です!」という子項目(ウィンドウ)基本的に、残りのウィンドウの上部にレンダリングしたい。 親は、これらの子をグループ化するための単なる論理コンテナーです。イベントを追加して、リクエストが一番上にあることを通知するのは良い考えです。しかし、実装(子が親に対して何をしたいのか)は別として、なぜあなたは子→親リンクを持ちたくないのでしょうか?二重にリンクされたリストがこれを行うので、人々は何かを行き来できます。

2
廃棄するために1つを構築する対第2システム効果
一方では、「捨てる人を作る」というアドバイスがあります。ソフトウェアシステムを完成させて最終製品を確認した後にのみ、設計段階で何がうまくいかなかったかを理解し、実際にそれを行う方法を理解します。 一方、設計されている同じ種類の2番目のシステムは通常、最初のシステムよりも悪いという「2番目のシステム効果」があります。最初のプロジェクトには収まらず、2番目のバージョンに組み込まれた多くの機能があり、通常は非常に複雑で過度に設計されています。 ここで、これらの原則の間に矛盾はありませんか?問題に対する正しい見解は何ですか?また、これら2つの境界はどこですか? 私は、これらの「良い習慣」が、フレッド・ブルックスによる独創的な本「The Mythical Man-Month」で最初に宣伝されたと信じています。 これらの問題のいくつかはアジャイル方法論によって解決されることを知っていますが、根本的には、問題は依然として原則のままです。たとえば、重要な設計変更を3回スプリントすることはありません。

9
プログラマーは、コードの表現力を高めるためにレッスンを書くべきですか?
プログラマーは作者であり、抽象的な思考や概念を表現するためのコードを書いているので、他のプログラマーは問題や誤解なく良いコードを読む必要があるので、プログラマーはより良いコードを書くためにレッスンを書くべきですか? 概念と現実世界の問題/エンティティを抽象化することは、優れたコードを書く上で重要な部分です。また、コーディングに使用される言語の優れた習熟により、プログラマーは自分の考えをより簡単に、またはより良い方法で表現できるはずです。また、コードを改善するためにコードを記述または書き換えようとすると、関数、変数、またはデータ構造の名前を決定するのに多くの時間を費やすことができます。 これは、異なるプログラマー間の誤解の原因となることが多い、複数の意味を持つコードの記述を避けるのにも役立つと思います。コードは常にその機能を明確に表現する必要があります。

7
クリーン終了のゼロ以外の終了ステータス
問題のプログラムが正常に実行された場合、ゼロ以外の終了コードを返すことは許容されますか?たとえば、次の(のみ)を実行する単純なプログラムがあるとします。 プログラムはN個の引数を取ります。終了コードmin(N、255)を返します。Nはプログラムに対して有効であることに注意してください。 より現実的なプログラムは、異なることを示すプログラムを正常に実行するために異なるコードを返す場合があります。これらのプログラムは、代わりにこの情報を標準出力などの代わりにストリームに書き込む必要がありますか?

5
monkeypatchingは優れたプログラミング手法と見なされていますか?
私は、モンキーパッチングは、標準的な優れたプログラミング慣行というよりも、迅速で汚れたハックのカテゴリーに属するという印象を受けていました。サードパーティのライブラリのマイナーな問題を修正するために時々使用していましたが、一時的な修正と考え、サードパーティのプロジェクトに適切なパッチを提出しました。 ただし、主流プロジェクト、たとえばGeventのgevent.monkeyモジュールでこの手法が「通常の方法」として使用されているのを見てきました。 モンキーパッチは、主流であり、通常の、受け入れ可能なプログラミングプラクティスになりましたか? 参照:ジェフ・アトウッドによる「人間のためのモンキーパッチング」

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.