ソフトウェア工学

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

12
優れたプログラマーを認識する方法は?[閉まっている]
当社は新しいプログラマーを探しています。そして、ここに問題があります-インタビューで本当に見栄えが良く、必要な技術を知っていて、良い職歴を持っているように見える開発者がたくさんいますが、2ヶ月の仕事の後、あなたは彼らが働けないチームがいくつかのコードを書くのに非常に長い時間がかかり、さらに、結果は本来あるべきほど良くありません。 それで、正式なテストを使用していますか(ありますか?)。優秀なプログラマーと優秀な人をどのように認識していますか?将来の問題を明らかにするかもしれない単純な「良い」質問はありますか?...それとも、その人についてのあなたの「気持ち」(つまり、主にあなたの経験)、および彼/彼女を試してみることについてですか? 編集:Manojの答えによると、ここに就職の面接でコーディングタスクに関連する質問があります。

1
違いの理解:従来のインタープリター、JITコンパイラー、JITインタープリター、およびAOTコンパイラー
従来のインタープリター、JITコンパイラー、JITインタープリター、AOTコンパイラーの違いを理解しようとしています。 インタープリターは、何らかのコンピューター言語で命令を実行する単なるマシン(仮想または物理)です。その意味で、JVMはインタープリターであり、物理CPUはインタープリターです。 Ahead-of-Timeコンパイルとは、コードを実行(解釈)する前に特定の言語にコンパイルすることを意味します。 ただし、JITコンパイラーとJITインタープリターの正確な定義についてはわかりません。 私が読んだ定義によると、JITコンパイルとは、コードを解釈する直前にコンパイルすることです。 それで、基本的に、JITコンパイルはAOTコンパイルであり、実行(解釈)の直前に行われますか? そして、JITインタープリターは、JITコンパイラーとインタープリターの両方を含み、解釈する直前にコードをコンパイルする(JITする)プログラムですか? 違いを明確にしてください。

6
Java 8に不変のコレクションが含まれないのはなぜですか?
Javaチームは、Java 8の関数型プログラミングの障壁を取り除くために多大な努力をしてきました。特に、java.utilコレクションの変更は、変換を非常に高速なストリーム操作に連鎖させるという素晴らしい仕事をしています。彼らがコレクションにファーストクラスの関数と機能メソッドを追加するのをどれだけうまくやったかを考えると、なぜ彼らは不変のコレクションや不変のコレクションのインターフェースを提供することに完全に失敗したのでしょうか? 既存のコードを変更せずに、Javaチームはいつでも変更可能なインターフェイスと同じ不変インターフェイスを追加し、「set」メソッドを削除して、既存のインターフェイスを次のように拡張できます。 ImmutableIterable ____________/ | / | Iterable ImmutableCollection | _______/ / \ \___________ | / / \ \ Collection ImmutableList ImmutableSet ImmutableMap ... \ \ \_________|______________|__________ | \ \___________|____________ | \ | \___________ | \ | \ | List Set Map ... 確かに、List.add()やMap.put()などの操作は現在、指定されたキーのブール値または前の値を返し、操作が成功したか失敗したかを示します。不変のコレクションは、そのようなメソッドをファクトリーとして扱い、追加された要素を含む新しいコレクションを返す必要があります-これは現在の署名と互換性がありません。ただし、ImmutableList.append()または.addAt()およびImmutableMap.putEntry()などの別のメソッド名を使用することで回避できます。結果として得られる冗長性は、不変のコレクションを操作する利点よりも重要であり、型システムは間違ったメソッドを呼び出すエラーを防ぎます。時間が経つにつれて、古いメソッドは廃止される可能性があります。 不変コレクションの勝利: シンプルさ-基礎となるデータが変更されない場合、コードについての推論は簡単です。 ドキュメンテーション-メソッドが不変のコレクションインターフェイスを取る場合、そのコレクションを変更しないことを知っています。メソッドが不変のコレクションを返す場合、変更できないことを知っています。 並行性-不変コレクションはスレッド間で安全に共有できます。 不変性を前提とする言語を味わった人として、Wild延する突然変異のワイルドウエストに戻ることは非常に困難です。Clojureのコレクション(シーケンス抽象化)には、Java …


16
レビュー中に他の人の不適切に設計されたコードの改善を巧妙に提案するにはどうすればよいですか?
私はきれいなコードとコードの職人技を大いに信じていますが、私は現在、これが最優先事項と見なされていない仕事に就いています。機能的でバグがほとんどないのに、ピアのコードが乱雑な設計に埋もれており、将来のメンテナンスにほとんど関心がないという状況に陥ることがあります。 変更が必要なものが非常に多く、期限が近づいていると思われる場合、コードレビューの改善をどのように提案しますか?期限が過ぎた後に改善を提案することは、新機能やバグ修正が追加されると、優先度が完全に解除されることを意味することに注意してください。

30
開発者に遅い開発マシンを与えると、コードはより速く/より効率的になりますか?[閉まっている]
開発者に絶叫する高速マシンを提供するとします。WPFベースのVS2010は非常に高速にロードされます。次に、開発者は、自分のボックスで正常に動作するWPFまたはWPF / eアプリケーションを作成しますが、現実の世界でははるかに低速です。 この質問には2つの部分があります... 1)開発者に遅いマシンを提供するということは、結果のコードがより高速またはより効率的であることを意味しますか? 2)開発者に高速のIDEエクスペリエンスを提供し、「典型的な」ランタイムエクスペリエンスを提供するにはどうすればよいですか? 更新: 記録のために、経営陣に対して率直な対応を準備しています。これは私の考えではありません。あなたの人々は、クライアントの誤った要求を修正するのを手伝っています。より多くの弾薬と、これにいつどこでアプローチするかについて言及してくれてありがとう。次のような有効なユースケースを+1しました。- 特定のサーバー側プログラミングの最適化 -テストラボ - 最高品質のグラフィックカードではなく、より良いサーバーを購入する可能性
130 ide  testing  performance 

9
制御フローとしての例外は深刻なアンチパターンと見なされますか?もしそうなら、なぜですか?
90年代後半に戻って、フロー制御として例外を使用するコードベースでかなり作業しました。テレフォニーアプリケーションを駆動する有限状態マシンを実装しました。最近、MVC Webアプリをやっているので、当時のことを思い出します。 どちらにもController、次に進む場所を決定し、データを宛先ロジックに提供するものがあります。DTMFトーンなどの旧式の電話のドメインからのユーザーアクションは、アクションメソッドのパラメーターになりましたがViewResult、aのようなものを返す代わりに、をスローしましたStateTransitionException。 主な違いは、アクションメソッドがvoid関数であったことだと思います。私はこの事実で私がしたことをすべて覚えていませんが、15年前のようにその仕事以来、私は他の仕事の生産コードでこれを見たことがないので、私は多くのことを覚える道を行くことをheしました。これはいわゆるアンチパターンであるという兆候だと思いました。 これは事実ですか?もしそうなら、なぜですか? 更新:質問をしたとき、@ MasonWheelerの回答をすでに念頭に置いていたので、私の知識に最も追加された回答を使用しました。彼も同様に正しい答えだと思います。

16
バグをより速く解決する方法はありますか?私はちょうど上司から警告を受けました[終了]
上司から、月曜日にパフォーマンスに関する否定的なレビューを受けると言われました。彼は、なぜ私がそんなに遅いのか、そしてなぜ私のバグ修正率がそんなに低いのかについて私に話したいと思っています。 私はプログラミングと問題の解決が大好きですが、実際に仕事は本当に難しいと感じています。 私は実際に約10年間プログラマーです。しかし、これは私の最初のマルチスレッディング組み込みLinuxの仕事です-私はここに2年来ましたが、私がまだ苦労していることは誰にとっても明らかです。そして、私は非常に士気を失い、社会から疎外されたと感じているので、仕事を始めたときの多くの火を失いました。 誰も同じような状況に陥ったことはありますか?また、バグ修正率をどのように上げますか? 更新:レビューがありました。私は3か月間の「従業員開発プログラム」(Dunkが言及したタイプの)に参加しました。これを好転させることができるかどうかわからない。しかし、先に進まなければならない場合でも、この経験から多くのことを学びました。 別の更新 最初のレビューから約6週間です。同じ状況に直面している人への私のアドバイスは、批判を受け入れ、あなたの過ちから学ぶのに十分謙虚であることです。そして、愚かに見えることを恐れないために。たくさんの質問をしてください。あなたが学ぼうとしていることを人々に知らせ、理解するまで尋ね続けます。しかし、うまくいかないように準備してください。私はコードのポートフォリオを構築しています...そしてそれをベストショットにします。 さらに別の更新 将来の雇用者に私のstackoverflowプロファイルを参照することができないのではないかと心配しているので、これをここに置くのをためらっています...しかし、とにかく、この質問を読んでいる人にとって興味があるかもしれませんが、実際には数週間前の仕事。私は必要なすべてのスキルを磨く最中です-ここで与えられたアドバイスから多くを取りました。

14
悪いコードをクライアントに示しますか?
クライアントから、別のコンサルタントが開発したASP.NET WebformsアプリケーションであるWebサイトの再設計を依頼されました。比較的簡単な仕事のように見えましたが、コードを見てみると、そうではないことは明らかです。 このアプリケーションはうまく書かれていません。まったく。SQLインジェクション攻撃に対して非常に脆弱であり、ビジネスロジックがアプリケーション全体に広がっており、多くの重複があり、デッドコードは何もしません。その上、それは窒息させられている例外をスローし続けるので、サイトはスムーズに実行されるように見えます。 私の仕事は単純にHTMLとCSSを更新することですが、HTMLの多くはビジネスロジックで生成されており、整理するのは悪夢です。再設計に関する私の見積もりは、クライアントが目指していたよりも長くなっています。彼らはなぜそんなに長いのか尋ねています。 このコードがどれほど悪いかをクライアントに説明するにはどうすればよいですか?彼らの頭の中では、アプリケーションは素晴らしい動きを見せており、再設計は一回限りのものにすべきです。前のコンサルタントに対する私の言葉です。非技術系クライアントが理解できる簡単で具体的な例を挙げるにはどうすればよいですか? 更新 すべての回答をありがとう。SQLインジェクション攻撃のデモは理にかなっており、これをテスト環境でデモします。これは、このアプリケーションの多くの問題のほんの一部です。私は、htmlとcssの更新を行うために、他の部分(データレイヤーで生成されるhtmlなど)をより良いプラクティスに置き換える必要がある理由を説明する方法を探していました。ここには多くの良い提案がありますが、クライアントと話をするときに一緒にまとめます。

7
推測不可能なプライベートURLはパスワードベースの認証と同等ですか?
Webでリソースを公開したい。このリソースを保護したい:特定の個人のみがアクセスできるようにするため。 何らかの種類のパスワードベースの認証を設定できました。たとえば、ファイルを提供する前に、(おそらくユーザーのバッキングデータベースに対して)正しい資格情報の着信要求をチェックするWebサーバーを介してのみ、リソースへのアクセスを許可できます。 または、プライベートURLを使用することもできます。つまり、単純に推測できないパスでリソースをホストできhttps://example.com/23idcojj20ijf...ます。たとえば、正確な文字列を知っている人にアクセスを制限します。 このリソースにアクセスしたい悪人の観点から見ると、これらのアプローチは同等ですか?そうでない場合、それらの違いは何ですか?そして、保守性に関しては、どちらか一方を実装する前に私が知っておくべきどちらかのアプローチに賛否両論はありますか?

16
バグ修正がいつ過剰になりますか?
JavaScriptでビデオプレーヤーを作成しているとします。このビデオプレーヤーは、再帰関数を使用してユーザーのビデオを繰り返しループします。そのため、ブラウザーはいつかトリガーしtoo much recursion RangeErrorます。 おそらくループ機能をそれほど使用する人はいないでしょう。ユーザーがアプリケーションを1週間ループしたままにしたとしても、アプリケーションはこのエラーをスローしませんが、まだ存在します。問題を解決するには、アプリケーションでループが機能する方法を再設計する必要がありますが、これにはかなりの時間がかかります。職業はなんですか?どうして? バグを修正する バグを残す 人々がつまずくバグを修正するだけではいけませんか?バグ修正がいつ過剰になりますか? 編集: 実際のバグを引き起こさない再帰的なアプローチが懸念事項である場合、プレーヤーがビデオをループするたびに変数が増加すると仮定します1。2 53ループ後、この変数はオーバーフローし、プログラムはそれを処理できなくなり、例外をスローします。

11
システムの複雑さの増加は、プログラマーの次の世代にどのような影響を与えましたか?
「新しい」プログラマーとして(2009年に最初にコード行を書きました)、たとえば.NETフレームワークのようなものを使用して、今日非常に複雑な要素を示すプログラムを作成するのは比較的簡単であることに気付きました。ビジュアルインターフェイスの作成、またはリストの並べ替えは、ごくわずかなコマンドで実行できるようになりました。 プログラミングを学んでいたとき、コンピューティング理論も並行して学んでいました。並べ替えアルゴリズム、ハードウェアの動作原理、ブール代数、有限状態マシンなどのこと。しかし、理論で学んだ非常に基本的な原理をテストしたい場合、ライブラリ、フレームワーク、OSのようなものによって多くのテクノロジーが不明瞭になるため、始めるのが常にずっと困難であることに気付きました。 40/50年前には、メモリが十分でなく高価だったため、メモリ効率の高いプログラムを作成する必要がありました。そのため、ほとんどのプログラマは、データ型とプロセッサによる命令の処理方法に細心の注意を払いました。最近では、処理能力と使用可能なメモリの増加により、これらの懸念は優先事項ではないと主張する人もいます。 私の質問は、古いプログラマーがこれらのような革新を天の恵みまたは抽象化する追加の層と見るかどうかであり、なぜそう思うのでしょうか?そして、若いプログラマーは、拡張ライブラリの領域を探索する前に、低レベルのプログラミングを学ぶことにより多くの利益をもたらすでしょうか?もしそうなら、なぜですか?

15
単一文字の定数はリテラルよりも優れていますか?
私は最近、ほとんどすべての単一文字を定数として提供するクラスに遭遇しました。からCOMMAまでのすべてBRACKET_OPEN。これが必要かどうか疑問に思います。私は、単一文字のリテラルを定数に取り込むことが役立つと示唆する「記事」を読みました。だから、私は懐疑的です。 定数を使用する主な魅力は、変更が必要なときにメンテナンスを最小限に抑えることです。しかし、いつコンマを表すために「、」とは異なるシンボルを使用し始めますか? リテラルの代わりに定数を使用する唯一の理由は、コードを読みやすくすることです。しかし、city + CharacterClass.COMMA + state(たとえば)本当に読みやすいですcity + ',' + stateか? 私にとって、主にあなたが別のクラスと別のインポートを導入するという短所は長所を上回ります。そして、可能な限り少ないコードを信じています。だから、私は一般的なコンセンサスがここにあるのだろうかと思っています。

10
ランダム性をテストするにはどうすればよいですか?
配列内の要素をランダムにシャッフルする方法を検討してください。これが機能していることを確認するために、シンプルでありながら堅牢な単体テストをどのように作成しますか? 私は2つのアイデアを思いつきましたが、どちらにも顕著な欠陥があります: 配列をシャッフルし、順序が以前と異なることを確認します。これは良いように聞こえますが、シャッフルが同じ順序でシャッフルされると失敗します。(ありえませんが、可能です。) 一定のシードで配列をシャッフルし、所定の出力に対してチェックします。これは、同じシードが与えられると常に同じ値を返すランダム関数に依存しています。ただし、これは無効な仮定である場合があります。 サイコロの出目をシミュレートし、乱数を返す2番目の関数を考えます。この機能をどのようにテストしますか?その機能をどのようにテストしますか... 与えられた範囲外の数値を返すことはありませんか? 有効な分布で数値を返しますか?(1つのダイスで均一、多数のダイスで通常)。 これらの例だけでなく、一般的なコードのランダム要素をテストするための洞察を提供する回答を探しています。ユニットテストはここでも正しい解決策ですか?そうでない場合、どのようなテストがありますか? みんなの心を楽にするためだけに、私は自分の乱数ジェネレーターを書いていません。

3
Apache 2ライセンスの実際の影響は何ですか?[閉まっている]
プロジェクトにSVG編集を使用したい。このソフトウェアは、Apache 2ライセンスの下で配布されます。 私はそれを見てきました: 変更された、または変更されていないすべてのコピーには、ライセンスのコピーが添付されます すべての変更は、変更者の作業として明確にマークされます 著作権、商標、および特許権のすべての通知は、配布コピーで正確に複製されます ライセンシーは、ライセンサーに属する商標を使用していません これらはコードに関係していますか、それともGUIのどこかにライセンスを表示する必要がありますか?オリジナルのソフトウェアは、「SVG編集を搭載し、」表示私はこれを削除した場合、それは大丈夫でしょうか?そして最も重要なこと:これを行うための正しいエチケットは何ですか?意地悪になりたくありませんが、同時にUIを可能な限り簡素化し、失礼と見なされない場合はリンクを削除することもその一部になります。

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