ソフトウェア工学

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

17
作業中にコードをコンパイルすることには利点がありますか?
最近、就職の面接を受けました。実際のコードを書くのに1時間かかりました。それほど多くはなく、おそらく100行未満でした。約45分後、コンパイルして実行し、動作するようになりました。コンパイルエラーと2、3の小さなバグを解決するのに5〜10分かかったかもしれませんが、全体的に非常にスムーズでした。(ちなみに、私は彼らから申し出を受けました。) しかし、私が戸惑ったのは、完成したコードを渡した後、インタビュアーが私が間違ったことは「進行中にコンパイルしない」ことだけだと言ったということでした。私は彼に違いは何であるかを尋ね、彼は「もしあなたがコードを完成させ、それが時間内にコンパイルしなかったらどうするだろう」と言った。 私の理解では、それは無効な引数です。なぜなら、特定の長さのコードに対して「コードをコンパイルする」には、通常、一定数のコンパイルエラーの修正が含まれ、かなり一定の時間がかかります。コードの記述を終了するか、コーディング時間をインターリーブする場合。どちらかといえば、欠落しているセミコロンを検索するためにコーディングを中断することは、おそらくあなたの効率に有害です。派生クラスの仮想関数などのエッジケースの周りの不明瞭さを実験している極端な状況を除いて、経験豊富な開発者によって書かれたコードは、時折の入力エラーを除いてコンパイルされることを期待するのが妥当と思われますそうでない場合、それは ' 別の同様の事件では、インタビューで不完全なコードベースが与えられ、それを完成させ、それを実行するために必要な変更を加えるように頼まれました。最初に既存のコードを読んでから、数分後(コードを見終える前であっても)、インタビュアーはそれで十分だと言った。私が彼に何をしたか(すなわち、「私は何を間違えたのか」)と尋ねたとき、彼はすぐにコードをコンパイルすることから始めたと言った。 なぜそれが関連するのでしょうか?私の意見と私の経験では、コードの一部がコンパイルされるかどうかは本質的にランダムであり、セミコロンが欠落しているかどうかなどが含まれており、基礎となるプログラムの正確性とはほとんど関係ありません。(私にとって、コンパイルに焦点を当てることは、文法をチェックするために校正せずに記事をスペルチェックに通すようなものです。) 不完全なコードを教えてくれた場合、最初にすべきことはそれを読むことです。コードが何をしているのかがわかり、アルゴリズムが正しいことがわかるまで、コンパイルしようとはしません。 とにかく、これらは最近のいくつかの事件に過ぎませんが、一般的に、多くの開発者がコードの進行について話をしているのを聞いたことがあります。あなたがコードをテストする利点を理解していますが、なぜコンパイルするのですか? だから私の質問はこれです:私が逃したものはありますか?実際にコンパイルする利点はありますか?または、これはソフトウェアコミュニティによって伝播された神話のようなもので、コードを頻繁にコンパイルする必要がありますか?

23
コードでコメントを作成するのが嫌いなチームメンバーに対処するにはどうすればよいですか?
私のチームメンバーの1人は、自分のコードでコメントを作成することを常に避けています。 彼のコードは自己文書化されておらず、他のプログラマーは彼のコードを理解するのに苦労しています。 私は彼に彼のコードをコメントするように何度も頼んだが、彼はただ言い訳をするか、または彼が後でそれをすることを主張する。彼の懸念は、コメントの追加に時間がかかりすぎてプロジェクトが遅れることです。 彼に彼のコードを適切に文書化するよう説得するために、どのような議論を彼に提示できますか? そのメモでは、コードのコメントに焦点を当てるのは間違っていますか、これは対処すべき大きな問題を示していますか?
183 teamwork  team  comments 


23
ナイトリービルドが壊れたときに謝る方法[終了]
私のプロジェクトで最初にコミットした結果、ナイトリービルドが壊れてしまい、リリースが近づいているので人々は私を取り囲んでいます。私は誠実に聞こえると同時に、これが私の最初のコミットであり、これがこれ以上繰り返されないことをほのめかす謝罪メールを送信したいと思います。 英語が母国語ではないので、正しい単語を見つけるのに苦労しています。誰か助けてくれますか?

8
すべての言語はCで書かれていますか?
時々、異なる言語(C / C ++、C#)でプログラミングしているときに、この考えが思い浮かびます。 すべての言語はCプログラミング言語で書かれていますか? C言語はすべての言語の母/父ですか? 各コンセプト(OOPなど)はすべてCで実装されていますか? 私は正しい方向にいますか?

17
毎日の仕事で「正しく」と「できるだけ早く」のバランスをどのように取っていますか?[閉まっている]
私はこの質問を何度も何度も熟考しています。私は物事を正しい方法でやりたいと思っています:保守しやすい、クリーンで理解しやすい正しいコードを書くことです。しかし、私がやることは、パッチの上にパッチを書くことです。時間がない、クライアントが待っている、バグを一晩で修正する必要がある、会社がこの問題でお金を失っている、マネージャーが一生懸命押すなどの理由で。 長期的にはこれらのパッチにより多くの時間を浪費していることを私は完全によく知っていますが、今回は数か月にわたる作業なので、誰も気にしません。また、私のマネージャーの一人が言っていたように、「今すぐ修正しないと長期になるかどうかわかりません。」 これらの無限の現実/理想の選択サイクルに巻き込まれているのは私だけではないと確信しています。私の仲間のプログラマー、あなたはどのようにこれに対処しますか? 更新:この興味深い議論に感謝します。非常に多くの人々が、コードの量と品質の間で毎日選択しなければならないのは悲しいことです。それでも、驚くほど多くの人々が、この戦いに勝つことができると考えているので、この励ましに感謝します。

16
会社で自動テストが失敗し続けるのはなぜですか?
私たちは、私の会社で開発者自動化テストを何度か紹介しようとしました。QAチームはSeleniumを使用してUIテストを自動化しましたが、私は常に単体テストと統合テストを導入したいと考えていました。過去に、私たちがそれを試みるたびに、皆は最初の1、2ヶ月の間興奮しました。その後、数ヶ月で、人々はそれをやめます。 いくつかの観察と質問: 自動テストは実際に機能しますか?他社で働いていた同僚のほとんどは、自動化されたテスト戦略を実装しようとして失敗しました。私はまだ実際にそれを使用し、それについて話すだけではない現実のソフトウェア会社を見ていません。多くの開発者は、自動化されたテストを理論的には素晴らしいが実際には機能しないものと見なしています。私たちのビジネスチームは、開発者が30%の余分な時間をかけてでもそれを行うことを望んでいます(少なくとも彼らはそう言っています)。しかし、開発者は懐疑的です。 自動化されたテストを適切に行う方法を実際に知っている人はいません。はい、インターネットで単体テストの例をすべて読みましたが、大きなプロジェクトにそれらを使用することはまったく別のことです。主な原因は、データベースまたはその他の重要なものをモック/スタブすることです。実際には、実際のテストを書くよりもモックに多くの時間を費やすことになります。それから、コードを書くよりもテストを書くのに時間がかかり始めたら、それはあきらめます。 複雑なデータ中心のWebアプリケーションで使用される単体テスト/システム統合テストの良い例はありますか?オープンソースプロジェクトはありますか?このアプリケーションはデータ中心ですが、ドメインロジックもたくさんあります。ある時点でリポジトリのアプローチを試してみましたが、ユニットテストにはかなり適していることがわかりましたが、データアクセスを簡単に最適化できるという代償を払って、さらに複雑な層が追加されました。 20人の経験豊富な開発者が行う大きなプロジェクトがあります。これは、単体テスト/統合テストを導入するための理想的な環境のようです。 なぜ機能しないのですか?会社でどのように機能させましたか?

30
コーディングの際にマイクロ最適化は重要ですか?
最近、PHPでisset()がstrlen()よりも高速だった理由を調べるために、Stack Overflowについて質問しました。これにより、読み取り可能なコードの重要性と、コードのマイクロ秒のパフォーマンスの改善が考慮に値するかどうかについて疑問が生じました。 私の父は退職したプログラマーであり、私は彼に応答を示しました。彼は、コーダーがマイクロレベルでもコードのパフォーマンスを考慮しない場合、優れたプログラマーではないことを完全に確信していました。 確かではありません-おそらく計算能力の向上は、この種のマイクロパフォーマンスの改善を考慮する必要がなくなったことを意味しますか?おそらく、この種の検討は実際の言語コードを書く人次第でしょうか?(上記の場合のPHPの)。 環境要因が重要になる可能性があります-インターネットは世界のエネルギーの10%を消費します。何百万ものウェブサイトで何兆回も複製されると、数マイクロ秒のコードがどれだけ無駄になるのだろうか? できればプログラミングに関する事実に基づいて答えを知りたいです。 コーディングの際にマイクロ最適化は重要ですか? 25の答えの私の個人的な要約、すべてに感謝します。 非常にまれな状況でのみ、マイクロ最適化について本当に心配する必要がある場合があります。ほとんどの場合、信頼性と読みやすさがはるかに重要です。ただし、ときどきマイクロ最適化を検討しても害はありません。基本的な理解は、次のようなコーディングの際に明らかに悪い選択をしないようにするのに役立ちます。 if (expensiveFunction() || counter < X) あるべき if (counter < X || expensiveFunction()) (@ zidarsk8の例)これは安価な関数である可能性があるため、コードを変更するとマイクロ最適化になります。しかし、基本的に理解していれば、そもそも正しく書くことができるので、その必要はありません。

19
自分のコードをレビューするにはどうすればよいですか?[閉まっている]
私はプロジェクトのソロに取り組んでおり、独自のコードを維持する必要があります。通常、コードのレビューはコードの作成者ではなく行われるため、レビュー担当者はコードを新鮮な目で見ることができますが、私にはそのような贅沢はありません。自分のコードをより効果的にレビューするためにどのようなプラクティスを採用できますか?

3
エンティティフレームワークはトラフィックの多いWebサイトに適していますか?
Entity Framework 4は、潜在的に1000ヒット/秒のパブリックWebサイトに適したソリューションですか? 私の理解では、EFは主に小規模またはイントラネットのWebサイト向けの実行可能なソリューションですが、人気のあるコミュニティWebサイトのようなものには簡単に拡張できません(SOがLINQ to SQLを使用していることは知っていますが、もっと例/証拠が欲しいです) ..) 現在、純粋なADO.NETアプローチを選択するか、EF4を選択するかの岐路に立っています。EFを使用した開発者の生産性の向上は、ADO.NET(ストアドプロシージャを使用)のパフォーマンスの低下ときめ細かいアクセスに値すると思いますか?トラフィックの多いWebサイトが直面する可能性のある深刻な問題は、EFを使用していたのですか? 前もって感謝します。

30
貧困層を支援するためにプログラミング能力をどのように使用できますか?
大学でコンピューターサイエンスを勉強している学生として、さまざまな人道的プロジェクトに取り組んでいる友人からよく耳を傾け、自分で何かをしたいと思っています。しかし、プログラマーは、たとえば医師や教師ほど多くの明白な支援の手段を持たないようです。プログラマーが自分の才能を貧困の人々のために使うことができるいくつかの方法は何ですか?
176 skills 

16
ゲッターとセッターはいつ正当化されるのか
ゲッターとセッターは、適切なオブジェクト指向ではないとしばしば批判されます。一方、私が見たほとんどのオブジェクト指向コードには、広範なゲッターとセッターがあります。 ゲッターとセッターはいつ正当化されますか?それらの使用を避けようとしていますか?それらは一般的に使い古されていますか? お気に入りの言語にプロパティがある場合(私の場合)、そのようなものもこの質問のゲッターおよびセッターと見なされます。オブジェクト指向の方法論の観点からは同じです。より良い構文を持っています。 Getter / Setter Criticismの情報源(コメントを見やすくするためにコメントから引用したものもあります): http://www.javaworld.com/javaworld/jw-09-2003/jw-0905-toolbox.html http://typicalprogrammer.com/?p=23 http://c2.com/cgi/wiki?AccessorsAreEvil http://www.darronschall.com/weblog/2005/03/no-brain-getter-and-setters.cfm http://www.adam-bien.com/roller/abien/entry/encapsulation_violation_with_getters_and http://www.yegor256.com/2014/09/16/getters-and-setters-are-evil.html 批判を簡単に述べると、ゲッターとセッターを使用すると、オブジェクトの外部からオブジェクトの内部状態を操作できます。これはカプセル化に違反します。オブジェクト自体のみがその内部状態に注意する必要があります。 そして、コードの手続きバージョンの例。 struct Fridge { int cheese; } void go_shopping(Fridge fridge) { fridge.cheese += 5; } コードのミューテーターバージョン: class Fridge { int cheese; void set_cheese(int _cheese) { cheese = _cheese; } int get_cheese() { return cheese; } } …

4
gitの2段階のコミットプロセス(ステージング)の利点は何ですか?
gitを学んでいますが、2段階のコミットプロセスがあることに気付きました。 git add <files> git commit 最初のステップでは、リビジョンを「ステージング領域」または「インデックス」と呼ばれるものに配置します。 私が興味を持っているのは、この設計上の決定が行われる理由と、その利点は何ですか? また、gitユーザーとしてこれを行うか、単に使用しgit commit -aますか? この機能を持っていないbzr(Bazaar)から来たので、これを尋ねます。

12
APIとSDKの違いは何ですか?
さまざまなAPIとSDKを調べていたときに、APIと呼ばれるものとSDKと呼ばれるものの違いを実際に理解できないことに気付きました。 両方とも、概念的には、他のソフトウェアがWebサービス、エンドユーザーアプリ、OSサービスまたはデーモン、またはカーネルであるかどうかに関係なく、プログラムが別のソフトウェアによって提供されるリソースとやり取りし、制御する方法ですデバイスドライバ。 それでは、SDKとAPIのセマンティックの違いは何ですか?

5
いつクラスの代わりに構造体を使用しますか?[閉まっている]
構造体とクラスを使用する場合の経験則は何ですか?私はそれらの用語のC#定義を考えていますが、あなたの言語が同様の概念を持っているなら、あなたの意見も聞きたいです。 私はほとんどすべてにクラスを使用する傾向があり、構造が非常に単純化されており、PhoneNumberなどのような値型でなければならない場合にのみ構造体を使用します。しかし、これは比較的マイナーな使用のように思われ、より興味深いユースケースがあることを願っています。
174 c#  design  class  struct 

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