ソフトウェア工学

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

27
ソースコード生成はアンチパターンですか?
何かを生成できる場合、それはコードではなくデータです。 それを考えると、ソースコード生成のこの考え全体は誤解ではないでしょうか?つまり、何かのコードジェネレーターがある場合、そのパラメーターを、必要なパラメーターを受け取り、「生成される」コードが実行するはずの正しいアクションを実行できる適切な関数にしてみませんか。 パフォーマンス上の理由で行われている場合、それはコンパイラの欠点のように聞こえます。 2つの言語を橋渡しするために行われている場合、それはインターフェースライブラリの欠如のように聞こえます。 ここに何かが足りませんか? コードもデータであることを知っています。私が理解していないのは、なぜソースコードを生成するのですか?なぜそれをパラメーターを受け入れ、それらに作用することができる関数にしませんか?

5
ブランチをソロ開発者として使用する利点は何ですか?
最初に、ソロ開発者としてのVCSについて多くの質問が寄せられていることを知っていますが、それらはあまりにも広範であることが多いです。これは分岐のみに関係しますが、依然として重複としてマークされています...想定される重複は、あまりにも広範で、特に分岐に関係しない別の質問の別の重複としてマークされています。それが私の質問のユニークな方法です。 ブランチを単独の開発者として使用する利点がある場合、それは何ですか?ソロ開発のコンテキストでも推奨されることがよくありますが、見る限りでは、開発に「マスター」トランクを使用し、作業用のリリース準備コードに分岐する以外に、どのように見えるのかわかりません開発プロセス全体を過度に複雑にすることなく、分岐の力を活用できます(たとえば、新しい機能を区分化するために)。


15
LISPは今日の世界でまだ有用ですか?どのバージョンが最も使用されていますか?
私は自分自身に新しいプログラミング言語を定期的に教えようとしています。最近、私はLispとその方言がC / C ++のような言語とはまったく反対の立場にあることを読みました。ただし、2つのことは私には不明確であり、それらに関するガイダンスを探しています。 LISPは今日でもまだ実践/使用されていますか、それともFORTRAN / COBOLなどのレガシー言語ですか?つまり、既存のコードを維持することとは別に、新しいプロジェクトでまったく使用されますか? 最も広く使用されている方言は何ですか?最も一般的な2つの方言としてSchemeとCommon Lispに出会いましたが、どちらが最も好まれ/有用な方言であるかについてのあなたの意見が欲しかったです-そして、あなたが最初のランク初心者のためのリソースを提案できるなら、非常に満足します。 私が慣れ親しんでいる手続き言語とは根本的に異なる言語を習得したいのですが、もし完全に時代遅れであれば何かに過度の労力を費やしたくはありません。しかし、学術的観点からのみ...

8
末尾の空白が重要なのはなぜですか?[閉まっている]
末尾の空白はプログラマにとっては十分な問題であり、Emacsのようなエディタはそれを強調表示したり自動的に削除したりする特別な機能を備えており、多くのコーディング標準ではすべてのインスタンスを削除する必要があります。なぜだか完全にはわかりません。不要な空白を回避する実際的な理由の1つを考えることができます。人々がそれを避けることに注意を払わないと、コミット間で変更される可能性があり、その後、誰かが削除されたか、スペースを追加しました。 これは既にそれを避けるためのかなりの理由のように聞こえますが、それ以上のものがあるかどうかを見たいです。それでは、なぜ末尾の空白がそれほど重要なのでしょうか?

6
本当に「ビジネスロジック」とは何ですか?
私はPHPを始めた2009年からWeb開発に取り組んでいます。ASP.NETに移行したとき、この「ビジネスロジック」と「ビジネスルール」に多くの焦点が当てられているDDDとOOADについてよく耳にしました。要点は、これまでに開発したアプリはすべてCRUD操作に関するものであり、実際にこれらのことを見たことがないということです。 それらが実際に実際にどのようなものになるのか、私には想像できません。それでは、このビジネスロジックとはどのようなもので、アプリにどのように適合するのでしょうか?私はこれらがドメインモデルのメソッドとして実装されていることを知っていますが、それらのメソッドは何である可能性があり、アプリケーションのどこで使用される可能性がありますか?

8
コードレビューのために送信されたコードが複雑すぎると思われる場合の対処方法
コードを追うのは難しいですが、少なくとも表面的なテストでは、(ほとんど)うまく機能しているようです。あちこちに小さなバグがあるかもしれませんが、それらがより深い問題や単純な修正の徴候であるかどうかをコードを読んで知ることは非常に困難です。ただし、コードレビューを使用して全体的な正確性を手動で確認することは、たとえ可能であっても、非常に困難で時間がかかります。 この状況での最善の行動は何ですか?やり直しを主張しますか?部分的なやり直し?最初にリファクタリングしますか?バグのみを修正し、技術的負債を受け入れますか?それらのオプションのリスク評価を行ってから決定しますか?他に何か?
115 code-reviews 

2
ファイルのエンコードを検出する方法は?
私のファイルシステム(Windows 7)には、いくつかのテキストファイルがあります(重要な場合、これらはSQLスクリプトファイルです)。 Notepad ++で開くと、「エンコード」メニューで「UCS-2リトルエンディアン」と「BOMなしのUTF-8」のエンコードが報告されます。 ここの違いは何ですか?それらはすべて完全に有効なスクリプトのようです。Notepad ++なしでファイルにどのエンコーディングが含まれているかをどのように確認できますか?

5
これらの比較で、SwiftはどのようにObjective-Cよりもずっと速くできますか?
Apple はWWDC14で新しいプログラミング言語Swiftを発売しました。プレゼンテーションでは、Objective-CとPythonのパフォーマンスを比較しました。以下は、これらのスライドの1つで、複雑なオブジェクトの並べ替えを実行するこれら3つの言語の比較の写真です。 RC4暗号化アルゴリズムを使用したパフォーマンス比較について、さらに驚くべきグラフがありました。 明らかにこれはマーケティングの話であり、彼らはこれがそれぞれにどのように実装されているかについては詳しく説明しませんでした。私は私が疑問に思うままにします: 新しいプログラミング言語はどのように高速化できますか? Objective-Cの結果は不良なコンパイラが原因ですか、Objective-CではSwiftよりも効率が悪いものがありますか? 40%のパフォーマンス向上をどのように説明しますか?ガベージコレクション/自動化された参照制御は、追加のオーバーヘッドを生成する可能性があることを理解していますが、これだけですか?

20
「決して車輪を再発明しない」というフレーズは、学生に適していますか?
SOに関する質問をすると、「車輪を再発明しないでください」または「車輪を再発明しないでください」という表現に常にぶつかります。いくつかのフレームワークまたは既存のパッケージを使用するように指示されます。他の人がすでに解決したことに時間を浪費するのは賢明ではないので、私はこの態度がどこから来たのかを知っています。それともそうですか? 学生として、私は問題を解決するために他の人が書いたいくつかのコードを使用することによって、私が望んでいるほど多くを学ぶことができず、より少ない洞察を得ます。そして時々、私はそのフレーズは、私のような学生ではなく、主に締め切りに直面している働くプログラマーのためのものだと思います。 「車輪を再発明する」ことは悪いことですか?たぶん私は間違っていると思っていますか?車輪の再発明を避けながら、同時に多くのことを学ぶことができる方法がありますか?

14
0はなぜ偽ですか?
この質問は馬鹿げているように聞こえるかもしれませんが、ほとんどのプログラミング言語が0評価されfalse、他の[整数]値が評価されるのはなぜtrueですか? 文字列比較 質問は少し単純すぎるように思えるので、もう少し説明します。まず、プログラマーにとっては明白に思えるかもしれませんが、なぜプログラミング言語がないのか-実際にはあるかもしれませんが、私は使用しました-どこに0評価しtrue、他のすべての[整数]値を評価しfalseますか?その発言はランダムに見えるかもしれませんが、私はそれが良いアイデアだったかもしれないいくつかの例を持っています。まず、文字列の3者間比較の例を取り上げましょstrcmpう。Cを例に取ります。C 言語を最初の言語として試すプログラマーは、次のコードを書きたくなるかもしれません。 if (strcmp(str1, str2)) { // Do something... } 文字列が等しいときに評価されるstrcmp戻り値なので、最初のプログラマーがやろうとしたことは惨めに失敗し、一般的に最初はなぜか理解できません。していたために評価上記1 - -代わりに、この関数はその最も単純な式で使用されている可能性が平等を比較するとき、およびのための適切なチェックとは、必要なときにのみ行われていたであろう。ほとんどの場合、戻り値の型を(私たちの考えでは)考えていたでしょう。0false0true-11bool さらに、sign値-1、0およびのみを受け取る新しいタイプを導入しましょう1。それはかなり便利です。C ++に宇宙船オペレーターがあり、それを望んでいると想像してくださいstd::string(まあ、既にcompare関数はありますが、宇宙船オペレーターはもっと楽しいです)。現在、宣言は次のようになります。 sign operator<=>(const std::string& lhs, const std::string& rhs); していた0ために評価されtrue、宇宙船演算子は存在さえしないだろう、と私たちは宣言している可能性がoperator==そのように: sign operator==(const std::string& lhs, const std::string& rhs); これoperator==は3者間比較を一度に処理し、必要に応じてどの文字列が辞書的に優れているかを確認しながら、次のチェックを実行するために使用できます。 if (str1 == str2) { // Do something... } 古いエラー処理 現在、例外があるため、この部分は、そのようなものが存在しない古い言語(Cなど)にのみ適用されます。Cの標準ライブラリ(およびPOSIXのライブラリ)を見ると、maaaaany関数0が成功すると必ず戻り、それ以外の整数は必ず戻ります。悲しいことに、このようなことをする人を見たことがあります。 #define TRUE 0 // ... if …

17
コミットがリグレッションを引き起こしたことを誰かに伝える必要がありますか?
退行を追跡して修正すると(つまり、以前は動作していたコードの動作を停止させていたバグ)、バージョン管理により、それを破った変更をコミットしたユーザーを完全に検索できます。 これをする価値はありますか?これをコミットした人に指摘することは建設的ですか?ミスの性質(変更したコードの基本的な誤解に対する単純な不注意の規模)は、それが良いアイデアであるかどうかを変えますか? 彼らに伝えるのが良い考えであるなら、攻撃を引き起こしたり、彼らを守らせたりせずにそれをする良い方法は何ですか? 議論のために、バグはCIサーバーの自動テストで検出できないほど微妙であると仮定します。

8
多くのプログラマーがコードをgithubに移動するのはなぜですか?
過去6か月以上、sourceforge.netでホストされている多くのコードや、「GitHubに移動する」他のホスティングサイトを見てきました。「Moved to Github」というフレーズを含む単なるGoogle検索では、githubに移動されたテキストを含むいくつかの結果が返されます。これは私にとって非常に紛らわしいですし、なぜ人々は正確に動いているのでしょうか?GitHubの方が優れているということですか、それとも私には見られない特別な利点がありますか?

12
1つの製品またはソフトウェアの開発に複数のプログラミング言語が使用されるのはなぜですか?
私は最近、コンピューターサイエンスの修士号を取得することを目指している大学院生です。私は本当に興味をそそられ、それらに貢献することを勧める複数のオープンソースプロジェクトに出会いました(CloudStack、OpenStack、moby、Kubernetesなど)。それらの大部分に共通していることの1つは、複数のプログラミング言語(Java + Python + GoまたはPython + C ++ + Rubyなど)を使用していることです。複数のプログラミング言語が互いに通信するためにどのように作られているかを扱っているこの他の質問をすでに見てきました:2つの異なる言語を持つ2つの異なるプログラミングを相互作用させる方法は? 企業に複数のプログラミング言語の使用を促す要件を理解したいと思います。ソフトウェアアーキテクトまたはプロジェクトリーダーが「タスク1に言語Xを使用し、タスク2に言語Yを使用することを提案しています」と言う要件または要件のタイプは何ですか?同じ製品またはソフトウェアで複数のプログラミング言語が使用されている理由を理解できないようです。

11
関数が受け入れるパラメータの数に関するガイドラインはありますか?
私が使用しているいくつかの関数には6つ以上のパラメータがあることに気づきましたが、私が使用するほとんどのライブラリでは、3つ以上かかる関数を見つけることはまれです。 多くの場合、これらの追加パラメーターの多くは、関数の動作を変更するためのバイナリオプションです。これらの無数のパラメーター化された関数のいくつかはおそらくリファクタリングされるべきだと思います。数が多すぎる場合のガイドラインはありますか?

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