ソフトウェア工学

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

9
あまりにも多くのアサートを書くことは可能ですか?
私は執筆の大ファンです assert開発中に発生する可能性のあるケースをキャッチする方法としてC ++コードでチェック。プログラムのロジックバグが原因で発生する可能性があります。これは一般的に良い習慣です。 しかし、私が書いたいくつかの関数(複雑なクラスの一部である)には5つ以上のアサートがあることに気づきました。それぞれが関数の事前条件と事後条件について考える必要があり、それらは本当にバグをキャッチするのに役立つので、それはまだ素晴らしいと思います。ただし、多数のチェックが必要な場合にロジックエラーをキャッチするためのより良いパラダイムがあるかどうかを尋ねるために、これをそこに置きたかっただけです。 Emacsのコメント:Emacsが私の選択のIDEであるため、アサートステートメントを少しグレー表示にして、提供できる混乱を軽減します。.emacsファイルに追加するものは次のとおりです。 ; gray out the "assert(...)" wrapper (add-hook 'c-mode-common-hook (lambda () (font-lock-add-keywords nil '(("\\<\\(assert\(.*\);\\)" 1 '(:foreground "#444444") t))))) ; gray out the stuff inside parenthesis with a slightly lighter color (add-hook 'c-mode-common-hook (lambda () (font-lock-add-keywords nil '(("\\<assert\\(\(.*\);\\)" 1 '(:foreground "#666666") t)))))

9
ドメイン知識と技術知識はどれほど重要ですか?
私はトレーディングおよびリスク管理アプリケーションに取り組んでおり、C#のバックグラウンドから、SSISパッケージに取り組むように依頼されています。今、私はそれで生きることができます。問題は、ビジネスの理解を重視しすぎていることです。取引(正確にはエネルギー取引)は巨大な分野であり、それを少しでも理解することは圧倒的です。しかし、過去2か月間、私は市場用語、リスク指標、ポジション、PnL、ギリシャ人、金融商品、帳簿構造などのビジネス用語の理解に取り組んできました。今私見、これは学士号の仕事です。開発者がビジネスを理解することは非常に重要ですが、どこで線を引きますか? 私がこれについてマネージャーに話したとき、彼はほとんど誰もが1週間で技術を学ぶことができると言って私をock笑しました。難しいのはビジネスです。私の長期的な目標は、技術的な面に留まり、おそらく建築家になることです(可能であれば)。私がビジネスにもっと集中したいなら、MBAを求めていたでしょう! ビジネスの重要性を理解するのに自分が間違っているのか、あまりにも素朴なのか、それともフラストレーションが正当化されるのかを知りたいですか?

7
誰が修正/バグを支払うべきですか?[閉まっている]
だから、デスクトップ/ Web開発と、すでに私の仕事を受け入れているこのクライアントの両方でフリーランスを開始しました。バグなどを見つけるたびに私に戻ってきます。無料です。これで大丈夫ですか、それともサポート料金の請求を開始する必要がありますか? 受け入れられ、完了したと思われる作業の修正に対処する最良の方法はどれですか?

21
ソフトウェアテストは本当に必要ですか?
私はBE(CS)に取り組んでいる学生で、私の質問は次のとおりです。 ソフトウェア分野でのテストが必要ですか? 細心の注意を払ってソフトウェアを作成する場合、なぜテストする必要がありますか? テストした後、私たちはすることができわから我々が行っているので、我々は(意図したとおりの製品/ソフトウェアが動作します)、この目標を達成していることをテストし、それのために?出来ますか? 私の質問:ソフトウェアのテストは必要ですか?

19
「あなたが知っているすべての半分は18-24か月で廃止される」=(TrueまたはFalse?)[クローズ]
ただこれに出くわし、誰かがこの声明を証明または反証する方法を持っているかどうか疑問に思いました: 心に留めておくべきこと...ハイテクの知識の半減期は?それはムーアの法則に従って追跡します:あなたが知っているすべての半分は18-24ヶ月で廃止されます。 SOURCE:によって答え以内クレイグトレーダーこの質問への「あなたがプログラミングのスキルを向上させるためにやった単一の最も効果的なものは何ですか?」
33 skills 

6
並行性とマルチスレッドをどのように実践しますか?[閉まっている]
私は並行性、マルチスレッド、および「無料のランチが終わった」について読んでいます。しかし、私はまだ仕事でMTを使用する可能性がありませんでした。 したがって、私は、いくつかのオープンソースプロジェクトへの演習または参加を通じて、CPUヘビーMTの練習をするためにできることについての提案を探しています。 ありがとう。 編集:私は、スレッド、ミューテックス、ロックなどのツールのみを説明する本や論文ではなく、MTをCPUバウンドタスクに使用するオープンソースプロジェクト、または単にMTを使用して実装するのに興味深いアルゴリズムに興味があります。 MTを使用してレスポンシブGUIを作成する方法...

11
コーディングが退屈だと感じ始めたら、どうすればいいのでしょうか?[閉まっている]
私はCommodore 64で6歳のときにプログラミングを始めました。現在28歳です。コンピューターサイエンスの学士号から4つのコースを修了する必要があります。 私はこれらすべての年の後にコードを書くことに飽き始めています。理論的なコンピューター言語でコンピューターサイエンスのコースを受講し、ネットワークセキュリティの分野で10年間のCシステムコーディングを経験しましたが、コードを書いても刺激は得られません。 C、C ++、Python、またはあなたが望む言語でコードを書くことができますが、私がやっていることに興奮することはできません。私は挑戦を感じることができません。特定のアルゴリズムスキルを必要とせずに、マルチスレッドコード、HTTPS MITMプロキシ、およびWSGIアプリケーションを記述しました。 この新しいものはすべて同じで、より単純な(またはより多くの)抽象化または自動化が行われているように感じますが、すべて同じように聞こえます。何回も。計算可能な言語はすべてチューリング計算可能であるため、コーディングは、部分関数のこのサブセットの類似パターンの複製にすぎません。 私の日常の仕事では、バグを探したり、コードのベンチマークを行ったり、ライブラリX、Y、Zの問題を修正したりするのにも退屈だと感じています。 私はとても好奇心が強い人です。私はいつも何かに刺激されます。しかし、優れたコードを見たとしてもできません。私は物事がどのように機能するかについてより快適に感じています。 私のキャリアを前進させる時ですか?または、コンピューターサイエンスでもっとやりがいのあるものを手に入れたいですか?たぶん、CSの主要な学位を取得しますか? プロジェクト管理に関する最初の本「Peopleware」を読み始め、ソフトウェア開発のライフサイクルにより興味を持ち始めています。あなたは何をすることを提案しますか? おそらく、私の友人がやったように、Google、Microsoft、またはAppleに参入しようとしているのかもしれません。または、おそらくより経営的なキャリアパス。また、コミュニケーションのルールと「人格」についての良い本を見つけて、管理に入る可能性に備えようとしました。 助言がありますか? PS:私は多くの興味を持っている、私は落ち込んでいない :)私は山、トレッキング、写真撮影を愛し、私はスポーツクライマーであり、私は泳ぐことおよびスポーツ全般を愛し、時々私は実行します、実際に私はACから今日までの私の国(イタリア)の物語を読んで、旅行が大好きです(この夏、スペインの多くの場所を見て、そこに登るのに4000Kmを作りました。たった3週間で、休日ではなくマラソンです) 、24 kmのトレッキングでヘルニアがけがをした)、演劇と生活全般が大好きです。 すべてのおかげで、すべての答えを考えることで、自分の道をより明確にする機会が与えられます。 要約の目的で、最も投票された回答について一般化することができます。 まず第一に、人々は私たちの仕事をあなたの人生の支えにし、人生にとどまる唯一の理由(これは私の場合ではない)にする必要性に賛成票を投じます。本当に憂鬱な状況に。ピープルウェアが言うように、ウィーンはあなたを待っていません:) このリマインダーの後、人々は次のことを提案します。 技術的な複雑さを増す実際に取り組んでいるのは、チャレンジを増やし、それについて飽きないようにするためです。 専門分野をマネージャーになろうとする非技術分野に変更したり、仕事に関連する非技術分野で介護者を昇進させたりする。 別の種類の技術的課題の専門分野を変更します。あなたはシステムプログラマですか?便利なソフトウェアを使用して人々をより快適に見ることができるように、人間向けのアプリケーションの開発に飽きないようにしてください アカデミックパスでコンピューターサイエンスの学位をある程度向上させる 私の目的にとって、正しい答えはコンピューターサイエンスを進歩させることです。私の感覚では、プログラミングがコンピューターサイエンスを得る唯一の方法ではなく、ソフトウェアエンジニアリングの介護者とは異なるコンピューターサイエンスの他の道をより良く感じることができると思います。


4
C、C ++などのJITコンパイラ
CやC ++などのコンパイル言語用のジャストインタイムコンパイラはありますか?(頭に浮かぶ最初の名前はClangとLLVMです!しかし、私は彼らが現在それをサポートしているとは思いません。) 説明: このソフトウェアは、CやC ++などのコンパイルされたマシン言語でも、ランタイムプロファイリングフィードバックと、実行時のホットスポットの積極的に最適化された再コンパイルの恩恵を受けると思います。 プロファイルに基づく最適化も同様の仕事をしますが、異なる環境ではJITがより柔軟になります。PGOでは、リリースする前にバイナリを実行します。リリース後、実行時に収集された環境/入力フィードバックは使用されません。そのため、入力パターンが変更された場合、パフォーマンスの低下が発生します。しかし、JITはそのような状況でもうまく機能します。 ただし、JITコンパイルのパフォーマンス上の利点がそれ自体のオーバーヘッドを上回るかどうかについては議論の余地があると思います。

9
抽象化:問題の解決と一般的な解決策の間の戦争[終了]
プログラマーとして、私は自分のプログラムをできるだけ抽象的で一般的なものにするジレンマに陥っています。 そうすることで、通常、コードを再利用し、再び発生する可能性のある(または発生しない)問題のより一般的な解決策を得ることができます。 それから私の頭の中のこの声は、問題のダミーを簡単に解決するだけだと言います!なぜあなたが必要以上に多くの時間を費やしますか? 実際、私たちは皆、この疑問に直面してきました。そこでは、抽象化があなたの右肩にあり、Solve-it-愚かな人が左に座っています。 どれを、どのくらいの頻度で聞くべきですか?これに対するあなたの戦略は何ですか?すべてを抽象化する必要がありますか?

2
就職面接中の脳摘み[終了]
最近、私はシリコンバレーの大企業でソフトウェア開発者/ R&Dの上級職に就職しました。私はいくつかの技術的な電話スクリーン、終日オンサイトのインタビュー、そして後で別の職のためのより多くの技術的な電話スクリーンを持っていました。 面接は本当にうまくいきました。私は申請した分野で博士号と実務経験がありますが、オファーはありませんでした。ここまでは順調ですね。それは面白い経験でした、私は雇われていますが、これについての厳しい感情は全くありません。 インタビュアーの何人かは、私が取り組んでいる新しいテクノロジーについて疑わしいという点まで、非常に詳細な質問をしました。これらの技術はまだ開発中であり、まだ市場に出ていません。いくつかの主要なハードウェア/ソフトウェア会社もこれに取り組んでいるのを知っています。私は以前に多くのインタビューを受けましたが、以前のインタビューの経験と一部のインタビュアーが残した印象に基づいて、この会社が私から望んでいるのは、この分野で何をしたかについていくつかのアイデアを引き出すことです。標準のソフトウェア開発者ではなく、研究開発職に言及していることを忘れないでください。 これまでにこの状況に遭遇した人はいますか?そして、どのように対処しましたか?私は「盗む」アイデアについてはそれほど心配していませんが、とにかく採用するつもりがないときに、だまされてインタビューに現れることを心配しています。将来、技術面接を拒否し、代わりに、会社が採用決定を簡単に再検討できる試用期間を提案することを検討しています。
33 interview 

7
Haskellの型システムは、関数型プログラミングを理解する上での障害ですか?[閉まっている]
私は関数型プログラミングを理解する目的でHaskellを勉強していますが、他の言語(Groovy、Python、JavaScriptを中心に)で得た洞察を適用することを期待しています。 Haskellを選んだのは、非常に純粋に機能的であり、状態への依存を許さないという印象を持っていたからです。 私は非常に厳格な型システムをナビゲートすることに興味があったので、Haskellを学ぶことを選択しませんでした。 私の質問はこれです:強い型システムは非常に純粋な関数型言語の必要な副産物ですか、またはこれはHaskellに特有の無関係な設計選択ですか?

11
高レベルの開発者がアセンブリの学習に時間を費やすのは賢明ですか?[閉まっている]
低レベルのものに関する知識が私たちの仕事において非常に重要であることは明らかです。 しかし、あなたはすでに高いレベルでの商用ソフトウェアを開発し、している状況にし、すでに選択した方向性を持っていますが、任意のアセンブリのスキルを持っていない、それはあなたの方向に関連するものを勉強に集中することがより合理的ではないでしょうか?または、とにかく低レベルの基本を学ぶために時間を費やす必要がある理由はありますか? 遅すぎるときとそうでないとき そして手遅れではない場合、どのようにして最適な学習を行うのでしょうか(ある程度の深みと理解を得るために過度の時間を費やさないという意味で)?

14
「The Next Big Thing」のアイデアで、プログラマー以外の人にどう反応しますか?
最近、かなり頻繁に、プログラミングのバックグラウンドを持たない人々がやって来て、次の大きなことになる可能性があり、それ自体が大金に値するこの素晴らしいアイデアを持っていると言います。それから彼らは私がプログラマーだと知っているので、彼らは私が彼らのために「コード化」する気があるのか​​、あるいはほとんど何もしないで喜んでそれをやる人を見つけるのかどうか尋ねます。 熱意から判断すると、彼らはアイデアに酔っていて、それ自体が最も重要なことですが、プログラマが必要なだけです。私の気分や​​私たちの行動に対する一般的な態度にもよりますが、彼らに対する私の反応は次のよう なものです。それが存在する場所は別であり、あなたはあなたのアイデアが価値があると思う大きさに比例して支払うことをいとわないでしょう。」 これらのビジネスタイプの起業家(技術的/開発者の知識がなくても)から、そのような提案を受け取って、それらにどのように反応しましたか?

11
設計パターンは一般に良いか悪いかの力ですか?[閉まっている]
パンをスライスして以来、デザインパターンが最高のものであると主張したと聞いています。また、デザインパターンは「セカンドシステムシンドローム」を悪化させる傾向があり、非常に使い古されており、ユーザーに実際よりも優れたデザイナーだと思わせると主張していると聞きました。 私は以前のキャンプに近づく傾向がありますが、最近では、ほぼすべての相互作用がオブザーバー関係に置き換えられ、すべてがシングルトンであるデザインを見てきました。 それでは、利点と問題を考慮して、設計パターンは一般に良いか悪いか、そしてその理由は何ですか?

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