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

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


10
なぜ私たちのほとんどが「i」をループカウンター変数として使用するのですか?
なぜ私たちの多くが同じ変数名を使用してこの同じパターンを繰り返すのかを考えたことはありますか? for (int i = 0; i < foo; i++) { // ... } 私が今まで見てきたほとんどのコードはi、繰り返し変数としてj、kなどを使用しているようです。 私はどこかからそれを拾ったと思うが、なぜこれがソフトウェア開発でそれほど普及しているのだろうかと思う。それは私たち全員がCから拾ったものなのでしょうか、それともそのようなものですか? 頭の後ろでしばらくかゆみがありました。

19
機能が短すぎますか?
同じロジックを複数回記述していることに気付くたびに、通常、それを関数に固定するため、アプリケーション内でそのロジックを維持する必要がある場所は1つだけです。副作用は、次のような1行または2行の関数になることです。 function conditionMet(){ return x == condition; } または function runCallback(callback){ if($.isFunction(callback)) callback(); } これは怠け者ですか、それとも悪い習慣ですか?これは、非常に小さなロジックの関数呼び出しの数が多くなるためです。

14
解決策は可能な限り一般的であるか、可能な限り具体的である必要がありますか?
「タイプ」属性を持つエンティティがあるとします。可能なタイプは20以上あります。 ここで、タイプをA-> Bから変更できるものを実装するように求められます。これは唯一のユースケースです。 したがって、有効なタイプである限り、タイプの任意の変更を許可するものを実装する必要がありますか?または、要件ごとにA-> Bからの変更のみを許可し、B-> AまたはA-> Cなどの他のタイプの変更を拒否する必要がありますか? 両方の長所と短所を見ることができます。一般的な解決策は、将来同様の要件が発生した場合の作業が少なくなることを意味しますが、間違っている可能性が高くなります(ただし、これで発信者を100%制御しますがポイント)。 特定のソリューションではエラーが発生しにくくなりますが、同様の要件が発生した場合、今後さらに作業が必要になります。 優れた開発者は、将来の拡張が容易になるように、変更を予測してシステムを設計する必要があると聞き続けていますが、これは一般的な解決策のように思えますか? 編集: それほど具体的ではない例に詳細を追加する:この場合の「汎用」ソリューションは、「特定」ソリューションよりも作業が少なくて済みます。特定のソリューションでは、古いタイプと新しいタイプの検証が必要です。新しいタイプのみを検証する必要があります。

5
同じid属性を持つ2つのHTML要素:どれほど悪いのでしょうか?
Googleマップのソースコードを参照するだけです。ヘッダーには、id = "search"の2つのdivがあり、一方にはもう一方が含まれ、jstrack = "1"属性もあります。次のようにそれらを分離するフォームがあります: <div id="search" jstrack="1"> <form action="/maps" id="...rest isn't important"> ... <div id="search">... これはグーグルなので、間違いではないと思います。 それでは、このルールに違反することは本当にどれほど悪いことなのでしょうか?CSSとDOMの選択に注意している限り、クラスのようなIDを再利用してみませんか?誰かがこれを意図的に行っていますか?

12
1つの製品またはソフトウェアの開発に複数のプログラミング言語が使用されるのはなぜですか?
私は最近、コンピューターサイエンスの修士号を取得することを目指している大学院生です。私は本当に興味をそそられ、それらに貢献することを勧める複数のオープンソースプロジェクトに出会いました(CloudStack、OpenStack、moby、Kubernetesなど)。それらの大部分に共通していることの1つは、複数のプログラミング言語(Java + Python + GoまたはPython + C ++ + Rubyなど)を使用していることです。複数のプログラミング言語が互いに通信するためにどのように作られているかを扱っているこの他の質問をすでに見てきました:2つの異なる言語を持つ2つの異なるプログラミングを相互作用させる方法は? 企業に複数のプログラミング言語の使用を促す要件を理解したいと思います。ソフトウェアアーキテクトまたはプロジェクトリーダーが「タスク1に言語Xを使用し、タスク2に言語Yを使用することを提案しています」と言う要件または要件のタイプは何ですか?同じ製品またはソフトウェアで複数のプログラミング言語が使用されている理由を理解できないようです。

16
将来必要になる可能性がある場合に備えて、冗長コードを追加する必要がありますか?
正しくも間違って、私は現在、コードを可能な限り堅牢にするように常に努めるべきだと考えています。これは、今は役に立たないことがわかっている冗長コード/チェックを追加することを意味しますが、 x数年後かもしれません。 たとえば、私は現在、次のコードを含むモバイルアプリケーションに取り組んでいます。 public static CalendarRow AssignAppointmentToRow(Appointment app, List<CalendarRow> rows) { //1. Is rows equal to null? - This will be the case if this is the first appointment. if (rows == null) { rows = new List<CalendarRow> (); } //2. Is rows empty? - This will be the case …

6
メソッドvs機能vs手順
簡単な質問ですが、このような猛烈さで定義されたこれらの3つの用語をよく耳にしますが、これは長年にわたって異なることを意味することが知られています。 「手順」、「方法」、「関数」、「サブルーチン」などの「正しい」定義とは何ですか?

15
インタビューでデータ構造が非常に重要なのはなぜですか?[閉まっている]
大学を卒業したとき、データ構造がそれほど強くなかったことを告白しなければなりません。卒業中のキャンパス内の配置を通して、Amazon、Microsoftなどの大企業のほとんどがデータ構造に主に焦点を当てていることを目撃しました。データ構造が卒業生に期待される唯一のものであるかのように見えます。 正直に言うと、私はそれについて悪いと感じました。良いコードを書きます。私はコーディングの標準設計パターンに従います。データ構造を使用しますが、ArrayList、LinkedListなどのJava公開APIのように表面的なレベルで使用します。 おそらくJavaのバックグラウンドのために、当時、オブジェクトやインスタンスなどのオブジェクト指向プログラミングの観点から話をしたときのみ、コードの効率とロジックを理解していましたが、ビットとバイトのレベルにドリルダウンすることはありませんでした。私は、このデータ構造の知識不足のために、人々に私を見下して欲しくありませんでした。 では、なぜデータ構造にこれらすべての重点が置かれているのでしょうか?

22
自動プログラミング:コードを書くコードを書く[終了]
The Pragmatic Programmerの本を読んだ後、私が最もおもしろいと思った議論の1つは、「コードを書くコードを書く」ことでした。 ネット上でそれ以上の説明や記事を探してみましたが、このテーマに関するいくつかの良い記事を見つけましたが、特定のコード実装や良い例はまだ見つかりませんでした。 それはまだあまり一般的な議論ではなく、ドキュメントが欠けているか、多くの人々に受け入れられていないように感じます。それについてもっと知りたいです。 このテーマについてどう思いますか?生産性を本当に向上させるものですか?本、ブログ、スライドショーなどのテーマに関する良いリソースは何ですか? いくつかのコード例は、その実装をよりよく理解できるようにするために大いに評価されるでしょう。 メタプログラミング、生成的プログラミング、コード生成など、関連するさまざまなプログラミングテクニックに関するwikiページを次に示します。


30
どのような「ベストプラクティス」が常にベストとは限らないか、そしてその理由は何ですか?[閉まっている]
「ベストプラクティス」は業界のいたるところにあります。「コーディングのベストプラクティス」のGoogle検索では、ほぼ150万の結果をアップになります。このアイデアは多くの人に快適さをもたらすようです。指示に従うだけで、すべてがうまくいきます。 ベストプラクティスについて読んだとき-たとえば、最近Clean Codeのいくつかを読んだだけで-緊張しました。これは、このプラクティスを常に使用する必要があるということですか?添付されている条件はありますか?それが良い習慣ではないかもしれない状況はありますか?問題についてさらに学ぶまで、どうすれば確実に知ることができますか? Clean Codeで言及されているプラ​​クティスのいくつかは私と相性がよくありませんでしたが、それが悪い可能性があるからなのか、それとも私の個人的な偏見によるものなのかは正直わかりません。ハイテク業界の多くの著名人がベストプラクティスがないと考えているように思われることを知っているので、少なくとも私のしつこい疑念が良い会社に私を置きます。 読んだベストプラクティスの数は多すぎて、ここにリストしたり、個々の質問をしたりすることはできないため、これを一般的な質問として言いたいと思います。 「ベストプラクティス」として一般的にラベル付けされているコーディングプラクティスは、特定の状況下で次善または有害な場合があります。それらの状況は何ですか?なぜ彼らは練習を貧しいものにしますか? 具体的な例や経験について聞きたいです。

30
プログラミングにおける有害な誘惑
ちょうど好奇心が強い、プログラミングでどんな誘惑があなたのプロジェクトで本当に有害であることが判明しましたか? 何かをしたいという衝動を実際に感じて、それがプロジェクトに利益をもたらすと信じているとき、または信じられないように自分をだまして、1週間後に実際の問題を解決していないが、代わりに新しい問題を作成した、または、最良の場合、目に見える影響なしにあなたの内なる獣を喜ばせました。 個人的には、悪いコードをリファクタリングしないのは非常に難しいと思います。私は多くの悪いレガシーコードを扱っていますが、リファクタリングが何も壊さないことを証明するためのテストがないとき、それに触れないようにするには深呼吸が必要です。 ユーザーインターフェイスのもう1つの悪魔は、UIレイアウトの変更を楽しんでいるという理由だけで、文字通り何時間もUIレイアウトの変更に費やすことができることです。時々私はユーザビリティに取り組んでいると自分自身に言いますが、真実はボタンを動かすのが大好きです。 あなたのプログラミングの悪魔とは何ですか?また、どのように回避しますか?

13
クラスの実装について他のプログラマに警告する方法
「特定の方法で使用しなければならない」クラスを書いています(すべてのクラスが...する必要があると思います)。 たとえば、fooManagerクラスを作成します。これには、などへの呼び出しが必要Initialize(string,string)です。そして、例をさらに進めるために、そのThisHappenedアクションをリッスンしなければクラスは役に立たないでしょう。 私のポイントは、書いているクラスにはメソッド呼び出しが必要だということです。しかし、これらのメソッドを呼び出さなければ、コンパイルは正常に終了し、空の新しいFooManagerが作成されます。ある時点で、クラスとその動作に応じて、機能しないか、クラッシュする可能性があります。私のクラスを実装するプログラマーは明らかに内部を見て、「ああ、Initializeを呼び出さなかった!」と気付くでしょう。 しかし、私はそれが好きではありません。私が理想的に望んでいるのは、メソッドが呼び出されなかった場合にコンパイルしないコードです。それは単に不可能だと思います。または、すぐに表示され、明確になるもの。 私がここで持っている現在のアプローチに悩まされているのは次のとおりです。 クラスにプライベートブール値を追加し、クラスが初期化されている場合は必要なすべての場所を確認します。そうでない場合は、「クラスが初期化されていません.Initialize(string,string)。本当に呼び出していますか?」という例外をスローします。 私はそのアプローチで少し大丈夫ですが、多くのコードがコンパイルされ、最終的にはエンドユーザーには不要になります。 また、Initiliaze呼び出すだけのメソッドよりも多くのメソッドがあると、コードがさらに増えることがあります。パブリックメソッド/アクションが多すぎないようにクラスを維持しようとしていますが、それは問題を解決するものではなく、単に合理的なものにするだけです。 私がここで探しているのは: 私のアプローチは正しいですか? より良いものはありますか? 皆さんは何をしますか/アドバイスしますか? 非問題を解決しようとしていますか?同僚から、使用する前にクラスをチェックするのはプログラマーだと言われました。私は敬意を持って同意しませんが、それは別の問題です。 簡単に言えば、そのクラスが後で、または他の人によって再利用されたときに、呼び出しを実装することを決して忘れない方法を見つけようとしています。 明確化: ここで多くの質問を明確にするために: 私は間違いなくクラスの初期化の部分について話しているだけでなく、それは一生です。同僚がメソッドを2回呼び出さないようにし、Yの前にXを呼び出すようにします。Assertsのアイデアは本当に気に入りましたが、Assertsが常に可能であるとは限らないので、他のアイデアを混ぜる必要があると確信しています。 私はC#言語を使用しています!どうして私はそれを言及しなかったのですか?!私はXamarin環境にいて、PCL、iOS、Android、およびWindowsプロジェクトを含むソリューションで通常6〜9個のプロジェクトを使用してモバイルアプリを構築しています。私は約1年半(学校と仕事を合わせて)開発者でした。そのため、時々ばかげた声明や質問があります。ここではおそらくすべては無関係ですが、情報が多すぎることは必ずしも悪いことではありません。 プラットフォームの制限と依存関係注入の使用のため、コンストラクターに必須のすべてを常に配置できるわけではありません。Interfaces以外のパラメーターはテーブル外にあります。または、私の知識が十分でない可能性があります。ほとんどの場合、初期化の問題ではありませんが、 彼がそのイベントに登録したことを確認するにはどうすればよいですか? 彼が「ある時点でプロセスを停止する」ことを忘れなかったことをどのように確認できますか ここで、私は広告取得クラスを覚えています。広告が表示されるビューが表示されている限り、クラスは毎分新しい広告を取得します。そのクラスは、Adを表示できる場所に構築するときにビューを必要とします。これは明らかにパラメーターに入れることができます。ただし、ビューが消えたら、StopFetching()を呼び出す必要があります。そうしないと、クラスは、そこにさえないビューの広告を取得し続けますが、それは悪いことです。 また、このクラスには、たとえば「AdClicked」など、リッスンする必要があるイベントがあります。聞いていない場合はすべて正常に動作しますが、タップが登録されていない場合、そこでの分析の追跡が失われます。ただし、広告は引き続き機能するため、ユーザーと開発者には違いが見られず、アナリティクスのデータは間違っています。それは避ける必要がありますが、開発者がtaoイベントに登録する必要があることを開発者がどのように知ることができるかわかりません。しかし、これは単純化された例ですが、アイデアは「彼が利用可能な公開アクションを使用することを確認する」ことであり、当然のことです!

14
プログラムをゼロから完全に再構築した場合、ずっと改善したいという気持ちを常に避けることができますか?[閉まっている]
私はかなりの量のコーディングを学びましたが、それは常に科学環境(コンピューターサイエンスではない)で行われ、誰も私を正しい方向に導くことなく完全に独学で学びました。したがって、私のコーディングの旅は...面倒でした。ある種のプログラムを構築するたびに、最終的には、はるかにエレガントに、はるかに効率的に、そしてはるかに柔軟性があり、今後の管理が容易な方法でそれを実現できたことに気付きました。状況によっては、実際に戻って一から物を作り直したことがありますが、通常これは実際には実行できません。これまでの私のプログラムのほとんどは比較的小さいものでしたが、何かを作成するたびに大きなプログラムを完全に書き換えることは非常に面倒です。 私はただこれが普通の経験なのだろうか?そうでない場合、これをどのように防止しますか?事前に計画を立ててみましたが、コードを打ち出すまですべてを実際に予測することはできません。

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