ソフトウェア工学

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

20
プロジェクトマネージャーをどのように扱いますか
私は現在、最近縮小した会社で働いています。すべての社内作業、クライアントのインストール、ビルド、QA、および基本的にすべての社内作業を行います。 私の直接の上司は非常に非技術的であり、最近、彼の知識不足に対処するのが非常に難しいことがわかりました。 私が抱えていた最大の問題は次のとおりです。 私は一度に多くの締め切りにあります。締め切りに間に合わせることができないため、半分の速さの見積もりをまとめるのをやめます。その間、3つのサポートコールが入り、見積もりを出します。それからベンダーが壊したすべてを修正しなければなりません。最悪なのは、私が参加していなかったプロジェクトで「彼のバッファ」を食べた場合、すでにスケジュールされているすべてを完了し、他のすべてのものが出てくると予想されることです。 問題が発生すると、なぜ問題が発生し、詳細に説明されるのかと尋ねられますが、その詳細は彼にとってまったく意味がありません。 彼が気にするのは締め切りだけですが、彼はすべてをスケジュールする人です。 「私はグラフィックデザイナーではなくプログラマです。彼にとっては何の意味もありません」 私は.NETプログラマーとして雇われましたが、ベンダーは多くのサイトでワードプレスを選択することができました(ええ、私はそれについてすぐに学ばなければなりませんでした) 続けられると思いますが、このタイプのプロジェクトマネージャーに対処しなければならなかった人はいますか?別の仕事を見つける以外のアドバイスは何ですか? 妻がMSに非常にかかっているため、保険を失うことはできないので、現時点では仕事を辞められません。 私はマネージャーに対処する最良の方法を探しています。 事前に感謝し、これをwikiにしたので、閉じないでください。 ここに今日起こった別の状況があります。私には、プロジェクトを支援してくれる友人がいます。彼は「両方」に仕事を引用し、大まかな見積もりを出すように頼みました。私は彼に戻り、「友人をリソースとして使用して、1日7時間、1日6時間」と言いました。彼はそれをクライアントに渡し、10%のバッファーを追加しました(24時間)。彼はその後、私がプロジェクトで私の友人を得るすべてであることを教えてくれます。私は彼が7週間の間にどのくらいの時間空いていたか尋ねられませんでした。最悪の部分は、彼らがすでにクライアントに見積もりを与えていて、私にレビューもしていないことです。彼の見解は、私が彼に言った時間にそれを成し遂げるか、別の仕事を見つけるかのどちらかです。

3
引数を取らず、何も返さない関数の名前は何ですか?[閉まっている]
Java 8のjava.util.functionパッケージには、次のものがあります。 機能:1つの引数を取り、1つの結果を生成します。 消費者:1つの引数を取り、何も生成しません。 サプライヤ:引数をとらず、1つの結果を生成します。 ...:プリミティブ、2つの引数などを処理する他のケース... しかし、「引数を取らず、何も生成しない」場合を処理する必要があります。 これには何もありませんjava.util.functionnal。 したがって、質問は次のとおりです。 「引数を取らず、何も返さない関数」の名前は何ですか? Java 8では、その定義は次のようになります。 @FunctionalInterface public interface InsertANameHere { void execute(); } エグゼキューターは既に存在し、別の目的があります:「サブミットされたRunnableタスクを実行するオブジェクト」。署名は一致せず(execute(Runnable):void)、機能的なインターフェースすらありません。 Runnableは存在しますが、スレッドコンテキストに強くリンクされています。 パッケージがあるjava.lang、ありませんjava.util.function。 javadocの状態:「Runnableインターフェイスは、インスタンスがスレッドによって実行されることを意図しているクラスによって実装する必要があります」。 「Runnable」という名前は、スレッド内で実行中のコードを示唆しています。

7
マイクロサービスで最も受け入れられているトランザクション戦略は何ですか
マイクロサービスを備えたシステムで発生した主要な問題の1つは、トランザクションが異なるサービスにまたがる場合のトランザクションの動作方法です。独自のアーキテクチャ内では、これを解決するために分散トランザクションを使用してきましたが、独自の問題があります。特にこれまでのところ、デッドロックは苦痛です。 別のオプションは、システム内のフローを認識し、システム全体にまたがるバックグラウンドプロセスとしてロールバックを処理する、カスタムメイドのトランザクションマネージャーのようです(他のサービスにロールバックするよう指示します)ダウンしている場合は、後で通知します)。 別の受け入れられるオプションはありますか?これらの両方に欠点があるようです。最初のものはデッドロックやその他の問題を引き起こし、2番目のものはデータの不整合を引き起こす可能性があります。より良いオプションはありますか?

7
REST Webサービスでアクションをトリガーするには、どのHTTP動詞を使用する必要がありますか?
RESTful Webサービスを実装していますが、利用可能なアクションの1つはになりますreload。設定、キャッシュなどを再ロードするために使用されます。 GETこのような単純なURIから始めました${path}/cache/reload(パラメーターは渡されず、URIのみが呼び出されます)。GETリクエストでデータを変更しないでください。 RESTful Webサービスでアクション/コマンドを呼び出すために使用する正しい動詞はどれですか? リロードは、独自のキャッシュ/構成/などをリロードするREST Webサービスのコマンドです。クライアントに情報を返すメソッドではありません。 おそらく私がやろうとしていることはRESTではありませんが、それでもこの方法で行う必要があるものです。このreloadメソッドは、アプリケーションの範囲内で意味のある実際の例に過ぎず、ほとんどの回答はそれに焦点を当てていますが、実際には、CRUDを実行しないがデータ/データを変更するアクションをトリガーする動詞を知る必要がありました状態。 Stack Overflowでこの詳細な回答を見つけました。件名:https ://stackoverflow.com/questions/16877968/
80 rest  rpc 

12
Javascriptからセミコロンを削除/削除する最近のシフトはなぜですか?
Javascriptからセミコロンを省略することは最近流行しているようです。数年前、Javascriptではセミコロンはオプションであり、投稿の要点は不要であるため気にしないほうがよいと強調したブログ投稿がありました。広く引用されているこの投稿では、それらを使用しないという説得力のある理由は示されていません。ただ、それらを除外しても副作用はほとんどありません。 GitHubでさえ、セミコロンなしの時流に飛びついて、内部で開発されたコードを省略する必要があり、メンテナーによるzepto.jsプロジェクトへの最近のコミットにより、すべてのセミコロンがコードベースから削除されました。彼の主な理由は次のとおりです。 彼のチームの好みの問題です。 タイピングが少ない それらを除外する他の正当な理由はありますか? 率直に言って、私はそれらを省略する理由は見当たらず、それらを消去するためにコードに戻る理由は確かにありません。また、(年の)推奨されるプラクティスに反します。これは、「カーゴカルト」の議論を実際に購入するものではありません。では、なぜ最近のセミコロン嫌いなのでしょうか?迫り来る不足はありますか?または、これは最新のJavascriptの流行ですか?

5
ステージング環境と本番環境
私はエンタープライズアプリケーションを構築する会社で働いており、開発(またはdev)、ステージング(またはステージ)、本番(またはprod)の3つの環境を維持しています。 devの意味は直感的です。アプリケーションの開発中に使用される環境です。 ステージング環境と運用環境の違いは何ですか?

8
広範囲にモックせずにユニットテストをどのように正確に記述する必要がありますか?
私が理解しているように、ユニットテストのポイントは、コードのユニットを単独でテストすることです。この意味は: コードベースの他の場所にある無関係なコードの変更によって壊れてはなりません。 統合テスト(ヒープで破損する可能性がある)とは対照的に、テストされたユニットのバグによって破損するユニットテストは1つだけです。 これはすべて、テストされたユニットのすべての外部依存関係をモックアウトする必要があることを意味します。そして、ネットワーク、ファイルシステム、データベースなどの「外部レイヤー」だけでなく、すべての外部依存関係を意味します。 これは、事実上すべての単体テストがモックする必要があるという論理的な結論につながります。一方、モックに関するGoogleの簡単な検索では、「モッキングはコードのにおい」であると主張する記事が数多くあり、ほとんど(完全にではありませんが)回避する必要があります。 さて、質問へ。 ユニットテストはどのように適切に書かれるべきですか? それらと統合テストの間の境界線は正確にどこにありますか? アップデート1 次の擬似コードを検討してください。 class Person { constructor(calculator) {} calculate(a, b) { const sum = this.calculator.add(a, b); // do some other stuff with the `sum` } } 依存関係Person.calculateをモックせずにメソッドをテストするテストCalculator(Calculator「外の世界」にアクセスしない軽量クラスであることを考えると)は、単体テストと見なすことができますか?

2
SQLiteデータベースで同時書き込みが許可されないのはなぜですか?
SQLiteでJavaを使用してデータベースプログラミングを行っています。 データベースへの一度に1つの接続のみが書き込み機能を持ち、多くの接続が一度に読み取り機能を持つことがわかりました。 SQLiteのアーキテクチャがなぜこのように設計されたのですか?書き込まれている2つのものがデータベース内の同じ場所に書き込まれていない限り、なぜ2つの書き込みが一度にできないのですか?

7
ビットマスクが「マスク」と呼ばれるのはなぜですか?また、それらの目的は何ですか?
「ビットマスク」がなぜこのように呼ばれるのですか? 私はそれらが主にビット単位の操作に使用され、ビットマスクの使用が個別の変数の使用よりも効率的であることを知っています。 しかし、私の質問は、ビットマスクが発明された理由と時期です。初期のコンピューティング以来使用されていましたか?ITドメイン内にビットマスク以外のタイプの「マスク」はありますか?

8
なぜprintfで先行するのではなく、末尾の改行を使用するのですか?
を使用するときは、先頭の改行を避けるべきだと聞きましたprintf。そのため、代わりにprintf("\nHello World!")使用する必要がありますprintf("Hello World!\n") 上記のこの特定の例では、出力が異なるため意味がありませんが、これを考慮してください。 printf("Initializing"); init(); printf("\nProcessing"); process_data(); printf("\nExiting"); に比べ: printf("Initializing\n"); init(); printf("Processing\n"); process_data(); printf("Exiting"); 見栄えが良いことを除けば、後続の改行を使用しても利点はありません。他の理由はありますか? 編集: ここで、そして今、投票権について話します。この質問は主に設計に関するものであるため、これはStack overflowに属するとは思わない また、この問題に対する意見かもしれませんが、Kilian Fothの回答とcmasterの回答は、1つのアプローチで非常に客観的な利点があることを証明しています。
79 c 

6
ガベージコレクションは、ネイティブにコンパイルされた言語でどのように機能しますか?
スタックオーバーフローに関するいくつかの回答を参照した後、ネイティブコンパイルされた言語の一部にガベージコレクションがあることが明らかです。しかし、これが正確にどのように機能するかは私には不明です。 ガベージコレクションがインタプリタ言語でどのように機能するかを理解しています。ガベージコレクターは、単にインタープリターと一緒に実行され、プログラムのメモリから未使用および到達不能なオブジェクトを削除します。両方が一緒に実行されています。 しかし、これはコンパイルされた言語でどのように機能しますか?私の理解では、コンパイラがソースコードをターゲットコード(特にネイティブマシンコード)にコンパイルすると、完了します。その仕事は終わりました。それでは、コンパイルされたプログラムをどのようにガベージコレクションするのでしょうか? 「ガベージ」オブジェクトを削除するためにプログラムが実行されている間、コンパイラは何らかの方法でCPUと連携しますか?または、コンパイラは、コンパイルされたプログラムの実行可能ファイルに最小限のガベージコレクタを含めますか。 Stack Overflowに関するこの回答からの抜粋により、後者のステートメントは前者よりも妥当性があると思います: そのようなプログラミング言語の1つがEiffelです。ほとんどのEiffelコンパイラは、移植性の理由でCコードを生成します。このCコードは、標準Cコンパイラによってマシンコードを生成するために使用されます。Eiffel実装は、このコンパイルされたコードに対してGC(および場合によっては正確なGC)を提供します。VMは必要ありません。特に、VisualEiffelコンパイラーはネイティブのx86マシンコードをフルGCサポートで直接生成しました。 最後のステートメントは、プログラムの実行中にガベージコレクターとして機能するプログラムを最終的な実行可能ファイルにコンパイラが含めることを意味するようです。 ネイティブにコンパイルされ、オプションのガベージコレクタを備えたガベージコレクションに関するD言語のWebサイトのページも、ガベージコレクションを実装するために元の実行可能プログラムと一緒にバックグラウンドプログラムが実行されることを示唆しているようです。 Dは、ガベージコレクションをサポートするシステムプログラミング言語です。通常、メモリを明示的に解放する必要はありません。必要に応じて割り当てるだけで、ガベージコレクターはすべての未使用メモリを利用可能なメモリのプールに定期的に返します。 この方法は、上記の場合はされて使用され、どのように正確にそれが働くだろうか?コンパイラは、ガベージコレクションプログラムのコピーを保存し、生成する各実行可能ファイルに貼り付けますか? または、私は私の考えに欠陥がありますか?その場合、コンパイルされた言語のガベージコレクションを実装するためにどのメソッドが使用され、どのように正確に機能しますか

3
「for-loop」の考え方から離れるにはどうすればよいですか?
これはかなり概念的な質問ですが、これについては良いアドバイスが得られることを望んでいました。私が行うプログラミングの多くは(NumPy)配列を使用しています。多くの場合、サイズの異なる2つ以上の配列のアイテムを一致させる必要があり、最初に行うのはforループまたはさらに悪いことにネストされたforループです。forループは(少なくともPythonでは)遅いので、できる限り避けたいです。 NumPyの多くのことには、調査するだけでよい事前定義コマンドがありますが、(経験豊富なプログラマーとして)何かを反復する必要があるときに思い浮かぶ一般的な思考プロセスがありますか? だから私はしばしばこのようなものを持っていますが、これはひどいので避けたいです: small_array = np.array(["one", "two"]) big_array = np.array(["one", "two", "three", "one"]) for i in range(len(small_array)): for p in range(len(big_array)): if small_array[i] == big_array[p]: print "This item is matched: ", small_array[i] 特にこれを達成するための複数の異なる方法があることを知っていますが、もしあれば、一般的な考え方に興味があります。
79 python  array  loops 

6
単一引用符と二重引用符[閉じた]
Javaのバックグラウンドから来てPythonを書く仕事を始めたばかりで、他の開発者''は二重引用符()ではなく一重引用符("")を使用して文字列を引用する傾向があることに気付きました。例えば: line1 = 'This is how strings typically look.' line2 = "Not like this." これには、個人的な好み以外に特別な理由がありますか?これは文字列を引用する適切な方法ですか?特に、私が知りたいのは、このスタイルのコーディングを推進する何らかの標準または受け入れられたベストプラクティスがあるかどうかです。


2
Javascriptに実際に適用可能なオブジェクト指向の原則はありますか?
Javascriptはプロトタイプベースのオブジェクト指向言語ですが、次のいずれかの方法により、さまざまな方法でクラスベースになります。 自分でクラスとして使用する関数を書く フレームワークで気の利いたクラスシステムを使用する(mootools Class.Classなど) Coffeescriptから生成する 最初はJavascriptでクラスベースのコードを書く傾向があり、それに大きく依存していました。しかし最近、私はJavascriptフレームワークとNodeJSを使用していますが、これらはクラスの概念から離れ、次のようなコードの動的な性質により依存しています。 非同期プログラミング、コールバック/イベントを使用するコードの作成と使用 RequireJSを使用したモジュールのロード(グローバルネームスペースにリークしないようにするため) リスト内包表記(マップ、フィルターなど)などの関数型プログラミングの概念 とりわけ これまでに収集したことは、私が読んだほとんどのオブジェクト指向の原則とパターン(SOLIDやGoFパターンなど)は、SmalltalkやC ++のようなクラスベースのオブジェクト指向言語向けに書かれたものです。しかし、Javascriptなどのプロトタイプベースの言語に適用可能なものはありますか? Javascriptに固有の原則やパターンはありますか?コールバックの地獄、悪の評価、またはその他のアンチパターンなどを避けるための原則

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