ソフトウェア工学

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

7
リンクする代わりにスタイル/スクリプトをHTMLに埋め込むのはなぜですか?
CSSファイルとJavaScriptファイルを連結してHTTPリクエストの数を減らし、パフォーマンスを向上させます。結果は次のようなHTMLです。 <link rel="stylesheet" href="all-my-css-0fn392nf.min.css"> <!-- later... --> <script src="all-my-js-0fn392nf.min.js"></script> これをすべて行うためのサーバー側/ビルドロジックがある場合は、さらに一歩進めて、連結されたスタイルとスクリプトをHTMLに埋め込みましょう。 <style>.all{width:100%;}.my{display:none;}.css{color:white;}</style> <!-- later... --> <script>var all, my, js;</script> HTTPリクエストは2つ少なくなりましたが、実際にはこの手法を見たことはありません。何故なの?

6
「I」、「We」、またはコードドキュメントに含まれない
このタイプのコード(C ++)ドキュメントに役立つコメントを(できれば)書いていることに気付きました The reason we are doing this is... 「私」の代わりに「私たち」を使用する理由は、「私たち」が好まれることが多い学術論文をたくさん書いているからです。 だからここに質問があります。コードを文書化する際に一方を他方に優先させる正当な理由はありますか? 「私たち」を使用:これを行う理由は... 「I」を使用:これを行う理由は... 私の名前を使用してください:理由[my name]は... 受動態:これが行われた理由は... どちらでもない:これを行うのは... 私はその方法を書くのに慣れているので#1を選択しますが、ドキュメントはライター向けではなく、読者向けです。コードを保守するときに変更されます。

4
Rich Hickeyは、「[インターフェイス/クラス/タイプ]のすべての特異性があなたの再利用を殺します!」と言ったとき、何を意味しましたか?
Rich Hickeyの思考を刺激するgoto会議の基調講演「価値の価値」で29分間、彼はJavaのような言語のオーバーヘッドについて話し、「これらのインターフェースはすべて再利用を殺します」のような声明を出します。彼はどういう意味ですか?本当? 私は答えを探して、次のことを見つけました。 最小知識の原則別名、気密APIインターフェイスを奨励するデメテルの法則。ウィキペディアには、いくつかの欠点もリストされています。 再利用ではなく、その使用が適切な目標であると主張するケヴリン・ヘニーのインペリアル衣料危機。 ジャック・ディーデリッヒの「クラスを書くのをやめなさい」は、一般的なオーバーエンジニアリングに反対する議論をしています。 明らかに、不適切に書かれたものは何も役に立たないでしょう。しかし、適切に作成されたAPIのインターフェースは、そのコードの使用をどのように防ぐのでしょうか?1つの目的のために作られたものが他のものにより多く使用されている歴史の中に例があります。しかし、ソフトウェアの世界では、意図していない目的で何かを使用すると、通常は壊れます。 私は、いくつかのコードの正当であるが意図しない使用を防ぐ良いインターフェースの良い例を探しています。それは存在しますか?想像できません。

3
ビジネスルールの保存に構成ファイルまたはデータベースを使用する必要がありますか?
私は最近、Pragmatic Programmerを読んでいます。 詳細は、特に頻繁に変更される場合に、元のコードを台無しにします。ビジネスロジック、法律、またはその日の経営陣の個人的な好みの変化に対応するためにコードを変更する必要があるたびに、新しいバグを導入するというシステムを破壊するリスクがあります。 ハント、アンドリュー; トーマス、デビッド(1999-10-20)。実用的なプログラマー:ジャーニーマンからマスターへ(Kindle Locations 2651-2653)。ピアソン教育(米国)。キンドル版。 私は現在、値のセットからのみ取得できるプロパティを持ついくつかのモデルを持つWebアプリをプログラミングしています(Webアプリのデータは機密ではないため)。 light-> type =球/立方体/円柱 ライトのタイプは上記の3つの値のみにすることができますが、TPPに従って、値を変更して構成ファイルに配置できるように常にコーディングする必要があります。アプリ全体でこれのいくつかの事件があるので、私の質問は次のとおりです。 これらのような値を次の場所に保存する必要があります。 構成ファイル: 'light-types' => array(sphere, cube, cylinder), 'other-type' => value, 'etc' => etc-value データベース内の構成テーブルごとに1行の単一テーブル 各設定項目のテーブルを持つデータベース(例えば表:light_types;カラム:id、name) 他の方法は? 提供された支援/専門知識に感謝します。

7
Androidアプリを公開したいのですが、ソフトウェアの特許が怖いです[非公開]
エネルギーの節約に役立つアプリケーションを作成しました。実際には非常に簡単です。電話の現在の場所を確認し、ユーザーの場所に応じて、「サウンドオフ、暗いディスプレイ、wifiオフ...」などの設定を変更します。ソニーは、私のアプリ機能の1つを含む新しい電話をリリースしました(実際には、このオプションメニューに追加のエントリがあります)。この機能に特許があるかどうかはわかりません。 いつか訴えられる危険を冒すことなく、このアプリをリリースすることさえできますか? 私は、全体の「特許」状況について非常に混乱しています。 私は約20歳で、弁護士に多額の投資をせずに簡単なアプリを書くことさえできません。 編集:私は法的助言を求めません。開発者が状況全体をどのように見、処理するかについての概要を受け取りたいと思いました。

8
スイッチケースの使用中にデフォルトのケースを追加する必要がありますか?
最近のコードレビュー中に、ブロック内で何もすることがなくても、ブロックが使用されるdefaultすべてのファイルにケースを入れるように頼まれswitchましたdefault。つまり、defaultケースを入れて、何も書いてはいけないということです。 これは正しいことですか?それはどのような目的に役立つでしょうか?

6
ストアドプロシージャは3層の分離に違反しますか?
データベースはデータレイヤーに属しているのに対し、ストアドプロシージャはビジネスロジックであるため、データベース内のストアドプロシージャにビジネスロジックがあると、3層分離アーキテクチャに違反するという話を私の同僚から受けました。 ストアドプロシージャがなければ、世界は非常に厳しい場所になると思います。 彼らは本当に3層分離に違反していますか?

8
java.util.ArrayListでnullを追加できるのはなぜですか?
なぜjava.util.ArrayList追加できるのだろうかnull。に追加nullしたいケースはありますArrayListか? プロジェクトにバグがあり、そこにコードが追加さnullれていて、バグの場所ArrayListを見つけるのが難しいため、この質問をしています。明らかにa NullPointerExceptionがスローされましたが、他のコードが要素にアクセスしようとするまではスローされませんでした。問題は、nullオブジェクトを追加したコードを見つける方法でした。ArrayList要素が追加されているコードで例外をスローすると、もっと簡単になります。

8
関数型言語は再帰に優れていますか?
TL; DR:関数型言語は、非関数型言語よりも再帰をうまく処理しますか? 現在、コードコンプリート2を読んでいます。本のある時点で、著者は再帰について警告しています。彼は、可能な場合は避けるべきであり、再帰を使用する関数は一般にループを使用するソリューションよりも効果が低いと言います。例として、著者は再帰を使用してJava関数を記述し、そのように数値の階乗を計算しました(現時点では本が手元にないため、まったく同じではない場合があります)。 public int factorial(int x) { if (x <= 0) return 1; else return x * factorial(x - 1); } これは悪い解決策として提示されます。ただし、関数型言語では、多くの場合、再帰を使用することが推奨される方法です。たとえば、再帰を使用したHaskellの階乗関数は次のとおりです。 factorial :: Integer -> Integer factorial 0 = 1 factorial n = n * factorial (n - 1) そして、良い解決策として広く受け入れられています。私が見たように、Haskellは再帰を非常に頻繁に使用しますが、眉をひそめているものはどこにも見ませんでした。 私の質問は基本的には次のとおりです。 関数型言語は非関数型言語より再帰をうまく処理しますか? 編集:私が使用した例は私の質問を説明するのに最適ではないことを認識しています。Haskell(および関数型言語全般)は、非関数型言語よりも再帰を頻繁に使用することを指摘したかっただけです。

12
C#開発は、使用しているIDEと事実上切り離せませんか?
私はC#を学習しているPythonプログラマーであり、心配するのをやめようとしています。 このスタックオーバーフローの質問で詳述されているように、物事が定義されている場所に関する明示性の欠如という点に私は追いついています。要するに、C#では、using fooどの名前fooが利用可能になっているかを教えてくれません。これはfrom foo import *、Pythonに類似していますfrom foo import bar。 私はむしろC#プログラマーからのこの点に対するスタックオーバーフローの回答に驚いていました。実際には、この明示性の欠如は実際には問題ではありませんでした名前が由来するシステム。例えば: 今、理論的には、これはテキストエディターで探しているときに、C#で型がどこから来たのかわからないことを意味しますが、実際には、それが問題になることはありません。実際にコードを見て、Visual Studioを使用できない頻度はどれくらいですか? これは私に啓示です。多くのPythonプログラマーは、Sublime Text 2やvimのようなコードに加えて、コマンドラインツールとフォルダーやファイルの直接アクセスと操作を使用して、コーディングにテキストエディターアプローチを好みます。このような基本レベルでコードを理解するためにIDEに依存するという考えは、忌み嫌われるようです。この点でC#の文化は根本的に異なっているようです。そして、C#の学習の一環として、それを受け入れて受け入れる必要があるのだろうか。 ここで私の質問に私を導きます:C#開発は、使用しているIDEから事実上不可分ですか?

6
描けない。洗練されたアプリケーションを作成するにはどうすればよいですか?
私はグラフィックデザイナーではありません。私は何かを描くのがかなり苦手です。開発ツールにバンドルされている「サンプル」アプリケーションと同じくらい見栄えの良いものを構築するのに苦労しています。主に、私はアートアセットのやり方にしゃがんでいないからです。 これを軽減するためにどのような戦略をとればよいですか?
41 graphics 

7
(Javaとは異なり)静的データメンバーをC ++でクラスの外部で個別に定義する必要があるのはなぜですか?
class A { static int foo () {} // ok static int x; // <--- needed to be defined separately in .cpp file }; A::x.cppファイル(またはテンプレート用の同じファイル)で個別に定義する必要はありません。A::x同時に宣言と定義ができないのはなぜですか? 歴史的な理由で禁止されていますか? 私の主な質問は、staticデータメンバが同時に宣言/定義された場合(Javaと同じ)、機能に影響しますか?

8
プライベート変数とプロパティ?
ほとんどの場合、クラス内の変数に値を設定すると、次の2つのオプションが表示されます。 private string myValue; public string MyValue { get { return myValue; } set { myValue = value; } } クラス内の変数に値を割り当てる方法を決定する規則はありますか?たとえば、同じクラス内にメソッドがある場合、プロパティまたはプライベート変数を使用して割り当てる必要があります。私はそれが両方の方法で行われたことを見てきましたので、これが選択肢なのかパフォーマンスが要因なのか(おそらく、おそらく)疑問に思っていました。

4
Javaと比較したScalaのパフォーマンス
まず第一に、これはどちらが優れているかを判断するための言語-X-言語-Yの質問ではないことを明確にしたいと思います。 私はJavaを長い間使用しており、Javaを使用し続けるつもりです。これと並行して、私は現在非常に興味を持ってScalaを学んでいます。私の印象に慣れる小さなことは別として、私はこの言語で本当にうまく働くことができるということです。 私の質問は、Scalaで書かれたソフトウェアはJavaで書かれたソフトウェアと比較して、実行速度とメモリ消費量の点でどうですか?もちろん、これは一般的に答えるのが難しい質問ですが、パターンマッチング、高階関数などの高レベルの構成体がオーバーヘッドをもたらすと予想されます。 ただし、Scalaでの私の現在の経験は、コードが50行未満の小さな例に限定されており、これまでベンチマークを実行していません。したがって、実際のデータはありません。 ScalaにJava に対するオーバーヘッドがあることが判明した場合、Scala のより複雑な部分とJavaのパフォーマンスに重要な部分をコーディングするScala / Javaプロジェクトを混合するのは理にかなっていますか?これは一般的な習慣ですか? 編集1 私は小さなベンチマークを実行しました。整数のリストを作成し、各整数に2を掛けて新しいリストに入れ、結果のリストを出力します。Java実装(Java 6)とScala実装(Scala 2.9)を作成しました。Ubuntu 10.04でEclipse Indigoで両方を実行しました。 結果は比較可能です:Javaで480ミリ秒、Scalaで493ミリ秒(100回の繰り返しの平均)。ここに私が使用したスニペットがあります。 // Java public static void main(String[] args) { long total = 0; final int maxCount = 100; for (int count = 0; count < maxCount; count++) { final long t1 = System.currentTimeMillis(); final int …

12
コード型の欠点
コード型は、各反復でコードを改善しようと何度も小さな問題を行うことにより、プログラマーのスキルを磨くことを提案する概念です。名前は、フォーム(別名カタ)が何度も繰り返し改善されていく練習である、武道カタの類推に由来しています。 トピックに関する最後の質問に対する反応から、このアプローチの欠点は何か知りたいですか?
41 code-kata 

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