ソフトウェア工学

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

16
プログラマーは、言語とフレームワークをどの程度自由に選択できますか?
私は主にC#指向の会社で働き始めました。JavaとJRubyが好きな人は数人いますが、ここではC#が好きなプログラマーの大部分です。私が雇われたのは、Webアプリケーションの構築に多くの経験を持ち、JRuby on Railsやnodejsのような新しいテクノロジーに傾倒したためです。 私は最近、短時間で多くのことを成し遂げることに重点を置いて、Webアプリケーションを構築するプロジェクトに着手しました。ソフトウェアリーダーは、レールの代わりにmvc4を使用するよう指示しています。私はmvc4を知らない、C#を知らない、そしてWebアプリケーションサーバーとフロントエンドUIを作成する責任があるのは私だけである以外は、それは大丈夫かもしれません。 mvc4を使用する代わりに、私がすでに非常によく知っているフレームワーク(Rails)を使用することは意味がありませんか?この決定の背後にある理由は、技術リーダーがJruby / railsを知らず、コードを再利用する方法がないことでした。 カウンター引数: 彼はコードに貢献することはなく、率直に言って、 このプロジェクトには必要ありません。そのため、彼がJRuby / railsを知っているかどうかは重要ではありません。 JRubyがコードをプルしたり、その逆を行うことができる多くのJavaアプリがあるため、実際にコードを再利用できます。実際、彼はJavaライブラリをJRuby on Railsアプリで実行するだけでなく、JavaライブラリをC#に変換するためのリソースをいくつか用意しています。彼はJavaやJRubyが好きではないからです 多くのWebアプリケーションを作成しましたが、なじみのないものを使用するとスピンアップが発生し、今までのように短時間で素晴らしいアプリケーションを作成することができません。これは問題ありません。この分野では新しい技術を学ぶことが重要です。問題は、このプロジェクトでは、多くのことを迅速に行う必要があるということです。 開発者はどの時点でツールを選択できますか?これは会社に依存していますか?私の会社は嫌ですか、これは正常と考えられていますか?環境に優しい牧草地はありますか?私はこれを間違った方法で見ていますか?

8
一部の言語コミュニティ(RubyやPythonなど)が断片化を防止できる一方で、他の言語コミュニティ(LispやMLなど)ができないのはどうしてですか?
「Lisp」(または「Lispライク」)という用語は、Common Lisp、Scheme、Arcなど、さまざまな言語の総称です。MLなど、他の言語コミュニティにも同様の断片化があります。 ただし、RubyとPythonはどちらも、言語自体に変更を加えるのではなく、実装(PyPyやYARVなど)でイノベーションが発生したこの運命を回避することに成功しています。 RubyとPythonのコミュニティは、言語の断片化を防ぐために特別なことをしましたか?

6
SQLクエリでFromの前にSelectがあるのはなぜですか?[閉まっている]
これは学校で私を悩ませたものです。 5年前、私がSQLを学んだとき、最初に必要なフィールドを指定し、次にそれらのフィールドを指定する理由を常に考えていました。 私の考えによると、次のように書く必要があります。 From Employee e Select e.Name それで、なぜ規範は次のように言うのですか? Select e.Name -- Eeeeek, what does e mean? From Employee e -- Ok, now I know what e is SQLを理解するのに何週間もかかりましたが、その時間の多くは間違った要素の順序によって消費されていたことを知っています。 C#で書くようなものです。 string name = employee.Name; var employee = this.GetEmployee(); したがって、これには歴史的な理由があると思います。どうして?
67 sql  history  syntax 

11
プロジェクトに存在する技術的負債の量をどのように定量化できますか?
ある種のコードメトリックとして、コードベースの技術的負債に数字を付ける何らかのツールがあるかどうか、誰もが知っていますか?そうでない場合、誰かがアルゴリズムまたはヒューリスティックのセットを知っていますか? これまでのところそれらのいずれも存在しない場合、私はそのようなことから始める方法のアイデアに興味があります。つまり、メソッド、クラス、名前空間、アセンブリなどによって発生した技術的負債をどのように定量化できますか。 私はC#コードベースの分析と評価に最も関心がありますが、特に概念が言語を超越している場合は、他の言語でも気軽に声をかけてください。

10
読みやすいコードと読みにくい高速コード。いつ線を越えるか?
コードを書くときは、コードをできる限りクリーンで読みやすいものにするように常に心がけています。 ときどき、ラインを越えて、すっきりしたきれいなコードから少しugいコードに移行して、より速くする必要があるときがあります。 その線を横切るのはいつですか?

7
IntelliJはEclipseよりも優れていますか?[閉まっている]
私のような質問があった知っているあなたの好みのエディタ/ IDEは何?しかし、それらのどれもこの質問に答えていない:なぜにお金を使うのIntelliJときEclipseは無料ですか! 私は個人的にはIntelliJの大ファンですが、実際にはEclipseを試したことはありません。Java、JSP、HTML / CSS、Javascript、PHP、およびActionscriptのプロジェクトにIntelliJを使用しましたが、最新バージョンの9 はすべてのプロジェクトで優れています。 過去の多くの同僚は、EclipseはIntelliJと「ほぼ同じ」であると信じていると言っていましたが、その点に対抗するために、Eclipseを使用する開発者の後ろに時々座っていました。タスク)、および私はIntelliJでこれを経験していません。それらは機能ごとに並ぶかもしれませんが、機能はユーザーエクスペリエンスの低下によって台無しになる可能性があり、IntelliJが時間を節約する機能を簡単に見つけて発見できる可能性があるのでしょうか。 すでにEclipseに精通しているユーザーにとって、IntelliJの実際のコストに加えて、新しいアプリの学習に費やされる時間のコストもあります。Eclipseには、IDEに250ドルを費やしたくないという多くのユーザーがいます。 IntelliJが私のチームの生産性向上に本当に役立つとしたら、どうすれば彼らにそれを販売できますか?両方を試したユーザーにとって、どちらの方法でも特定の長所または短所に非常に興味があります。
67 java  ide  eclipse  intellij 

11
スマートポインターが存在する場合にガベージコレクションを行う理由
最近では、非常に多くの言語がガベージコレクションされています。サードパーティによってC ++でも利用可能です。しかし、C ++にはRAIIとスマートポインターがあります。それでは、ガベージコレクションを使用する意味は何ですか?何か特別なことをしていますか? また、C#などの他の言語では、すべての参照が仕様と実装によってスマートポインターとして扱われる場合(RAIIは別として)、ガベージコレクターの必要性はまだありますか?いいえの場合、なぜそうではないのですか?

9
コンパイラエラーの用語集がないために不満な初心者プログラマ
私の家族の友人が、プログラミング(C言語)を学ぶときに少し助けを求めました。私たちが話していたとき、彼はコンパイラー(GCC)がエラーを起こしたときに彼に与えるエラーメッセージを理解するのに苦労していることにフラストレーションを表明しました。彼は、使用されているすべての用語を理解していません。また、それらの組み合わせが理解できない場合もあります。「コンパイラのドキュメントに、エラーメッセージの詳細な説明が含まれていないのはなぜですか?」-そして、私は彼に良い答えがありませんでした。 私自身-より経験豊富なプログラマーとして-この状況ではめったにありませんが、これらのまれな出来事は起こります-私が以前に遭遇したことのないいくつかのエキゾチックなエラーメッセージ。私は検索エンジンでエラーメッセージを探すことで何とかやっていくことができますが、どうやらそれは彼のために常に機能するとは限りません-特に彼が遭遇するエラーはより一般的であり、彼が彼に関連するトラブルを抱えている複数の異なるケースで発生するため自分の。 それでは、初心者プログラマはコンパイラエラーメッセージを理解するという課題にどのように取り組むべきでしょうか?具体的には、CとGCCの組み合わせで?

9
リポジトリはIQueryableを返す必要がありますか?
のインスタンスを返すリポジトリを持つプロジェクトをたくさん見てきましたIQueryable。これにより、追加のフィルターとソートをIQueryable他のコードで実行でき、異なるSQLが生成されます。私はこのパターンがどこから来たのか、それが良いアイデアであるかどうかに興味があります。 私の最大の懸念はIQueryable、データベースが列挙されると、しばらくするとデータベースにヒットするという約束です。これは、エラーがリポジトリの外部にスローされることを意味します。これは、Entity Framework例外がアプリケーションの別のレイヤーでスローされることを意味する場合があります。 また、過去(特にトランザクションを使用する場合)に複数のアクティブな結果セット(MARS)の問題に遭遇しましたが、このアプローチはこれがより頻繁に発生するように聞こえます。 リポジトリコードを終了する前に、常にLINQ式を呼び出すAsEnumerableかToArray、各LINQ式の最後でデータベースがヒットすることを確認しました。 IQueryableデータレイヤーのビルディングブロックとして戻ることが役立つかどうか疑問に思っています。あるリポジトリが別のリポジトリを呼び出してさらに大きなIQueryable。

10
構文設計-引数が渡されないときに括弧を使用する理由
多くの言語では、構文function_name(arg1, arg2, ...)を使用して関数を呼び出します。引数なしで関数を呼び出す場合は、実行する必要がありますfunction_name()。 コンパイラーまたはスクリプトインタープリターが()関数呼び出しとして正常に検出する必要があることは奇妙に感じます。変数が呼び出し可能とわかっている場合、なぜfunction_name;十分ではないのでしょうか? 一方、一部の言語では次のことを実行できます。関数またはコマンドを呼び出すことfunction_name 'test';もできますfunction_name 'first' 'second';。 括弧は、優先順位を宣言するためだけに必要であり、他の場所ではオプションである場合、括弧はより良いと思います。たとえば、行うことif expression == true function_name;はとして有効である必要がありますif (expression == true) function_name();。 私の意見で最も厄介なことは'SOME_STRING'.toLowerCase()、プロトタイプ関数が引数を必要としないことが明らかになったときに行うことです。なぜデザイナーはよりシンプルなものに反対したの'SOME_STRING'.lowerですか? 免責事項:誤解しないでください、Cのような構文が大好きです!;)私はそれがもっと良いかどうか尋ねているだけです。要求に()はパフォーマンス上の利点がありますか、それともコードを理解しやすくしますか?正確な理由は何なのか本当に興味があります。

13
「下位」のアプリケーション層が「上位」のアプリケーション層に気付かないのはなぜ良い考えですか?
典型的な(適切に設計された)MVC Webアプリでは、データベースはモデルコードを認識せず、モデルコードはコントローラーコードを認識せず、コントローラーコードはビューコードを認識しません。(ハードウェアと同じくらい、あるいはそれ以上のレベルで開始することもでき、パターンも同じになると思います。) 別の方向に進むと、1つ下のレイヤーに移動できます。ビューはコントローラーを認識できますが、モデルは認識できません。コントローラーはモデルを認識できますが、データベースは認識できません。モデルはデータベースを認識できますが、OSは認識できません。(より深いものはおそらく無関係です。) なぜこれが良いアイデアなのか直感的に把握できますが、明確に説明することはできません。なぜこの単方向スタイルのレイヤー化が良いアイデアなのでしょうか?

12
引数を検証するコンストラクターはSRPに違反しますか?
私は可能な限り単一責任原則(SRP)に準拠しようとしていますが、デリゲートに大きく依存する特定のパターン(メソッドのSRP)に慣れました。このアプローチが適切かどうか、または深刻な問題があるかどうかを知りたいです。 たとえば、コンストラクターへの入力を確認するために、次のメソッドを導入できます(Stream入力はランダムで、何でも可能です) private void CheckInput(Stream stream) { if(stream == null) { throw new ArgumentNullException(); } if(!stream.CanWrite) { throw new ArgumentException(); } } このメソッドは(おそらく)複数のことを行います 入力を確認する さまざまな例外をスローする したがって、SRPを順守するために、ロジックを private void CheckInput(Stream stream, params (Predicate<Stream> predicate, Action action)[] inputCheckers) { foreach(var inputChecker in inputCheckers) { if(inputChecker.predicate(stream)) { inputChecker.action(); } } } たぶん1つのことだけを行う(行うのか?):入力を確認する。入力の実際のチェックと例外のスローのために、次のようなメソッドを導入しました bool …

4
Haskellの型システムはJavaの型システムと形式的に同等ですか?[閉まっている]
ある言語では他の言語よりも簡単/難しいこともありますが、興味があるのは、ある言語では可能で、別の言語では不可能/無関係なタイプ関連の機能だけです。より具体的にするために、Haskell型の拡張機能を無視しましょう。あらゆる種類のクレイジー/クールなことを行うものが非常に多くあるからです。

13
私の上司は、「ここでは発明されていません」という悪いケースを抱えています[非公開]
私の部門は、顧客データをデータベーススキーマに変換して、ソフトウェアを使用できるようにすることを専門としています。 IDataReader現時点では、99%の時間がかかるC#アプリケーションがあり、SqlDataReaderクリーニングとマッピングを実行してDataRowオブジェクトSqlBulkCopyに挿入し、a を使用してデータベースに挿入しています。 場合によっては(特にソースデータベースにvarbinaryオブジェクトとして画像が含まれている場合)、このプロセスはサーバーからアプリへのSQL転送で完全に停止し、その後すぐに向きを変えてサーバーに戻ることができます。 変換の一部をSSISパッケージとして書き直せば、大幅にスピードアップできると思います。しかし、私が直面し続ける最大の石垣は、上司がNot Invented Hereのように押し返し、「MicrosoftがSSISのサポートを終了したらどうなるでしょうか。この廃止されたコードはすべて手に入れられます。」 「もし彼らがその機能を削除したら...」を見つけたのはこれが初めてではありません。上司からの答え。古い方法で変換を記述したり、SSISを自己学習したり、利点を実証/テストする新しい方法を記述したりする時間がありません(SSISを使用したことがないため、使用方法を学習する必要があります)。 この状況ではどうすればよいですか?新しいテクノロジーの推進を停止しますか?彼が部門を去るまで待ってください(私は彼の後の部門で2番目にシニアの人ですが、彼が辞める/退職するまでに何年もかかる可能性があります)?彼がサードパーティのツールを恐れないようにする新しい方法を見つけましたか?

15
私たちのプラットフォームのために仕事を辞めるつもりです。どうすればこれについての生産的な説明を残すことができますか?[閉まっている]
平凡な共有ホスティングで、エンタープライズBlubフレームワークとBlubレベルのWebサーバーを備えたBlubの使用に縛られているため、現在の仕事を辞めるつもりです。私の同僚は友好的であり、私の上司は平均的な中小企業のオーナーです。技術的な理由から完全に辞めたいです。Blubに浸ることは私の脳に悪いことであり、私をより悪いプログラマーにしています。 私が去るとき、どうやってこれを上司や同僚に説明できますか?Blubに関する苦情を生産的に表現するにはどうすればよいですか?文書の後継者にどのような警告を残すことができますか? (私が基準を満たしていることを確認しようとしています)

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