ソフトウェア工学

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

6
なぜプログラミング言語が変数と関数のシャドウ/非表示を許可するのですか?
(などC ++やJava、Pythonなど)で最も人気のあるプログラミングlangugesの多くの概念持って隠しを / シャドーイング、変数や関数の。非表示またはシャドウイングに遭遇したとき、それらはバグを見つけるのが困難な原因であり、これらの言語の機能を使用する必要があることを発見したことはありません。 私には、非表示とシャドウイングを許可しない方が良いと思われます。 誰もがこれらの概念をうまく利用していることを知っていますか? 更新: クラスメンバー(プライベート/保護されたメンバー)のカプセル化について言及していません。

5
信頼できないコードの実行のベストプラクティス
私は、ユーザーがサーバーに対して任意の信頼できないpythonコード(このようなビット)を実行できるようにする必要があるプロジェクトを持っています。私はpythonにかなり慣れていないため、システムにセキュリティホールやその他の脆弱性を招くようなミスを避けたいと思います。利用可能なベストプラクティス、推奨される読書、または私のサービスを使用可能にするが悪用できないようにする他のポインターはありますか? これまで私が考えてきたことは次のとおりです。 コンテキストから削除__builtins__して、execなどの潜在的に危険なパッケージの使用を禁止しますos。ユーザーは、私が提供したパッケージのみを使用できます。 スレッドを使用して、適切なタイムアウトを強制します。 execコンテキスト内で割り当てることができるメモリの総量を制限したいのですが、それが可能かどうかはわかりません。 ストレートexecに代わるものがいくつかありますが、ここでどれが役立つかわかりません: を使用して、ast.NodeVisitor安全でないオブジェクトにアクセスする試みをキャッチします。しかし、どのオブジェクトを禁止する必要がありますか? 入力内の二重アンダースコアを検索します。(上記のオプションよりも優雅ではありません)。 PyPyコードのサンドボックスを使用するか、サンドボックスに似たもの。 注: JavaScriptベースのインタープリターが少なくとも1つあることは承知しています。私のシナリオではうまくいきません。

6
到達不能なコードで新しいRuntimeExceptionをスローするのは悪いスタイルですか?
少し前に、より熟練した開発者によって書かれたアプリケーションを保守することになりました。私はこのコードに出会いました: public Configuration retrieveUserMailConfiguration(Long id) throws MailException { try { return translate(mailManagementService.retrieveUserMailConfiguration(id)); } catch (Exception e) { rethrow(e); } throw new RuntimeException("cannot reach here"); } 投げることRuntimeException("cannot reach here")が正当化されるかどうか興味があります。私はおそらく、このコードがより経験豊かな同僚から来ていることを知っている明らかな何かを見逃しています。 編集:ここにいくつかの答えが言及したボディを再スローします。この質問では重要ではないと判断しました。 private void rethrow(Exception e) throws MailException { if (e instanceof InvalidDataException) { InvalidDataException ex = (InvalidDataException) e; rethrow(ex); } if (e …

2
C ++ / CXおよびC ++ / CLIとは何ですか?また、C ++およびWinRTとどのように関係しますか?
Metroアプリを設計するためにC ++の学習という課題に取り組むことを検討していましたが、そのときにC ++ / CXに出会いました。 MetroアプリはC ++ 11でコーディングできますか?動作させるにはC ++ / CXが必要ですか?そして、C ++ / CXとは正確には何ですか?C ++のみを使用してMetroアプリを作成することは可能ですか、それともC ++ / CXが必要ですか?また、C ++ / CLIはこの図とどのように結びついていますか?
31 c++  windows-8  winrt 

3
GCCはWindowsでスレッドサポートなしで死にますか?[閉まっている]
意見が必要です。GCCは常に非常に優れたコンパイラーでしたが、最近では「魅力」を失いつつあります。私は、Windows GCCにはstd::threadサポートがなく、Windowsユーザーが別のコンパイラーを使用することを強いられていることがわかりました。なぜなら、最もエキサイティングな機能がまだ欠けているからです。 しかし、WindowsでGCCがまだスレッドをサポートしていないのはなぜですか?ライセンスの問題?ABIの非互換性 (まあ、マルチスレッドを使用するクロスプラットフォームライブラリが既にいくつかあります:boost、POCO、SDL、wxwidgetsなど。GCCリリースを出荷する代わりに、既存のMIT / libpngライセンスのコードをこのホールに合うように使用するのは簡単ではないでしょうかスレッドのサポートなし?) 最近、コンパイラの比較を見ると、GCCは他のコンパイラに比べてC ++ 11の機能を最も幅広くサポートしていますが、Windowsではアトミック、ミューテックス、スレッドがまだないため、これは真実ではありません。 このトピックについてもっと知りたいのですが、私が見つけることができる唯一のことは、次の理由で助けを求める人々です: 「スレッド」はstd名前空間に存在しません GCC / TDM-GCCのチケットトラッキングとメールディスカッションを見ると、2009年からスレッドサポートのリクエストがありました。本当に何が起こっているのですか?

3
Sublimeの「ミニマップ」は生産性を向上させますか?[閉まっている]
私はSublimeの大ファンです。私のお気に入りの機能の1つは、右上隅のテキストの圧縮イメージ(ミニマップ)を使用してファイルをスクロールする機能です。私の直感では、これは生産性にプラスの効果をもたらします。 このミニマップをスクロールすると、実際に生産性が向上しますか? PS-副質問:Sublimeはこのアイデアを発明したのですか、それとも別のテキストエディターから取り入れたのですか?

7
アジャイルチームは新しい機能を毎日提供する必要がありますか?
私の会社は、ウォーターフォールスタイルの開発からアジャイル/スクラムへの移行の最中です。とりわけ、私たちは私たちが持っている期待があることを告げている新しい作業を、テスト可能(QAによっては)毎日の終わりにしています。 開発者のほとんどは、会議やその他の企業のオーバーヘッドにより、1日約2時間を失います。つまり、6時間(せいぜい)の期間で、QAが機能するための完全な機能を生成するのに十分なコードを設計、作成、単体テスト、ビルド、デプロイ(リリースノート付き)する必要があります。ビルド/デプロイ/リリースノートは適切なCIセットアップで自動化できることを理解していますが、まだそこにいません。 また、サーバー側のコードを作成する大規模なオフショア部隊があり、12時間の時差によりこれがさらに困難になります。 機能をできるだけ早くエンドツーエンドで完了するために、ストーリーを狭くて深い垂直スライスに仕上げようとしますが、ほとんどの日はかなり必死に感じます。私はしばしば、QAが確実にビルドされるように、愚かで壊れやすいショートカットを取っている人々を捕まえます。この問題は、スプリントが数日間進行した後、不可避な欠陥が入り込み始め、同じ6時間のウィンドウに収まらなければならないときに悪化します。 これはアジャイルチームにとって通常のペースですか?CIセットアップを実装できたとしても、このペースを維持し、高品質のソフトウェアを作成する方法がわかりません。 編集: ここにいくつかの良い答えがあります。アジャイルチームが毎日新しい機能を提供すべきかどうか、私が本当に求めていたことを実感しました。それに応じてタイトルを更新しました。
31 agile  scrum 

2
Webサイトは独自のパブリックAPIを使用する必要がありますか?
私はウェブサービスを書き始めており、nodeJSとRESTfulなアプローチで構築しました。 私が収集したものから: 利点は、コードを複製する必要がないことです。 欠点は次のとおりです。 パブリックAPIは頻繁に更新されますが、バージョン管理で解決する必要があります サービス固有のキャッシュと最適化を実際に行うことはできません ベストプラクティスと見なされるものは何ですか?Stack Exchange、Github、Twitterなどのサイトは、クライアント用に独自のAPIを使用していますか?
31 api 


6
クイックソートが実際に他のソートアルゴリズムよりも優れているのはなぜですか?
これはJanomaによるcs.SE に関する質問の再投稿です。彼またはcs.SEへの完全なクレジットと台無し。 標準アルゴリズムコースでは、クイックソートは平均でO(n log n)であり、最悪の場合はO(n²)であると教えられています。同時に、最悪の場合(mergesortやheapsortのような)O(n log n)であり、最高の場合(bubblesortのような)でも線形時間であるが、メモリの追加の必要性がある他のソートアルゴリズムが研究されています。 いくつかの実行時間をひと目見た後、クイックソートは他の効率ほど効率的であってはならないと言うのが自然です。 また、学生は基本的なプログラミングコースで、再帰があまりにも多くのメモリを使用するなどの理由であまり良くないことを学ぶと考えてください。したがって(これは本当の議論ではありませんが)、これはクイックソートがそうではないという考えを与えますそれは再帰アルゴリズムであるため、本当に良いです。 それでは、実際にクイックソートが実際に他のソートアルゴリズムよりも優れているのはなぜですか?実世界のデータの構造に関係していますか?コンピューターでのメモリの動作方法に関係していますか?一部のメモリは他のメモリよりもはるかに高速であることは知っていますが、それがこの直感に反するパフォーマンスの本当の理由であるかどうかはわかりません(理論的な推定と比較した場合)。

5
シニアエンジニア:コーディングに戻りますか?
これは20年以上の経験を持つエンジニアに関する質問ですが、キャリア開発に関係しているため、すべての人にとっての質問です。 私は驚くほど長い仕事を探していますが、問題は雇用主が私をコーダーとして受け入れてくれないことです。はい、私は多くのことをしました、自分の会社を持っていました、早く売りました、など。しかし、世界は常に生産的な労働者を必要とし、私のスキルは最新で鋭いです。私がいる市場では、高齢者向けの求人が少なく、貢献できる場所を見つけることができれば、1、2歩後退しても構いません。40、50歳の突然のキャリアの混乱に備えるキャリア管理について、あなたはどう思いますか?

4
フリーランサーのウェブ開発者はどのように顧客のウェブホスティングを管理しますか?
私は友人や家族などのために多くのウェブサイトを構築し、それらをすべて単一の共有ウェブホスティングアカウントに置きました。それらが構築されたので、私は彼らを支援し、彼らにお金を払ってビジネスから抜け出したいです(私の友人は私に払い戻しをしますが、私は実際の請求書の支払いをしています)上のサイト。 フリーランサーはどのようにこれを行うのかと考えました。クライアントに独自のホスティングを事前にセットアップさせ、プログラマーが開発中に顧客アカウントにログインできるようにしますか。将来バグがあり、それらを元に戻す必要がある場合はどうなりますか? トリッキーな状況のように思えるので、他の人のためにウェブサイトを構築するほとんどの人がどのモデルを使用しているか興味がありました。

13
人気のない言語を使用した開発の問題(メンテナンスなど)
私は私のチームでclojure(lisp)のみを使用してアプリケーションを開発しています。小さなアプリケーションとして起動します。問題ない。しかし、機能を備えてエリアを拡張しているため、重要なプログラムになりつつあります。 メンテナンスなどが心配でした。私のチームの誰もclojureやlispを知らず、それらのような言語にも興味がありません。 だから、人気のない言語でプログラミングをするのは間違っていませんか?(自分の楽しみのために?)もっと人気のある言語を使うべきですか?(少なくともpythonなど) チームを辞めるかどうかはわかりますが、辞めるとは言いません。:)-誰もそれを維持しません。このプログラムは破棄され、一部は他の言語で開発されます。 clojureでの開発はとても楽しんでいますが、これは私のチームには向かないかもしれないと思いました。 これについてどう思う?人気のない言語を愛する多くのプログラマーは、同様の問題を懸念していると思います。

7
KeyValuePairのような事前に構築された構造に対して2プロパティクラスを使用する必要があるのはいつですか?
a KeyValuePairやa などの事前に構築された汎用構造を使用する代わりに、いつ独自のクラスにデータのキー/値型を配置する必要がありますTupleか? たとえば、私が作成するほとんどのComboBoxには、DisplayNameとValueが含まれています。これは、新しいクラスをいつ追加し、いつKeyValuePairを使用するかを決定しようとしている種類のデータです。 私は現在iCalendar、を使用するものに取り組んでおり、選択したユーザーのデータは最終的key1=value1;key2=value2;に文字列のタイプに結合されます。最初にデータをaに入れることから始めましたKeyValuePair<string,string>が、今ではそれが代わりに独自のクラスであるのか疑問に思っています。 全体として、KeyValuePair2プロパティオブジェクトのような既存の構造/クラスを使用することを決定する際にどのガイドラインが使用されるか、また、どのような状況で他のオブジェクトを使用するかを知ることに興味があります。
31 c#  coding-style 

13
インタビュー中に間違っている/回答されていない質問にどのように対応しますか?[閉まっている]
今日、潜在的なインターンとの最初のインタビューを開催しました。これは主に未解決の質問ですが、私はそれらのためにいくつかの簡単なプログラミングタスクがありました。 三角形の辺(すべての整数)a、b、cが直角三角形を表すことができる場合にtrueを返す関数を記述します。 FizzBu​​zz。 再帰を使用してフィボナッチのN番目の要素を計算します(フィボナッチが何であるかわからない場合、定義F(n)= F(n-1)+ F(n-2); F(1)= 1; F(0)= 1)。 整数の構造体リストを実装し、それを逆にする関数を記述します。 これらは明らかに非常に簡単なタスクであり、私は誰かがそれらを解決しないように準備されていませんでした。 彼らがこれらの質問に苦しんでいるとき、私はどのように行動するべきですか?答えをあきらめるべきですか?チップごとに教えてください(私はそれをして、自分で問題を解決しました)?それとも、インタビューを続行する(または単に停止する)だけですか? 追伸 質問に問題があるということは、バグを抱えているということではなく、開始できない場合もあります。これはフィボナッチとリストの質問の場合でした。

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