ソフトウェア工学

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

18
インタビュー中に構文的に正しいことはどれくらい重要ですか?[閉まっている]
面接候補者にホワイトボードでプログラムを書くように頼むとき、候補者が構文的に正しいコードを書くと期待しますか? 私は2つの候補を持っていました。1つは構文的に正しいプログラムを作成しましたが、ロジックは基準に達していませんでした。 私は最初の候補者を支持します。
40 interview 

17
私のコミュニケーションスキルはソフトウェアエンジニアリングのキャリアで無駄になりますか?[閉まっている]
私は金融工学の分野(BA MathとBA Computer Scienceの後)で約5年間(20%分析/プログラミング、80%コミュニケーション)しており、人々とコミュニケーションを取り、技術的な問題について議論する能力に誇りを持っています。チームと)。仕事のこの部分が大好きです。ホワイトボードに行き、抽象的なアイデアを描き、ブレインストーミングを行います。 しかし、多くの理由で、キャリアをテクノロジー企業(ソフトウェアエンジニアリング)に移行したいと考えていますが、プログラマーが大きなヘッドホンを付けてコーディングするという定型的なプログラミングの仕事に落ちることを深く恐れています。私は確かにこれが単なるステレオタイプであることを知っていますが、以前(スタートアップで)同様の環境を目撃しました。 コーディングとアルゴリズム的思考が大好きですが、人とのやり取りをあきらめたくありません。コミュニケーションスキルを身に付けることは前向きなことだと理解していますが、ソフトウェアエンジニアリングに移行することで、キャリアハッピーの失敗に備えています。明確化やアドバイスを聞きたいです。

9
クラスを抽象クラスとして宣言する必要があるのはなぜですか?
私は構文、抽象クラスに適用されるルールを知っており、抽象クラスの使用法を知りたい 抽象クラスは直接インスタンス化できませんが、他のクラスによって拡張できます そうすることの利点は何ですか? インターフェースとどう違うのですか? 1つのクラスで複数のインターフェイスを実装できるが、1つの抽象クラスしか拡張できないことを知っています。インターフェイスと抽象クラスの違いはそれだけですか? インターフェースの使用法を知っています。JavaでのAWTのイベント委任モデルからそれを学びました。 どのような状況でクラスを抽象クラスとして宣言する必要がありますか?その利点は何ですか?

1
ファクトリパターンと抽象ファクトリの違いは何ですか?
最終的にいくつかの基本的なパターンを習おうと真剣に始めたので(キャリアの非常に遅いですが、それは別の話です)、私はファクトリーパターンとアブストラクトファクトリーの違いを理解しようとしています。 これら2つのパターンの主な違いは何ですか? Factoryメソッドは継承を介してオブジェクトを作成し、Abstract Factoryはオブジェクトの構成を介してオブジェクトを作成することを理解していますが、実際的な観点からは、それぞれがどのように機能するかを正確に視覚化するのにまだ苦労しています。

19
仕事でより良い仕事をするために、自分のお金でハードウェアを購入して職場で使用しますか?[閉まっている]
職場では、かなり仕様のマシン(デュアルクアッド2GHz、4GB RAM、160GB 7200RPMドライブ、Win7)が与えられましたが、いくつかの場所(HDD / RAM)に欠けていました。ITスタッフはハードウェアを自分のハードウェアに交換しても問題なかったので、SSDと8GBのRAMを追加しました(複数のVisual Studioと仮想マシンを実行できます)。マシンを選択するのは会社のビジネス上の決定でしたが、ハードウェアの高速化により仕事での満足度と生産性が向上しました。 私の質問は、生活の質を向上させるために自分の仕事用ハードウェアに個人的なお金を費やす意思があるのは私だけだと思いますか?遡及的に「ハードウェアでこの500ドルを払い戻すべきだと思う」と言うことは可能ですか?

11
インターフェイスを使用しないのは悪い習慣ですか?[閉まっている]
インターフェースはめったに使用せず、他のコードでは一般的です。 また、コード内でめったにサブクラスとスーパークラスを作成しません(独自のクラスを作成します)。 それは悪いことですか? このスタイルを変更することをお勧めしますか? このスタイルには副作用がありますか? これは、私が大規模なプロジェクトに取り組んだことがないためですか?

13
職場でのコーディング標準の取り扱い(私はボスではありません)
私は約10人の開発者の小さなチームで働いています。コーディング標準はまったくありません。標準になった特定の事柄がありますが、物事を行ういくつかの方法は完全に異なっています。私の大きなものはインデントです。一部のユーザーはタブを使用し、一部のユーザーはスペースを使用し、一部のユーザーは異なる数のスペースを使用するため、大きな問題が発生します。誰かがIDEを使用して自動フォーマットを行い、彼らが私とは異なる文字をインデントするので、マージするとしばしば競合が発生します。どちらを使用するかは気にせず、全員に同じものを使用するようにしたいだけです。 または、ファイルを開いて、条件と同じ行に中括弧がある行と、次の行にある中括弧がある行があります。繰り返しますが、それらがすべて同じである限り、どれでもかまいません。 私は直接のマネージャーに1対1およびグループ会議で標準の問題を提起しましたが、彼はそれについて過度に心配していません(私と同じ意見を共有する他の人がいます)。インデント文字に関する特定の懸念を持ち出し、彼はより良い解決策は「レポからプッシュ/プルするときにすべてを変換できるようなスクリプトを作成する」ことだと考えました。彼は変えたくないと思うし、この解決策は過度に複雑で、将来的にはメンテナンスの問題になりやすいと思われる(また、これはより大きな問題の一つの現れにしか対応していない)。 職場で同様の状況に陥った人はいますか?もしそうなら、どのようにそれを処理しましたか?標準で上司を売るのに役立つ良い点は何ですか?草の根運動を始めて、興味のある私たちの中でコーディング標準を作成することは良い考えでしょうか?私はあまりにも細心すぎて、手放すだけですか? お時間をありがとうございました。 注:これまでにすばらしいフィードバックをありがとう!明確にするために、1つのスタイルですべてを支配するのは望ましくありません。私は、誰にとっても最も適していることを支持して、何かをする私の好ましい方法を喜んで認めます。一貫性が欲しいし、これが民主主義になりたい。私はそれが誰もが同意するグループ決定であることを望んでいます。確かに、誰もが自分の道を歩むわけではありませんが、グループの改善のために妥協するのに十分な成熟を期待しています。 注2:上記の2つの例に巻き込まれている人もいます。私は問題の核心をより重視しています。それは多くの例で現れます:命名規則、分割されるべき巨大な機能、何かがユーティリティまたはサービスに行くべきである、何かが定数または注入されるべきである、私たちはすべて異なるバージョンの依存関係を使用するか同じこの場合はインターフェースを使用し、ユニットテストをどのように設定するか、ユニットテストを行う必要があるか、(Java固有)アノテーションまたは外部設定を使用する必要があります。続けられた。

6
Java継承の「拡張」を避ける理由
ジェイム・ゴスリングは言った 「可能な限り、実装の継承を避ける必要があります。」 代わりに、インターフェイスの継承を使用します。 しかし、なぜ?キーワード "extends"を使用してオブジェクトの構造を継承しないようにし、同時にコードをオブジェクト指向にする方法はありますか? 「書店で本を注文する」などのシナリオで、この概念を示すオブジェクト指向の例を教えてください。

2
カーネル/システム/デバイスドライバープログラマになる方法 [閉まっている]
私は現在、Android OSを使用するソフトウェアエンジニアとして専門職として働いています。私たちは、プロジェクトの他の側面の中でネイティブデーモンとしてプラットフォームを統合することに取り組んでいます。私は主にJavaでSDKとAndroidアプリケーションの開発に携わっていますが、C / C ++のプラットフォームを支援しています。 とにかく、Linuxの低レベルの開発を専門的に行うことに大きな関心があります。私は現在のポジションに不満はなく、会社が私を許す限り(実際のところ、そこで働くことをとても楽しんでいます!)、ぶらぶらしますが、その方向に自分のやり方で働きたいです。私は、Linux Kernel Development(Robert Love)とThe Linux Programming Interface(Michael Kerrisk)に取り組んでおり(チャンスがあるたびにCスキルを強化することに加えて)、Monsterや同様のサイトを何気なくブラウジングしています。 私が見る問題は、エントリーレベルのポジションがないことです。この分野にどのように侵入しますか?私が「Linux Systems Programmer」または「Linux Device Driver Programmer」を見るときはいつでも、それらはすべて、最低 5-7年の関連する経験を必要とします。彼らは、中級レベルのプログラマーではなく、ロープを知っている人を求めています(私は7か月働いています...)。 だから、私は、stackoverflowのあなたの何人かが私がやりたいことだけをしている専門的な能力で働いていると仮定しています。どうやってそこに行きましたか?どのプラットフォームを使用してそこで作業しましたか?コンピューターエンジニアではなくCSCで学士号を取得しているので、私はより困難な時間を過ごすことになりますか? 明確化のために編集してください! 私はLinuxカーネル/ドライバーなどのオープンソースの性質を知っています。私の仕事はどこにいても貢献するつもりです。どのようなエントリーレベルのポジションが私に関連する仕事をさせ、それをして報酬を得ることができるのか、私はもっと興味があります!これまでのすべての返信をありがとう!
40 c  linux  linux-kernel 

16
会社が大きなプロジェクトに対する私の貢献を認識しなかった場合、あなたの提案は何ですか?[閉まっている]
私は1年の経験を持つ初心者レベルの開発者です。私はプロジェクトの仕事の約80%をプレイした大規模なプロジェクトに取り組んできましたが、その5か月は私にとってひどいものでした。 私はプロセスモデル全体に​​取り組み、同僚の仕事、DBデザイン、クライアントフィードバックの一部を行っていますが、ポイントは私のチームリードが所有していることです。私! これでプロジェクトが完了し、クライアントは作業に完全に満足しているようです。 しかし、私は会社がどんな種類の励まし/感謝も与えることを発見していません。プロジェクトに関与していない先輩たちは、賞賛、休暇、ボーナスなどを与えられました。また、重要な家族の行事に出席する許可を拒否されました。 私は疑問に思っていましたが、この状況をもたらしたのは仕事に正直/献身しているのですか? 私は現在、良いパッケージで3つのオファーを受け取っています-私は今、どの会社にも進もうと考えています。この時点でのあなたの提案は何ですか?
40 management 

7
定数を定義するインターフェースを持つのは悪い習慣ですか?
Javaでjunitテストクラスのセットを書いています。さまざまなテストクラスで必要な文字列など、いくつかの定数があります。それらを定義し、すべてのテストクラスがそれを実装するインターフェイスについて考えています。 私が見る利点は次のとおりです。 定数への簡単なアクセス:MY_CONSTANT代わりにThatClass.MY_CONSTANT 各定数は一度だけ定義されます このアプローチはむしろ良い習慣ですか、悪い習慣ですか?インターフェイスの概念を少し乱用したい気がします。 インターフェイス/定数について一般的に答えることができますが、特別なことがあれば単体テストについても答えることができます。

16
求人情報が常に「ロックスター」を探しているのはなぜですか?[終了]
ロックスターであるプログラマーを求める最近の傾向に気づいた。私はそれを得る、彼らは彼らが何をするのが本当に得意な人を探しています。しかし、なぜ(祈って)ロックスターに言及するのでしょうか? これらの企業は、これらの特性を本当のロックスターとして本当に望んでいますか? 一晩中パーティーをして、朝早く起きてビジネスの面倒を見てください。 薬物乱用、 有名人との自己陶酔、 経営陣を大きく上回る報酬、 短命のショーを行うのに優れている、 価値ではなくエンターテイメント 1ヒット(プロジェクト)不思議または単一ジャンルのパフォーマー、 等 ビジネスに対する確立された実証済みの情熱を持つシニアまたはプリンシパルソフトウェアエンジニアの何が問題になっていますか?むしろ、私たちはまったく反対のことを意味しますか? 袖をまくり上げて仕事に取り掛かります 適切な方向性を取り、チームに影響を与えます。 レッスンで学んだ適切な実践のプログラム、 チーム全体にタイムリーなコミュニケーションを提供し、 複数の言語をコーディングして理解できる、 計算の背後にある科学と理論を理解し、 ソフトウェアエンジニアリングのランクを多様化する傾向はありますか? バンドが解散し始める前に、ソフトウェアロックスターを何人雇うことができますか? 確かに、このようなことを自分でやっている人はたくさんいます。ショーのためにコーディングをしている人は珍しいかもしれませんが、私は大多数がビジネスのために賭けています。ロックスターの会計士、ロックスターの機械工、またはロックスタートCFOの広告が表示されません。ソフトウェアプログラマとその雇用部門がこの種の役職に傾いているのはなぜですか?

8
プログラムでのWindows「ドキュメント」フォルダーの正当な使用
Documentsフォルダーに配置するものだけを含めるのが好きな人は、標準のDocumentsフォルダーがこのタスクに完全に不適切であることを知っています。すべてのプログラムは、にその設定、データ、または均等に無関係な何かを入れたいようだドキュメントフォルダは、特にこの仕事のために存在するという事実にもかかわらず、フォルダ1。 これが空に聞こえないように、個人用の「ドキュメント」フォルダを例に取ります。私がいない今まで私は決して、いかなる状況の下で、このフォルダには何も保存自分という点で、それを使用します。それでも、最上位には46個のフォルダーと3つのファイルがあり、500個のフォルダーに合計800個のファイルがあります。これは私が作成しなかった190 MBの「ドキュメント」です。明らかに、実際の文書はこの混乱ですぐに失われてしまいます。 私の質問は、次の5年間で「ドキュメント」が再び役立つように、状況を十分に改善するために何かできることはありますか?プログラマーは、それをゴミ捨て場として使用しないように、何とか教育を受けられますか?OSは、既存のAPIを介してAppDataの下に隠された「偽の」場所の報告を開始できますか または、試みは完全に無駄であるか、さらには不要ですか? 1記録のために、「ドキュメント」の代わりに使用する必要があるさまざまな標準ディレクトリの簡単な概要を以下に示します。 RoamingAppData以下のためのユーザー固有のデータと設定。これは、ユーザー固有の非一時データに使用するディレクトリです。ここに配置されたものはすべて、特定のユーザーがこれが構成されているネットワークにログオンするマシンで使用できます。ただし、このような環境ではログイン/ログアウトが遅くなるため、大きなファイルをここに置かないでください。 LocalAppData以下のためのユーザーとマシン固有のデータと設定。このデータは、ユーザーごとおよびマシンごとに異なります。これは、非常に大きなユーザー固有のデータを配置する場所でもあります。 ProgramData以下のためのマシン固有のデータと設定。これらは、ログオンしているユーザーに関係なく同じであり、ネットワーク内の他のマシンにローミングしません。 GetTempPath使用されていないときにデータを失うことなく消去される可能性があるすべてのファイル。これは、一時データのようにキャッシュをバックアップする必要がないため、cachesなどの場所でもあります。ここに巨大なキャッシュを配置すると、ユーザーのバックアップのトラブルを軽減できます。 「ドキュメント」自体は必要があり、これまでユーザーがパスを入力するか、[保存]ダイアログで、それを選択することによって、それを手動で指定した場合に使用します。それはされる唯一の時間で、これまで「ドキュメント」にものを保存することが適当。

15
非常に厳しいスケジュールでコーディングする方法は?
私は非常に厳しいスケジュールのプロジェクトに取り組んでいます。コーディングとテストの時間はあまりありません(毎日12時間以上働いているにもかかわらず、まだ遅れています)。その結果は非常に脆弱です。そのコードも非常にジレンマです。 このプログラムは、多くの国にあるお客様の会社のすべてのオフィスで使用されています。ユーザー/テスターからのエラーや、一部の機能の使用方法がわからないことについて、深夜に電話を定期的に受けています。 このプロジェクトに3年間携わった後、私は非常にストレスを感じ、エラーや電話について非常に心配しているため、よく眠れません。 いくつかの質問を聞きたいんです: 3年間、私が書いたコードはすべて完璧な使用シナリオコードです(簡単に壊れます)。設計が不十分であり、単体テストがありません。私はこの事実のために多くの問題を抱えています。したがって、プロジェクトのスケジュールが非常に厳しいときに機能するコードを書くことが可能かどうかを知りたいですか? 同じ時間でより良いコードを書くにはどうすればよいですか? 眠りにつくとき、どうすれば心をすっきりさせ、仕事を心配しないのですか?

6
DDD集計はWebアプリケーションで本当に良いアイデアですか?
私はドメイン駆動設計に飛び込み、私が出会う概念のいくつかは表面的にはかなり理にかなっていますが、それらについてもっと考えるとき、それは本当に良いアイデアかどうか疑問に思う必要があります。 たとえば、集計の概念は理にかなっています。ドメインモデル全体を扱う必要がないように、所有権の小さなドメインを作成します。 ただし、これをWebアプリのコンテキストで考えると、データベースに頻繁にアクセスして、データの小さなサブセットを取り戻します。たとえば、ページには注文の数だけがリストされ、クリックして注文を開いて注文IDを表示するリンクが表示されます。 私は右の理解集約だ場合、私は一般的にメンバーが含まれますOrderAggregateを返すために、リポジトリのパターンを使用することになりGetAll、GetByID、Delete、とSave。いいですね。しかし... GetAllを呼び出してすべての注文を一覧表示すると、このパターンでは、集計情報の一覧全体、注文全体、注文明細などが返される必要があるように思えます。その情報の小さなサブセットのみが必要な場合(ヘッダー情報のみ)。 何か不足していますか?または、ここで使用する最適化のレベルがありますか?必要のないときに情報の集合体全体を返すことを支持する人がいるとは想像できません。 確かに、リポジトリのようなメソッドを作成できGetOrderHeadersますが、そもそもリポジトリのようなパターンを使用する目的に反しているようです。 誰も私のためにこれを明確にすることはできますか? 編集: さらに調査を重ねた結果、ここでの断絶は、純粋なリポジトリパターンが、ほとんどの人がリポジトリと考えているものと異なることだと思います。 Fowlerは、リポジトリをコレクションセマンティクスを使用するデータストアとして定義し、通常はメモリ内に保持されます。これは、オブジェクトグラフ全体を作成することを意味します。 Evansはリポジトリを変更して集約ルートを含めるため、リポジトリは切断され、集約内のオブジェクトのみをサポートします。 ほとんどの人は、リポジトリを栄光に満ちたデータアクセスオブジェクトと考えているようです。ここでは、必要なデータを取得するメソッドを作成するだけです。これは、ファウラーの「エンタープライズアプリケーションアーキテクチャのパターン」で説明されているような意図ではないようです。 さらに、リポジトリは、主にテストとモック作成を簡単にするため、または永続性をシステムの残りの部分から切り離すために使用される単純な抽象化と考えています。 答えは、これが最初に思っていたよりもはるかに複雑な概念であると思います。

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