ソフトウェア工学

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

2
大規模なRuby on Railsアプリケーション(月間2,500万人のユーザー)がいるため、経営陣はNode.jsで書き直すことにしました。
次の場合に教えてください: Node.jsを使用するとサイトが高速になります! Node.jsはより少ないサーバーリソースを消費するため、コストを節約できます! Node.jsにより生産性が向上します! Node.jsは、クライアント側とサーバー側のJavaScriptコードを共有できることを意味します。 明確にするために、フロントエンドサーバーを書き換えています。これは、既存のRuby on RailsアプリケーションとAPIとして対話します。その間、Ruby on Railsアプリケーションをサービスにリファクタリングします。 既存のアーキテクチャの詳細: HTMLパーシャルキャッシュ用のMemcached セッション用のRedis、および構造化されたデータキャッシング MySQLシングルマスター、マルチスレーブ 多数の書き込みを受け入れる1つの大きなテーブルがあります(ポーリングを想像してください) それ以外の場合はほとんど読み取ります。 一部のメタデータ用のMongoDB Ruby on Rails 3.0 nginxとUnicorn

5
関数呼び出しの複数の引数と単一の配列
パラメーターのセットを受け取り、SQLクエリの条件としてそれらに適用する関数があります。ただし、条件自体を含む単一の引数配列を優先しましたが: function searchQuery($params = array()) { foreach($params as $param => $value) { switch ($param) { case 'name': $query->where('name', $value); break; case 'phone': $query->join('phone'); $query->where('phone', $value); break; } } } 私の同僚は、代わりにすべての引数を明示的にリストすることを好みました。 function searchQuery($name = '', $phone = '') { if ($name) { $query->where('name', $value); } if ($phone) { $query->join('phone'); $query->where('phone', $value); …

7
手続き型プログラミング時代のデザインパターンは何でしたか?[閉まっている]
閉じた。この質問はより集中する必要があります。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集するだけで1つの問題に焦点を当てるように質問を更新します。 5年前に閉鎖されました。 同様:20年前にプログラミングはどのように行われましたか? OOPは最近非常にファッショナブルで、1960年代にSimula 67にルーツを持ち、後にSmalltalkとC ++で人気を博しました。DRY、SOLID、オブジェクト指向の世界のデザインパターンに関する多くの本があります。 しかし、OOPパラダイムが広く採用される前のプログラミングの主な原則は何でしたか?そして、主要な設計パターンは何でしたか?

3
IEnumerable <T>ではなくList <T>を使用する必要があるのはなぜですか?
ASP.net MVC4 Webアプリケーションでは、IEnumerablesを使用して、実装ではなくインターフェイスにプログラムするというマントラに従っています。 Return IEnumerable(Of Student) 対 Return New List(Of Student) リストはクエリを強制的に実行し、IEumerableは実行しないため、人々はIEnumerableではなくListを使用するように言っています。 これは本当にベストプラクティスですか?代替手段はありますか?インターフェイスを使用できる具体的なオブジェクトを使用すると、奇妙に感じます。私の奇妙な気持ちは正当化されますか?

5
互換性について話すときに、Internet Explorerがバージョンごとに参照される唯一のブラウザであるのはなぜですか?
私が話して何かまたは聞く誰か読むたびHTML5、CSSとJavaScriptのサポートを、彼らは常に参照のInternet ExplorerなどのInternet Explorer 6、およびInternet Explorer 9のようにバージョン番号でしかし、彼らはのみを参照してくださいGoogle Chromeの、Firefoxの、サファリなどバージョン番号なし。 特定のWebテクノロジがInternet Explorerだけでなく他のブラウザと互換性がないバージョン番号も指定するべきではありませんか?

5
偶然によってプログラミングを克服する方法は?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 4年前に閉鎖されました。 The Pragmatic Programmerの本では、作家はプログラミングを偶然の一致の概念に言及しています。それが何であるか、なぜそれが引き起こされるのか、あなたが遭遇するかもしれない危険は何かを説明し、戦争中の地雷原と比較します。 古い白黒の戦争映画を見たことはありますか?疲れた兵士は慎重にブラシから飛び出します。前にクリアがあります:地雷はありますか、それとも安全に渡れますか?地雷原であることを示す兆候はありません。標識、有刺鉄線、クレーターはありません。兵士は銃剣とひるみで彼の前の地面を突いて、爆発を期待します。ありません。それで、彼はしばらくフィールドを苦労して進み、彼が行くにつれて突き、突きます。最終的に、フィールドが安全であると確信して、彼はまっすぐになり、誇らしげに前進し、破片に吹き飛ばされるだけです。 兵士による地雷の初期調査では何も明らかにされませんでしたが、これは単に幸運でした。彼は誤った結論に至り、悲惨な結果をもたらしました。 開発者として、私たちは地雷原でも働いています。毎日私たちを捕まえるのを待っている何百ものtrapがあります。兵士の話を思い出して、私たちは誤った結論を出すことに注意する必要があります。偶然のプログラミング(幸運と偶然の成功に頼る)を避け、意図的にプログラミングを行うべきです... しかし、私は彼らが「それを克服する方法」問題を説明する方法に本当に満足していません。ええ、あなたはコードを書く前に先を考えなければなりませんが、それをどのように実践するのですか?私が考えることができる唯一のことは、既存のオープンソースプロジェクトに機能を追加することです。ここでは、「今何をしているのか」と「他のコードの動作」の両方に関する知識が必要です。独自のプロジェクトを書いているとき。 編集: 投稿の要約: 次の動きを推測しないで、それが正しいことを証明してください 必要に応じて、可能な限り単体テストとリファクタリング 機能の追加-コンパイル-テストを頻繁に行う 初心者にコードを説明できない場合、おそらく偶然のプログラミングでしょう。 ところで、答えを受け入れるのは難しいです、本当に難しいです。すべての答えは本当に素晴らしいです:)

1
開発者アナーキーとは何ですか?
開発者(またはプログラマー)アナーキーについて読んでいますが、これはアジャイル開発後の方法論として請求されているようです。私は(それにいくつかのリソースを発見した1、2)そこにたくさん出ていないようです。 私はそれについてもっと知ることができる良いリソースがあるかどうか疑問に思っていました-実装方法、賛否両論、他の方法論との比較など


5
多くの小さなクラスと論理的な(しかし)複雑な継承
優れたOOPデザイン、クリーンなコード、柔軟性、将来のコードのにおいを避けるという点で、何が優れているのだろうかと思っています。イメージの状況。クラスとして表す必要がある非常によく似たオブジェクトがたくさんあります。これらのクラスには特定の機能はなく、データクラスだけで、名前(およびコンテキスト)だけが異なります。例: Class A { String name; string description; } Class B { String name; String count; String description; } Class C { String name; String count; String description; String imageUrl; } Class D { String name; String count; } Class E { String name; String count; String imageUrl; String age; …

5
パフォーマンス:Javascriptでの再帰と反復
私は最近、Javascriptの機能面と、SchemeとJavascriptの関係に関する後者の記事(例:http : //dailyjs.com/2012/09/14/functional-programming/)を読みました。 OOの側面はプロトタイピングベースの言語であるSelfから継承されますが、機能的な言語です。 しかし、私の質問はより具体的です:Javascriptの再帰と反復のパフォーマンスに関するメトリックがあるかどうか疑問に思っていました。 一部の言語では(設計の反復によりパフォーマンスが向上する)、インタープリター/コンパイラーが再帰を反復に変換するため、差は最小限に抑えられますが、少なくとも部分的には機能的であるため、おそらくJavascriptのケースではないでしょう言語。

8
フレームワークは抽象化しすぎていますか?[閉まっている]
閉じた。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善したいですか?この投稿を編集して事実と引用で答えられるように質問を更新してください。 5年前に閉鎖されました。 私は1年弱のプログラミングを行っており、企業/組織向けのシステムアプリケーション、Webアプリ、およびスクリプトの記述経験があります。ただし、Django、Rails、Zendなどのフレームワークを使用することは、私が実際にやったことがありません。 Djangoフレームワークを見ると、フレームワークでどれだけ抽象化されているかに少しイライラしています。私はDRYと最小限のコードの中核的な目標を理解していますが、さまざまなモジュールへの過度の依存とコア機能の重い抽象化の一部は次のように感じます。 モジュール/フレームワークの絶えず変化する性質のため、プログラムの日付を非常に速くします。 多数のフレームワークとモジュールが利用可能であり、すべての特異性があるため、コードを理解しにくくします。 すべてのドキュメントを読んでいない限り、コードを論理的にしません。つまり、リストの内包表記と条件付きロジックを読んでプログラムの動作を理解することができますが、任意の文字列と辞書を渡す必要がある関数を見ると、すでに第一人者でない限り、物事を理解するのは少し難しくなります指定されたモジュール。そして: フレームワークを切り替えるのが難しく、面倒です。言語の切り替えはすでに課題ですが、その中核となる機能/哲学を十分に理解している場合は管理しやすくなります。フレームワーク間の切り替えは、暗記の問題であるように思われます。これは、いくつかの点で、これらのフレームワークが排除するように設計された非常に非効率性を助長するようです。 MySQLクエリのような単純なものの上に50層の抽象化を実際に配置する必要がありますか?準備されたステートメント/入力テストは処理されますが、普遍的に理解可能なSQLクエリは依然として関数の一部であるPHPのPDOインターフェイスのようなものを使用しないのはなぜですか? これらの抽象化は本当に便利ですか?機能が肥大化することで無駄になり、フレームワークを使用せずに作成された同様のアプリケーションと比較して、アプリケーションが難しくなりませんか?

4
職場で書かれたソフトウェアツールはいつ公開できますか?
私は仕事でかなり一般的なソフトウェアの問題に取り組んでいますが、解決したいライブラリが見つからないので、自分で(少なくとも最低限のバージョン)を書くことを検討しています。プロジェクトには1.0バージョンが必要なため、1.0バージョンのすべてではないとしても、いくつかを作成します。うまくいけば、仕事を家に持ち帰って、楽しみのためだけに磨き上げて、オープンソースプロジェクトとしてリリースしたいと思うかもしれません。ただし、1.0バージョンを職場で書いた場合、法的な意味でこれを行うことは許可されないのではないかと心配しています。明らかに上司(おそらく気にしないだろう)に尋ねることはできますが、他のプログラマーがこの問題にどのように対処し、法律がどこにあるのか興味があります。私の一文の質問は、職場での仕事のためにあなたが元々書いたソフトウェアツールをオープンソース化するのはいつ(合法/倫理的に)大丈夫ですか?営業時間外に元のソースを大幅に拡張した場合はどうなりますか? フォローアップ:自宅で時間を全部書いて、仕事で使うだけだとしたら、物事は劇的に変わるでしょうか? フォローアップ2:雇用主をoffそうとしているわけではないことに注意してください(彼らは自分が所有する製品を構築するために私にお金を払っていることを理解しています)-関係者全員にこれを行うための公正な方法があるかどうか疑問に思っています...将来、非営利団体が私のコードを使用して、時間を節約できたらいいと思います。また、別の問題もあります。ライブラリを非常にシンプルで汎用的なもの(JavascriptのHTMLテーブルなど)で記述した場合、法的リスクにさらされることなく自分の時間に二度と書き直すことはできません(まったく新しい書き直しやより大きなプロジェクトのセグメント)。仕事中のコードが脳内のどこかに影響を与えている可能性があるため、この種のプロジェクトのコードを書く権利を私の人生の残りの期間(この会社の許可なしに)放棄しますか?これはソフトウェア特許に関連しているようです。
24 legal 

6
コンピューターが10進数を2番目の整数として保存しないのはなぜですか?
分母が2 ^ xの解以外のものである場合、コンピューターは小数の保存に問題があります。これは、小数の後の最初の桁が1/2の価値があり、2番目の1/4が1/4(または1 /(2 ^ 1)と1 /(2 ^ 2))などの価値があるためです。 コンピューターが数の小数部分を別の整数として格納できたのに、なぜあらゆる種類の丸めエラーに対処するのか(したがって正確ですか?) 私が考えることができる唯一のことは、小数の繰り返し(10を基数とする)を扱うことですが、それに対するエッジソリューションが存在する可能性があります(現在の無限大のように)。

7
技術に詳しくない人が小規模プロジェクトの仕様書を書く方法を学ぶにはどうすればよいですか?
技術に詳しくない人が小規模プロジェクトの仕様を書く方法を学ぶにはどうすればよいですか? 私の友人は、統計プロジェクトの開発を外部委託しようとしています。 特に、彼はExcelで多くの作業を行っており、スクリプトの作成を外部委託して、手作業で行うことを望んでいます。 しかし、私の友人は非常に技術的ではありません。彼は技術仕様を書くのが苦手です。 彼が仕様を書くとき、それはあなたがExcelで何かをすることを記述する方法で書かれています(このセルに行き、そのセルに値をコピーします)。また、非常に冗長であり、例を何度か実行します。彼がコーナーケースを適切に説明しているかどうかはわかりません。 彼が最初に外注したプロジェクトは失敗でした。彼はいくつかの詳細を過剰に説明したが、コーナーケースを過小説明したと思う。それおよび/または彼が雇ったコーダーは、コーナーケースを熟考し、適切な質問をしませんでした。よく分かりません。私は彼とIMをしましたが、説明に5分もかからなかったはずの説明を掘り下げるのに30分かかりました。私は最後に彼のためにスクリプトを書きましたが、コーダーとの彼のプロセスが失敗した理由を調べませんでした。 彼は私に助けを求めました。しかし、彼の仕様を取り、それを明確な要件に翻訳することは、明確に書かれた仕様を実行するよりも10倍多くの作業があるため、私は関与しません。 彼が学ぶ正しい方法は何ですか?彼が使用できるリソースはありますか?コーダーとの小規模で低圧の練習プロジェクトから学ぶ方法はありますか? 彼のスクリプトのほとんどは、統計およびデータ処理指向です。たとえば、この列を取得し、平均を実行します。これらの条件下でこれらの行を削除します。そのため、課題はWebアプリの仕様とは異なります。

1
Githubはレポの言語割合をどのように計算しますか?
RubyとPHPコードを含むリポジトリがあります。 Githubによると、私のレポはPHP 74.8%、Ruby 25.2%です 私はこれがどのようになり得るか理解していません。プロジェクトの2つの言語を比較すると: # Count how many files: # Ruby ls | grep ".*\.rb" | wc -l # returns 10 #PHP ls | grep ".*\.php" | wc -l # returns 1 # Count how many lines, words, chars: # Ruby cat *.rb | wc # returns 229, 812, …
24 github 

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