ソフトウェア工学

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

2
なぜビット演算子は比較よりも優先度が低いのですか?
理由を説明してもらえますか、なぜ最も一般的な言語の束(下記の注を参照)で比較演算子(==、!=、<、>、<=、> =)がビットごとの演算子(&、|、^ 、〜)? この優先順位が自然な使用法に出会ったことはないと思います。それは常に次のようなものです: if( (x & MASK) == CORRECT ) ... // Chosen bits are in correct setting, rest unimportant if( (x ^ x_prev) == SET ) // only, and exactly SET bit changed if( (x & REQUIRED) < REQUIRED ) // Not all conditions satisfied 私が使用する場合: flags = …

11
このクラス設計は単一の責任原則に違反していますか?
今日、誰かと議論がありました。 私は貧血領域モデルとは対照的に、豊富な領域モデルを持つことの利点を説明していました。そして、次のような単純なクラスでポイントをデモしました。 public class Employee { public Employee(string firstName, string lastName) { FirstName = firstName; LastName = lastname; } public string FirstName { get private set; } public string LastName { get; private set;} public int CountPaidDaysOffGranted { get; private set;} public void AddPaidDaysOffGranted(int numberOfdays) { // Do stuff } …

5
関数型プログラミングでは、ほとんどのデータ構造を不変にするために、より多くのメモリ使用量が必要ですか?
関数型プログラミングでは、ほとんどすべてのデータ構造が不変であるため、状態を変更する必要がある場合、新しい構造が作成されます。これはより多くのメモリ使用量を意味しますか?オブジェクト指向プログラミングのパラダイムをよく知っているので、今は関数型プログラミングのパラダイムについて学ぼうとしています。すべてが不変であるという概念は私を混乱させます。不変の構造を使用するプログラムは、可変の構造を持つプログラムよりも多くのメモリを必要とするように思われます。私はこれを正しい方法で見ていますか?

9
毎日コードをコミット/チェックすることは良い習慣ですか?
私は継続的インテグレーションに関するMartin Fowlerのメモを読んでおり、彼は必須項目として「毎日メインラインにコミットしている」としています。 私が取り組んでいるセクションが完全でない限り、コードをコミットするのは好きではありません。実際には、3日ごとにコードをコミットします:1日目はタスクを調査/再現し、いくつかの予備的な変更を行い、2日目は変更を完了します、そして3日目でテストを書き、提出のためにクリーンアップします^。コードをもっと早く提出するのは気が進まないでしょう。 現在、リポジトリから変更を取得し、通常は1日に2回ローカルに統合しますが、小さな作業を分割できない限り、頻繁にコミットしません。 質問:毎日コミットすることは、それを順応させるためにワークフローを変更する必要があるほど良い習慣ですか、それともお勧めできませんか? 編集: CVSの意味で「コミット」(別名「プッシュ」)を意味していることを明確にすべきだったと思います。 ^順序はより任意であり、タスクに依存します。私のポイントは、正確なシーケンスではなく、時間とアクティビティを説明することでした。

5
楽譜はチューリング完全ですか?
私は思ったんだけど、ある楽譜言語チューリング完全? 私の最初の考えは、楽譜にループがあるが、条件分岐を書く方法がないということですよね? 私はミュージシャンではないので、おそらく誰かがギャップを埋めることができますか?

16
一般に、新しいソフトウェアの作成は、ほとんどのプログラミングジョブの主要な部分ですか?[閉まっている]
私は10年以上ソフトウェア開発に携わっていますが、「新しい」ものを作成することはめったにありません。「新しい」という用語は曖昧な用語であることを理解していますが、明確な新しい大規模プロジェクトから既存のプロジェクトの新しい大規模な機能に至るまで、その定義を定義します完了するには2週間以上かかります)。大まかなガイドラインは、書面による仕様が必要な場合は新しいものかもしれません。ほとんどのプログラマは私が話していることを知っていると思います-あなたはゾーンにいて、大量のコードを速いペースで書いています。 とにかく、自分がやったことを振り返ってみると、「新しい」仕事に費やされている時間は10%未満だと見積もっています。「この既存のシステムをこの新しい環境で動作するように適応させる」など、確かに多くの計画が必要ですが、実際のコーディングと「新しいもの」は、コード全体の多くの場所で小さな変更を行うことになります。同様に、小さな機能のリクエストについては-何をすべきかを知っていれば、これらは1時間以内に完了することがよくありますが、そうでない場合は、コードを読んで何をすべきかを考え出すだけです読むことではなく、行うことでより良くなります)。 一般的に、私はほとんど何も実際に作成していないように感じます。ほとんどの場所でこれが当てはまると思います-新しい製品がかなり早く出て、その時点で誰もが興奮してコードを速いペースで叩き出しますが、一度ライブになるとメンテナンスモードに移行しますその後の変更のいくつかは、「新規かつ創造的」と見なされます。 私が間違っている?私はほとんどのプログラミングの仕事を正確に説明していますか、それともほとんどのプログラマーは新しいものを頻繁に作成していると感じていますか?

11
はるかに経験の浅い人を会社が望んでいるときに、自分の代替品を見つけるにはどうすればよいですか [閉まっている]
私は自分の会社に、自分自身を段階的に廃止したいが、代わりを採用するのを助けるためにどこにでも応募する前に、2、3か月の間頑張ると言いました。私がこれを申し出たのは、私が唯一のWeb開発者であり、彼らを無力にしたくないからです。 問題は、高い給料を支払わないようにするために、非常に資格のない人を雇いたいということです。 私の知る限り、それは彼らの会社であり、彼らは彼らが望むようにそれを実行することができます。しかし、私が行く前に誰かを見つけて訓練するのを手伝うことになると、私は何をすべきかわからない立場にいます。 少し見通しを与えるために、MVCフレームワークを使用して中規模のeコマースシステムを構築しました。それだけではありませんが、私はそのままにします。彼らが私にレビューを求めている候補者は、プログラマーとして働いたことがない人で、WYSIWYGプログラムを使用して本当にくだらない静的なWebサイトをいくつか作成し、自分自身をWebデザイナーと呼んでいます。 私はこれらの人々が成功するチャンスがないことを知っています。私はそれを会社に説明しようとしましたが、彼らはそれを聞きたくありません。彼らは、これらの人々の1人が私のレベルで約1年で訓練を受け、稼働できると考えています。現実には、彼らがこの道を行くなら、彼らのサイトは一年も続くとは思わない。 多分彼らは私が自分を良く見せようとしているだけだと思う​​し、新しい候補者は何らかの理由で悪く見えますが、それはまったくそうではありません。私は努力したことを有能な手に残したいと思います。 ここで行うべき倫理的かつ専門的なことは何ですか?これらの候補者は実際にまともな候補者を見つけるまで、私が去る時まで、彼らに良いとは言わないでください。それとも、彼らが自分自身を破壊することを受け入れ、候補者の中から最善のものを選び、行く前に私にできることを彼/彼女に教えるために私ができる限り最善を尽くしますか? 私は本当にここで正しいことをしたいので、良い条件で去ることができます。そして、1年後に彼らが失敗した場合、私はきれいな良心を持つことができます。


22
なぜ一部のプログラマーは、理論と実践の間に対照があると思いますか?[閉まっている]
ソフトウェアエンジニアリングと土木工学を比較すると、私は異なる考え方を観察して驚いた:土木技師なら誰でも、庭に小さな小屋を建てたいなら、材料を手に入れて建てることができるのに対して、 10階建ての家(または、たとえばこのようなもの)では、崩壊しないことを確認するためにかなりの計算を行う必要があります。 対照的に、一部のプログラマーと話したり、ブログやフォーラムを読んだりして、次のように定式化できる幅広い意見をしばしば見つけます。理論と形式的方法は数学者/科学者向けであり、プログラミングは物事を成し遂げることです。 ここで通常暗示されているのは、プログラミングは非常に実用的なものであり、形式的な方法、数学、アルゴリズム理論、クリーン/コヒーレントなプログラミング言語などは興味深いトピックかもしれませんが、すべてが必要な場合は必要ないことです完了しました。 私の経験によれば、100行のスクリプト(小屋)をまとめるのにそれほど理論は必要ありませんが、複雑なアプリケーション(10階建ての建物)を開発するには、構造化された設計が必要です。定義されたメソッド、優れたプログラミング言語、アルゴリズムを検索できる優れた教科書など。 したがって、IMO(適切な量の)理論は、物事を成し遂げるためのツールの1つです。 私の質問は、なぜ一部のプログラマーが理論(形式的手法)と実践(物事を成し遂げる)の間に対照があると考えるのですか? ソフトウェアエンジニアリング(ソフトウェアの構築)は、例えば土木工学(住宅の構築)と比較して多くの人が容易に認識してい ますか? または、これらの2つの分野は本当に異なりますか(ミッションクリティカルなソフトウェアは別として、ソフトウェアの障害は建物の障害よりもはるかに許容されます)。 これまでの回答から理解したことを要約しようと思います。 ソフトウェアエンジニアリングとは対照的に、土木工学では、特定のタスクに必要な理論量(モデリング、設計)がはるかに明確です。 これは、土木工学が人類と同じくらい古く、ソフトウェア工学が数十年しか存在していないという事実に一部起因しています。 別の理由は、ソフトウェアがより不安定な種類のアーティファクトであり、より柔軟な要件(クラッシュする可能性がある)、さまざまなマーケティング戦略(すぐに市場に出すために良いデザインを犠牲にすることができる)などであるという事実です。 結果として、適切な設計/理論の量がソフトウェアエンジニアリングに適切であるかを判断するのははるかに困難です(少なすぎる->乱雑なコード、多すぎる->私は決して終わらない) (多くの)経験が役立ちます。 したがって、あなたの答えを正しく解釈すると、 理論が実際にどれだけ必要かについてのこの不確実性が、一部のプログラマーが理論に対して抱く愛と憎しみの混合の原因になります。

15
古い技術を履歴書から削除するのはいつですか?[閉まっている]
新しい職に就くためにいくつかの履歴書を確認しています。そのうちのいくつかは、履歴書に多くの古いプログラミング言語バージョンと古いアプリケーション(SQL 4.2、VB5、Lotus 123、Novellなど)があったことに気付きました。これにより、コンピュータエクスペリエンスのリストが非常に長くなりました。新鮮に保ちますか?その技術を二度と使用しないとしても、経験の深さを示していますか? 履歴書に古いテクノロジーをドロップすべきなのはいつですか?履歴書に古い技術を保持することは、それが雇用に害を及ぼすのでしょうか?
63 resume 

10
コードはいつ「レガシー」ですか?[閉まっている]
すべて完了しました。一部のコード(多くの場合、継承したもの)を「レガシー」とラベル付けしましたか?しかし、それはまだ実稼働システムで使用されています-それは本当にレガシーですか?そして、何がレガシーなのでしょうか?完全に機能するコードのこの不当なラベル付けを避けるべきでしょうか。ラベリングは純粋な利便性であり、新しいものを押し通して上層部の経営陣を満足させることができますか? 回答の要約 答えを見ると、4つの一般的なテーマがあります。内訳は次のとおりです。 配信されたコード:6 デッドシステム:2.5 単体テストなし:2 開発者がいない:1.5

16
一人称コメントは気を散らし、プロフェッショナルではありませんか?
私は自分が書いていた(古風なVisual Basic 6.0)コードで次のコメントを書いていることに気付いた。 If WindowState <> 1 Then 'The form's not minimized, so we can resize it safely '... End if コメントで「私たち」を無意識のうちに使用する理由がわかりません。誰かがコードをステップスルーするのを想像しているのではないかと思っています。まるでそれらが実際に発生するのを見るのではなく、実際に各行のすべてのコマンドを「行っている」かのようです。この考え方では、私はI can resize it現在、それを「やっている」ので、またはyou can resize it、「将来」それをやっている人と話しているかのように使用できますが、これらのケースの両方は私は自分のコードを他の人に導くかのように「私たち」を使用します。 私は単純にそれを書き換えてit can be resized問題を回避できますが、それは私の好奇心を引き起こしました:コメントでこのような最初の人を使用することは一般的ですか、それとも気が散るおよび/または専門家でないと考えられますか?

15
同僚がすべてのクエリの名前を変更した[終了]
私は非常にイライラする必要があるかどうか、または何がわからない。大規模なデータベースに対して300を超えるクエリを独力で構築し、後で見つけられるように命名規則を開発しました。私のオフィスの他の誰もクエリの作成方法を知りませんが、昨日、すべてのクエリの名前が変更されたことを知りました。私は今、物事を見つけるのに非常に苦労しています。 私は責任者と話をしましたが、彼女はすべてを軽視しました。彼女はもっと簡単に見つけられるように名前を変更したと言いました。残念ながら、私はそれらを構築、編集、および保守する方法を知っている唯一の人であり、彼女がそれらを見つける必要がある唯一の理由はクエリをテストすることでした。新しい命名規則はまったく意味をなさないため、開発プロセスで後方への一歩を踏み出したように感じます。 私が理解しようとしているのは: 1)私は過剰反応していますか? 2)これを処理する最良の方法は何ですか?私はこれを上司に話すのは嫌いですが、昨日同僚と話した後、彼女は何も悪いことをしていないように感じていることをすでに伝えることができます。
63 database  sql  access 

11
非常にひどく記述されたコードを扱うとき、どのように生産性を維持しますか?
私はソフトウェア業界での仕事、独学、就職する前にオープンソースに参加した経験はあまりありません。お金のために働いている今、私はまた、いくつかの不快なものに対処する必要がありますが、これは当然のことです。 最近、私は明らかに仕事でコーディングすることを学んでいたプログラマーによって書かれた大規模なSharePointプロジェクトにロギングを追加するように割り当てられました。2年間の共同作業の後、クライアントは当社に切り替えましたが、損害は発生しました。そして今、どういうわけかこのコードを保守する必要があります。 コードはありませんでしたことをあまりにも読みにくいです。問題にもかかわらず、各プロジェクトにはコピーペーストされたメソッド、巨大なifネスト、Systems Hungarian、無秩序な接続を含む1つのクラスがあります。 しかし、ロギングを追加するような簡単な作業を行っていたにもかかわらず、私は完全に非生産的でした。基本的に、ステップごとにコードを調べて、トレース呼び出しを追加するだけです。ただし、コードの愚かさは非常に迷惑なので、開始から10分以内に疲れてしまいます。最初は、usingコンストラクトを追加し、を逆にしてネストを減らしif、変数の名前を読み取り可能な名前に変更しましたが、プロジェクトは大きく、最終的にはgaveめました。これは私がやるべきタスクではないことはわかっていますが、少なくとも混乱を減らすことで、続けることができるように何らかの心理的な報酬を得ることができました。トリックが機能しなくなり、仕事の60%がまだ残っています。 仕事の後に頭痛がし始め、今までの満足感が得られなくなりました。通常は、10時間ストレートでコーディングしても新鮮に感じることができます。 これは単なる大騒ぎではありません。実際に質問があります。 生産性を維持し、風車と戦わない方法はありますか? 代わりに思考の、タスクに集中するために心理的なトリックのいくつかの種類があり、「どのように愚かであることは?」私は以前、プログラマが別の巧妙なトリックを見るたびに?ロギングを追加する際の問題は、実際にコードが何をするのかを理解しなければならないことであり、そうすることは不快な形で脳を傷つけます。

9
1人または2人の開発者がアジャイル/スクラムを使用できますか?
ここまで読んで研究してきたすべてのことは、アジャイル/スクラムが約4〜6人、さらにそれ以上のチームでどのようにうまく機能するかを説明しています。 私の現在のショップには、約8人の開発者がいますが、プロジェクトの量とサポートする部門の数を考えると、特定のプロジェクトに1人または2人以上の人が割り当てられることはありません。 1人または2人の開発者のチームでアジャイル/スクラムを使用できますか?私はこの方法論で作業を開始するためにマネージャーにピッチを作成しようとしていますが、小さな開発者クルーのために物事を縮小する方法を説明するか、特定のメンバーを増やすように説得する必要があります事業。

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