ソフトウェア工学

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

3
Pythonの「PEP-302新しいインポートフック」の経験[非公開]
私はRuby(CRuby)の開発者の一人です。Ruby 2.0のリリースに取り組んでいます(2012年2月のリリースを予定しています)。 Pythonには「PEP302:New Import Hooks」(2003)があります: このPEPは、Pythonインポートメカニズムのより良いカスタマイズを提供するインポートフックの新しいセットを追加することを提案しています。現在のインポートフックとは異なり、新しいスタイルのフックを既存のスキームに挿入して、モジュールの検索方法とロード方法をより詳細に制御できます。 PEP302に類似した機能をRuby 2.0(CRuby 2.0)に導入することを検討しています。マッツを説得できる提案をしたい。現在、CRubyは標準的な方法でファイルシステムからのみスクリプトをロードできます。 PEP 302についての経験や考慮事項がある場合は、共有してください。 例: それは素晴らしい仕様です。変更する必要はありません。 それはほとんど良いですが、この問題があります... 2003年に戻ることができたら、仕様を...

1
GitHubでリクエストせずにフォークされたリポジトリから変更をプルしますか?
私はソーシャルコーディングコミュニティの初心者であり、このような状況で適切に進める方法がわかりません。 数週間前にGitHubリポジトリを作成しました。誰かがプロジェクトをフォークして作った私に、やるにされているいくつかの小さな変更を。誰かが私のプロジェクトを分岐させて、それを追加するのに時間をかけたことに興奮しています。変更を自分のコードに取り込みたいのですが、いくつかの懸念があります。 1)フォークされたレポジトリからgit経由で変更を取り込む方法がわかりません。 私の理解では、プルリクエストを介して変更をマージする簡単な方法がありますが、フォーカーはそのリクエストを発行する必要があるように見えますか? 2)プルリクエストなしで変更をプルすることは可能ですか?これは最初のものに関連しています。私は数週間コードを脇に置いて、次の作業は他の誰かによって行われていることを知り、何らかの方法でクレジットを与えずにコードをコピーしたくないことを知りました。変更を明示的に要求していない場合でも、変更を取り込む必要はありませんか?ここのエチケットは何ですか 私はこれを考えすぎるかもしれませんが、事前にご意見をお寄せいただきありがとうございます。私はハッカーのコミュニティにはかなり慣れていませんが、貢献できるようにしたいです!
40 git  github  etiquette 

12
他のチームメンバーのコードを書き換える、書かれていないルール[終了]
私たちは集団コードの所有権を実践しています。私の理解では、これは開発者がコード行を変更して機能を追加したり、バグを修正したり、バグを修正したり、設計を改善したりできることを意味します。 しかし、まだチームにいる開発者からのコードの完全な書き換えについてはどうでしょうか?最初に彼に尋ねるべきですか?ベストプラクティスは何ですか?

6
ライセンスなしのオープンソースコード…フォークできますか?
数年前、誰かが本当にすてきで人気のあるスクリプトの束を作成しました。しかし、それらは長い間更新されていませんでしたが、現在はもう作業していません(ターゲットプラットフォームが更新されており、いくつかの変更が必要です)。 彼はどんなライセンスの下でもそれをリリースしていません。バグを修正し(現在、多くのターゲットユーザーはそれを使用できない)、GitHubに、できればパブリックドメインスタイルのOSSライセンスの下で投稿したいです。法的影響は何だろうか? 作者にメールを送信しましたが、彼は私のメールに返信しませんでした。 次の2つの場合にこれを行う必要があります。 スクリプトがプライベートWebサイトに投稿されている場合(ソース管理なし)。 スクリプトがGitHubに投稿されている場合(ライセンスのヒントなし)。 ただし、オープンソースのように見えます-使用/変更/なんでもあります。

4
REST-Acceptヘッダーを介したコンテンツネゴシエーションと拡張機能のトレードオフ
RESTful APIの設計を進めています。特定のリソースに対してJSONとXMLを返したいことがわかっています。私はこのようなことをすると思っていました。 GET /api/something?param1=value1 Accept: application/xml (or application/json) ただし、次のように、誰かがこのために拡張機能を使用して投げ出しました: GET /api/something.xml?parm1=value1 (or /api/something.json?param1=value1) これらのアプローチのトレードオフは何ですか?拡張機能が指定されていない場合はacceptヘッダーに依存するのが最善ですが、指定されている場合は拡張機能を優先しますか?そのアプローチには欠点がありますか?

8
最新のオブジェクト指向言語はC ++の配列ストアのパフォーマンスと競合できますか?
少なくともある程度慣れ親しんでいる最新のオブジェクト指向プログラミング言語(基本的にはJava、C#、およびD)がすべて共変配列を許可していることに気付きました。つまり、文字列配列はオブジェクト配列です。 Object[] arr = new String[2]; // Java, C# and D allow this 共変配列は、静的型システムの穴です。コンパイル時に検出できない型エラーが発生する可能性があるため、実行時は配列へのすべての書き込みをチェックする必要があります。 arr[0] = "hello"; // ok arr[1] = new Object(); // ArrayStoreException これは、多くの配列ストアを実行する場合、ひどいパフォーマンスヒットのようです。 C ++には共変配列がないため、このようなランタイムチェックを行う必要はありません。つまり、パフォーマンスが低下することはありません。 必要なランタイムチェックの数を減らすために行われた分析はありますか?たとえば、私が言う場合: arr[1] = arr[0]; ストアが失敗することはないと主張することができます。私が考えていない他の多くの可能な最適化があると確信しています。 最新のコンパイラーは実際にこの種の最適化を行いますか、または、例えばクイックソートが常にO(n log n)の不要なランタイムチェックを行うという事実に耐えなければなりませんか? 現代のオブジェクト指向言語は、共変配列をサポートすることによって生じるオーバーヘッドを回避できますか?
40 c#  java  c++  d 

9
「例によるリード」が機能しない場合、何ができますか?[閉まっている]
私はもう2年近く大企業(8000人以上の従業員)で働いており、学習コースを終えた直後に採用されました。 ここの誰もが、しばしば非常にひどく設計されたハックに満ちたレガシーコードを毎日処理しなければなりません。最初は、物事をあまり批判しないように、目立たないようにしました。しかし、現状では、この状況に耐えることは非常に難しくなっており、私たちが使用するツールを改善/交換しようとする人は誰もいないようです。 より明確にするために: 廃止されたソース管理ツール(Visual SourceSafe) 完全な再構築のみをサポートするプレーンな古いメイクファイル .def すべての既存のアーキテクチャに対して手動で個別に維持する必要があるファイル モノリシックヘッダーファイルと非常に少数の異なるファイルを含むプロジェクト(ただし、それぞれに約3000行のコードがあり、非常に異なるタスクを処理する場合があります) 「新しい」言語機能std::stringは使用しません(まあ、それほど新しいものではありませんが、私以外は使用していません) 数か月前に、新しいコンパイル環境を設計することで、それについて何かをすることにしました。インクリメンタルビルドを確実に動作させ、コンパイル時間を短縮し、構造化されたプロジェクトを改善し、.defファイルを自動生成することができました。さらに、GitとVisual SourceSafeの間のブリッジを作成しました。 いくつかの同僚や上司に自分の成果を見せましたが、誰も気にしないようでした。それらはすべて「まあ...人々は今それをそのようにするのに慣れています。なぜ私たちは物事を変えるのですか?」 私が提案した変更は、古いシステムから新しいシステムにソフトに移行できるように設計されたものです。それぞれの改善は個別に安全に適用できます。 同僚の何人かを変更に参加させようとさえしました。しかし、これまでのところ、成功していません。 あなたはすでに同様の状況に直面しましたか?「例によるリード」が機能しない場合、何ができますか?

9
最新のプログラミング言語のほとんどで、Design by Contractのサポートが制限されているのはなぜですか?
私は最近、Design by Contract(DbC)を発見しましたが、コードを記述する非常に興味深い方法であることがわかりました。とりわけ、それは提供するように思われるでしょう: より良いドキュメント。契約は文書であるため、契約が期限切れになることは不可能です。また、コントラクトはルーチンの動作を正確に指定するため、再利用のサポートに役立ちます。 簡単なデバッグ。プログラムの実行はコントラクトが失敗した瞬間に停止するため、エラーは伝播できず、違反した特定のアサーションが強調表示されると考えられます。これにより、開発時およびメンテナンス時にサポートが提供されます。 より良い静的分析。DbCは基本的にHoareロジックの単なる実装であり、同じ原則を適用する必要があります。 それに比べて、コストはかなり小さいようです。 余分な指タイプ。契約書を綴る必要があるため。 契約書の作成に慣れるには、ある程度のトレーニングが必要です。 現在、主にPythonに精通しているため、実際には前提条件(不適切な入力に対して例外をスローするだけ)を作成することが可能であり、特定の事後条件を再度テストするためにアサーションを使用することもできます。しかし、「古い」または「結果」などの特定の機能をシミュレートすることは、最終的に非Pythonicと見なされる余分な魔法なしでは不可能です。(さらに、サポートを提供するライブラリがいくつかありますが、ほとんどの開発者がそうではないように、最終的にはそれらを使用するのは間違っているでしょう。)それは他のすべての言語でも同様の問題だと思います(もちろん、エッフェル)。 私の直感では、サポートの欠如はある種の慣行に対する拒絶の結果であるに違いないが、オンラインでの検索は有益ではなかったと教えてくれます。ほとんどの現代言語がほとんどサポートを提供していないように見える理由を誰かが明確にできるかどうか疑問に思っていますか?DbCに欠陥があるか、過度に高価ですか?それとも、エクストリームプログラミングやその他の方法論のために時代遅れになっているのでしょうか?

14
プログラミングやコンピューターサイエンス全般、アルゴリズムについてですか?
大学院生として、有名な企業(Google、Facebook、Microsoftなど)がアルゴリズムの質問をテストやインタビューに入れることはますます一般的になっています。私が応募したいくつかのスタートアップもアルゴリズムについて尋ねました。アルゴリズムの流encyさは、これらの企業のソフトウェア開発者にとって最も重要なことだろうか? 答えが「はい」の場合、アルゴリズムについて効果的に学習および実践するための最良の方法またはリソースは何ですか?ほとんどの教科書やウェブサイトで見られる、一見あまりにも複雑な問題を解決することに興味を持てないようです。基本的なアルゴリズム(クイックソート、バブルソートなど)は簡単に理解できますが、後で覚えて再利用するのは非常に困難です。 ありがとう。 P / S:私が好きなことを聞​​かれたら、それはユーザーの問題を革新的に解決する優れたソフトウェアを構築しているということです。これは、必ずしもソフトウェアが非常に複雑でなければならないという意味ではないと思います。

16
直感的な同時プログラミング抽象化を備えた最新のプログラミング言語[非公開]
私は、システムプログラミングではなく、アプリケーション/ユーザーレベルに重点を置いて、並行プログラミングを学ぶことに興味があります。並行アプリケーションを記述するための直感的な抽象化を提供する最新の高レベルプログラミング言語を探しています。生産性を高め、並行プログラミングの複雑さを隠す言語に焦点を当てたいと思います。 私の生産性が低下し、プログラミングモデルが直感的ではないため、いくつかの例を挙げると、C、C ++、またはJavaでマルチスレッドコードを記述する良いオプションは考えられません。一方、生産性を高め、Pythonやマルチプロセッシングモジュール、Erlang、Clojure、Scalaなどのより直感的な抽象化を提供する言語は、適切なオプションです。 あなたの経験とその理由に基づいて何をお勧めしますか? 編集:あなたの興味深い答えをみんなに感謝します。Erlang、Clojure、Scala、Groovy、そしておそらくHaskellなど、多くの優れた候補者がいるため、実際に試さずに結論を出すことは困難です。私は最も説得力のある議論で答えを投票しましたが、どれを選ぶか決める前にすべての良い候補者を試します:)

12
空売りせずに追加の開発者を雇うように雇用者を説得するにはどうすればよいですか?[閉まっている]
私は小さな会社で唯一の開発者です。ここでゆっくりと開発に移りました。4か月前までは、私の時間の50〜75%が運用に費やされていました。現在、私の時間の50〜75%が開発に費やされ、残りは運用とさまざまなITスタッフに分けられています。私は定期的に週に50時間以上働いています。 私は、ビジネスの多くが依存している、かなり貧弱に書かれたアプリケーション(以前は2人が保守していたアプリケーション)を継承しました。これらを継続して実行し、新しい小規模なアプリケーションで作業し、その他の責任を負っています。 スケーラブルであるために、既存のソフトウェアは重要なリファクタリングと追加機能を必要とします。これまで、適切に作成または設計されたソフトウェアに取り組む喜びはありませんでした。このタスクの複雑さは、私が以前にやったことをはるかに超えています(これは大学卒業後の私の最初の仕事です)。私は雇用主や自分自身でそれを一人でやろうとはしないでしょう。 私は自分の未経験について非常に直接的でしたが、過去には、経験豊富な別の開発者を雇うことがおそらく必要であると述べました...私たちが成長し、開発および保守するソフトウェアが増えています。私は別の開発者を雇うことで大きな恩恵を受けることを知っています。誰かから学び、アイデアを跳ね返すことは素晴らしいことです。StackOverflowは、個々のコーディングの問題や概念へのアプローチを決定するのに最適ですが、特定のビジネスドメインに固有のより広いまたはより重要なスケールでの議論に代わるものではありません。最近カジュアルな会話で別の開発者を雇うことについて言及したとき、彼らはそれがそれほど重要または必要だとは思わなかったようです。 tl; dr:現在のパッチジョブとその他の責任はすでに仕事に費やしています。既存のアプリケーションの作業はスキルセットを超えており、計画中の新製品に取り組む時間はほとんどありません。雇用主は当初、別の開発者を雇うことに消極的のようです。 怠け者や無能だと思わずに、他の開発者を雇うにはどうすればよいのでしょうか(私はどちらでもないと思いたいです!)。 編集:ちょうど私がポイントを証明するためにどんな種類の敵対的な行動を取ることに興味がないことを明確にしたかった(すなわち、私がいなかったら彼らがねじ込まれていることを示すために休暇を取る)。ここで働いているコンテンツは、残業中であっても、自分自身がかなり補償されていると考えています。そのため、私はまだ新しい仕事を考えていません。そうは言っても、「残業はもうありません」という答えを受け入れました-仕事をやりすぎてもかまいませんが、そうすることで誰かに恩恵を与えることはありません(より多くのエラーが発生しやすく、疲れ果てます)。短期的にははるかに長期ではありません。私はスーパーバイザーと問題について議論するときにこれを強調し、おそらくより経済的に好ましい最初のアプローチとして請負業者を雇うことをお勧めします。

11
例外のないC ++の実際のケースはありますか?[閉まっている]
ではCの上にC ++、およびC ++の上にCを使用する場合は?ステートメントがあります。コードサイズ/ C ++例外: ジェリーの回答(他の点の中でも): (...)C ++で本当に小さな実行可能ファイルを生成することはより困難になる傾向があります。本当に小さなシステムでは、とにかく大量のコードを書くことはめったにありませんし、余分な(...) なぜそうなるのかを尋ねたところ、ジェリーは答えました。 主なことは、C ++には例外処理が含まれていることです(少なくとも通常は)実行可能ファイルのサイズに最小値が追加されます。ほとんどのコンパイラでは例外処理を無効にできますが、結果を実行するとC ++になりません。(...) 技術的な現実世界のレベルで私は本当に疑っていません。 したがって、プロジェクトが言語としてC ++を選択し、例外を無効にすることを選択した実世界の例を聞くことに興味があります(純粋に好奇心から)。(ユーザーコードで単に例外を「使用しない」だけでなく、コンパイラーで例外を無効にして、例外をスローまたはキャッチできないようにします。)プロジェクトがそうすることを選択した理由例外)-(技術的な)理由は何ですか? 補遺:回答を詳しく説明したい場合は、例外なしの意味がどのように処理されるかを詳しく説明するとよいでしょう。 STLコレクション(vector、...)は正常に動作しません(割り当てエラーは報告できません) new 投げられない コンストラクターが失敗することはありません
40 c++  exceptions 

16
自分をシニアと見なしているチームメイトにSVNの概念の基本を学ぶよう説得するにはどうすればよいですか?[閉まっている]
いくつかの背景から始めるために、私はこの夏、新しい開発者の地位に就き、チームの最新メンバーになりましたが、ほとんどの経験がありました。 これまでのところ、導入コストが低いため(時間と労力の観点から)、健全性イニシアチブを簡単に十分に進めることができました。しかし、物事は少しレベルアップしました。 私のチームメイトの1人は、経験はあるものの、SVNを本当に理解していません。当然、SVNの海を描いたメンタルマップ上の空白の領域は、彼にかなり奇妙な使用パターンを採用させます。 たとえば、「開発者ごとに1日1 SVNコミット」というポリシーを宣言しました。そうしないと、「サーバーのディスクスペースがすぐになくなる」ためです。SVNコミットは完全なコピーではなくデルタであると彼に説明したとき、彼は疑いを持って返答しましたが、今日でもその意味を理解しているかどうかは完全にはわかりません。 また.project、SVN にEclipse 構成を含めるかどうかについての議論が白熱していました。私のチームメイトは、多くの無意味な衝突を引き起こしましたが、そうすべきだと主張しました。私は個々の開発者構成ファイルをSVNに保存することに反対でした。最後に、チームメイトは、コミットのたびにソースツリー全体を再チェックアウトして、「リポジトリにコミットされたコードが機能すること」を確認する練習をしていることがわかりました。それが、彼がSVNでプロジェクト構成を維持することに熱心だった理由でした。そのため、プロジェクトを再インポートするのは簡単です。コミットが作業コピーをリモートのバイト単位で同期し、再チェックアウトが不要になると説明したとき、私のチームメイトは再び疑念を持って応答し、最終的に問題全体を取るに足らないものとして振り切った。 私の意見では、チームは、SCMとまったく共有する必要のない開発者固有の設定のみを含むプロジェクト構成ファイルのSVNの競合を解決することで時間を無駄にします。誰かが誤った仮定に基づいてプロセスを調整したため、これはすべて混乱しています。 SVNの基本をよりよく理解するために、自分をシニアだと思っているチームメイトを説得するにはどうすればよいですか?
40 learning 

20
プログラミングを教えることであなたはより良いプログラマーになりますか
私自身は中級のPythonプログラマーであり、初心者のPythonプログラミングクラスのトレーナーになる機会を提供されています。 これでプログラミングのレパートリーが本当に広がるのではないかと思っていました。人々のグループのトレーニングに成功した後、誰かが啓発的な経験をしたことがありますか? それはそれらの人々にも依存していますか?彼らがプログラマーであろうとnoobの学生であろうと?(私の場合、彼らは中級の.NETおよびJavaプログラマーです) 彼らに何を期待すべきですか? 私の恐怖の1つは、彼らの1人がもつれた質問をしたときに詰まったらどうなるかです。これは正常ですか?

13
開発者が「デイリースクラム」を好まない理由とその理由は何ですか?[閉まっている]
毎日のスクラムを保持することには、次のような利点があります。 チームは互いに調整されます 誰がどの程度のタスクを実行したかを知っています バーンダウンチャートはますます完全になります タスクボードが更新されました それほど長くは続かない、15分は誰も殺さない しかし、最近(6か月間のスクラムの実装と使用後)、開発者は毎日のスクラムがあまり好きではなくなったように感じます。人々は十分な説明をせずにタスクボードを更新するだけで、退屈しているようです。何らかの理由で、私たちはそれを保持しないとき、彼らは一種の特別な幸せになることがわかります。 私はこれで何が間違っているのか分からない。チームにとって「デイリースクラム」が持つ不利な点について、どこかで言及された理由はありますか?開発者が毎日のスクラムに飽きた理由は何でしょうか?

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