ソフトウェア工学

システム開発ライフサイクル内で働く専門家、学者、学生向けのQ&A

13
整数定数にアンダースコアを許可しない言語では、10億の定数を作成することをお勧めしますか?
整数リテラルにアンダースコアを許可しない言語では、10億の定数を作成することをお勧めしますか?たとえば、C ++の場合: size_t ONE_BILLION = 1000000000; 確かに、100のような小さな数値に対して定数を作成するべきではありません。しかし、9個のゼロがあると、次のようなコードにゼロを残したり、余分なものを追加したりするのは間違いなく簡単です: tv_sec = timeInNanosec / 1000000000; tv_nsec = timeInNanosec % 1000000000;

2
純粋に機能的な言語についての誤解はありますか?
私はしばしば次のステートメント/引数に遭遇します: 純粋な関数型プログラミング言語では副作用がありません(したがって、実用的なプログラムは副作用を持っているため、実際にはほとんど役に立ちません。たとえば、外部の世界と対話するときです)。 純粋な関数型プログラミング言語では、状態を維持するプログラムを作成できません(多くのアプリケーションでは状態が必要なため、プログラミングが非常に厄介になります)。 私は関数型言語の専門家ではありませんが、これまでこれらのトピックについて理解してきたことを以下に示します。 ポイント1に関しては、純粋に機能的な言語で環境と対話できますが、副作用を引き起こすコード(関数)を明示的にマークする必要があります(たとえば、モナド型によるHaskellで)。また、私が知っている限り、副作用による計算(データの破壊的な更新)も(モナド型を使用して)可能であるべきです(たとえそれが好ましい作業方法ではないとしても) ポイント2については、いくつかの計算ステップ(Haskellでもモナド型を使用)で値をスレッド化することで状態を表すことができますが、これを行う実際的な経験はなく、私の理解はかなりあいまいです。 それで、上記の2つの文は何らかの意味で正しいのですか、それとも純粋に機能的な言語に関する誤解ですか?それらが誤解である場合、どのようにして生じたのですか?(1)副作用を実装し、(2)状態で計算を実装するHaskellの慣用的な方法を示す(おそらく小さな)コードスニペットを記述できますか?

6
開発とR&Dの違いは何ですか?
同僚から、通常の開発と研究開発(R&D)の違いを明確に説明するよう求められ、それを行うことができませんでした。ウィキペディアを読んだ後、私はまだ正確な答えがありません。 ウィキペディアによると(わずかに変更されています): 2つの主要なモデルがあります。 あるモデルでは、主な機能は新製品の開発です。 もう1つのモデルの主な機能は、貴重な新製品、プロセス、およびサービスの開発を明らかにし、可能にするために、科学技術のトピックに関する新しい知識を発見および作成することです。 最初のモデルは紛らわしいです。開発(R&Dではなく)は、製品に新機能を追加し、バグを解決し、メンテナンスを行うことだけを意味するのでしょうか?以前に新機能として開発されたものが別の製品になった場合はどうなりますか? 2番目のモデルはそれほど複雑ではありませんが、それでも、何かが新しい知識であるのか、再発見された既存の知識であるのかをどのように認定するのですか? 後にウィキペディアは、次の理由で通常の開発はR&Dと異なると付け加えています ほぼ即時の利益または即時の改善。 まだ十分に明確ではありません。「ほぼ即時の利益」を認定する方法は?タスクに即時の利益はあるが、徹底的な調査が必要な場合はどうなりますか?または、コードベースに対する一般的なスタイルの実施のように、基本的ではあるが不確実な利益がある場合はどうでしょうか? たとえば、次のような開発またはR&Dに属しますか? データベースへのアクセスを抽象化するエンジンを開発し、データベースにアクセスする他のアプリケーション(既存または将来作成されるアプリケーション)のコードを大幅に簡素化および短縮しますか? Amazonで使用されているような、独立した多数の独立したアプリケーションから、適切に組織化され相互接続されたWebサービスのセットに移行するために、企業リソースの組織全体に新しいサービス指向アーキテクチャを確立しますか? 会社の2つのデータセンター間でのデータの複製を高速化できる新しい通信プロトコルを設計しますか? 特定の製品での作業中に新しいタイプのソフトウェアテストを考え、このタイプのテストがテストプロセスを改善/簡素化することを知っていますか? 証拠、ロジック、および以前の経験に基づいて、特定のアプリケーションに対してOOPよりも関数型プログラミングが適切であることを証明しますか? 正確なタスクセットに対して少なくとも1.4の比率でユーザーの生産性が向上することを示す調査とテストを行った後、触覚画面にジェスチャーを追加して、既存のアプリケーションを強化しますか? データセンターの電力使用効率(PUE)を大幅に強化する方法を見つけますか? ドメイン固有言語(DSL)を作成しますか? 要するに、何かに取り組んでいる間に研究開発を行っているかどうかをどのように判断できますか?

4
null値はどこに保存されますか、それともまったく保存されますか?
null値またはnull参照について学びたいです。 たとえば、Appleというクラスがあり、そのインスタンスを作成しました。 Apple myApple = new Apple("yummy"); // The data is stored in memory それから私はそのリンゴを食べました、そして今、それはヌルである必要があるので、それをヌルとして設定します。 myApple = null; この電話の後、私はそれを食べたことを忘れてしまったので、確認したいと思います。 bool isEaten = (myApple == null); この呼び出しで、myAppleはどこを参照していますか?nullは特別なポインター値ですか?その場合、1000個のnullオブジェクトがある場合、ポインター型をintと見なすと、1000個のオブジェクトメモリスペースまたは1000個のintメモリスペースを占有しますか?
39 memory  null 

5
不変性は、マルチプロセッサプログラミングでのロックの必要性を完全に排除しますか?
パート1 明らかに不変性は、マルチプロセッサプログラミングでのロックの必要性を最小限に抑えますが、その必要性を排除しますか、または不変性だけでは不十分な場合がありますか?ほとんどのプログラムが実際に何かを行う(データストアを更新する、レポートを作成する、例外をスローするなど)前に処理を延期し、状態をカプセル化できるのは私だけのようです。そのようなアクションは常にロックなしで実行できますか?元のオブジェクトを変更するのではなく、各オブジェクトを破棄して新しいオブジェクトを作成するという単純なアクション(不変性の大まかな見方)は、プロセス間競合からの絶対的な保護を提供しますか、それともロックが必要なコーナーケースがありますか? 私は多くの機能的なプログラマーと数学者が「副作用なし」について話すのを好むことを知っていますが、「現実の世界」では、機械命令を実行する時間であっても、すべてに副作用があります。理論的/学術的答えと実用的/現実世界の答えの両方に興味があります。 特定の境界または仮定が与えられれば、不変性が安全であれば、「安全ゾーン」の境界が正確に何であるかを知りたいです。可能な境界のいくつかの例: I / O 例外/エラー 他の言語で書かれたプログラムとの相互作用 他のマシンとの相互作用(物理、仮想、または理論) この質問を始めたコメントに対して@JimmaHoffaに感謝します! パート2 多くの場合、マルチプロセッサプログラミングは最適化手法として使用され、コードの実行を高速化します。ロックと不変オブジェクトを使用する方が速いのはいつですか? アムダールの法則で定められた制限を考えると、不変オブジェクトと可変オブジェクトのロックで全体的なパフォーマンスを向上させることができます(ガベージコレクターの有無にかかわらず)。 概要 これら2つの質問を1つにまとめて、スレッド化の問題の解決策として不変性の境界ボックスがどこにあるのかを探ろうとしています。

9
静的メンバー以外のユーティリティクラスはC ++のアンチパターンですか?
クラスに関係のない関数をどこに置くべきかという質問は、C ++でクラス内のユーティリティ関数を結合するのが理にかなっているのか、それとも名前空間にフリー関数として存在するのかという議論を巻き起こしました。 私は、後者のオプションが存在しないC#のバックグラウンドから来ているため、私が書いている小さなC ++コードで静的クラスを使用する傾向があります。しかし、その質問に対する最高の投票された回答といくつかのコメントは、静的なクラスがアンチパターンであることを示唆していても、無料の関数が優先されるべきであると述べています。C ++ではなぜそうなのですか?少なくとも表面的には、クラスの静的メソッドは、名前空間の自由な関数と見分けがつかないように見えます。なぜこのように後者を好むのですか? ユーティリティ関数のコレクションが何らかの共有データを必要とする場合、たとえば、プライベート静的フィールドに保存できるキャッシュなど、状況は異なりますか?

14
Pythonは実際の世界でどのように使用されていますか?[閉まっている]
Pythonプログラマーとしての仕事を探しています。私は言語の基本を知っており、pygameを使用していくつかのゲームを作成しました。Djangoの実験も始めました。 ただし、ジョブマーケットを見ると、Python関連のジョブの多くはWeb関連ではないようです。物事のデスクトップ側では、非常に多くの企業がpyQtやwxPythonのような人気のあるGUIライブラリを使用しているようには見えません。 企業は実際にPythonをどのように使用していますか?Pythonプログラマーとしての仕事を獲得するには、どの領域に焦点を当てるべきですか?
39 python 

11
コードは一般にUMLから生成されますか?[閉まっている]
大学にいたとき、コード開発におけるUMLの利点とその将来について教育を受けました。 しかし、業界での経験から、ERダイアグラム、クラスダイアグラム、状態ダイアグラムからワークフローダイアグラムに至るまで、ダイアグラムを使用している間は、すべてコミュニケーション用であることがわかりました。 つまり、ダイアグラムからコードを自動的に生成したことは一度もありません。また、通信の観点から、通常はダイアグラムをできるだけシンプルで理解しやすいものにしようとしています。 しかし、VisioとEnterprise Architectを見ると、多くの異なる種類のグラフ、図形、プロパティオブジェクトがあり、そのほとんどは使用していません。 UMLを使用して、コードやデータベースの生成など、より洗練された処理を実行しますか?
39 uml  diagrams  visio 

6
クラスメンバーを優先するか、内部メソッド間で引数を渡すか
クラスのprivate部分内に、複数のprivateメソッドで使用される値があると仮定します。人々はこれをクラスのメンバー変数として定義することを好むか、それを各メソッドへの引数として渡すことを好みますか?そしてなぜですか? 一方で、クラスの状態(つまり、メンバー変数)を減らすことは一般に良いことであるという議論を見ることができましたが、クラスのメソッド全体で同じ値が繰り返し使用されている場合、それは理想的ですクラスの状態としての表現の候補。コードが他に何もないとしても見た目にきれいになるようにします。 編集: 提起されたコメント/質問のいくつかを明確にするために、私は定数について話しているのではなく、これは特定のケースに関連するものではなく、他の人に話している仮説にすぎません。 OOPの角度をしばらく無視すると、私が念頭に置いていた特定のユースケースは次のようになりました(擬似コードを簡潔にするために参照によるパスを想定しています) int x doSomething(x) doAnotherThing(x) doYetAnotherThing(x) doSomethingElse(x) つまり、複数の機能に共通する変数がいくつかあるということです-私が念頭に置いていた場合、それは小さな機能の連鎖によるものでした。OOPシステムでは、これらがすべてクラスのメソッドである場合(たとえば、大きなメソッドからメソッドを抽出することによるリファクタリングが原因)、その変数はそれらすべてに渡されるか、クラスメンバーになる可能性があります。

8
C ++では、メモリ管理にプログラマーが費やす時間
ガベージコレクションされた言語に慣れている人は、C ++のメモリ管理が怖いことがよくあります。そこのツールは次のように、あるauto_ptrとshared_ptrそれはあなたのためのメモリ管理タスクの多くを処理します。多くのC ++ライブラリはこれらのツールより前のものであり、メモリ管理タスクを処理する独自の方法があります。 メモリ管理タスクにどれくらいの時間を費やしていますか? 使用するライブラリのセットに大きく依存しているのではないかと思われるので、どのライブラリに答えが当てはまるか、それらが良くなるか悪くなるかを言ってください。
39 c++  memory 


20
以下のクラスで非常に優れた実世界のアルゴリズムが存在しますか?[閉まっている]
昨夜、私は別のプログラマーと話し合っていましたが、何かがO(1)であっても、O(1)アルゴリズムに大きな定数がある場合、O(n)の操作はそれを上回る可能性があります。彼は同意しなかったので、ここに持ってきました。 その下のクラスのアルゴリズムを大幅に上回るアルゴリズムの例はありますか?たとえば、O(n)がO(1)より速いか、O(n 2)がO(n)より速いです。 数学的には、定数因子を無視すると、漸近的上限を持つ関数でこれを実証できますが、そのようなアルゴリズムは野生に存在しますか?そして、それらの例はどこにありますか?どのような状況に使用されますか?
39 algorithms  big-o 

13
アプリケーションに自己破壊メソッドを含める必要がありますか?
私は最近、クライアントが法案から救済されたという否定的な経験をしましたが、私の仲介者はすでにソフトウェアとデザインをクライアントサーバーにアップロードしました。クライアントは既知の犯罪者であることが判明し、もちろんサーバーのすべての可能なパスワードを変更しました。 ただし、CMSの管理パネルには引き続きアクセスできます。悲しいことに、私のソフトウェアは非常に安全であることが判明しました。SQLインジェクション、イメージアップロードなどを試みました。しかし、私は自分のソフトウェアをハッキングすることはできません。問題..私は今、バックエンドの自己破壊メソッドがあるべきだと考えています。したがって、同様のケースが発生した場合、ソフトウェアを強制終了するオプションがあります。 私自身のアイデアは、コアファイルの一部の機能を非表示にすることです。base64でエンコードするので、明らかではありません。このようなもの: eval(base64_decode('ZWNobyAnSGVsbG8gd29ybGQhJzs=')); // echo 'Hello world!'; そして基本的に小さなソフトウェアを作成します。これはすべてのソフトウェアのファイルを取得し、chmodでそれらを確認してから削除します。 私の新しいバージョンのCMSにはすべて、簡単にハッキングするために使用できるファイルマネージャーがあります。しかし、管理パネルへのアクセスが制限されている場合はどうでしょう。 非常に明確にするために、これは開発段階のソフトウェア、個人サーバーまたはクライアントサーバーのみを対象としています(最後の部分は倫理的に疑問です)。したがって、クライアントがソフトウェアを盗む場合、これはコマーシャルに含まれません。 -ソフトウェア。 さらに明確にするために、私たちはこれらのまれなフリーランスの仕事について話しています。かなり論理的で、契約作業にはそのような方法は必要ないと思います。そのため、プロジェクトの準備が整ったときに開発モードでのみ、それらのジャンプリスククライアントについて話します。これは明らかに、ソフトウェア内にある非常に非倫理的なバックドアになります。 倫理的にこれは良いアイデアですか?(プロジェクトが100%であり、すべての費用が支払われた場合、明らかに削除することを念頭に置いてください) クライアントに関する同様の問題のために、あなたは自分のソフトウェアをハッキングする必要がありましたか? このアイデア、コード、および方法に関する推奨事項はありますか? selfdestruct-scriptsの潜在的な欠点または影響は何ですか? これに関する私の結論 少し悲しいのは、すべての回答が契約したケースを対象としたことです。それは本当に私のせいでした、私の質問でそれをより明確にしなかったのは..ただ、あなたが契約によって保護されているとき、キルスイッチに意味がないと思っただけです。 ただし、契約作業を行っている場合は、これを契約に明記する必要があります。これにより、クライアントの所有サーバー内でも合法になります。しかし、自分の個人サーバー内にキルスイッチを持っていることは、本当に誰のビジネスでもありません(これは私が本当に知りたいことです) 私は、CMSのキルスイッチスクリプトを作成することにしました。主に、それは興味深い挑戦のようだからです。しかし、クライアントが友人の友人の友人である非契約作品にもこれを使用できます。クライアントサーバーでこれを使用することはおそらくないでしょうが、クライアントまたは一部の仲買人は私のサーバーにアクセスします。 私はここでたくさんのトピックを読んでいますが、警告を送信してからページを削除することを推奨しています。まあ、私はそれがどこか他の場所にコピーするだけで(おそらくそれをブランド変更して販売する)、取り壊されたと言ったときに、問題を見つけました。また、「サイトをオフにする」のではなく、削除します。ただし、クライアントサーバーにアクセスして削除することは依然として違法です。または、少なくともFTPからではなく、バックエンドからアクセスします。このため、私は答えたあなたのすべてに感謝します。

10
イディオムとデザインパターンの違いは?
イディオムとデザインパターンの違いは何ですか?これらの用語はどこかで重複しているようです。正確には、私にはわかりません。それらは交換可能ですか?何を使うべきですか? ここでは C ++イディオムのリストです。それらをデザインパターンと呼ぶことはできますか? ウィキペディアでは、 低レベルの設計パターンとしてのイディオムのプログラミング どういう意味ですか?何をしてない「低レベル」ここに意味ですか? この質問は別の質問からインスパイアされています:https : //stackoverflow.com/questions/7343531/are-the-some-design-patterns-language-dependent

6
構文強調配色の研究
ほとんどのプログラマーは、構文を強調するカラースキームに対して独自の個人的な好みを持っていますが、最高のカラースキームが何であるかについて実際の科学的研究を行ったことはありますか?このような研究では、コードの読みやすさ、プログラマーの目が最も重要な部分に向けられているかどうかなどに注目すると思います。 おそらく、これはデフォルトのVisual Studioテーマのようなものについてはすでに行われていますが、公開されている研究があるかどうか、そしてそれらが見つけたものを知りたいのです。

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