タグ付けされた質問 「language-agnostic」

このタグは、プログラミング言語または環境に固有ではない質問用です。

6
既存のコードベースを文書化する方法
私は、インラインドキュメントも技術ドキュメントも持たない既存のアプリケーションのチームの一員として働いています。アプリケーションのさまざまなバグレポートに取り組んでいるので、さまざまな場所にあるバグ番号-バグ番号を書いて、次の開発者がそのバグ番号を参照して何が起こっているのかを確認できるようにしました。 したがって、私の質問は次のとおりです。 このコードを文書化する最も効率的な方法は何ですか?領域に触れたときに文書化する必要がありますか(ウイルスの場合はウイルス手法)、またはアプリケーションの他の領域に分岐するパスをたどらないで、各セクションから単独で文書化する必要がありますか?以前に存在しなかった場所にインラインコメントを挿入する必要があります(コードが何をするかを誤って特定する恐れがあるため)。 既存のインラインドキュメントも、外部ドキュメントへのインライン参照もない、かなり大きなアプリケーションを正確かつ迅速にドキュメント化するには、どの方法を使用しますか?

7
ほとんどの主流言語が、3者間ブール比較の「x <y <z」構文をサポートしないのはなぜですか?
2つの数値(または他の適切に配列されたエンティティ)を比較したい場合は、で比較しx &lt; yます。それらのうち3つを比較したい場合は、高校の代数の生徒が試してみることをお勧めしx &lt; y &lt; zます。私のプログラマーは、「いいえ、それは無効です、あなたはしなければなりませんx &lt; y &amp;&amp; y &lt; z」と答えます。 私が出会ったほとんどの言語はこの構文をサポートしていないようです。これは数学でどれほど一般的であるかを考えると奇妙です。Pythonは注目に値する例外です。JavaScript は例外のように見えますが、実際には、演算子の優先順位と暗黙の変換の単なる残念な副産物です。node.jsでは、と1 &lt; 3 &lt; 2評価されtrueます(1 &lt; 3) &lt; 2 === true &lt; 2 === 1 &lt; 2。 だから、私の質問はこれです:なぜx &lt; y &lt; z期待されるセマンティクスで、プログラミング言語で一般的に利用できないのですか?


6
既存のユーザーに新しいパスワードを強制せずにパスワードハッシュを更新する
確立されたユーザーベースで既存のアプリケーションを保守します。時間が経つにつれて、現在のパスワードハッシュ手法は時代遅れであり、アップグレードする必要があると判断されています。さらに、UXの理由により、既存のユーザーにパスワードの更新を強制することは望ましくありません。パスワードハッシュ更新全体は、画面の背後で行われる必要があります。 以下を含むユーザー用の「単純な」データベースモデルを想定します。 ID Eメール パスワード このような要件を解決するにはどうすればいいですか? 私の現在の考えは次のとおりです。 適切なクラスに新しいハッシュメソッドを作成します データベース内のユーザーテーブルを更新して、追加のパスワードフィールドを保持する ユーザーが古いパスワードハッシュを使用して正常にログインしたら、2番目のパスワードフィールドに更新されたハッシュを入力します これにより、パスワードハッシュを持っているユーザーとパスワードハッシュを更新していないユーザーを合理的に区別できないため、両方のチェックを強制されるという問題が残ります。これは恐ろしく欠陥があるようです。 さらに、これは基本的に、すべてのユーザーがパスワードを更新するまで、古いハッシュ手法を無期限に保持することを意味します。その時点でのみ、古いハッシュチェックの削除を開始し、不要なデータベースフィールドを削除できました。 私の現在の「ソリューション」は汚れていて不完全であり、そうではないので、ここでいくつかのデザインのヒントを探していますが、可能なソリューションを記述するために実際のコードが必要な場合は、自由に言語を使用してください。

9
while(true)and loop-breaking-アンチパターン?
次のコードを検討してください。 public void doSomething(int input) { while(true) { TransformInSomeWay(input); if(ProcessingComplete(input)) break; DoSomethingElseTo(input); } } このプロセスには、有限であるが入力依存のステップ数が含まれると仮定します。ループは、アルゴリズムの結果としてそれ自体で終了するように設計されており、無期限に実行するように設計されていません(外部イベントによってキャンセルされるまで)。ループを終了するかどうかを確認するテストは、論理的な一連のステップの途中で行われるため、現在、whileループ自体は意味のあるものをチェックしません。代わりに、チェックは概念アルゴリズム内の「適切な」場所で実行されます。 終了条件がループ構造によってチェックされないため、バグが発生しやすいため、これは悪いコードだと言われました。ループを終了する方法を理解することはより困難であり、将来の変更を考慮して誤ってブレーク条件がバイパスまたは省略される可能性があるため、バグを招く可能性があります。 これで、コードは次のように構成できます。 public void doSomething(int input) { TransformInSomeWay(input); while(!ProcessingComplete(input)) { DoSomethingElseTo(input); TransformInSomeWay(input); } } ただし、これはコード内のメソッドの呼び出しを複製し、DRYに違反します。TransformInSomeWay後で他のメソッドに置き換えられた場合、両方の呼び出しを見つけて変更する必要があります(2つの呼び出しがあるという事実は、より複雑なコードではあまり明らかではありません)。 次のように書くこともできます。 public void doSomething(int input) { var complete = false; while(!complete) { TransformInSomeWay(input); complete = ProcessingComplete(input); if(!complete) { DoSomethingElseTo(input); } …

10
中間プログラミングステータスに到達[終了]
私はソフトウェアエンジニアであり、VBA(試行錯誤でしたので、その「実際の」体験をあえて考えません!)、Perl w / CGI、C#、およびASP.NETでプログラミングを担当していました。後者の2つは学部生で、「現実の世界」への入り口があります。私は大学を2年退学し、私が言及した言語で5年の経験(合計)を経験しました。しかし、私の履歴書に関して言えば、C#の場合は2年、ASP.NETの場合は1年未満しか下がれません。 私はC#を知っているように感じますが、「この方法は何をするのですか?」前の方法。」そのため、湾があることを経験的に知っていますが、どのように橋渡しをするのか正確にはわかりません。Project Eulerでプログラミングを開始し、デザインパターンに関する本を手に入れましたが、それでも前進するのではなく、毎日水を踏むように感じています。 だからといって、自分が進歩したとは思わないということではなく、毎日来る限り、山の頂上が遠くに見えるということです。 私の質問はこれです:どのようにこの高原を克服しましたか?どのくらいかかりましたか?これを支援するためにどのような方法を提案できますか? Code Complete、The Mythical Man Month、およびC#経由のCLR、第2版を読みました。私の質問は次のとおりです。 編集:中級レベルのプログラマーのプロジェクトでこの質問を見つけました。議論に追加されると思います(ただし、私の質問に取って代わるものではありません)。そのため、「詳細情報」として質問に追加しています。

7
「言語Aは言語Bで書かれている」とはどういう意味ですか?
言語Aは言語Bで書かれているという言葉をよく耳にします。たとえば、PHPはCで書かれ、C#はC ++で書かれています。 誰かがそれが何を意味するのか、それが正しいのかを説明してください。それは、言語で使用されるインタープリターのコンパイラーと関係がありますか? さらに、実装言語の選択の基礎となる要因は何ですか?

13
人気のない言語を使用した開発の問題(メンテナンスなど)
私は私のチームでclojure(lisp)のみを使用してアプリケーションを開発しています。小さなアプリケーションとして起動します。問題ない。しかし、機能を備えてエリアを拡張しているため、重要なプログラムになりつつあります。 メンテナンスなどが心配でした。私のチームの誰もclojureやlispを知らず、それらのような言語にも興味がありません。 だから、人気のない言語でプログラミングをするのは間違っていませんか?(自分の楽しみのために?)もっと人気のある言語を使うべきですか?(少なくともpythonなど) チームを辞めるかどうかはわかりますが、辞めるとは言いません。:)-誰もそれを維持しません。このプログラムは破棄され、一部は他の言語で開発されます。 clojureでの開発はとても楽しんでいますが、これは私のチームには向かないかもしれないと思いました。 これについてどう思う?人気のない言語を愛する多くのプログラマーは、同様の問題を懸念していると思います。

4
Piを粗雑な乱数ジェネレータとして使用できますか?
私は最近math.SEでこの質問を見ました。考えさせられました。Piは粗雑な乱数ジェネレーターとして使用できますか?私は結果がよく知られていることを意味します(これまでどのくらいのpiが計算されましたか?)が、一度に1桁の数字をとるとPiはかなりランダムに見えるようです。 これはまったく意味がありますか?

26
誰かが教育なしでプログラマーとしての仕事を見つけることができますか?[閉まっている]
高校の学位を取得していなくてもプログラマーとしての仕事を見つけることができるかどうかを、より経験豊富な人から知ることに興味があります。この人は平均的なプログラマーであると考えてください。誰かが彼/彼女にインタビューの機会を与えることを検討しますか?関心のある言語はpython / php / java / c#です お住まいの地域/都市/国のみに回答してください。「学校に戻る」という回答はありません。

9
代入演算子に値を返すことの利点は何ですか?
JavascriptとPHPの両方を置き換える言語を開発しています。(これで問題が発生することはありません。これらの言語のいずれにも大規模なインストールベースがあるわけではありません。) 変更したいことの1つは、代入演算子を代入コマンドに変え、戻り値を使用する機能を削除することでした。 x=1; /* Assignment. */ if (x==1) {} /* Comparison. */ x==1; /* Error or warning, I've not decided yet. */ if (x=1) {} /* Error. */ これは、Cの人々が愛している1行関数が機能しなくなることを意味します。私の個人的な経験を超える証拠はほとんどありませんでしたが、これが起こったのはほとんどの場合、実際に比較操作を目的としたものでした。 またはそれは?代入演算子の戻り値の実用的な用途は、簡単に書き直すことができませんか?(このような概念を持つ言語の場合。)

3
検証チェック付きの制御フローのスタイル
私はこのようなコードをたくさん書いていることに気づきました。 int myFunction(Person* person) { int personIsValid = !(person==NULL); if (personIsValid) { // do some stuff; might be lengthy int myresult = whatever; return myResult; } else { return -1; } } 特に複数のチェックが関係する場合は、かなり面倒になります。そのような場合、次のような代替スタイルを試しました。 int netWorth(Person* person) { if (Person==NULL) { return -1; } if (!(person-&gt;isAlive)) { return -1; } int …

11
サーバーは、受け入れるものを「寛容」にし、「障害のある入力を静かに破棄する」必要がありますか?
私は、今ではこの格言が間違いであることに誰もが同意するという印象を受けていました。しかし、私は最近、「寛大な」コメントが137回(今日現在)支持されているこの回答を見ました。 私の意見では、ブラウザが受け入れるものに対する寛大さが、HTMLや他のいくつかのWeb標準が数年前にあった完全な混乱の直接の原因であり、ごく最近その混乱から適切に結晶化し始めました。私はそれを見る方法、あなたが受け入れるものの中に寛大されますこれにつながります。 格言の2番目の部分は、「仕様で要求されていない限り、エラーメッセージを返さずにエラーのある入力を静かに破棄する」ことです。何かが静かに失敗したときに頭を壁にぶつけたプログラマーは、私の言っていることを知っているでしょう。 だから、私はこれについて完全に間違っていますか?私のプログラムは、受け入れるものに寛容で、静かにエラーを飲み込むべきですか?または、これが意味するものを誤って解釈していますか? 元の質問は「プログラム」でしたが、それについてはみんなの意見を取り入れています。プログラムが寛大であることは理にかなっています。しかし、私が本当に意味したのはAPIです。人々ではなく、他のプログラムに公開されるインターフェースです。HTTPはその一例です。プロトコルは、他のプログラムのみが使用するインターフェースです。「If-Modified-Since」のようなヘッダーに入る日付を直接提供することはありません。 したがって、問題は次のとおりです。標準を実装しているサーバーは寛大で、標準で実際に必要なものに加えて、いくつかの他の形式の日付を許可する必要がありますか?「寛大になる」というのは、ヒューマンインターフェースではなく、この状況に当てはまると思われます。 サーバーが寛大な場合、それは全体的な改善のように思えるかもしれませんが、実際には、寛容に依存するクライアント実装につながるため、わずかに異なる方法で寛大な別のサーバーで動作することに失敗すると思います。 だから、いくつかのAPIを公開するサーバーは寛大である必要がありますか、それとも非常に悪い考えですか? 次に、ユーザー入力の緩やかな処理について説明します。YouTrack(バグ追跡ソフトウェア)を検討してください。Markdownを連想させる言語をテキスト入力に使用します。「寛大」であることを除いて。たとえば、書く - foo - bar - baz でない箇条書きリストを作成するための文書化の方法、そしてまだそれが働きました。その結果、内部バグトラッカー全体で多く使用されることになりました。次のバージョンが登場し、この寛大な機能はわずかに異なる動作を開始し、この(非)機能を(誤って)使用したリストの束を壊します。箇条書きリストを作成する文書化された方法は、もちろん機能します。 だから、私のソフトウェアは、それが受け入れるユーザー入力に寛容でなければなりませんか?

6
コメントを書くための初心者向けガイド?
開発者の発芽を目的とした、コードコメントの作成に関する決定的なガイドはありますか? 理想的には、コメントをいつ使用するべきか(使用すべきではない)、およびコメントに何を含めるべきかについて説明します。 この答え: 何をしているのかをコメントしないでください。 WHATは、それをサポートする変数名を適切に選択した、クリーンで読みやすいシンプルなコードによって処理されます。コメントは、コード自体では表示できない(または表示が難しい)コードの上位レベルの構造を示します。 近づきますが、経験の浅いプログラマーにとっては少し簡潔です(いくつかの例とコーナーケースでの拡張は素晴らしいと思います)。 更新:ここでの回答に加えて、別の質問に対するこの回答は非常に関連性が高いと思います。

3
静的メソッドを持つ静的クラスはSOLIDと見なされますか?
SOLIDには、 「プログラム内のオブジェクトは、そのプログラムの正確性を変更することなく、サブタイプのインスタンスで置き換えられるべきである」という概念を持つLiskov置換原則が含まれています。 静的メソッド(Mathクラスに少し似ている)を持つ静的クラスにはインスタンスがまったくないため、静的メソッドを持つ静的クラスがある場合、システムはSOLIDと見なされますか?

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