ソフトウェア工学

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

6
関数型プログラミング言語の選択[終了]
私は最近、関数型プログラミング言語に関する多くのスレッドを読みました(実際、ほぼ1年で)。私は本当に一つを選んで徹底的に学びたいです。 最後の[コース]セメスター、私はSchemeを紹介されました。私はそれが好きだった。シンタックスの非常にシンプルさ、ホモイコニシティの原理、マクロ(衛生的および非衛生的)、手続きのn-アリティなどが大好きでした。 Schemeの問題はアカデミックな言語です。実稼働環境で実際に使用されるとは思わない。履歴書を持っていることが特に良いとは思いません。だから、私は代替手段を探していました。それらの多くがあり、それらはどういうわけかすべての人気の同様のレベルを持っているようです。 私がまだ検討した他のいくつかの関数型言語についての考え: Clojure:Javaの世界にアクセスできるため、素晴らしいサウンドに聞こえます。拡張性と同時実行性を指​​向していますが、Javaの世界は今、最先端にありませんか?私はすでにJavaをかなりよく知っていますが、JVMに依存してさらにエネルギーを追加するのが賢明でしょうか? Haskell:非常に高く評価されている言語のように見えますが、私が読んだことから、それはまたアカデミックな言語でもあります。 Lisp:それは永遠に続いています。私がSchemeから気に入っているもののほとんどを持っているようです。大きなコミュニティがあります。私が知っていることは、おそらく業界で最も広く使用されている関数型プログラミング言語でしょうか? F#:本当に考慮しなかった。私はMSのものの大ファンではありません。私は彼らのソフトウェアにお金を払う余裕がありません(大学の提携から自由にすることはできますが、私はコミュニティ主導のソリューションを使いたいと思っています)。とはいえ、それは最高のキャリア志向の選択だと思います。 今夜、私はLispに傾いています。1週間前、Haskellでした。それ以前はClojureでした。過去1年間、私はあなたが知っている理由のためにそれをプッシュするのではなく、楽しみのためにいくつかのスキームをしていました。今、私は真剣になりたい(1つを学ぶこと、それを使って実際のプロジェクトを行うこと、最終的には専門的に作業することについて)。私の問題は、いずれかを選択する前に、それらをすべて徹底的に学ぶ必要があることです。

13
個々のコードの所有権は重要ですか?[閉まっている]
私は、コードベース全体のチームの所有権が、コンポーネントの個々の所有権よりも優れているかどうかについて、一部の同僚と議論している最中です。 私は、チームのすべてのメンバーにコードベースのほぼ等しいシェアを割り当てることを強く支持しています。これにより、人々は自分の作成に誇りを持ち、バグスクリーナーに着信チケットを割り当てるための明らかな最初の場所を与え、「壊れたウィンドウ症候群」を軽減するのに役立ちます。 また、特定の機能に関する知識を1人(または2人)のチームメンバーに集中させ、バグの修正をはるかに容易にします。 何よりも、委員会ではなく、多くの意見を持っている一人の人との主要な決定について最終決定権を置きます。 他の誰かがあなたのコードを変更したい場合、許可を要求することを支持していません。多分、コードのレビューは常に所有者に委ねてください。また、知識のサイロを構築することもお勧めしません。この所有権について排他的なものはないはずです。 しかし、同僚にこれを提案したとき、私は予想以上に多くのプッシュバックを得ました。 だから私はコミュニティに尋ねます:大規模なコードベースでチームと協力することについてのあなたの意見は何ですか?集団所有権を慎重に維持することに関して私が逃しているものはありますか?

6
PythonをゼロからWeb開発まで学ぶにはどうすればよいですか?[閉まっている]
私は、Web開発のためのPythonの学習を検討しています。 すでにJava(JSP /サーブレット)の基本的なWeb開発経験があると仮定すると、Webデザイン(HTML、CSS、JS)、基本的なプログラミングの概念に精通しており、Pythonを初めて使用する場合、どうすればよいですか構造化された方法でPythonを学習し、最終的にはPythonとDjangoを使用したWeb開発につながりますか? PythonでWebアプリケーションを作成するのが急いでいないので、PythonでのWeb開発に関連する技術の知識にギャップを残さないように、徹底的に学びたいと思います。私の努力に役立つ本、リソース、またはテクニックはありますか?それらをどの順番で読むべきですか? 更新: 構造化された方法で学習するということは、基本から始めて、Pythonが提供する重要な詳細/機能の一部を残さずに高度なものを学習することを意味します。プログラミングで既に知っていることをPythonに適用する方法を知りたいです。

9
Lispから始めるにはどうすればいいですか?[閉まっている]
私は何年もプログラミングを行っており、Blubのさまざまな繰り返し(BASIC、アセンブラ、C、C ++、Visual Basic、Java、Rubyは「Blub-ness」の特定の順序ではありません)を学習しています。舌足らずの発音。しかし、私は限られた時間(家族、フルタイムの仕事など)と私の現在のBlub(Java)での快適な幸福を備えたものがたくさんあります。 だから私の質問はこれです、私が本当にLispを学びたい人だとすれば、ウェブ開発におけるLispの優位性を示す良い結果を得るための最初のステップは何でしょうか?多分私はその点を見逃しているかもしれませんが、それは私が最初に私のLisp知識の応用を見ることになる方法です。 「方言Aを使用し、IDE Bを使用し、Cページの指示に従い、カウンセラーDを使用してモナドの後に正気を疑う」と考えています。私はここの人々がA、B、C、そしておそらくDの最適な値のセットだと考えているものを知りたいですエキスパート。 さらに詳細を追加するために、MacOS(またはLinux VM)で開発します。Windowsベースのアプローチは必要ありません、ありがとう。 閲覧するだけの人への注意 この質問をしばらく開いたままにして、提案を調査した後にフィードバックを提供できるようにします。もしあなたがブラウジングをしていて、何か追加するものがあると感じたら、してください。あなたのフィードバックを本当に歓迎します。 興味深いリンク あなたがJavaのバックグラウンドからLispに来ていると仮定すると、このリンクのセットはすぐにあなたを始めるでしょう。 IntellijのLa Clojureプラグインを使用してLispを統合する(ビデオキャスト) Web用のLisp Practical Common Lispのオンライン版(c / o Frank Shearar) Land of Lispが登場し(+ (+ very quirky) game based)ましたが、とても簡単です MacOSにClojureとSublime 2をインストールする優れた入門ガイド Clojure in Actionの本を見てください。私のために働いた。

3
キュービクルを捨てる方法は?[閉まっている]
私は本当に9-5の「キュービクル」の存在から抜け出し、家で仕事をしたり、好きなときに離陸できる場所で何かをしたいと思っています。間違えないでください。 、しかし、私はちょうど私の時間、休暇日、ドレスコード、職場などが設定されている全体のことを楽しんでいない。他の開発者が何らかの形でこれをやってのけるので、これは本当に可能だと思います。しかし、これまでのところ、それは「夢」の段階にあり、私はそれを前進させる方法がわかりません。フリーランサーになりたいのか、自分の会社を始めたいのか、何をしたいのかはわかりません。 それが重要な場合、私は過去数年間(デスクトップとWebの両方).Net / MVCで働いてきましたが、他の言語(Java、C ++、Perlなど)の経験もあります。私は「プログラミング」作業に取り組んでいる間、私のすべての仕事で他の人がそれを処理したので、物事の「ウェブデザイン」面であまり経験がありません。 私が望むものをより具体的にするために...私は6月のランダムな火曜日に目を覚ます、それは素晴らしい日です。私は自分のプロジェクトのスケジュールを前倒ししており、仕事をする気はありません...ハイキングに行きたいです。PHBに対処することなく、それを自由に行えるようにしたいのです。 別のシナリオ...仕事をしたい気がしますが、ビスマルク、ブダペスト、ボストンにある古い友人や親relativeを1週間訪問したいと思います。友人は信頼できるインターネットを持っています。なぜできないのですか? 私は無責任であることについてもう少し自由に話しているのではありません。

24
嫌がるクライアントからお金を得る方法は?[閉まっている]
このウェブサイトは4か月前に完成しました。(私はこのウェブサイトを匿名にしたいと思います-この投稿が顧客によるグーグル検索で出てきた場合、それは彼らのビジネスに悪影響を及ぼします)。私たちは何度も繰り返しましたが、クライアントは非常に要求が厳しく(そしてうるさい)、私は美的外観をかなり破壊したフッターのフォントサイズを含め、求められていたすべてのことを順守しました。(そして、彼らも色を台無しにして、危険なほどに幼稚でプロフェッショナルではないように見せています)。 とにかく、クライアントはプロセス全体を通してとてもフレンドリーでした。すべての要件を取得した後、ウェブサイトを950ポンドで構築することに同意し、作業を開始した後に彼が救済したくないように、事前に150ポンドを請求しました。要件は非常に大きく変化し続け、私は調整を行い、5日遅れでWebサイトを完成させました。 それは4ヶ月前でした。それ以来、彼らは私の電話を返さず、メールにも返信していません。どうすれば彼らからお金を取り戻すことができますか?私はこれについていくつかのアドバイスが本当に必要です。これは誰かが私にお金を払っていないのは2度目です。 注意すべき点: 私たちは契約に署名しませんでした-クライアントは友人の友人でした。 私はまだftp、cpanelおよびすべてのパスワードを保持しています。サイトを停止したくありません。どういうわけか、私には倫理的ではないようです。 これをStack Overflowに投稿して閉じました。ここにリダイレクトされました。 編集 皆さん、多大な支援をありがとう。さらに詳細を含める必要があると考えました。クライアントがサイトをホストしています。のように、登録して自分のデビットカードを使用してドメイン名、ウェブスペース、すべてを購入し、彼のcpanelとftpのパスワードを持っています(まあ、私は多くの人にアクセスできるcpanelにアクセスしていますもの)。 今、私が彼らに警告を出すと、彼はパスワードをcpanelに変更するかもしれませんが、彼らはftpについて知らないと確信しています。 更新 私はAnna Lear土曜日に、彼のアドバイスに従い、火曜日までに私のメールに返信しなかった場合にサイトを削除するという警告とともに最終請求書を送信しました。彼らは私のメールにまだ返信していませんが、これがどうなるかをお知らせします。ご支援いただきありがとうございます。Darknight火曜日以降に提案されたとおり、保留ページを作成する予定です。 ポイント 自分のサーバースペースはありませんが、クライアントのWebスペースはほとんどありませんが、この種の目的には使用したくありません。 結果 最終請求書と警告のフォローアップの後、クライアントは何も拒否しました。職人のアドバイスは私にとって最も賢明であると思われました。私は自分のウェブスペースにサイトをミラーリングし、彼のCPanelにログインし、ウェブサイトを私のサイトに転送しました。それが完了したら、サイトに保留ページを設置し、ウェブサイトにアクセスした人に保留ページが表示されるようにしました(怪しいものは何もありません。ただのUnder Constructionページです)。もちろん、これはクライアントがCPanelを知っていればリダイレクトを削除できるという意味で非常に弱かった。しかし、私は彼に戻ってくるこの二度目の機会があり、彼が何も知らないことに頼っていました。 2時間後、私はそのクライアントから電話を受け(そして彼らが私のボイスメールやメールを受け取らなかったかのように振る舞い)、サイトをバックアップするように頼みました。もちろん、私は支払わなければならないと言い、その2日後に銀行振込を受け取りました。サイトのバックアップと実行が完了しました。 どうもありがとうございました。この質問を始めたとき、私は非常に必死でした。あなたは最高です、レッスンを学ぶように私に言っただけでなく(私はそれをしました)、あなたは私に非常に倫理的(ほとんど)に思えた非常に非常に良い解決策を与えました。 職人に感謝します! 複数の回答を選択できる場合は、私も選択しますAnna Lear が、職人のアドバイスに従ったので、それを拾わなければなりませんでした。弁護士に相談せずにサイトを削除しないことを主張してくれた人々、ありがとう。

3
PATCHメソッドがべき等でないのはなぜですか?
私はこれについて疑問に思っていました。 フィールドとフィールドを持つuserリソースがあるidとしnameます。フィールドを更新したい場合は、次のようにリソースに対してPATCHリクエストを行うことができます。 PATCH /users/42 {"name": "john doe"} そして、アプリケーションはユーザー42の名前を更新します。 しかし、なぜこのリクエストを繰り返した場合、結果が異なるのでしょうか? よると、RFC 5789 PATCHは安全でもi等でもありません

4
VMが「スタックマシン」または「レジスタマシン」などである必要があるのはなぜですか?
(これは非常に初心者向けの質問です)。 私は仮想マシンについて少し勉強しています。 それらの多くは、物理的または理論的なコンピューターと非常によく似た設計になっています。 たとえば、JVMは「スタックマシン」であると読みました。それが意味することは(そして、私が間違っている場合は私を修正します)、すべての「一時メモリ」をスタックに保存し、そのすべてのオペコードに対してこのスタックで操作を行うことです。 たとえば、ソースコード2 + 3は次のようなバイトコードに変換されます。 push 2 push 3 add 私の質問はこれです: JVMはおそらくC / C ++などを使用して記述されています。もしそうなら、なぜJVMは次のCコードを実行しません:2 + 3..?つまり、なぜスタックが必要なのか、または物理コンピューターのように他のVMの「レジスタ」に必要なのでしょうか? 基礎となる物理CPUがこれらすべてを処理します。VMライターが、VMがプログラミングされている言語の「通常の」命令で、解釈されたバイトコードを単に実行しないのはなぜですか? 実際のハードウェアが既にこれを行っているのに、なぜVMがハードウェアをエミュレートする必要があるのですか? 繰り返しますが、初心者向けの質問です。ご協力いただきありがとうございます

1
1Dデータ構造を2Dグリッドとして扱う
2Dイメージを1D配列として表すネイティブクラスを使用しています。たとえば、1つのピクセルを変更する場合は、x,y座標からインデックスを取得する方法が必要になります。 したがって、次のarray1dような1D配列があるとします。 array1d = [ a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, r, s, t, u, v, w, x, y ] プログラムのコンテキストでarray1dは、2Dグリッドを表します。 a b c d e f g h i j k l m n o p q r …

9
「get」プレフィックスと「find」プレフィックスの付いた命名方法を決定する方法と理由
getSomethingvsで始まる特定のメソッドに名前を付ける必要があるかどうかを判断するのは常に困難findSomethingです。 問題は、設計が不十分なAPIのヘルパーを作成することにあります。これは通常、オブジェクトからデータを取得するときに発生し、オブジェクトをパラメーターとして必要とします。以下に簡単な例を示します。 public String getRevision(Item item) { service.load(item, "revision"); // there is usually more work to do before getting the data.. try { return item.get_revision(); } catch(NotLoadedException exception) { log.error("Property named 'property_name' was not loaded", exception); } return null; } このメソッドの名前をgetRevision()orにするfindRevision()かどうか、どのように決めるのですか
48 naming  methods 

3
一時的な場所に書き込み、それを目的の場所にコピーすることの利点は何ですか?
私は衛星画像で動作するアプリケーションを書いていますが、上司からいくつかの商用アプリケーションを見て、その動作を確認するように頼まれました。奇妙な振る舞いを見つけたので、探していたとき、他の標準的なアプリケーションでもそれを見つけました。 これらのプログラムは、まずtempフォルダーに書き込み、次にそれを目的の宛先にコピーします。 例:7zipはまずtempフォルダーに抽出し、次にデータを抽出するように要求した場所に抽出したデータをコピーします。 このアプローチにはいくつかの問題があります。 一時フォルダーには十分なスペースがない場合がありますが、目的の場所にはそのようなスペースがある場合があります。 大きなファイルの場合、コピー操作に無視できない時間がかかることがあります。 私はそれについて多くを考えましたが、これを行うための単一の肯定的なポイントを見ることができませんでした。私は何かを逃していますか、これを行うことには本当の利点がありますか?

10
肥大化したGUIコードの記述を避けるにはどうすればよいでしょうか?
GUIコードを使用すると、コードが他の種類のコードよりも速く膨張する傾向があります。また、リファクタリングが難しいようです。一方、他の種類のコードではかなり簡単にリファクタリングできます-より大きなクラスをより小さな機能に分解できることがわかります-ほとんどのGUIフレームワークでは、多くの場合、ウィジェット/コントロール/クラスを必要とするフレームワークに縛られていますウィジェット/コントロール/その他にもっと多くのものを直接実装します。これは、(a)いくつかのベースウィジェット/コントロール/ものから継承するか、(b)保護されたメソッドにアクセスする必要があるためです。 また、通常、たとえば、フレームワークからの信号/イベント/何でもを介して多種多様な入力に応答して、ユーザーと対話するすべてのモードを実装する必要があります。1つのGUIウィジェット/コントロールで、次のようなさまざまな入出力を処理する必要がある場合があります。 右クリック/コンテキストメニュー コンテキストメニューからの選択に反応する GUIをペイントする特別な方法 キーボード入力に反応する ボタン、チェックボックス、 などなど ...その間、ビジネスロジックを表すGUIの下でクラスを管理します。 シンプルでわかりやすいGUIでは、ビジネスロジックを分離してMVCを使用する場合でも、コードを非常に迅速に成長させることができます。GUIコードは変更の大きな魅力です。 GUIコードを健全な方法で管理し、壊れたウィンドウにならないようにする方法はありますか?それとも、ランダムなイベントハンドラー/オーバーライドされたメソッドの塊が、GUIコードに対してできる最善の方法なのでしょうか。
48 refactoring  gui 

17
人のデバッグスキルを確認または評価する方法 [閉まっている]
コードを簡単にデバッグできる人をどのようなスキルが決定しますか?しばらく前、私の友人が比較的優秀なプログラマーとのインタビューを実施しました。プログラマーが雇われました。彼は良いコードを書き、フレームワークとデザインパターンを理解できました。彼が見逃していたのは、デバッグスキルです。彼はまったくデバッグできず、彼または他の誰かのコードの問題を見つけることは彼にとって大きな苦痛でした。 それ以来、人のデバッグスキルをどのように評価または推定できるかを考えています。 それで最初の質問は、人がソフトウェアを効果的にデバッグできるかどうかを決定するスキルは何ですか? 2番目:インタビュー中にこれらのスキルをテストする方法ですか?

17
階乗、フィボナッチ数などのない再帰
再帰について見つけることができるほぼすべての記事には、階乗またはフィボナッチ数の例が含まれています。 数学 実生活では役に立たない 再帰を教えるための興味深い数学以外のコード例はありますか? 私は分割統治アルゴリズムを考えていますが、通常は複雑なデータ構造を伴います。
48 recursion 

3
gitコミットに2つ以上の親を含めることはできますか?
で、このドキュメントは言及されています コミットオブジェクトには、任意の数の親を含めることができます。 しかし、私の理解では、コミットに複数の親が含まれる唯一のケースは、マージが発生したときであり、その場合、2つの親しかありません。だから私の質問は、コミットには2人以上の親を持つことができますか?もしそうなら、いつ?
48 git 

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