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

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

5
コーディング標準文書の作成
私は、主な仕事がSCADAとPLCであり、他の制御システムのスタッフと一緒に、制御システムの会社で働いています。 ソフトウェア開発は、社内のプロジェクト管理および評価システムを作成する決定が下されるまで、あちこちで少しだけ離れて、会社が実際に行うものではありません。 このプロジェクトは、もともとソフトウェアの人としてここに来た人々によって引き継がれ、私たちはほとんどジュニアです。 プロジェクトは小さなものから始まったので、デザイン、データベースなどのようなものだけをドキュメント化しましたが、コーディング形式/規約については実際には合意しませんでした。 StyleCopを使用してコードを適切に文書化したことを確認しましたが、適切な標準を継続し、今後大きな開発作業が行われる場合は誰でも作業できるように、コーディング規約/プラクティスの公式文書が必要だと感じています良いベースプレートがあります。 そこに問題があります、コーディング規約と標準のための文書をどのように作成するのか分かりません、私が考えることができるのは良いプラクティスと悪いプラクティスの例です(たとえば、変数に名前を付けるときのキャメルケース、ハンガリー語の表記を避けるなど)有能なプログラマー(明らかに)ですが、この種のチャーターはありません。 それにポイントを置くために、私の質問は次のとおりです。良いコーディング標準文書の重要な側面と内容は何ですか?

2
「本物のプログラマはアセンブリ言語を任意の言語で書くことができる」というのは本当ですか?
本物のプログラマは、任意の言語でアセンブリコードを作成できます。 (ラリーウォール)。 私の知る限り、ラリー・ウォール氏は、実際のプログラマーにとって、どの言語もASMと同じ機能を持つことができると言っています。しかし、私は真剣に理解していません。Perl、Python、Java、C#などの高水準言語でアセンブリコードを作成するにはどうすればよいですか?PerlやPythonなどの言語にはポインターさえありません。または彼は何か他のものを意味していますか?ウォール氏は実際に何を言おうとしているのですか?

7
アプリケーションの一部の書き換えを回避する方法
会社で営業部門のプロジェクトに取り組んでいます。それは私の最初のプロのプログラミングの仕事ですが、私は自分でコーディングして何年も学習しています。プロジェクトの一部では、いくつかのデータを取得し、それを入力と組み合わせて生成およびグラフ化します。次に、データを保存します...など。そのため、私はこのためのコードを1日少しで書きました。翌日、私はプロジェクトスーパーバイザーを見せました。彼はそれを気に入っていましたが、「これがあったらどうだろう」と言って、グラフに何かを追加したかったのです。これはプログラムの外観や機能に対する大きな変更ではありませんでしたが、データの保存や処理などに必要な方法を大幅に変更しました。 この場合も、データベーステーブルを再構築し、この新しい要求をサポートするためにコードを基本的にゼロから書き直すのに約1日かかりました。私はそれを再び彼に持ち帰ったが、まったく同じことが起こった。彼は私がデータを処理するために必要な方法を劇的に変える何か他のものを要求しました。それで、私はそれを再び書き直さなければなりませんでした。最後に彼はそれにサインオフしました、そして願わくば、私は再びそれを書き直す必要がないでしょう。 ただはっきりさせてください、私はマネージャーやそのようなものをバッシングしていません。彼は偉大な人物であり、彼が要求していたことはこの世界からではなく、私が以前にやったことと相容れないものでした。 完全な書き直しを避けるために今後できることはないかと思っています。私は柔軟なコードを作成することを理解しており、それをしようとしていましたが、これを簡単にするために別の方法で行うことができたプラクティスまたは事柄を知りたいので、将来、私は何かに3日を費やしません取るべきでした1。

2
このプログラミング手法は何と呼ばれていますか?
インタビューでペアプログラミングを行っているときにこのプログラミング手法に出会い、Googleでその名前を見つけることができませんでした。 考え方は、最初に変数を使用する式を記述し、その後変数を計算するコードを記述することです。 ここでいくつかのサンプルコードを使用するには: private bool ValidPolicyNumber(string policyNumber) { var hasExpectedPrefix = policyNumber.Substring(0,5) == "POLIC"; var followedBy7Digits = Regex.IsMatch(policyNumber.Substring(6,7), "^[0-9]{7}$"); var hasLengthOf12 = policyNumber.Length == 12; return hasExpectedPrefix && followedBy7Digits && hasLengthOf12; } 前述の手法を使用してこの関数を記述する場合、最初に最後の行return hasExpectedPrefix && followedBy7Digits && hasLengthOf12;を記述し、次にその前の3行を記述します。 私が見つけた最も近い技術は「希望的観測」であり、それはSICPからのものですが、後で初期化する変数を使用するのではなく、後で実装する関数の呼び出しに関連しています。

2
多くのusing / importステートメントがあるのは、デザインやコードの悪臭を示していますか?
通常、クラスファイルの先頭にいくつかのusingステートメントが表示されます。例: using System.Collections.Generic; using System.IO; using System.Xml.Linq; しかし、私が取り組んでいるプロジェクトでは、いくつかの機会に、1つのクラスファイルで20以上の使用/インポートが見られます。これは悪いデザインですか?1つのことを行うために設計されたクラスは、少数のコンポーネントにのみ依存する必要があるようです。

1
HTMLタグの属性を順序付ける標準化されたプラクティスはありますか?
私はAngularJSプロジェクトに取り組んでおり、属性は私のHTML要素の多くで多数あります: <button type="submit" ng-click="Page.UI.DetailView.ExecuteFunction()" ng-disabled="step5.$invalid" class="btn btn-success pull-right"> Submit this Product </button> これらの属性の順序に標準化された規則はありますか?アルファベット?意味によってグループ化されていますか(例:すべての角度属性を一緒に)?最初に標準のHTML属性(たとえば「タイプ」)

3
コンストラクターを構造体に追加する必要がありますか?
メンバメソッドを備えた完全なモジュールにできるクラスではなく、c ++構造体を使用してデータ構造を定義することがよくあります。今、私たちはそれらが両方とも同じであることがわかります(大まかに言って)。 構造体をデータのみのエンティティとして頻繁に使用/処理するという事実は、デフォルトのコンストラクタも追加しないという衝動を引き起こします。しかし、コンストラクターは常に優れており、物事を単純化し、エラーを排除するのに役立ちます。 デフォルトのコンストラクタをデータ構造に追加すると、眉をひそめますか? 他の基準が満たされている場合、デフォルトコンストラクターを実装すると、構造体は非POD(プレーンな古いデータ型)になりますか? 物事を視野に入れるために、簡単な例を考えてみましょうが、実際には構造体ははるかに大きくなります。 struct method { char name[32]; float temperature; int duration; }; メソッドを作成するたびに、値を設定するのを忘れた場合、(控えめに言っても)心配する必要があります。temperatureメソッドを設定してシステムに適用するのを忘れてしまったことを想像してください。このメソッドはランダムに高い値になり、混乱を引き起こします。または、設定するのを忘れたためduration、メソッドが未知の高期間にわたって適用されます。 オブジェクトを保証するコンストラクタを実装するのではなく、毎回オブジェクトを初期化する責任を負うべきなのはなぜですか?

6
どの機能機能がもたらすメリットについて、OOPを少し混乱させる価値がありますか?
HaskellとF#で関数型プログラミングを学んだ後、OOPパラダイムはクラス、インターフェース、オブジェクトで後戻りしているように見えます。同僚が理解できるFPのどの側面を仕事に持ち込めますか?使用できるようにチームを再訓練することについて、上司と話す価値のあるFPスタイルはありますか? FPの可能な側面: 不変性 部分適用とカレー ファーストクラス関数(関数ポインター/機能オブジェクト/戦略パターン) 遅延評価(およびモナド) 純粋な機能(副作用なし) 式(対ステートメント-コードの各行は、副作用の代わりに、または副作用を引き起こすことに加えて、値を生成します) 再帰 パターンマッチング それは、プログラミング言語がサポートしている限り、その言語がサポートする制限まで何でもできる、すべての人にとって自由なものですか?または、より良いガイドラインがありますか?

6
ファイル名にメタデータ情報を保存するのは悪い習慣ですか?より良いソリューション?
私が働いている場所に気づいたのは、人々がファイル名に情報を保存し、ファイル名を解析することに熱心だということです。 私にとってこれは特に良い習慣ではないようです。スクリプトがファイルをグロッビングし、別のファイルが最初に一致するため間違ったスクリプトを取得するという問題が既に発生していることを確認しました。 それは悪い習慣と見なされますか? ある種のメタデータに基づいてファイルシステムからファイルを取得するために受け入れられている他のソリューションは何ですか?

2
テスト対象のシステムからクラスを抽出するときに、ユニットテストをリファクタリングする必要がありますか?
いくつかのことを行うこのクラスを作成しました(おそらくこれは単一責任原則の違反です)。私はプロジェクトのいくつかの他の部分が必要であることを今実感作品そのロジックのを、私はそれを公開するつもりだ方法は、私のオリジナルテスト対象システムのうち、クラスを抽出することです。 テストコードを変更せずにこれを行うことができると予想していますが、完了したら、テストはユニットテストではなくなったと主張できます。元のクラスと抽出したクラスをテストします。つまり、テストケースは1つですが、テスト対象のシステムは2つになります。 完了したら、テストコードをリファクタリングすることになっていますか?IE:ExtractedClassTestを作成し、関連するすべてのテストをOriginalClassTestからそこに移動しますか?これは少しリスクが高いようです:プロセスのカバレッジを失う可能性があります。テストを移動するほど簡単ではないかもしれません。等 一方、OriginalClassTestをそのままにしておくと、これがテストメンテナンスの問題であることがわかります。ExtractedClassのテストがどこにあるかを見つけるのは少し混乱するでしょう。あなたの第一印象は、それが存在しないということです。量産コードのリファクタリングが多くなると、これは深刻な問題になる可能性があります。 私はTDDが初めてなので、専門家のアドバイスをお願いします。ありがとう!

6
自分の技術(プログラミング)を深く理解するために習得すべきプログラミング概念は何ですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、または専門知識によってサポートされると予想されますが、この質問は議論、議論、世論調査、または広範な議論を求める可能性があります。この質問を改善し、場合によっては再開できると思われる場合は、ヘルプセンターをご覧ください。 7年前に閉鎖されました。 重要な順序で、そうすることが可能であり、そうでない場合、プログラム方法を知るための最も重要な基礎は何ですか。アルゴリズム、反復、再帰など? 私がどこに置くかなどは私の質問のあるところです。私は最近、10人のプログラマーのうち9人がプログラムをあえぎできないと言っているインターネットの投稿を読みました! http://www.codinghorror.com/blog/2007/02/why-cant-programmers-program.html プログラミングの際に実際に達成しようとしていることについて深い知識と、自由に使える基本的なツールの徹底的な理解が必要です。基本的に私は風のすべての色でペイントできるようにしたい。

2
インラインコードコメントの最適なアプローチは何ですか?
20年前のレガシーコードベースにリファクタリングを行っており、同僚とコードのコメント形式(plsql、java)について議論しています。 コメントにはデフォルトの形式はありませんが、ほとんどの場合、人々はコメントで次のようなことをします。 // date (year, year-month, yyyy-mm-dd, dd/mm/yyyy), (author id, author name, author nickname) and comment 私が望む将来および過去のコメントの提案された形式は次のとおりです。 // {yyyy-mm-dd}, unique_author_company_id, comment 私の同僚は、コメントだけが必要であり、過去および将来のすべてのコメントをこの形式に再フォーマットする必要があると言います。 // comment 私の議論: メンテナンス上の理由から、いつ、誰が変更を行ったかを知ることが重要です(この情報はSCMにあります)。 コードは生きており、そのために歴史があります。 変更日付がないと、SCMツールを開いて長いオブジェクト履歴を検索しないと、変更がいつ導入されたかを知ることができないためです。 著者は非常に重要であるため、著者の変更は著者の変更よりも信頼できる 敏ility性の理由、SCMツールを開いてナビゲートする必要はありません 人々は、最近作成または変更されたものよりも、誰かが15年前にしたことを変更することを恐れます。 等 私の同僚の議論: 歴史はSCMにあります 開発者は、コード内のコードの履歴を直接認識してはなりません。 パッケージの長さは15,000行になり、構造化されていないコメントはこれらのパッケージを理解しにくくします 最善のアプローチは何だと思いますか?または、この問題を解決するためのより良いアプローチがありますか?

8
実装可能かどうかわからない機能を提供することを約束する必要がありますか?
HNの記事で、次のアドバイスに出会いました。 不明な場合でも、常に顧客/ユーザーに「はい」と伝えます。90%の時間、あなたはそれを行う方法を見つけるでしょう。10%の時間、戻って謝罪します。大幅な個人的成長のための低価格 しかし、顧客/ユーザーに何らかの約束をする前に、実行可能性分析を行うべきだと常に考えていました。それでは、どのような状況で上記のアドバイスを適用すべきでしょうか?

6
有限状態マシンの故障から回復する方法は?
私の質問は非常に科学的に思えるかもしれませんが、よくある問題だと思います。経験豊富な開発者やプログラマーは、タイトルで言及した問題を回避するためのアドバイスを希望します。ところで、私が以下で説明するのは、iOSプロジェクトで積極的に解決しようとしている真の問題です。 有限状態マシンとは、これを意味します>いくつかのボタン、そのUIに関連するいくつかのセッション状態、およびこのUIが表すものがあるUIがあり、UIに値が部分的に表示されるデータがあり、いくつかの外部トリガーを受信して​​処理します(センサーからのコールバックで表されます)。状態図を作成して、そのUIとアプリケーションで望ましい、必要なシナリオをより適切にマップしました。ゆっくりとコードを実装するにつれて、アプリはより適切に動作し始めます。ただし、十分な堅牢性があるとは確信がありません。私の疑問は、自分自身の思考と実装プロセスが進行するのを見ることです。私はすべてをカバーしていると確信していましたが、UIでいくつかのブルートテストを行うだけで十分であり、動作にまだギャップがあることにすぐに気付きました..それらにパッチを適用しました。しかしながら、各コンポーネントは、他のコンポーネントからの入力、ユーザーまたは特定の外部ソースからの特定の入力に基づいて動作し、一連のイベント、状態変更などをトリガーします。複数のコンポーネントがあり、それぞれが入力で受信したトリガーのように動作します->トリガーとその送信者が分析->分析に基づいて何か(メッセージ、状態変化)を出力します 問題は、これは完全に自己完結型ではなく、私のコンポーネント(データベース項目、セッション状態、ボタンの状態)...イベントチェーンの範囲外で変更、影響、削除、またはその他の方法で変更される可能性があることです望ましいシナリオ。(電話がクラッシュし、バッテリーが突然空になります)これにより、システムが無効になり、システムが回復できなくなる可能性があります。アップルストアにある競合他社のアプリの多くで、これが見られます(これは問題だと人々は認識していませんが)、顧客は次のように書きます>「3つのドキュメントを追加しました。たとえそれらを見たとしても。」または「毎日ビデオを録画しましたが、あまりにログの多いビデオを録画した後、それらのキャプションをオフにすることはできません。キャプションのボタンはありません」 これらは単なる短縮例であり、顧客はしばしばそれをより詳細に説明します。それらに記載されている説明と動作から、特定のアプリにFSMの内訳があると思います。 究極の問題は、これをどのように回避でき、システムがそれ自体をブロックするのを防ぐ方法ですか? 編集>私は電話で1つのviewcontrollerのビューのコンテキストで話している、私はアプリケーションの一部を意味します。MVCパターンを理解し、機能ごとに個別のモジュールを用意しています。説明するものはすべて、UIの1つのキャンバスに関連しています。

9
練習しないとプログラミングの知識は減りますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 私は初心者プログラマーです。C、C ++、Python、Javaなどの言語を勉強しています(主にC ++に焦点を当てています)。私はあなたが「若くて経験の浅い人」と呼んでいますが、そうでないと主張することはできないからです。 学生として、プログラミング以外にも多くの問題があります。プログラミングをできる限り頻繁に練習しています。特に、先生がクラスの他の部分よりもはるかに多くのエクササイズを提供しているため(非常に低いレベルです)、多くの場合、学校のプロジェクトやスポーツなどの他のことを何週間も費やしています。旅行、プログラミング以外のもの。 誤解しないでください、私はプログラミングが大好きです。私は、機能的なコードを作成し、ボタンを押すだけでプログラムが実行されるのを見て、できる限り多くのことを学ぶのが大好きです。事は、私はそれのための多くの時間がないだけです。 質問にまっすぐになります。あなたのプログラミングの知識は時間の経過とともに低下し、練習しませんか?「どのくらいの時間を意味しますか?」と尋ねることができます。特定の時間を意味するわけではありませんが、参考までに、例として2か月から1年かかることもあります。 知識とは、構文から言語機能までを意味します。

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