ソフトウェア工学

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

8
プログラマが自分のコードを100%明確にしないことは時々ありますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 私は熟練したプログラマーではないので、これが理由かもしれませんが、複雑なコード(最近作成したチェスゲームなど)を作成するたびに、プログラムを動作させるための正しいコードを書くことができることに気付きました。後で、または数秒後にそれを見つけますが! それだけでなく、コードについても考えない傾向があり、代わりに入力するだけです。たとえば、チェスのゲームでは、動きを処理するために5次元配列を使用することにしましたが、あまり意識せずにこれを実行できることがわかりました。しかし、停止して読み直したとき、5次元の概念全体を理解するのは困難であり、自分が何をしたのか、コード自体がどのように機能するのかを完全に理解するには数分かかりました。 プログラマーが複雑なコードを書くとき、彼らが何をしているのかを半分の時間で理解しないのは普通ですか?

8
ソフトウェアアーキテクチャを担当するアジャイル環境
アジャイルチームでは、現在のスプリントで行われている作業だけでなく、システム全体に影響する高レベルのアーキテクチャと設計の決定を担当するのは誰ですか? プロダクトオーナー、スクラムマスター、スクラムチーム、または他の誰かでしょうか?
19 agile  scrum 

5
「#define me(* this)」をお勧めしますか?
このマクロは、コンパイラのコマンドラインパラメーターとして、グローバルヘッダーで定義することができます。 #define me (*this) そして、いくつかの使用例: some_header.h: inline void Update() { /* ... */ } main.cpp: #include "some_header.h" class A { public: void SetX(int x) { me.x = x; me.Update(); } void SomeOtherFunction() { ::Update(); } /* 100 or more lines ... */ void Update() { // ... } int x; …
19 c++ 

1
一意性タイプを使用して安全な並列処理を実装する
しばらくの間、純粋な関数型言語のモナドの代替として、一意性タイプに興味がありました。残念ながら、これは一種のCS研究の難解な分野であり、ユニークなタイプのプログラミングに関するオンラインリソースはほとんどありません。 参照(「ボックス」)や配列などのステートフルデータ構造を実装するために一意性タイプがどのように使用されるかは明らかですが、他の一般的なステートフルデータ構造を実装する方法を回避します。 たとえば、一意の型によるロックを実装することは可能ですか?一意性タイプを使用して、スレッド間で可変デー​​タを共有できますか?一意の型を使用して同期プリミティブ(ミューテックスなど)を構築することは可能ですか、またはメッセージの受け渡しは必要ですか?

2
C#にnew()制約があるのに、他の同様の制約がないのはなぜですか?
C#ジェネリックでは、と言うことで、型パラメーターの制約を宣言Tしてデフォルトコンストラクターを持たせることができますwhere T : new()。ただし、このような他の種類の制約は有効ではありません- new(string)たとえば、など 言語設計および/または実装の観点から、この理由は何ですか? コンストラクタの動作方法や、これを禁止する(または少なくとも難しくする)型システムの実装方法に何かありますか?もしそうなら、それは何ですか?default(T)実際にコンパイルさnew T()れた場所を読んだことを思い出しT : structます。これと関係があるのでしょうか? それとも、言語が複雑になりすぎないようにするために、単に設計上の決定を下しただけですか?

1
GitHubでプロジェクトにスターを付けたユーザーとの交流を高めるにはどうすればよいですか?
この投稿を改善したいですか?引用や回答が正しい理由の説明など、この質問に対する詳細な回答を提供します。十分な詳細のない回答は、編集または削除できます。 私は最近、GitHubに取り組んでいるHebelと呼ばれるプロジェクトを立ち上げました。PythonおよびNvidia CUDAで記述されたGPU加速ディープラーニングのフレームワークです。私はそれについてGoogle+に投稿し、その後すぐにHacker Newsで取り上げられ、数日間わずかに口コミで広まりました。後でMachine Learningのsubredditで再び投稿し、私のプロジェクトはGitHubで822個の星と47個のフォークを拾い上げ、とても爽快でした。822個の星は、私のプロジェクトがGitHubの上位200個のPythonプロジェクトに含まれており、実際、virtualenvなどの広く使用されている有名なPythonプロジェクトよりも星が多いことを意味します。 私のプロジェクトにはかなりの関心がありますが、これまで見てきた実際の関与には非常に失望しています。私のプロジェクトの47のフォークはいずれもコミットされておらず、プルリクエストも受け取っていません。また、提出された3つの問題のみが2人によって提出されました。私のプロジェクトは多くの人々にとって非常に興味深い可能性がありますが、彼らは一度だけスターを付けたりフォークしたりし、その後再び戻ったり、継続的に使用したりすることはありません。 ユーザーにバグや機能強化のリクエストを送信したり、貢献者に変更を送信してもらうために、どうすればエンゲージメントを改善できますか?

5
チューリング完全なプロセッサを構築するために必要な命令の絶対最小セットは何ですか
プロセッサが命令を処理する方法についての一般的な考えはありますが、ほとんどの場合、高級言語で作業することに時間を費やしています。鉄の近くで働いている人が貴重な洞察を提供できるかもしれません。 プログラミング言語が基本的にプロセッサの命令セットの非常に高度な抽象化であると仮定すると、チューリング完全なマシンを作成するために必要な命令の最も基本的なセットは何ですか? 注:ハードウェアアーキテクチャの多様性については何も知りませんが、簡単にするために、ALU(必要な場合)と命令スタックを備えた典型的なプロセッサであると仮定します。*

4
動的プログラミングに適している問題をどのように特定しますか?
私は最近、動的プログラミングについて読んでいます。ゼロから始めて、現在DP問題の特定と解決が得意な人の話を聞きたいです。私はこれらの問題をDPとして特定し、簡潔な解決策を組み立てるのに苦労しています。 私は初心者のDPの問題とMITのリソースなどのほとんどを経験しました

3
GPLでは、だれでもGPLソフトウェアを無料で入手できますか?
販売用の素晴らしいWordPress(GPL)テーマを見つけました。 私はそれを買った人を知っています。 2つの質問があります。 それを販売する会社は、ソースコードを要求する人(顧客であるかどうかにかかわらず)に送信する義務を負っていますか? それを購入した人は、私が本番で使用できるコピーを無料で提供できますか?
19 gpl  pricing 

1
誰かのプルリクエストを編集するためのエチケット
私はGitHubにリポジトリを所有しており、誰かが1回のコミットでプルリクエストを送信しました。私は彼のソリューションを部分的に実装したいだけで、ユーザーが行ったコード変更の約半分を使用します。この状況ではどうすればよいですか? 彼のバージョンのブランチを作成し、元のバージョンから2番目のコミットに保存する「古い」コードをコピーして貼り付けます。これにより、コミット間の差分が実際より大きくなり、のようなものがスローされgit blameます。 彼のコミットから保持したいコードをコピーして、新しい別のコミットに貼り付けます。これは、彼がコードへの貴重な貢献に対してクレジットを受け取らないことを意味します。 上記と同じように、彼のコードの一部を新しいコミットにコピーしますが、コミットの作成者を私ではなく彼に変更します。彼は技術的にはコミットされた正確なコードを書いていないので、これが眉をひそめているかどうかはわかりません。しかし、少なくとも彼は使用されている行の属性を取得します。

4
メモリリークを修正することはどれほど重要ですか?
Valgringによって、いくつかのGTK +プログラムがメモリリークを起こすことがわかりました。これらのリークを修正することはどれほど重要ですか?多くの場合、これらのプログラムは非常にうまく機能しますが、一方で、漏れているコードの一部を他のプログラムにコピーしたいかどうかはわかりません。そして、GTK +-プログラムのアイデアが高速に動作することであるかどうかはわかりません。したがって、リークがあります。 したがって、オープンソースプログラムでメモリリークを見つけることがある場合、それを修正する必要がありますか、たとえば効率性の問題があるので、プログラマの元のアイデアは小さなリークコードを書くことでしたか?
19 c  memory 

11
C ++コンパイラは、不要な括弧を削除/最適化しますか?
コードは int a = ((1 + 2) + 3); // Easy to read より遅く走る int a = 1 + 2 + 3; // (Barely) Not quite so easy to read または、「無駄な」括弧を削除/最適化するのに十分な最新のコンパイラーです。 非常に小さな最適化の懸念のように思えるかもしれませんが、C#/ Java / ...よりもC ++を選択することは、最適化(IMHO)のすべてです。

8
Java 7で文字列をオンに切り替えることの利点は何ですか?
この質問は、Software Engineering Stack Exchangeで回答できるため、Stack Overflowから移行されました。 6年前に移行され ました。 Javaでプログラミングを始めたとき、switchステートメントが文字列を受け取らないという事実にイライラしました。その後、列挙型を使用すると、型の安全性(リファクタリングが容易になる)と他の開発者にとってわかりやすい値を渡すのではなく、列挙型を使用するメリットを実感しました。 SE7では、Enumではなく、文字列を入力として使用するスイッチを使用することにした状況を考えるのに苦労しています。文字列全体を切り替えることで実装されている場合(たとえば、部分一致または正規表現の一致ではなく)、コードが変更される理由が少なくなるようには見えません。 また、IDEツールとコーディングの読み取り/書き込み比率により、文字列値を渡すよりも余分なEnumを自動生成する方がはるかに幸せです。 彼らはプログラマーとしてどのような利益をもたらしますか?ボイラープレートが少ない? この機能のために言語が泣き叫ぶような気はしません。たぶん私は見落としているユースケースがあります。

5
「グラノーラ棒」のような構造の集合質量を見つけるアルゴリズムは?
私は惑星科学研究者であり、私が取り組んでいるプロジェクトの1つは、土星の環のN体シミュレーションです。この特定の研究の目標は、粒子が自身の自己重力の下で凝集するのを観察し、凝集塊の総質量とセル内のすべての粒子の平均速度を測定することです。これが、土星の夏至の間にカッシーニ宇宙船によって行われた観測を説明できるかどうかを解明しようとしています。以下は、任意のタイムステップがどのように見えるかのスクリーンショットです。(各粒子の直径は2 mで、シミュレーションセル自体の直径は約700 mです。) 私が使用しているコードは、すでにすべてのタイムステップで平均速度を吐き出します。私がしなければならないのは、塊の中の浮遊粒子ではなく、塊の中の粒子の質量を決定する方法を見つけ出すことです。私はすべての粒子の位置、質量、サイズなどを知っていますが、例えば、粒子30,000〜40,000と102,000〜105,000が人間の目に明らかな1本の鎖を構成していることは簡単にはわかりません。 したがって、私が記述する必要があるアルゴリズムは、すべての粒子位置を通過し、どの粒子が塊に属しているかを把握し、計算するユーザー入力パラメーターを可能な限り少なくする必要があります(複製可能性と客観性のため)質量。セル上のすべてとは対照的に、「各」クランプ/ストランドに対してそれを行うことができれば素晴らしいと思いますが、実際にそれらを分離する必要はないと思います。 私が考えていた唯一のことは、あらゆる粒子間の距離を計算するN 2距離計算を行うことでした。たとえば、最も近い100個の粒子が特定の距離内にある場合、その粒子はクラスタ。しかし、それはかなりずさんなようであり、CSの人々やプログラマーがよりエレガントなソリューションを知っていることを望んでいましたか? 私のソリューションで編集: 私がやったのは、ある種の最近隣/クラスターアプローチを採用し、最初にクイックnダーティN 2実装を行うことでした。したがって、すべての粒子を取得し、他のすべての粒子までの距離を計算します。クラスター内のしきい値は、d距離内にN個の粒子があるかどうかでした(残念ながら、先験的に設定する必要がある2つのパラメーターですが、応答/コメント、私はそれらのいくつかを持っていないことで逃げるつもりはなかった)。 次に、距離を並べ替えずに、順序Nの検索を行ってd内のパーティクルのカウンターをインクリメントすることで速度を上げました。その速度は6倍になりました。ツリーコードについてはほとんど何もありません)。Iは、グリッドの設定数に(グリッドサイズ≈7ときに最良の結果をシミュレーションセルを分割D細胞と主グリッドラインアップは、1つのグリッドがで半分だけオフセットされている)のxとyの、及び他の二つがずれています1/4 x ± xおよび± y。次に、コードはパーティクルをグリッドに分割し、各パーティクルNはそのセル内の他のパーティクルまでの距離を計算するだけで済みます。 理論的には、これが実際のツリーである場合、N 2の速度ではなく次数N * log(N)を取得する必要があります。私は2つの間のどこかに行きました、そこでは50,000個の粒子のサブセットで速度が17倍になり、150,000個の粒子のセルでは速度が38倍になりました。最初の12秒、2番目の53秒、500,000粒子セルの460秒。これらは、コードがシミュレーションを1タイムステップ先に実行するのにかかる時間に匹敵する速度であるため、この時点では妥当です。ああ-そしてそれは完全にスレッド化されているので、私がそれに投げつけることができる限り多くのプロセッサーを必要とします。

1
Pythonでtkinter GUIをプログラミングするときにクラスを使用する理由
私は主にPythonでプログラミングし、TkinterでいくつかのGUIをプログラミングしました。これまでに見たすべてのチュートリアルでは、GUIのクラスを定義して使用することを推奨していますが、GUIはクラスなしで手順のみを使用して問題なく実行されます。 クラスを使用する理由 私の観点からは、単純に余分な複雑なレイヤーと不要なコードであるように思えます。
19 python  gui  class 

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