ソフトウェア工学

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

5
現在の仕事が気に入らない、退職したい、就職の面接でこれを説明する方法は?[閉まっている]
数年前、私は別の国に移住し、昨年の初めに修士号を取得することができました。当時、私は必死に仕事を探していましたが、小さなソフトウェア開発会社に就職することができて幸運でした。自宅の会社に戻ったとき、私は非常に優れた実績を持つ有名な開発者であり、ソフトウェア開発会社のシニア開発者およびチームリーダーとして働いていました。 1年以上経った今、技術的および非技術的な理由の両方で、現在の仕事を辞めたいと思っています。私たちが抱える技術的な問題のいくつかを容認することはできますが、マネージャーとチームリーダーは常に私を軽視し、攻撃的で軽lit的な態度で私とコミュニケーションをとっています。 さて、私の質問は、私の状況にある人が「なぜあなたは現在の仕事を辞めているのですか?」にどのように応答すべきかということです。明らかに、「私のマネージャーは私を軽視し、いつも私を怒らせているサイコであり、私は十分に持っているからです」と言うことはできません。このような質問に私はどのように答えるべきだと思いますか?
30 interview 

7
WebサービスをSOAPまたはRESTサービスとして公開することを選択する決定要因は何ですか?
SOAPの消費にはSOAPスタックが必要であることがわかります。したがって、クライアントは消費するのが難しくなります。つまり、POSTデータとヘッダーを正しくフォーマットしてから、データ構造ですが、RESTではクエリ文字列の引数を使用してHTTP GETリクエストを作成し、おそらくXMLであると思われるテキストを取得します。 それでは、SOAPの余分なオーバーヘッド/複雑さは何をあなたに与えますか、いつそれを必要としますか?

4
非GPLソフトウェアからGPLソフトウェアを呼び出す
私が書いている別のプログラムからGPLの下でリリースされたプログラムを(合法的に)使用でき、GPLを尊重する必要はありません(私が書いているプログラムに対して)。 たとえば、プログラム(GPLの下)を使用するGUIがありますが、GUIでコードを非表示にして販売することもできますか?
30 gpl 

5
Groovyはなくなりますか?[閉まっている]
この質問は何度も聞かれたと思います。しかし、私はこれらの言語の将来は何であるかという意図を持ってもう一度尋ねたいです。 私は最初にGroovyを紹介され、本当に気に入っていました。構文がよりシンプルで、Javaにはるかに近いと感じ、Grailsをすばやく学習することができました。 それからScalaがあり、ウェブフレームワークはLiftです。私はまだScalaを学んでおり、時には構文が非常に難しいと感じています。 しかし、Groovyの将来はどうなるのか、まだ疑問に思っています。Groovyの作者が、Scalaを知っていればgroovyを作成したことはなかったと言ったとき、未来があるのではないかと思うようになります。もちろん、Groovyは大きな進歩を遂げており、Grailsは今日多くの大企業で使用されています。 もし今日Grails対Liftを見るとすれば、Grailsが勝者になります。より多くの企業がそれを使用しています。しかし、これまで述べてきたことをすべて考えると、Groovyに投資すべきかどうか知りたいと思いますか?Groovyは廃止され、Scalaはより良い選択ですか?BMWのCEOがメルセデスを運転すると言ったら、なぜ私たち全員がメルセデスも運転してはいけないのか疑問に思うでしょう。 (この質問が本当に広範で、閉じられている可能性があるかどうかは理解しています。しかし、他の人のためのオープンなWikiにしたいと思っています。)
30 java  scala  groovy  grails 

13
インタビュー中に「ホワイトボードコーディング」は不適切ですか?[閉まっている]
これはやや主観的な質問ですが、このトピックに関するインタビュアー/インタビュイーからのフィードバック/意見を聞きたいです。 テクニカルインタビューを4つのパートに分けました。ホワイトボード上のコードの記述、コードの読み取りと分析、デザインセッションとコード。 最後の部分について、インタビュー対象者にお願いすることは、ホワイトボードに小さなコードスニペット(4〜5行)を記述し、説明することです。目的を人々を捕まえることではないことをはっきりさせてください。完全な構文を探しているわけではありません。地獄それは擬似コードでさえありえます。しかし、ポイントは彼らに非常に単純な問題を与え、彼らの脳が解決策を私たちに伝えることができるかどうかを確認することです。単純な問題とは、「文字列を逆にする」、「FizzBu​​zz」などを意味します... 最初に明示的な言語を常に要求することに注意してください。私たちは.NET C#の家です。誰かがコードを消している/本当に苦労している「擬似コード」とだけ言いました。 私の質問は、「プログラマがインタビュー中にホワイトボードにコードスニペットを書くことを期待するのは不適切/不合理ですか?」です。

7
私の仕事がすべて社内プロジェクトであるときに、将来の雇用主に適性を示すにはどうすればよいですか?[閉まっている]
私は長い間(10年)現在のポジションにいますが、その間、デザイナー、システムアーキテクト、プログラマーとしての実績があったと感じています。ただし、その作業はすべて、外部の世界からアクセスできない内部プロジェクトで行われています。 「文字通り何かを指し示して「これを書いた」と言うことができれば、それは非常に印象的だ」と示唆するこのようなアドバイスがたくさんあります。あなたが「古典的なジョエル主義が言っているように」「賢くて物事を成し遂げる」情熱的なプログラマーである間、それらがすべて見えないので、「文字通り何も指さない」ことができたらどうでしょうか? オープンソースプロジェクトに必死にコミットし始める必要がありますか?「実世界」(企業内ではない)ブログを始めますか?率直に言って、私はここで10年のほとんどをここで幸せに過ごし、ごく最近になって、より環境に優しい牧草地への出発を検討しました。「公共の存在」を犠牲にして、現在の雇用主の仕事に集中しているため、探し始める前に沈没するつもりですか?
30 interview 

17
抽象化によって詳細を隠すことの価値は何ですか?透明性に価値はありませんか?
バックグラウンド 私は抽象化の大ファンではありません。インターフェースの適応性、移植性、再利用性などの恩恵を受けることができると認めます。そこには本当の利点がありますが、それを疑いたくないので無視しましょう。 抽象化のもう1つの主要な「利点」があります。これは、この抽象化のユーザーから実装ロジックと詳細を隠すことです。引数は、詳細を知る必要はなく、この時点で独自のロジックに集中する必要があるということです。理論的には理にかなっています。 ただし、大規模なエンタープライズアプリケーションを保守しているときはいつでも、常に詳細を知る必要があります。それは、何かが正確に何であるかを正確に見つけるために、毎回、抽象化を深く掘り下げる大きな手間となります。つまり、使用されているストアドプロシージャを見つける前に約12回「宣言を開く」必要があります。 この「詳細を隠す」という考え方は、邪魔をしているようです。私は常に、より透明なインターフェースとより少ない抽象化を望んでいます。私は高レベルのソースコードを読むことができ、それが何をするのかを知ることができますが、それがどのように行われるのか、それがどのように行われるのかを知る必要はありません。 何が起きてる?私がこれまでに取り組んできたすべてのシステムは、(少なくともこの観点から)ひどく設計されていますか? 私の哲学 ソフトウェアを開発するとき、私はArchLinuxの哲学と密接に関連していると思う哲学に従うように感じています: Arch Linuxは、GNU / Linuxシステムに固有の複雑さを保持しながら、それらを適切に組織化して透明性を保ちます。Arch Linuxの開発者とユーザーは、システムの複雑さを隠そうとすると、実際にはさらに複雑なシステムになるため、避けるべきだと考えています。 したがって、抽象レイヤーの背後にソフトウェアの複雑さを隠そうとはしません。私は抽象化を悪用しようとしますが、それの奴隷になることはしません。 心からの質問 詳細を隠すことには本当の価値がありますか? 透明性を犠牲にしませんか? この透明性は重要ではありませんか?

4
アルゴリズム入門(CLRS)ブックの必須数学スキル[終了]
私はすでに基本的なアルゴリズムについての知識を持っています。今、私はより高度なアルゴリズムを研究することを計画しており、アルゴリズムの紹介に進むことにしました。 この本を読む前に数学のスキルを更新する必要があるかどうかはわかりませんか?(高校や大学で学んだ数学のほとんどを忘れています)この本に強力な数学の知識が必要な場合は、有益な科目を提案してください。 アルゴリズムの実装、設計、分析について学びたいです。

6
単体テストの価値を説明する方法
私は同僚に単体テスト(およびテスト全般)の概念を紹介したいと思います。現在、テストはまったく行われておらず、実際にUIを介してタスクを実行して目的の結果を確認することにより、テストが行​​われています。ご想像のとおり、コードは正確な実装と非常に緊密に結合されています。クラス内にあり、システム全体で再利用されるコードがメソッド間でコピーおよび貼り付けされることさえあります。 要件が変更されたため、以前に書いたモジュールを修正するように依頼されましたが、それはかなり疎結合です(希望するほど多くはありませんが、他の多くの概念を導入することなく取得できます)。修正されたコードに単体テストのスイートを含めて、期待どおりに機能することを「証明」し、テストの仕組みを実証することにしました。コードの一部はすでに記述されているため、真のTDDをフォローしていませんが、作成する必要がある新しいコードについては、TDDの概念に従うことを望んでいます。 今、どうしてコードを書くのに1日か2日以上かかるのかと聞かれるのは避けられないだろう、なぜなら私がやり取りすることの一部はすでにシステムに存在しているからだ))でコードをチェックすると、この「テスト」プロジェクトとは何かを尋ねられます。テストの基本を説明することはできますが、他の人が理解する方法で実際の利点を説明することはできません(テストは自分でアプリを実行する必要があると考えているためです。 " か否か)。彼らは疎結合の概念を理解していません(疎結合されたものは何もないという事実から明らかです。私が書いたコード以外のインターフェースすらありません)。それを利益として使用しようとすると、おそらく「ハァッ」を得るでしょう。ある種の見た目であり、既存のいくつかのモジュールを作り直さずに、おそらく「プログラミング」ではなく時間の浪費と見なされるIoCコンテナを導入することなく、やりたいほどゆるくすることはできません。 誰も私がこのコードを指す方法についての提案を持っていますか?私のものが悪いことを除いて)またはそれは時間の無駄のように見えることなく、実際の価値を追加しませんか?

8
チームリーダーとしてのパフォーマンスについてチームに尋ねるべき3つの最も重要な質問は何ですか?
私は、小さなソフトウェア会社内の小さな開発チーム(私を含む4人のメンバー)のリーダーとして1年のマークに近づいています。チームの開発者でもあるチームリーダーとして自分がどのように働いているかを評価する機会をチームに与えたいと思います。 オープンエンドの「元気ですか?」で良いフィードバックを得るのは難しいと思います。質問ですので、どの特定の質問が最も重要ですか?理想的には、私のチームが答えられる3つの簡単な質問を提供できるようにしたいと思います。チームリーダーにフィードバックを提供したい最も重要な部分はどれですか? 私の最初の考えは、私のチームがこれらの質問に匿名で回答できるようにすることでしたか?これはいい考えですか?

16
このポジションにとどまることは私のキャリアに悪影響を及ぼしますか?[閉まっている]
私は、所有者が管理者でもある小さなソフトウェア会社で働いています。私の懸念は、技術のあらゆる進歩が経営者による完全な軽daに見舞われることです。コメントの一部は次のとおりです。 LINQ、nHibernate、およびORMはプログラミングの悪い習慣であり、決して使用しません。 大規模なアプリケーションの大部分は、まだVB6で記述されています。 Webは単なる時間の無駄であり、アプリケーション用ではありません。 開発ソフトウェアの新しいバージョンがリリースされるたびに、管理者が何時間も文句を言うのを聞く必要があります。WPF、WCF、MVC、エンティティなどのテクノロジーは完全に無視されます。 とは言っても、仕事をするのに恐ろしい場所ではなく、賃金は平均的で家に近い。 私の懸念は、技術的には最新バージョンの.NETを使用しているにもかかわらず、最新技術をほとんど使用していないので、.NET 1も使用している可能性があることです。 引っ越すことにした場合、この「経験」は私のキャリアを制限しますか?私はもう数年来ています。 編集:私は本当に素晴らしい反応に感謝しています。正直に言って、動きをすることは私自身の最大の利益になると思います。

3
Haskell対WebサービスのErlang
関数型言語を使用して実験プロジェクトを開始することを検討しており、ErlangとHaskellの間で決定しようとしています。 Haskellの強力な型システムと純度が好きです。本当に信頼できるコードを簡単に書くことができると感じています。そして、Haskellの力は、私がやりたいことのいくつかをはるかに簡単にするだろうと思います。 マイナス面では、YesodのようなHaskellでWebを処理するためのフレームワークのいくつかは、Erlangのカウンターパートほど高度ではないと感じています。 スレッドとフォールトトレランスに対するErlangのアプローチが好きです。Erlangのスケーラビリティは大きなプラスになり得ると感じています。 それが私の質問につながります。HaskellとErlangの両方でWebアプリケーションのバックエンドを実装する際に人々が経験したことは何ですか。HaskellがErlangにある軽量スレッドとアクターのいくつかを提供するパッケージはありますか?

3
Closures / Lambdas /…に対するC#、Java、Scalaのアプローチのメリットとデメリットは何ですか?
Project Lambda(JSR 335)のメーリングリストに送信されたBrian Goetzの電子メールPeek Past lambdaで表明された実装のアイデアと懸念と、C#とScalaの技術的な実装の違いは何ですか? メールから: 「たぶんラムダは単に内部クラスのインスタンスであるべきで、それは本当にシンプルだろう」という道を探りましたが、最終的には「関数は言語の未来にとってより良い方向である」という立場になりました。 そしてさらに: 世界のオブジェクトであるラムダは、この将来の可能性と矛盾しています。ラムダは関数の世界観ではありません。この柔軟性を維持することは、ラムダにオブジェクト性の外観でさえ負荷をかけないことを支持するポイントの1つです。 結論: Lambdas-are-functionsはドアを開きます。Lambdas-are-objectsはそれらを閉じます。 これらのドアが開いたままになるのを好む。 また、Redditスレッドのユーザーからのコメントは次のとおりです。 私は実際にこれについてNeal Gafterにメールしました。彼の説明についての私の限られた理解では、C#と現在のJavaデザインは、デリゲートは実際にはオブジェクトであり、関数型ではありません。JavaはC#のラムダの短所から学び、それらを避けるべきだと彼は信じているようです(C#がJavaの短所から学び、最初にそれらを避けたように)。 「Lambdas-are-functions」アプローチが「Lambdas-are-objects」よりも多くの機会を将来可能にするのはなぜですか?誰かがどのような違いが存在し、それらがコードの記述方法にどのように影響するかを説明できますか? Scalaの物事が「うまくいく」ことを見て、C#/ Java(8)で採用/提案されているアプローチについて何かが欠けていると考え続けています。
30 c#  java  scala  lambda  closures 

3
ActiveRecordパターンの欠点は何ですか?
データアクセス/ビジネスオブジェクトにActiveRecordパターンを使用することの欠点は何ですか?私が頭の外から考えることができる唯一のことは、それが単一責任原則に違反しているということですが、ARパターンは十分に一般的であり、この理由だけではそれを使用しないことを正当化する「十分」ではないようです(もちろん私のビューは、以下で符号Iの作業の多くの場合、いずれもため斜めであってもよい任意)SOLID原理を。 個人的にはActiveRecordのファンではありません(Ruby on Railsアプリケーションを書くことは例外で、ARは「自然」だと感じます)。処理します。ビジネスオブジェクトを返すリポジトリを使用することを好みます。私が扱うコードのほとんどは、ActiveRecordのバリエーションを使用する傾向があります(メソッドがブール値である理由がわかりません)。 public class Foo { // properties... public Foo(int fooID) { this.fooID = fooID; } public bool Load() { // DB stuff here... // map DataReader to properties... bool returnCode = false; if (dr.HasRows) returnCode = true; return returnCode; } } またはpublic static Foo FindFooByID(int fooID)、ファインダやpublic void …

5
UNIX哲学のプログラミングは、関数型プログラミングと同じですか?
UNIXプログラミング環境(古典的なテキスト)は、プログラミングに対するUNIXのアプローチは、より複雑な問題を解決するために組み合わせることができる、小さく明確に定義されたツールを構築することであると述べています。CとBashシェルを学習する中で、これは広範なプログラミングの問題に対処するために使用できる強力な概念であることがわかりました。 Linuxプラットフォームを使用するだけで、コンセプトは非常に明確であり、常に使用されています。I / Oをリダイレクトし、ls、grepなどのシステムツールをリンクするコマンドラインで形成される式は、この概念がいかに強力かを示しています。 私を混乱させているのは、これらのプログラムの多くが命令型/手続き型プログラミングスタイルを使用してCで書かれていることですが、コマンドラインでの使用方法と結合方法は、各プログラムが機能的なプログラミングに似ているようです結合される可能性のある他のプログラムの状態に依存しない孤立した関数。 これは正確であり、UNIXプログラミングの哲学を理解することは、基本的に命令型プログラミングスタイルを使用して構築されたツールを使用した機能プログラミングです。

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