ソフトウェア工学

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

5
私は、mercurialの分岐に混乱しているgitユーザーです。小さな変化をどのように追跡するのですか?
以前はgitを使用していましたが、Pythonに貢献したいので、今では水銀を学ぶ必要があり、非常にイライラします。 そこで、私はいくつかの小さなパッチを作成し、それらをローカルのMercurialリポジトリでコミットとして追跡したいと考えました。どうやら水銀の分岐を処理する4つの方法があります。1と4は完全にばかげているように見え、名前付きブランチはヘビーウェイトのようで、1コミットの迅速な修正のためにそれらを使用することになっていないので、ブックマークを使用しました。 今、私のパッチは拒否され、ブックマークブランチの1つをリポジトリから削除したいと思います。OK、gitではブランチを強制削除して忘れてしまうので、ブックマークを削除すると次の問題が発生します。 TortoiseHGは、hg logコミットとdefaultブランチに2つのヘッドがあることを示しています。そして、私が正しく理解していれば、追加のプラグインなしでhgのコミットを削除することはできません。 Mercurialにはハッシュだけでなく、リビジョン番号もあります。いくつかのコミットを追加したので、それ以降にプルされたすべてのコミットには、メインの中央リポジトリとは異なるリビジョン番号が付けられています。 ブックマークをhg update引っ張ってmaster最新のコミットに自動的に移動した後、実行しますが、TortoiseHGでそれを行う方法が見つかりませんでした。 何が間違っていますか?これは正常で予想されるもので、これらの問題を無視する必要がありますか?または、ブランチでどのように作業するのですか?

4
F#にインタラクティブモードがあり、C#がないのはなぜですか?
F#は、対話型REPLですぐに使用できます。C#には何もありません。実際、完全なプロジェクトをセットアップせずに遊ぶのは少し難しいです(ただし、LINQpadは機能しますが、PowerShell経由でも実行できます)。 F#で対話型コンソールを使用できるようにするが、C#で実装するのが困難になる言語について根本的に異なるものはありますか? 何年も後に人々はまだこの質問に来ているので、私は今多くの選択肢があることに注意すべきです。PowerShell(最新のすべてのWindowsマシンにプリインストールされている)を使用して、.Netフレームワークで遊ぶことができます。または、LINQpadを使用して、任意のc#コードのプロトタイプを作成できます。それとも、使用することができますScriptCsをかあなたのようなオンラインjsfiddle型環境を使用することができますComplify.netまたはJsilを。たくさんのオプション。
32 c#  .net  tools  f# 

4
Javaでデバッグ出力を処理する正しい方法は何ですか?
私の現在のJavaプロジェクトがますます大きくなるにつれて、コードのいくつかのポイントにデバッグ出力を挿入する必要性が同様に高まっていると感じています。 テストセッションの開始または終了に応じて、この機能を適切に有効または無効にするには、通常private static final boolean DEBUG = false、テストで検査するクラスの先頭にa を付け、この方法で(たとえば)簡単に使用します。 public MyClass { private static final boolean DEBUG = false; ... some code ... public void myMethod(String s) { if (DEBUG) { System.out.println(s); } } } など。 もちろん、それはうまくいきますが、数個を見つめていなければ、DEBUGをtrueに設定するクラスが多すぎる可能性があります。 逆に、出力されるテキストの量が圧倒的になる可能性があるため、私は(他の多くの人と同じように)アプリケーション全体をデバッグモードにすることを好みません。 だから、そのような状況をアーキテクチャ的に処理する正しい方法がありますか、最も正しい方法はDEBUGクラスメンバーを使用することですか?


10
インタビューの中で「C#で嫌いな5つのことを教えてください」という質問に答えるのが難しいのはなぜですか [閉まっている]
ではポッドキャスト73、ジョエル・スポルスキとジェフ・アトウッドは、他の科目の中で、「誰もが自分の好きなプログラミング言語について憎むべきで5つのことを」について説明します。 現在のツールチェーンに満足している場合は、切り替える必要はありません。ただし、お気に入りのプログラミング言語について嫌いな5つのことをリストできない場合は、まだ判断するのに十分な知識がないと思います。代替案を認識し、使用しているものに健全な批判的な目を向けることは良いことです。 興味があるので、インタビューした候補者にこの質問をしました。C#¹について嫌いなことを少なくとも1つも引用できませんでした。 どうして?この質問で何がそんなに難しいのですか?インタビューのストレスの多いコンテキストのために、この質問がインタビュー対象者によって答えられないのはなぜですか? この質問について、面接を悪くする何かがありますか? 明らかに、C#が完璧であることを意味するものではありません。私は自分がC#について嫌いな5つのことのリストを持っています: ジェネリックに可変数の型がない(params引数の場合と同様)。 Action<T>、 Action<T1, T2>、 Action<T1, T2, T3>、 ⁞ 真剣に! Action<T1, T2, T3, T4, T5, T6, T7, T8, T9, T10, T11, T12, T13, T14, T15, T16> F#のような測定単位のサポートの欠如。 読み取り専用プロパティの欠如。private readonly読み取り専用プロパティが必要なたびにバッキングフィールドを書き込むのは退屈です。 デフォルト値を持つプロパティの欠如。そして、はい、パラメーターなしのコンストラクターでそれらを初期化し、他のすべてのコンストラクターから呼び出すことができることを知っています。しかし、私はしたくありません。 多重継承。はい、それは混乱を引き起こし、ほとんどの場合それを必要としません。いくつかの(非常にまれな)場合でも有用であり、混乱は同じ名前のメソッドを含むいくつかのインターフェイスを継承するクラスにも当てはまります(C#で解決されました)。 このリストは完全にはほど遠いものであり、強調すべき点ははるかに多く、特に私のものよりもはるかに優れています。 ¹少数の人々は、.NET Frameworkの一部のアセンブリまたはフレームワークに一部のライブラリがないことを批判したり、CLRを批判したりしました。質問は言語自体に関するものであり、.NET Frameworkのコアにある否定的なもの(たとえばTryParse、文字列をいくつかの型に解析したい場合は、すべての型について繰り返す必要があります)、JSONまたはWCFについての答えは完全にトピック外です。
32 c#  interview 

2
Gitを使用する場合、アクティブな開発にmasterブランチを使用することをお勧めしますか?
まず、いくつかの背景として、すべてのプロジェクトチームをgitの使用に移行し、特定のブランチを継続的に統合して監視できるようにリポジトリを編成する方法のガイドラインを策定しています。テストサーバーへの自動展開。現在、開発中の2つのモデルがあります。 最も安定したコードを表すmasterブランチ、最先端のコードの開発ブランチ、およびQAテストの準備ができたコードの統合ブランチでの成功したブランチングに関するnvie.comの記事の影響を大きく受けています。 マスターブランチが最先端の開発コード、QAテストの準備ができているコードの統合ブランチ、および展開の準備ができている安定したコードの本番ブランチを表す代替モデル。 この時点で、masterブランチが何を表すかに関しては部分的にはセマンティクスの問題ですが、masterブランチで積極的な開発を行っているのは実際には良い習慣ですか、それとも実際にはそれほど関係ないのでしょうか?
32 git  branching 

10
Microsoft techからLinux、NodeJS、その他のオープンソースフレームワークに移行して、スタートアップの費用を節約する価値はありますか?[閉まっている]
私は現在、スタートアップに関与しています。私は現時点で唯一の開発者です。他の人たちは、現時点ですべての技術決定を私に任せています。 私の日常業務では、Microsoft techを日常的に使用するソフトウェアハウスで仕事をしています。.NET、SqlServer、Windows Serverなどを利用しています。 Windowsのホスティングのコストを簡単に見てみると、専用サーバーの価格の一部を見てショックを受けました。一番安いのは月100ポンドでした。また、ビジネスを将来的に拡張する必要があり、複数のサーバーが必要になった場合、SQL Server / Windows Serverライセンスなどで年間10ポンドから1,000ポンドを払うことになります。 その後、専用サーバー用のLinuxホスティングの価格を簡単に見てみると、価格はWindowsホスティングよりもかなり低いことがわかりました。1つの場所では、2コアのマシンを月20ポンド未満で提供していました。 これにより、おそらくLinuxでのオープンソースの道を考えるようになりました。 仕事で多くのJavascriptを書いているので(現時点では単一ページのバックボーンアプリで作業しています)、NodeJSとExpressのようなWebフレームワークを使用するのがクールだと思いました。次に、SQLを使用する代わりに、NodeJSを強力にサポートするMongoDBのようなオープンソースのNoSQLデータベースを使用しないのはなぜだと思いましたか? 私の唯一の懸念は、アプリケーションが行う作業の一部が動的に画像やその他の画像に関連するもの、つまり非常にCPUが重いものを作成することになることです。 Nodeのモジュールとして使用します。 これが背景ですが、基本的にLinuxは以下に適しています。 NodeJS / Expressサイトをホストしていますか? C ++ノードモジュールのコンパイル? MongoDBのようなNoSQL DBを使用していますか? そして、これらのなじみのない技術に移行してお金を節約するのは良い考えですか? 3か月の更新 私はここ数ヶ月間これに取り組んでいますので、誰かが興味を持っている場合に備えてアップデートを提供すると思いました。 最終的に、単純な理由でNodeJSとLinuxスタックを使用しないことにしました。私はこのスタートアップを脇でやっているので、9時間働いてから家に帰って遅くまで働いています。このように作業している間、私は明らかに自分の時間をできる限り効率的にする必要があります。そうしないと、製品を出荷できなくなります。 このスレッドに関するいくつかのアドバイスを受けた後、Microsoft BizSparkに応募し、受け入れられました。つまり、Visual Studioライセンス、Windows Serverライセンスなどにすべて無料でアクセスできます。それはすごいです。うまくいけば、それが問題にならないほど十分に引き継ぐすべての代金を支払う必要があります。 ただし、可能な限りオープンソースのものを使用しようとしたため、Microsoftの技術のみを使用しているとは思わないでください。これを行った主な場所は、PostgreSQLとMongoDBを使用することにしたデータレイヤーです。また、フロントエンドでBackboneJSを使用しています。 以下は、現在使用している技術/フレームワークの概要です。 標準DBスタッフ:PostreSQL ロギングとデータストア:MongoDB ORM:Entity Framework 5 コアライブラリ:.NET(C#) Webフレームワーク:ASP.NET MVC3 UI:Razorビューエンジン/ BackboneJS


12
コードレビューは良い習慣ですか?
私が働いている会社が新しいマネージャーを雇ったとき、彼らは私たちにすべての会議で誰かのコードを概観するように提案しました。私たちは2週間ごとに会議を開催しているため、開発者の1人がそのコードをプロジェクターに表示するたびに、他の開発者がそれについて議論します。 これは素晴らしいことだと思いました。各開発者はコードを書く際により慎重になり、経験をよりよく共有することができます。しかし、どういうわけか私たちはこれを忘れて、申し出は申し出のままでした。 これにはどのような利点があり、欠点はありますか?


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); } …

6
ユーザーに適切で有用なバグレポートを作成させる
誰もがユーザーに半ばまともな(読む:役に立つ)バグレポートを書かせる良い方法を知っていますか? ほとんどのユーザーにとって意味のある(読みやすく、理解しやすい)ものの、開発者にも役立つ情報を提供したかったのです。 青いボタンをクリックしても機能しません!ああ、私はちょうど一週間の仕事を失った...それを機能させる。 そのままではあまり役に立ちません。 私はリストについて修正し始めましたが、同様の方法が既に存在するかどうか、皆さんに確認することを考えました。



9
識別子が数字で始まらないのはなぜですか?
ほとんどのプログラミング言語は、数字で始まる識別子を宣言できないように設計されているようです。理由を知りたいだけです。私はすでにウェブを検索しましたが、満足のいく説明を見つけることができませんでした。
32 naming  variables 

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