ソフトウェア工学

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

5
なぜfortran標準ライブラリがないのですか?
数学と科学計算に焦点を当てた言語であるために、私は常にFortran標準ライブラリに有用な数学ルーチンがまったくないことに困惑しています。少なくとも標準偏差と平均を計算するルーチンが付いて出荷されることを期待しますが、これは当てはまりません。特にFortran 90の導入とモジュールの追加(したがってネームスペース汚染の低減)により、このサービスの重大な欠如の理由はわかりません。 これが事実である理由についてのあなたの知識を聞きたいのですが。

5
スペイン語コードの管理
スペイン語のクライアントからの新しいプロジェクトがあり、彼のJavaコードとコメント、変数、メソッド名はすべてスペイン語です。 英語に変換して使用することはできません。このような状況で作業したことがある場合、新しい開発を行う必要があるため、このリスクを軽減するために何ができるかをアドバイスできますか? 彼らのJavaプロジェクトには、EJB、Struts、カスタムフレームワーク、および少なくとも合計20万行のコード(最小推定値)を持つ10000を超えるJavaファイルが混在しており、Weblogic Server 10を使用してデプロイされます。 よろしく、Dazzlers
10 java 

8
「開発者の英語力」を理解するために最も重要な概念は何ですか?[閉まっている]
休業。この質問には、より焦点を当てる必要があります。現在、回答を受け付けていません。 この質問を改善してみませんか?質問を更新して、この投稿を編集するだけで1つの問題に焦点を当てます。 5年前休業。 4月に、英語教師のグループに対して**英語2.0-開発者の言語を理解する "と呼ばれる講演を行う予定です。目的は、2時間以内に主要な概念の背景を提供し、主要な概念を理解してもらうことです。開発者のブログとポッドキャストをよりよく理解し、開発者と話すときにより良い質問をすることができます。 理解する必要がある最も重要な概念、開発者が当たり前と思っているが、一般の人が慣れていない概念は何だと思いますか?ここにいくつかのアイデアがあります: バージョン管理 抽象化 パブ/サブ プッシュとプル デバッグ モジュール性 3層アーキテクチャ クラス/オブジェクト 「スパゲッティコード」対OOP 例外スロー クラウドソーシング リファクタリング クラウド DRY-繰り返さないでください クライアントサーバー ユニットテスト デザイナー/開発者

12
「SELECT *」の英語の読み方は?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前休業。 先日、友人はアメリカではSQLをes-qu-elではなくsquelのように発音していると私に言った。私はびっくりしました。話しながら「SELECT *」がどのように読み上げられるのか気になっていました。 星を選択しますか? アスタリスクを選択しますか? すべて選択?
10 sql 

2
小さなプロジェクトのためにプログラマーを雇うのに適したサイトはありますか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前休業。 私の能力を超えるPHPコードが必要なので、誰かに雇ってもらう必要があります。それは本当に長すぎたり複雑なものではないので、私のリクエストを投稿して、特定の金額でそれを行う誰かを見つける簡単な方法があるかどうかを知りたかったのです。そのようなウェブサイトは存在しますか、それとも最良の選択肢は何ですか?とにかくありがとう

9
面接で選ばれないのはなぜですか?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、議論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前休業。 ロックされています。この質問とトピックへの回答はロックされています。質問はトピックから外れていますが、歴史的に重要です。現在、新しい回答や相互作用を受け入れていません。 私は4年間開発に携わっていますが、PHPでは3.5です。面接で選ばれることができないようです。 面接官が候補者に見たいと思う特別なことを知りたい-シニアPHP開発者の役割のために。 インタビュアーが私に10の質問をし、5つしか答えられません。選択はこれらに依存しますか?私が問題を解決できないという意味ではありません。質問をグーグルで検索したり、フォーラムで質問したりできます。男が一人一人の質問に対するすべての答えを思い出すことができないことをなぜ彼らは理解しないのですか?特にプログラミングのもの。 お知らせ下さい。
10 interview 

2
関数型プログラミングは、同じオブジェクトが複数の場所から参照される状況をどのように処理しますか?
人々(このサイトでも)が日常的に関数型プログラミングのパラダイムを称賛していることを読んで聞いています。特に、C#、Java、C ++などの従来の命令型オブジェクト指向言語でも、プログラマーにこれを強制するHaskellのような純粋に関数型の言語だけでなく、このアプローチを提案します。 変異性と副作用が便利だと思うので、理解するのは難しいと思います。しかし、人々が現在副作用を非難し、可能な限りそれらを取り除くことが良い習慣であると考えると、私が有能なプログラマーになりたいなら、私はパラダイムのいくつかのより良い理解に向けて私の夢を始めなければならないと信じています...したがって、私のQ. 機能的パラダイムで問題を見つけたときの1つの場所は、オブジェクトが複数の場所から自然に参照されるときです。2つの例で説明します。 最初の例は、私が暇なときに作ろうとしているC#ゲームです。これはターンベースのWebゲームで、両方のプレイヤーに4つのモンスターのチームがあり、チームからモンスターを戦場に送ることができます。戦場では、相手のプレイヤーが送ったモンスターと対戦します。プレイヤーは戦場からモンスターを呼び戻し、それらを自分のチームの別のモンスターに置き換えることができます(ポケモンと同様に)。 この設定では、単一のモンスターを少なくとも2か所から自然に参照できます。プレイヤーのチームと2つの「アクティブな」モンスターを参照する戦場です。 ここで、1つのモンスターがヒットし、ヘルスポイントが20失われる状況を考えてみましょう。命令パラダイムの括弧内で、このモンスターのhealthフィールドを変更して、この変更を反映させます。これが私が現在行っていることです。ただし、これによりMonsterクラスが変更可能になり、関連する関数(メソッド)が不純になります。これは、現時点では悪い習慣と考えられています。 私は自分にこのゲームのコードを理想的な状態ではない状態にして、実際に将来のある時点でそれを完成させるという希望を持たせる許可を与えましたが、それがどのようにあるべきかを知り、理解したいと思います適切に書かれた。したがって、これが設計上の欠陥である場合、どのように修正すればよいですか? 機能的なスタイルでは、私が理解しているように、代わりにこのMonsterオブジェクトのコピーを作成し、この1つのフィールドを除いて古いオブジェクトと同じにします。suffer_hitこのメソッドは、古いオブジェクトを変更する代わりに、この新しいオブジェクトを返します。次に、同様にBattlefieldオブジェクトをコピーし、このモンスター以外のすべてのフィールドを同じに保ちます。 これには少なくとも2つの困難が伴います。 階層は、この単純化された単なるBattlefield->の例よりもはるかに深くすることができますMonster。1つを除くすべてのフィールドをこのようにコピーし、新しいオブジェクトをこの階層全体で返す必要があります。これはボイラープレートのコードです。関数型プログラミングはボイラープレートを減らすことになっているので、私は特に迷惑です。 ただし、さらに深刻な問題は、データが同期されなくなることです。フィールドのアクティブなモンスターは、体力が低下します。ただし、この同じモンスターは、その制御プレイヤーから参照されTeam、そうではありません。代わりに命令型のスタイルを採用した場合、データのすべての変更はコードの他のすべての場所から即座に表示され、このような場合には非常に便利ですが、これを実現する方法はまさに人々が言うことです命令型スタイルとは間違っています! これでTeam、各攻撃の後に旅をすることで、この問題に対処できるようになります。これは余分な作業です。しかし、後でさらに多くの場所からモンスターが突然参照される可能性がある場合はどうなりますか?たとえば、モンスターがフィールド上にある必要のない別のモンスターに集中できるようにする能力が付いている場合はどうなりますか(実際にそのような能力を検討しています)。私はウィル確かに immediatellyそれぞれの攻撃の後にも焦点を当てたモンスターへの旅を取ることを覚えていますか?これは時限爆弾のようで、コードが複雑になると爆発するため、解決策はないと思います。 より良い解決策のアイデアは、同じ問題にぶつかったときの2番目の例から生まれます。学界では、Haskellで独自のデザインの言語の通訳を書くように言われました。(これは私がFPとは何かを理解し始めることを余儀なくされた方法でもあります)。クロージャーを実装しているときに問題が発生しました。もう一度同じスコープは現在、複数の場所から参照することができます。この範囲を保持する変数を通じおよびネストされたスコープの親スコープとして!明らかに、それを指している参照のいずれかを介してこのスコープに変更が加えられた場合、この変更は他のすべての参照からも見える必要があります。 私が付いた解決策は、各スコープにIDを割り当て、Stateモナド内のすべてのスコープの中央辞書を保持することでした。これで、変数はスコープ自体ではなく、バインドされたスコープのIDのみを保持し、ネストされたスコープは親スコープのIDも保持するようになります。 私のモンスターバトルゲームでも同じアプローチが試みられると思います...フィールドとチームはモンスターを参照していません。代わりに、中央のモンスターディクショナリに保存されているモンスターのIDを保持しています。 ただし、問題の解決策として躊躇せずにそれを受け入れることができないというこのアプローチの問題をもう一度見ることができます。 これもまた、ボイラープレートコードのソースです。これにより、1行が必ず3行になります。以前は単一フィールドの1行のインプレース変更でしたが、現在は(a)中央ディクショナリからオブジェクトを取得する(b)変更を加える(c)新しいオブジェクトを保存する中央の辞書に。また、参照の代わりにオブジェクトと中央の辞書のIDを保持すると、複雑さが増します。FPは複雑さと定型コードを減らすために宣伝されているので、これは私が間違っていることを示唆しています。 さらに深刻な2番目の問題についても書きました。このアプローチではメモリリークが発生します。到達できないオブジェクトは、通常、ガベージコレクションされます。ただし、到達可能なオブジェクトがこの特定のIDを参照していない場合でも、中央の辞書に保持されているオブジェクトをガベージコレクションすることはできません。また、理論的に注意深いプログラミングによりメモリリークを回避できます(各オブジェクトが不要になったら、手動で中央ディクショナリから削除することもできます)が、これはエラーが発生しやすく、FPはプログラムの正確さを高めるようにアドバタイズされます。正しい方法ではありません。 しかし、解決された問題であるように思われました。WeakHashMapこの問題の解決に使用できるJavaが提供しています。C#も同様の機能を提供します。ConditionalWeakTableただし、ドキュメントによると、コンパイラによる使用を目的としています。そしてHaskellにはSystem.Mem.Weakがあります。 そのような辞書を保存することは、この問題の正しい機能的な解決策ですか、それとも私が見落としているより単純なものがありますか?そのような辞書の数は簡単に増えてひどくなります。したがって、これらのディクショナリも不変であると想定されている場合、これは多くのパラメータを渡すことを意味します。または、それをサポートする言語では、モナド計算が行われます。これは、ディクショナリがモナドで保持されるためです(ただし、私は純粋に関数でそれを読んでいます)このディクショナリソリューションはほとんどすべてのコードをStateモナド内に配置しますが、これは正しいソリューションであるかどうかを疑います。 いくつか検討した後、もう1つ質問を追加します。このような辞書を作成することで何が得られるのでしょうか。多くの専門家によると、命令型プログラミングの問題点は、一部のオブジェクトの変更が他のコードに伝播することです。この問題を解決するために、オブジェクトは不変であると想定されています-このため、私が正しく理解していれば、オブジェクトに加えられた変更は他の場所には表示されないはずです。しかし、今は古くなったデータで動作する他のコードが気になるので、中央の辞書を発明して...もう一度、いくつかのコードの変更が他のコードに伝播するようにします!したがって、想定されるすべての欠点を伴う命令型のスタイルに戻りませんか?

3
秘密をソース管理の外に保つ-問題を解決するだけですか?
App.configおよび同様のファイルでシークレットがソース管理されているいくつかのプロジェクトを継承しました。幸い、それは公開リポジトリではないため、リスクはそれほど深刻ではありませんでした。Azure KeyVaultなど、これを管理するためのより良い方法を検討しています。(しかし、この質問がその解決策に固有であるとは思わない。) 一般に、問題を解決するだけではないですか?たとえば、Azure KeyVaultでは、アプリIDとアプリシークレットが、ソース管理の対象外にしておく必要があるものになります。残念ながらこれがうまくいかない傾向の典型的な例を次に示します。他のアプローチも同様になり、APIキーまたはキーストアファイルを保護する必要があります。 Azure KeyVaultのような製品は、シークレットを個別の構成ファイルに保存し、それが.gitignoreまたは同等のものに含まれていることを確認するよりも優れており、意味のないほど複雑であるように思えます。このファイルは、必要に応じてサイドチャネルを介して共有する必要があります。もちろん、人々はおそらく安全にお互いにそれを電子メールで送信しません... 問題を解決するだけでなく、秘密を管理する方法はありますか?この質問には、明確に定義された単一の答えがあると思います。類推して、HTTPSが問題を解決するだけではないのかと尋ねると、答えはCAキーがOSと共に配布され、OSの配布方法を信頼しているので、私たちはそれらを信頼しているということです。(別の質問にする必要があるかどうか...)

4
大きなテンプレートの実装を処理するC ++推奨の方法
通常、C ++クラスを宣言する場合は、宣言のみをヘッダーファイルに配置し、実装をソースファイルに配置することをお勧めします。ただし、このデザインモデルはテンプレートクラスでは機能しないようです。 オンラインで見ると、テンプレートクラスを管理する最良の方法について2つの意見があるようです。 1.宣言とヘッダーの実装全体。 これはかなり簡単ですが、私の意見では、テンプレートが大きくなるとコードファイルを保守および編集することが困難になります。 2.最後にインクルードするテンプレートインクルードファイル(.tpp)に実装を記述します。 これは私にはより良い解決策のようですが、広く適用されているようには見えません。このアプローチが劣っている理由はありますか? 多くの場合、コードのスタイルは個人の好みやレガシースタイルによって決定されます。私は新しいプロジェクト(古いCプロジェクトをC ++に移植)を開始しており、OO設計は比較的初心者なので、最初からベストプラクティスに従いたいと考えています。

4
一部のユーザーの機能を非表示/無効にする
アプリの無料版と有料版があるとしましょう。有料版は、ユーザーが利用できる機能に関する無料版のスーパーセットです。つまり、有料版は無料アプリのすべての機能に加えて追加機能を備えています。 起動時にロードされるフラグ(無料/有料など)に基づいて機能の可用性を切り替えるパターンはありますか? どこにでも以下のコードブロックを用意するのは好きではありません。 if(isFreeVersion){ // ... } else { // ... } すべてのバージョンのために2つの別々のgitのブランチを持つことは、それは2を維持(またはそれ以上)のコードのソースを意味しますので、オプションではありません、一般的には非現実的と思われる、よりここで議論されています。バージョン管理で同じコードベースから二つの個別のソフトウェアバージョンを維持します。 これを行う方法はありますか?それでも、単一のコードベースがあり、無料/有料フラグをチェックする条件ステートメントでコードを散らかしていませんか? これは以前に何度も議論されたと確信しており、この問題に取り組むためのいくつかのパターンがあると確信していますが、それを見つけることができません。 Android / Javaを使用しています。

2
関数型プログラミング言語は副作用を許可しませんか?
ウィキペディアによると、宣言型である関数型プログラミング言語は、副作用を許可していません。一般に宣言型プログラミングでは、副作用を最小限に抑えたり、排除したりします。 また、ウィキペディアによると、副作用は状態変化に関連しています。したがって、関数型プログラミング言語は、その意味では、状態を保存しないため、実際には副作用を排除します。 しかし、それに加えて、副作用には別の定義があります。副作用 値を返す以外に、呼び出し側の関数または外界との観測可能な相互作用があります。たとえば、特定の関数は、グローバル変数または静的変数の変更、その引数の1つの変更、例外の発生、ディスプレイまたはファイルへのデータの書き込み、データの読み取り、または他の副作用のある関数の呼び出しを行う場合があります。 その意味で、関数型プログラミング言語は実際には副作用を許容します。外部の世界に影響を及ぼし、他の関数を呼び出し、例外を発生させ、ファイルに書き込むなどの無数の例があるからです。 それで、最後に、関数型プログラミング言語は副作用を許可するかどうか? または、何が「副作用」とみなされるか理解していないため、命令型言語では許可され、宣言型言語では許可されません。上記と私が得た結果によると、副作用を排除する言語はないため、副作用について何か見落としているか、ウィキペディアの定義が誤っています。

2
親リソースが見つからない場合、POSTに対する適切な応答ステータスコードは何ですか?
私は次のエンドポイントを持っています: a/{id}/b b送信POSTリクエストを含むを作成します。もしa与えられたもの{id}が見つからない場合、私は、404 NOT_FOUNDまたは多分で応答すべき409 CONFLICTですか? それはplainを処理することでありa/{id}、トリックはここでサブリソースが使用されることです。

2
複数のアプリインスタンスでデータベースの移行を安全に実行するにはどうすればよいですか?
高速(1秒未満)と低速のデータベース移行(> 30秒)の両方が混在するアプリケーションがあります。現在、データベースの移行をCIの一部として実行していますが、CIツールはアプリのデータベース接続文字列をすべて(複数の環境で)認識している必要があるため、理想的ではありません。このプロセスを変更して、アプリケーションが起動時に独自のデータベース移行を実行するようにします。 ここに状況があります: このアプリケーションの複数のインスタンスがあり、約5つが本稼働しています。それらを呼び出しましょうnode1, ..., node5。各アプリは単一のSQL Serverインスタンスに接続し、ローリングデプロイを使用していません(すべてのアプリは私の知る限り同時にデプロイされています)。 問題:長期にわたる移行があるとしましょう。この場合、node1は開始してから、マイグレーションの実行を開始します。さて、node4開始し、長期実行の移行がまだ完了していないためnode4、移行の実行も開始します->データ破損の可能性はありますか?この問題をどのように防止しますか、または問題は心配するほど重要ですか? 私はこの問題を分散ロックで解決しようと考えていました(etcdそれらを使用するか、それに沿って何かを使用します)。基本的に、すべてのアプリがロックを取得しようとし、そのうちの1つだけがロックを取得して移行を実行してから、ロックを解除します。残りのアプリが起動してクリティカルセクションに入ると、すべての移行がすでに実行されているため、移行スクリプトは終了します。 しかし、私の直感は「これはやり過ぎです。もっと簡単な解決策があるはずです」と言っているので、他の誰かがもっと良いアイデアを持っているかどうかを確認するためにここに尋ねると思いました。

5
実世界の値を表す定数を更新することは、開閉原理の違反ですか?
私は労働者の純年収を計算するクラスを持っています。税率を表す定数があります。しかし、ある日、税率が変更されたため、コードを修正する必要があります。 この定数を修正する行為は、クラスを変更して閉じる必要があると仮定しているため、Open-Closed Principleの違反を示していますか?

3
関数のランタイムインポートを可能にするC ++プログラムの設計方法
本日は、特定のソフトウェアアーキテクチャを実現するためのC ++の機能についてお伺いします。 もちろん、私は検索を使用しましたが、直接リンクされた回答は見つかりませんでした。 基本的に、私の目標は、ユーザーが任意に構成された物理システム(運転中の自動車など)のモデリングとシミュレーションを行えるプログラムを構築することです。私は、物理モデル(クラス内の関数)のライブラリがあると想定しています。各関数は、基礎となる物理的記述に応じて、いくつかの入力を持ち、いくつかの出力を返す場合があります。たとえば、燃焼エンジンモデル、空力抵抗モデル、ホイールモデルなどです。 ここでのアイデアは、ユーザーが自分のニーズに応じて任意の機能を構成できるようにするフレームワークをユーザーに提供することです。つまり、物理的な動作をマップすることです。フレームワークは、さまざまな機能の出力と入力を接続する機能を提供する必要があります。したがって、フレームワークはコンテナークラスを提供します。これをCOMPONENTと呼び、1つまたは複数のモデルオブジェクト(FUNCTION)を保持できます。これらのコンテナーは、他のコンポーネント(複合パターンを参照)や、関数パラメーター間の接続(CONNECTOR)も保持できます。さらに、コンポーネントクラスは、数学ソルバーなどのいくつかの一般的な数値機能を提供します。 関数の構成は実行時に行う必要があります。最初の例では、ユーザーは、コンポジション構造を定義するXMLをインポートすることでコンポジションをセットアップできる必要があります。その後、GUIを追加することを考えることができます。 ここで理解を深めるために、非常に単純化した例を示します。 <COMPONENT name="Main"> <COMPONENT name="A"> <FUNCTION name="A1" path="lib/functionA1" /> </COMPONENT> <COMPONENT name="B"> <FUNCTION name="B1" path="lib/functionB1" /> <FUNCTION name="B2" path="lib/functionB2" /> </COMPONENT> <CONNECTIONS> <CONNECTOR source="A1" target="B1" /> <CONNECTOR source="B1" target="B2" /> </CONNECTIONS> </COMPONENT> 私の問題ははるかに一般的であるため、フレームワークの機能について詳しく説明する必要はありません。フレームワークのコード/プログラムがコンパイルされたとき、物理的な問題の説明とユーザー定義関数は不明です。ユーザーが(XMLまたは後でGUIを介して)関数を選択すると、フレームワークは関数情報を読み取る必要があります。つまり、ユーザーに関数を相互接続するオプションを提供するために、入力パラメーターと出力パラメーターの情報を取得する必要があります。 私はリフレクションの原理を知っており、C ++がこの機能を提供していないことを知っています。ただし、「実行時にオブジェクトを構築する」という概念は非常に頻繁に必要になると思います。目標を達成するには、C ++でソフトウェアアーキテクチャをどのように設定すればよいですか?C ++は正しい言語ですか?私は何を見落としていますか? 前もって感謝します! 乾杯、オリバー

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