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

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

5
テスト駆動開発-納得させてください![閉まっている]
私は、一部の人々がテスト駆動開発の大規模な支持者であることを知っています。私は過去に単体テストを使用しましたが、簡単にテストできる操作、またはおそらく正しいと思われる操作をテストするためだけに使用しました。完全またはほぼ完全なコードカバレッジは、多くの時間がかかるようです。 テスト駆動開発を使用するプロジェクトは何ですか?特定のサイズを超えるプロジェクトにのみ使用しますか? 私はそれを使用する必要がありますか?信じさせて!

5
ネストされたクラスを使用するタイミングと理由
オブジェクト指向プログラミングを使用すると、クラス(ネストされたクラス)内にクラスを作成することができますが、4年のコーディング経験でネストしたクラスを作成したことはありません。 ネストされたクラスは何に適していますか? クラスは、ネストされている場合、プライベートとしてマークでき、そのクラスのすべてのプライベートメンバーに包含クラスからアクセスできることを知っています。変数を含むクラス自体に変数をプライベートとして置くことができます。 では、なぜネストされたクラスを作成するのでしょうか? ネストされたクラスはどのシナリオで使用する必要がありますか、または他の手法よりも使用法の点でより強力ですか?

2
Voyagerミッションのコード開発プロセス?
Voyager 1は2012年8月に星間空間に到達し、現存する最も遠い人工物です。1977年に双子の宇宙船Voyager 2の直後に打ち上げられたVoyager 1は、木星系と土星系を探索し、新月、活火山、外部太陽系に関する豊富なデータを発見しました。 Voyager 1および2は、176年に1回しか発生しない希少な惑星配列を利用するように設計されており、歴史上最もよく旅行された宇宙船のままです。両方の宇宙船には、ゴールデンレコードと呼ばれる一種のタイムカプセルが搭載されています。これは、私たちの世界の物語を地球外生物に描写するために選択された音と画像を含む12インチの金メッキ銅ディスクです。 私は、この任務のためにソフトウェアを構築していた人々の大部分が現在退職していると思いますが、過去35年間でプログラミング、プログラミング言語はこれまでに進歩しました。 35年後、ボイジャーは星間空間に到達しました。何行のコードがあり、どの言語で書かれていますか?このミッションの背後にある開発プロセスは何でしたか(それはまだアクティブです)。 それで、このミッションでのコードのより大きな計画は何でしたか、そしてどの言語でコードベースが書かれていますか?

7
エラーを早期に「キャッチ」するツールとして例外を使用しても大丈夫ですか?
例外を使用して問題を早期に発見します。例えば: public int getAverageAge(Person p1, Person p2){ if(p1 == null || p2 == null) throw new IllegalArgumentException("One or more of input persons is null"). return (p1.getAge() + p2.getAge()) / 2; } 私のプログラムはnullこの関数を決して渡すべきではありません。私はそれをするつもりはありません。しかし、私たち全員が知っているように、プログラミングでは意図しないことが起こります。 この問題が発生した場合に例外をスローすると、プログラムの他の場所でさらに問題が発生する前に、それを見つけて修正することができます。例外はプログラムを停止し、「ここで悪いことが起こったので修正してください」と言っています。これnullがプログラム内を移動する代わりに、他の場所で問題を引き起こします。 さて、あなたは正しいです。この場合、これはただちにすぐにnull発生するNullPointerExceptionため、最良の例ではないかもしれません。 しかし、たとえば次のような方法を検討してください。 public void registerPerson(Person person){ persons.add(person); notifyRegisterObservers(person); // sends the person object to all kinds of …

4
金メッキを停止し、作業開発をリリースするだけで満足する方法[終了]
私が所属する開発チームは、最近アジャイルのプラクティスに従って作業するようになりました。これは、コード(およびドキュメント)のゴールドメッキを止めることができないという事実を個人的に強調しており、その結果、要件をはるかに早く満たすソリューションを提供できたときに、当初の見積もりを上回りました。 私は自分の倫理が強迫観念に接していると思います。私はコードに執着しすぎて、リファクタリングしてn度完成させる前にリリースすることはめったにありません。これに気づいたことを嬉しく思いますが、どのように自分の態度/精神を変えて自分の進歩に満足し、代わりに時間通りにリリースできますか?

12
クラスが「抽象」または「最終/封印」以外のものである必要があるのはなぜですか?
10年以上のjava / c#プログラミングの後、次のいずれかを作成しています。 抽象クラス:そのままインスタンス化されることを意図していないコントラクト。 final / sealedクラス:実装は、他の何かの基本クラスとして機能することを意図していません。 単純な「クラス」(つまり、抽象的でもファイナル/シールドでもない)が「賢明なプログラミング」になる状況は考えられません。 クラスが「抽象」または「最終/封印」以外のものである必要があるのはなぜですか? 編集 このすばらしい記事は、私の懸念を、私ができる以上によく説明しています。

28
ツールへの過度の依存は、あなたが怠zyであることを意味しますか?[閉まっている]
私はuniでC ++のプログラミングを始めましたが、とても気に入りました。次の用語でVB6に変更し、私はそれを嫌っていました。 何が起こっているのかわかりませんでした。ボタンをフォームにドラッグすると、IDEがコードを作成します。 VBが機能する方法が嫌いだったが、C ++で同じことを行うよりも速くて簡単だったとは言えないので、なぜそれが人気のある言語であるかを見ることができます。 今、私はVB開発者をC ++より簡単だと言って怠け者とは呼んでおらず、多くの新しい言語がこのようなC#のような傾向に従っていることに気付きました。 これは、より多くのビジネスが迅速な結果を望んでいるので、より多くの人々がこのようにプログラムし、遅かれ早かれ、私たちが現在プログラミングと呼ぶようなものはないだろうと思うようになります。将来のプログラマーはコンピューターに自分が望むものを伝え、コンパイラーはスタートレックのように彼らのためにプログラムを書くでしょう。 これは、ジュニアプログラマーの十分な情報に基づいていない意見ですか、それともプログラマーは一般的に怠lazで能力が低下していますか? 編集:多くの答えは、なぜ車輪を再発明するのかを言い、私はこれに同意しますが、利用可能な車輪があるとき、人々は車輪の作り方を学ぶことを気にしません。どの言語でもほとんど何でもできる方法をグーグルで検索できますが、デバッグに関しては半分の言語があなたのために多くのことをしますが、エラーを修正する方法のコードが何であるかわかりません。 それは、プログラマーが怠慢になり、能力が低下するという理論を理解する方法です。


4
#ifdefを使用して、開発中に異なるタイプの動作を切り替える
開発中に#ifdefを使用して、さまざまな種類の動作を切り替えることをお勧めしますか?たとえば、既存のコードの動作を変更したい場合、動作を変更する方法がいくつかあります。異なるアプローチをテストおよび比較するには、異なる実装を切り替える必要があります。通常、コードの変更は複雑で、異なるファイルの異なるメソッドに影響を及ぼします。 私は通常いくつかの識別子を導入し、そのようなことをします void foo() { doSomething1(); #ifdef APPROACH1 foo_approach1(); #endif doSomething2(); #ifdef APPROACH2 foo_approach2(); #endif } void bar() { doSomething3(); #ifndef APPROACH3 doSomething4(); #endif doSomething5(); #ifdef APPROACH2 bar_approach2(); #endif } int main() { foo(); bar(); return 0; } これにより、さまざまなアプローチをすばやく切り替えて、ソースコードの1つのコピーだけですべてを実行できます。開発のための良いアプローチですか、それともより良いプラクティスがありますか?

6
個人のPythonプロジェクトをリリース可能なライブラリに変える
私はプログラマーというよりは学者であり、研究をサポートするために、私自身が使用するPythonプログラムを長年書いています。私の最新のプロジェクトは、私だけでなく他の多くの人にとっても有用である可能性が高く、オープンソースのPythonライブラリとしてリリースすることを考えています。 ただし、機能している個人プロジェクトから、他の人が簡単にインストールして使用できるライブラリに移行するには、かなりのハードルがあるようです。この質問は、パブリックリリースに向けて作業を開始するために最初に実行する必要がある手順に関するものです。 現在、ライブラリとライブラリ自体を使用するコードを含む単一のgitリポジトリがあり、何かが壊れた場合に備えてgitを緊急の元に戻すボタンとして使用しています。これはすべて単一のユーザーには問題なく機能しますが、リリースしたい場合は明らかに適切ではありません。最後にしたいのは、ライブラリが別のリポジトリにあり、他の人がを使用してインストールできpip、安定したAPIがあることです。 setuptoolsなどを使用することを学習するのは、一度公開したいと思ったらそれほど難しいことではないでしょう。私の問題は、そのポイントに到達するためにどのように作業すべきかを知ることです。 だから私の質問は、公共の消費のためにPythonライブラリプロジェクトの準備を始めるためにとるべき最初のステップは何ですか?ライブラリの公開に向けて作業を開始するには、ディレクトリ構造、gitリポジトリなどをどのように再編成すればよいですか? より一般的には、これを初めて試すときに役立つと知られているリソースがある場合、非常に役立ちます。ベストプラクティスや回避すべき間違いなどへのポインタも非常に役立ちます。 いくつかの明確化:現在の回答は、「Pythonライブラリを他の人が使用できるようにするにはどうすればよいですか?」という行に沿った質問に対処しています。これは便利ですが、私が尋ねるつもりの質問とは異なります。 私は現在、プロジェクトのリリースに向けて長い旅の始まりにいます。私の実装の中核は機能します(そして非常にうまく機能します)が、先の作業量に圧倒されており、プロセスをナビゲートする方法についてのガイダンスを探しています。例えば: 現在、私のライブラリコードは、それを使用する独自のドメイン固有のコードに結合されています。サブフォルダーに存在し、同じgitリポジトリーを共有します。最終的には、スタンドアロンのライブラリにして独自のリポジトリに配置する必要がありますが、その方法がわからないため、これを先延ばしにしています。(ライブラリを「開発モード」でインストールして編集できるようにする方法も、2つのgitリポジトリを同期させる方法もありません。) 私のドキュメント文字列は簡潔です。最終的にはSphinxまたは他のツールを使用する必要があることを知っているからです。しかし、これらのツールは学ぶのが簡単ではないようですので、これは主要なサブプロジェクトになります。 ある時点で、setuptoolsまたは他のツールを使用してパッケージ化し、依存関係を追跡する方法を学ぶ必要がありますが、これは非常に複雑です。今すぐこれを行う必要があるかどうかはわかりませんが、ドキュメントは新しいユーザーにとって絶対的な迷路なので、後で行うことを決め続けています。 体系的なテストを行う必要はありませんでしたが、このプロジェクトには間違いなく取り組むので、(i)自分のプロジェクトに適した方法論を知るためにテストについて十分に学ぶ必要があります。(ii)選択した方法論で利用可能なツールを学習します。(iii)選択したツールの使用方法を学ぶ。(iv)プロジェクトにテストスイートなどを実装します。これはそれ自体がプロジェクトです。 他にもやらなければならないことがあるかもしれません。たとえば、jonrsharpeは、git-flow、tox、TravisCI、virtualenv、CookieCutterについての役立つリンクを投稿しました。(投稿は2013年からのものであるため、現在どれだけ残っているかを調べるためにいくつかの作業を行う必要があります。) これをすべてまとめると、膨大な量の作業が必要になりますが、プラグインを続けて行けば、すべてを完了することができると確信しており、急いでいません。私の問題は、それを1つずつ実行できる管理可能な手順に分解する方法を知ることです。 言い換えれば、最終的にリリース可能な製品に到達するために、私が今取ることができる最も重要な具体的なステップはどれかを尋ねています。週末が空いている場合、これらのうちどれに焦点を当てるべきですか?他の作業とは別に(もしあれば)どの作業を行うことができますか?これらのことを学習する最も効率的な方法は何ですか?それで、プロジェクト自体に集中する時間を確保できますか?(これは基本的に趣味のプロジェクトであり、私の仕事ではないことを心に留めておいてください。)実際に行う必要のないことはありますか?したがって、膨大な時間と労力を節約できますか? すべての回答は大歓迎ですが、これらのプロジェクト管理の側面に焦点を当てた回答、特に現代のPython開発に特に関連した回答を歓迎します。

3
プロパティセッターにロジックを追加することは悪い習慣と見なされますか?
プロジェクトに飛び込んだところ、他の開発者が合成プロパティのセッターに多くのロジックを追加していることがわかりました。私はこれがどのように機能するかを理解していますが、プログラムの流れを理解するのが難しくなると思います。コードを読んでいる間、表示されるたびにself.something = whatever、somethingのセッターがオーバーライドされているかどうかを常にチェックしています。 このトピックに関するあなたの意見は何ですか?これは、悪いアーキテクチャのサインであるか、精巧なソリューションであると思いますか? 関連するリンク/ソースがある場合、これについてもっと読んでうれしいです。良いGoogleの結果を得るのはあまりにも難しいので、ここでも尋ねることにしました。 答えてくれてありがとう、あなたがタグを見なかった場合の客観的なCについて話していることに注意してください(これは私が推測する言語固有の問題ではないはずですが)。

10
大学レベルのプログラミングと企業プログラミングの違いは何ですか?[閉まっている]
IT分野の学士号を取得しました。私はコーディングに深い興味があり、本当にプロになりたいと思っています。現在、大学のコースとは別に、私は自分でプログラミング(C#)を学んでいます(大学レベルのプログラミングは基本的すぎます)。今では、プロのプログラマーに近づくにはもう少し時間が必要だと感じています。しかし、私の先輩の何人かは、企業の世界のプログラミングは本っぽいプログラミングとあまりにも違うと言っているので、時間を無駄にする意味はありません。(彼らはプログラマー自身ではありません。これはおそらく彼らが聞いたことでしょう)。 上級レベルのC#に到達することでメリットがありますか?または、インタビューを破るには平凡なレベルで十分なので、企業レベルでは物事がどのように機能するかを教えるためだけにトレーニングに頼っているので、より高いレベルは企業にとって重要ではありません。助けてくれるプロのプログラマーがいるなら、これがプログラミングに興味のあるすべての学生について私のステージで聞きたいことだと約束します。「プログラミングの分野で実際に学習者から専門家にどのように変わりますか?」-完璧になるまで学習を続けるか、基本をカバーしたら会社に入社する必要がありますか?

7
チームメイトに基本的なルールに従うよう説得する方法
チームメイトに問題があります。簡単に言えば、私たちはコンテストのプロジェクトで働く3人の学生です。このプロジェクトは、2つの個別のアプリケーションで構成されています。1つはWindows用(もう1つは開発中)、もう1つはAndroid用(私の同僚が開発に責任を負います)です。コードベースが交差することはなく、アプリはサードパーティのツールを介して通信します。 問題は次のとおりです。昨年大企業でインターンシップを行ったときにチームで働いた経験があり、コードのコーディング標準を強制しようとしています。また、コードをプッシュしたり、アイデアを書いたり、プロトコルを文書化したりするために使用できるgitリポジトリ/ wiki /コラボレーションソフトウェアも設定しましたが、これらのツールを使用しているのは私だけであるようです。 質の高いコードを書いて、すべてのステップを文書化することは長期的には私たちに利益をもたらすと彼らに伝えようとしましたが、彼らはそれの利点を理解していないようです。また、いくつかの統合テストを追加することを考えていましたが、私が見ることができることから、彼らが生活を楽にするために現在のツールを使用しない限り、統合テストの有用性を説得することはできないと思います。 ピアのコードのほとんどは自分のコンピューター上にあり、共通のコードベースを共有していません。私が知ったように、彼らはusbスティックを介してコードを会議および共有することで、それらの部分を統合しました。 私の質問は次のとおりです。いくつかの不条理なルールを施行しますか?これは小さなプロジェクトであり、要件は非常に明確であることに注意してください(アプリケーションの動作を指定するドキュメントを作成しました)。3人の熟練した開発者が3〜4日でこれを行うことができます。現在のメソッドが機能する限り、コードを作成します。 gitなどを使用してコードをドキュメント化することの利点を示す方法はありますか?

10
シンプルvs複雑な(ただしパフォーマンスは効率的)ソリューション-どちらを選択するか?
私は数年前からプログラミングをしていて、ジレンマに陥っていることがよくあります。 2つの解決策があります- 一つはシンプルなもの、すなわちシンプルなアプローチであり、理解と保守が容易です。冗長性、余分な作業(余分なIO、余分な処理)が含まれるため、最適なソリューションではありません。 しかし、他は複雑なアプローチを使用し、実装が難しく、多くのモジュール間の相互作用を伴うことが多く、パフォーマンス効率の高いソリューションです。 達成するのに難しいパフォーマンスSLAがなく、シンプルなソリューションでさえパフォーマンスSLAを満たすことができる場合、どのソリューションに取り組むべきですか?簡単な解決策については、仲間の開発者の間で軽disを感じています。 シンプルなソリューションでパフォーマンスSLAを満たすことができる場合、最も最適な複雑なソリューションを考え出すのは良い習慣ですか?

15
2つのプログラミング言語を行き来するのは賢明ですか?[閉まっている]
私は2年近く、かなり多くのPHPを書いてきました。現在、.NET(主にc#)開発を行っています。ただし、時々戻ってphpを実行します。 私の主な質問は、これを続けるのが賢明なのか、C#での開発を続けるべきなのか、ということです。これは長期的に私に害を及ぼすでしょうか(私の主な目標はすべての取引のジャックになることではないことに注意してください)、またはそれを行うことは良い習慣ですか?

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