ソフトウェア工学

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


8
「同時」実行と「並列」実行の違いは?
同時実行と並列実行という用語の違いは何ですか?私はその違いを理解することができませんでした。 このタグは、2つのプロセスを同時に実行する方法として同時実行性を定義しますが、並列処理はまったく同じもの、つまり、別々のプロセッサで実行される可能性のある別々のスレッドまたはプロセスであると考えました。 また、非同期I / Oのようなものを検討する場合、並行性と並列性のどちらを扱いますか?

6
メソッドvs機能vs手順
簡単な質問ですが、このような猛烈さで定義されたこれらの3つの用語をよく耳にしますが、これは長年にわたって異なることを意味することが知られています。 「手順」、「方法」、「関数」、「サブルーチン」などの「正しい」定義とは何ですか?

10
最近のデザインパターンは本当に重要ですか?
私は「Coders at Work」を読んでいて、この本でインタビューした専門家の中には、デザインパターンにあまり熱心ではないという事実に直面しています。 これには主に2つの理由があると思います。 設計パターンは、その用語で考えることを私たちに強制します。言い換えれば、何か新しいものを発明することはほとんど不可能です(たぶん良いでしょう)。 設計パターンは永遠に続きません。言語とテクノロジーは急速に変化します。したがって、設計パターンは最終的には無関係になります。 したがって、特定のパターンなしで適切にプログラミングする方法を学習し、それらを学習しないことがより重要かもしれません。 ポイントはまた、通常、人々が問題に直面し、あまり時間がないときに、パターンを使用しようとすることでした。これは、既存のコードをコピーして貼り付けて、わずかな変更を加えてプロジェクトを機能させることを意味します。何かを変更したり追加したりするとき、開発者は自分のコードではなく、深く理解していないため、どこから始めればよいかわかりません。

13
どの「バージョン命名規則」を使用していますか?[閉まっている]
異なるバージョンの命名規則は異なるプロジェクトに適していますか?何を使用し、その理由は? 個人的には、16進数のビルド番号(11BCFなど)を好みます。これは非常に定期的に増やす必要があります。そして、顧客向けにシンプルな3桁のバージョン番号、つまり1.1.3。 1.2.3 (11BCF) <- Build number, should correspond with a revision in source control ^ ^ ^ | | | | | +--- Minor bugs, spelling mistakes, etc. | +----- Minor features, major bug fixes, etc. +------- Major version, UX changes, file format changes, etc.

15
メソッドのメモリとパフォーマンスの速度を最適化するタイミング
私は最近Amazonでインタビューしました。コーディングセッション中に、インタビュアーはメソッドで変数を宣言した理由を尋ねました。私は自分のプロセスを説明し、彼はより少ない変数で同じ問題を解決するように私に挑戦しました。例えば、私が開始(これはインタビューからではなかった)方法A、次いで向上にそれを、方法B除去することによってint s。彼は喜んでおり、これはこの方法によってメモリ使用量を減らすだろうと言った。 私はその背後にあるロジックを理解していますが、私の質問は次のとおりです。 方法Aと方法B、またはその逆を使用するのが適切な場合 メソッドAがint s宣言されているため、メモリ使用量が高くなることがわかりますが、実行する必要があるのは1つの計算だけa + bです。一方、方法Bではメモリ使用量は少なくなりますが、a + b2回、つまり2回計算する必要があります。あるテクニックを他のテクニックよりもいつ使用するのですか?または、テクニックの1つは常に他よりも優先されますか?2つの方法を評価する際に考慮すべきことは何ですか? 方法A: private bool IsSumInRange(int a, int b) { int s = a + b; if (s > 1000 || s < -1000) return false; else return true; } 方法B: private bool IsSumInRange(int a, int b) { if (a + b …

9
データベースにどの程度のビジネスロジックを実装する必要がありますか?
私は、ほとんどのビジネスロジックがデータベースに実装されているプロジェクト(主にストアドプロシージャを使用)で働いてきました。一方、仲間のプログラマーからは、これは悪い習慣だと聞いたことがあります(「データベースはデータを保存するためにあります。アプリケーションは残りを行うためにあります」)。 これらのアプローチのどれが一般的に優れていますか? 私が考えることができるDBにビジネスロジックを実装することの長所は次のとおりです。 ビジネスロジックの集中化。 アプリケーションの種類、プログラミング言語、OSなどの独立性。 データベースは、テクノロジーの移行や大きなリファクタリング(AFAIK)を受けにくい傾向があります。 アプリケーションテクノロジの移行に関する手直しはありません(例:.NETからJava、PerlからPythonなど)。 短所: SQLは、ほとんどのアプリケーション指向言語が提供するライブラリと言語構成の欠如により、ビジネスロジックプログラミングの生産性が低く、より複雑です。 ライブラリ経由でのコードの再利用がより困難です(可能な場合)。 生産性の低いIDE。 注:私が話しているデータベースは、SQL Server、Oracle、MySqlなどのリレーショナルで人気のあるデータベースです。 ありがとう!

9
Webアプリの「将来性がない」という恐怖
私は、小規模なローカルSaaS WebアプリケーションのWeb開発者です。現在、約半数のクライアントがいます。 アプリケーションの設計を続けると、プロジェクトにいつでもコミットするように説得することがますます難しくなります。これは初期段階で行われました。プロジェクトと既に書いたコードに執着して成長したので、ビジネスが成長するにつれてアプリがうまくスケールしないことが判明したときに、コミットするすべての追加作業が近い将来に覆されることを恐れています。 インターンシップに応募する大学生として、面接中にウェブフレームワークを使用しないという選択を雇用者に質問させました。私は単にWebフレームワークを知らず、どのフレームワークを使用するのか分からない。 1月にフルスタックのデベロッパーとしてインターンシップを開始しました。フロントエンドフレームワークの学習を開始しますが、アプリを終了するプレッシャーが高まっているため、アプリを完全に破棄してやり直すことを検討しています。これは私が以前にやったことです。このアプリは現在、PHPとjQuery(AJAX呼び出し用)で構築されており、データベースにMySQLを使用しています。この精神的なブロックをどのように克服し、アプリがスケーラブルになることを保証するための考えはありますか?前もって感謝します。

13
クリーンなコードプラクティスに従うことで、より多くのコードが記述されていることをどのように正当化しますか?
モデレーターノート この質問には、すでに17の回答が投稿されています。新しい回答を投稿する前に、既存の回答を読んで、あなたの視点が十分にカバーされていないことを確認してください。 私はRobert Martinの「Clean Code」の本で推奨されているプラ​​クティスのいくつか、特に私が扱うソフトウェアのタイプに当てはまるものと私にとって意味のあるものに従っています(ドグマとしては従いません) 。 しかし、私が気づいた副作用の1つは、私が書いた「クリーンな」コードは、いくつかのプラクティスに従わなかった場合よりも多くのコードであるということです。これにつながる具体的なプラクティスは次のとおりです。 条件のカプセル化 の代わりに if(contact.email != null && contact.emails.contains('@') このような小さなメソッドを書くことができます private Boolean isEmailValid(String email){...} インラインコメントを別のプライベートメソッドに置き換え、メソッド名がその上にインラインコメントを持たずにそれ自体を説明するようにする クラスに変更する理由は1つだけです 他にもいくつかあります。ポイントは、コメントを置換し、条件をカプセル化する小さなメソッドなどのために、30行のメソッドになる可能性があるものがクラスになることです。あなたが非常に多くのメソッドを持っていることに気付いたとき、それは「理にかなっています」本当にメソッドでなければならないのに、すべての機能を1つのクラスに入れます。 私は、極度に行われたいかなる行為も有害である可能性があることを知っています。 私が答えを探している具体的な質問は次のとおりです。 これは、クリーンなコードを書くことの許容可能な副産物ですか?もしそうなら、より多くのLOCが書かれているという事実を正当化するために使用できるいくつかの引数は何ですか? 組織はLOCの増加を特に懸念していませんが、LOCを増やすとクラスが非常に大きくなる可能性があります(これも読みやすいように、1回限りのヘルパー関数を使用せずに長いメソッドに置き換えることができます)。 十分な大きさのクラスを見ると、クラスが十分に忙しく、その責任が終了したという印象を与えます。したがって、他の機能を実現するために、さらにクラスを作成することになります。その結果、多数のクラスが作成され、すべてが多くの小さなヘルパーメソッドを使用して「1つのこと」を実行します。 これは特定の懸念事項です...これらのクラスは、多くの小さなメソッドの助けを借りずに、「1つのこと」を達成する単一のクラスである可能性があります。おそらく3つまたは4つのメソッドといくつかのコメントを持つ単一のクラスである可能性があります。

11
私のチームはどこから「モダン」になりますか?[閉まっている]
私は比較的新しいデベロッパーで、大学の新人です。大学在学中およびその後の求職中に、ユニットテスト、ロギング、データベースの正規化、アジャイル開発(一般的なアジャイルコンセプト)、コーディングスタイルに欠けている多くの「最新の」ソフトウェア開発方法があることに気付きました。ガイド、リファクタリング、コードレビュー、標準化されたドキュメント化方法(または要件)などもありません。 全体として、これが問題だとは思いませんでした。私は私の最初の仕事がこれらすべてのアイデアを受け入れ、仕事で私にそれらを教えることを期待していました。それから私は大企業で私の最初の仕事(フルスタックWeb開発)を得ました、そして、私は我々がこれらのことのどれもしないことに気付きました。実際、チームで最も経験の浅い私は、「最新の」プログラミング技術でチームをスピードアップさせようと試みている先駆者です。 最初にロギングソフトウェア(log4J)から始めましたが、すぐに独自のスタイルガイドの作成に移り、それをGoogleスタイルガイドのために放棄しました。 Springの採用-しかし、ユニットテストもなかったことに気付きましたが、私はすでにSpringを学習していました...そしてご覧のように、特に通常の開発作業と組み合わせると、圧倒的に速くなります。さらに、これらの方法論の中で「専門家」になって、他の誰かに教えるのに十分な「専門家」になるのは難しいです。 今日のソフトウェア開発の世界では「期待される」と思われるこれらのテクニックのうち、自分とチームの両方を圧倒することなく、それらを新しいプレーヤーとしてチームに統合するにはどうすればよいですか。 どうすればチームに影響力を与えてアジャイルになれますか?関連していますが、私はここの質問者のようなアジャイル開発者ではなく、アジャイルよりもはるかに広範な方法論のセットを探しています。
106 agile  teamwork 

10
Pythonが高性能/科学計算に使用されているのはなぜですか(Rubyは使用されていません)?
PyCon 2011の講演から引用があります: 少なくとも当店(アルゴンヌ国立研究所)には、科学計算用に受け入れられている3つの言語があります。この順序では、C / C ++、すべての方言のFortran、およびPythonです。Ruby、Perl、Javaの完全かつ完全な欠如に気付くでしょう。 これは、より一般的な高性能コンピューティングのコンテキストでした。引用は1つのショップからのものにすぎませんが、HPCの言語に関する別の質問もPythonを学ぶべきものとしてリストしています(Rubyではありません)。 今、私はその問題空間で使用されているC / C ++とFortranを理解できます(そしてPerl / Java は使用されていません)。しかし、PythonとRubyのHPCでの使用にかなりの違いがあることに驚いています。(注-私はPythonのファンですが、Ruby に対しては何もありません)。 1つの言語が離陸した特定の理由はありますか?利用可能なライブラリについてですか?特定の言語機能はありますか?地域社会・共同体?それとも、単に歴史的隣接性、そしてそれは他の方法で行ったかもしれない?


15
インタビューでデータ構造が非常に重要なのはなぜですか?[閉まっている]
大学を卒業したとき、データ構造がそれほど強くなかったことを告白しなければなりません。卒業中のキャンパス内の配置を通して、Amazon、Microsoftなどの大企業のほとんどがデータ構造に主に焦点を当てていることを目撃しました。データ構造が卒業生に期待される唯一のものであるかのように見えます。 正直に言うと、私はそれについて悪いと感じました。良いコードを書きます。私はコーディングの標準設計パターンに従います。データ構造を使用しますが、ArrayList、LinkedListなどのJava公開APIのように表面的なレベルで使用します。 おそらくJavaのバックグラウンドのために、当時、オブジェクトやインスタンスなどのオブジェクト指向プログラミングの観点から話をしたときのみ、コードの効率とロジックを理解していましたが、ビットとバイトのレベルにドリルダウンすることはありませんでした。私は、このデータ構造の知識不足のために、人々に私を見下して欲しくありませんでした。 では、なぜデータ構造にこれらすべての重点が置かれているのでしょうか?

22
求人は要件を誇張していますか?[閉まっている]
私は適度に資格のあるプログラマーのように感じますが、私が出くわす多くの求人は、そうでないと感じさせます。それらのほとんどすべてが、資格を要件と望ましいものに分けていますが、要件の部分でさえ困難な場合があります。 比較的小さなテクノロジーやライブラリで数年(2年以上)の経験が必要だという投稿が多く見られますが、これは会社固有のものです。また、言語に5年以上、または7年以上の経験が必要な場合もあります。これらのいくつかは大丈夫ですが、小さな町の会社が2言語で3年、ネットワークプログラミング、スクリプト、データベース、および「大規模で非常に冗長なビジネスクリティカルシステムでの経験」のようなものが必要だと言うとばかげますすべて同時に。 彼らは、彼らが使用しているのとまったく同じテクノロジーセットでの幅広い経験を持つ人を見つけることを本当に期待していますか?スキルセットに少なくとも1つまたは2つのホールがない単一の投稿を見つけるのに苦労しています。ほとんどの場所では、あなたの能力を迅速に学習し、仕事について教えてくれると何度も繰り返し聞いていますが、なぜそれが必要だと言うのでしょうか?彼らは、バレルの底(FizzBu​​zzの失敗)が適用されないようにしていますか?
106 skills 

6
XMLが正確に「言語」と呼ばれるのはなぜですか?
XMLの名前になぜLが含まれているのかと思っていました。 XML自体は何も「行いません」。これは単なるデータストレージ形式であり、言語ではありません!言語は物事を「行う」。 XMLを適切に言語に変換するためにXMLを取得する方法はxmlns、ルート要素に属性を追加することです。その場合にのみ、環境の内容を伝えます。 1つの例はXHTMLです。アクティブで、リンク、ハイパーテキスト、スタイルなどがあり、すべてによってトリガーされますxmlns。それがなければ、XHTMLファイルは、マークアップノード内の単なるデータの集まりです。 では、なぜXMLは言語と呼ばれるのでしょうか?それは何も説明せず、解釈もせず、ただそうです。 編集:たぶん私の質問はもっと広くすべきだった。現在、答えは「XMLはGMLなどにちなんで命名されたSGMLにちなんで命名されているから」という質問なので、質問は(XMLなどの)マークアップ言語が言語と呼ばれるのはなぜですか? ああ、そしてWRTの投票権:いいえ、私はXについては質問していません。Lについては質問しています!

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