ソフトウェア工学

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

5
シンプルさの議論
最近、私の会社では、抽象化と単純化について少し議論しました。私が「DRYと抽象化は害を及ぼさない」と特徴付けた1つの考えの学校は、このようなコードにつながります: def make_foo_binary(binaryName, objFiles, fooLibsToLinkAgainst) make_exe_task(binaryName, objFiles.ext('.o'), fooLibsToLinkAgainst) end この: class String def escape_space return self.gsub(' ', '\ ') end end 私の見解では、このような抽象化を作成すると、1つの場所でのみ使用され、コードが読みにくくなります。これは、読者が(gsub)に慣れている関数呼び出しを、見たことのない別の関数呼び出しに置き換えるためです。前(escape_space)。コードが実際にどのように機能するかを理解したい場合は、これを読む必要があります。置換は基本的に英語(「エスケープスペース」)で記述され、英語はあいまいなことで有名です。たとえば、定義を見ないと、すべての空白をエスケープするのか、スペース文字だけをエスケープするのかわかりません。 DRYと抽象化の賞賛を歌う多くの文章があります。 抽象化の限界を説明する情報源を知っている人はいますか?それは賞賛を歌って、コードをシンプルに保つことの実際的なことを話し合いますか? 編集:私は人生や(英語)ライティングでシンプルさを促進するテキストを見つけることができます。たとえば、Thoreauの「Simplify、Simplify!」またはStrunk and Whiteの「精力的な執筆は簡潔です。」プログラミングに相当するものはどこですか?

9
プログラミングでインターンを刺激する方法は?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、討論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 7年前休業。 状況はこれです。夏にインターンを取り、もし彼が夏の間に追いつくとしたら、彼をパートタイムのジュニア開発者として維持します。 私たちは彼を大学1年目の後に連れて行ったので、彼の知識は低すぎて実際のプロジェクトに参加することができませんでした(実際、彼は大学でのみプログラムしました)。 9月の実際のプロジェクト。私たちがリモート開発チームである限り、柔軟な時間でリモートでインターンシップを行う可能性を彼に与えました。 それで2か月が経過し、私は彼の進歩に感銘を受けていません。実装するいくつかのタスク、学習リソースへのアクセス、推奨される開始パスなどを与え、彼は数日ごとに報告することに同意し、時々ペアセッションを行い、彼のコードを一緒にレビューしました。 とにかく、彼がコードを書くのに思ったよりも少ない時間を費やしたようで、彼が私たちのチームに参加するのに十分なパフォーマンスを発揮しなかったと言う前に、私はそれが私のせいかもしれないと思っていました、それは実際のプロジェクト(ユニットテスト、構造化コード、データベースなど)で重要であり、十分に楽しいものではないため、プログラミングに夢中になり、それが彼が思ったよりも時間を費やさなかった理由です。 だから、残り20日あり、それらを使用してプログラミングで彼を鼓舞することができます。質問は何でどのようにですか?

2
LINQは、低レベルのデータ反復手法よりもはるかに多くの処理サイクルとメモリを必要としますか?
バックグラウンド 私は最近、.NETスタックを使用するポジションの厳しい技術面接に耐える過程にあります。その中には、このような愚かな質問や、より有効な質問が含まれています。最近、有効な問題に遭遇しましたが、確認するにはここのコミュニティに確認したいと思います。 面接官から、テキストドキュメント内の単語の頻度を数え、結果をランク付けする方法を尋ねられたとき、私は ストリームオブジェクトを使用して、テキストファイルを文字列としてメモリに配置します。 句読点を無視しながら、文字列をスペース上の配列に分割します。 配列とに対してLINQを使用.GroupBy()し.Count()、次にOrderBy()カウントと言います。 私は2つの理由でこの答えを間違えました: テキストファイル全体をメモリにストリーミングすると、障害が発生する可能性があります。それが完全な百科事典だったらどうでしょうか?代わりに、一度に1つのブロックをストリーミングして、ハッシュテーブルの作成を開始します。 LINQは高すぎるため、必要な処理サイクルが多すぎます。代わりにハッシュテーブルを作成する必要があり、反復ごとに、存在しない場合にのみハッシュテーブルに単語を追加してから、カウントをインクリメントしました。 最初の理由は、まあ、理にかなっているようです。しかし、2番目は私にもっと休止を与えます。LINQのセールスポイントの1つは、ハッシュテーブルのような下位レベルの操作を単純に抽象化することですが、ベールの下では、同じ実装です。 質問 抽象化されたメソッドを呼び出すためのいくつかの追加の処理サイクルを除いて、LINQは、特定のデータ反復タスクを実行するために、低レベルのタスク(ハッシュテーブルの作成など)よりもはるかに多くの処理サイクルを必要としますか?

3
Objective-C / iPhone開発に必要なC / C ++の知識はどのくらいですか?
まず、少し背景。私は.Net開発者(C#)であり、Web開発とデスクトップアプリケーションの両方で5年以上の経験があります。私はしばらくの間、iPhoneの開発を調査したいと思っていましたが、何らかの理由で常に別の側面から見逃されていました。ようやく潜在的なプロジェクトが地平線上にあり、今、このことを学ぶために全力で取り組んでいます。 私の質問はこれです。私は学生時代からC / C ++プログラミングを行っていません。それ以来、管理された土地に住んでいます。iOS開発者として成功するために必要な知識はどれくらいありますか?明らかに、メモリ管理は私が意識しなければならないものです(ただし、iOS 5では、ARCと呼ばれるものがあり、私の生活をより簡単にするはずです)。私はC APIについて話しているだけではありません(たとえば、数値の罪を取得するためにsin()関数を呼び出します)。それがGoogleの目的です。私は、平均的なC#開発者が知らない基本的なC / C ++イディオムについて話しています。
8 c#  c  iphone  ios 

9
Python、PHP、JavaScriptのエキスパートになる方法は?[閉まっている]
現在のところ、この質問はQ&A形式には適していません。回答は事実、参考文献、専門知識によって裏付けられると期待していますが、この質問は、討論、議論、投票、または拡張ディスカッションを求める可能性があります。この質問を改善でき、再開できると思われる場合は、ヘルプセンターにアクセスしてください。 8年前に閉鎖。 だから私は今から約9か月間プログラミングをしていて、Python、PHP、Javascriptを独学で学びました。 これらの言語でもっと上達したいのですが、何かをハックすることはできますが、OOPや、最も効果的な方法でリストを使用するなど、私には多くのものが失われています。 「エキスパート」プログラマになるための最良の方法は何ですか?それは言語のニュアンスに依存していますか、それともより一般的ですか?一緒に勉強すべき数学はありますか?明らかに、それをどのように処理したいかに大きく依存します。これまでのところ、主に小規模な内部アプリケーションとWebプログラミングを行ってきました。優れたプログラム設計を知るにはどうすればよいですか?

9
テンプレートで解決できる問題を特定する方法に関するリソースはありますか?
テンプレートのメタプログラミングに関する知識を向上させることにしました。私は構文とルールを知っており、オンラインリソースの数え切れないほどの例で遊んでいます。 テンプレートがどれほど強力であり、コンパイル時間の最適化がどれだけ提供できるかを理解していますが、それでも「テンプレートを考える」ことはできません。特定の問題がテンプレートで最善に解決できるかどうか、そしてそれができるかどうか、私は自分で知ることができないようです。その問題をテンプレートに適応させる方法。 テンプレートを使用して最も適切に解決できる問題を特定する方法と、その問題をどのように適応させるかを教える、ある種のオンラインリソースまたは本はありますか?
8 c++  templates 

2
大文字と小文字の区別が異なる複数の言語を操作するときはどうしますか?
Djangoを使用してwebappを作成しています。変数の命名に関するPythonの規則はlowercase_with_underscoresですが、JavaScriptの規則はcamelCaseです。さらに、多くの人がCSS識別子に小文字のハイフンを使用するのを見てきました。 他の2つが他を推奨している場合でも、必要に応じて3つすべての命名規則を使用するか、1つを選んでそれを使用することをお勧めしますか?前後に切り替えることは大きな問題ではありませんが、それでも精神的なオーバーヘッドになる可能性があります。

3
TDD(スクラム)を使用しながらユーザーストーリーからコードに移行する
私はスクラムとTDDに取り掛かっていますが、いくつかの混乱があると思います。フィードバックについてお聞きしたいと思います。バックログにユーザーストーリーがあり、TDDの一部として開発を開始するために、これまでの要件が必要であるとしましょう。 プロダクトマネージャーとQAがユーザーストーリーを受け入れて受け入れテストに分解する責任を負うべきだと言うのは本当ですか? 受け入れテストは形式的である必要があるため、上記は正しいと思います。テストとして使用できるだけでなく、製品が要件であることを製品が承認できるように、人間が読める形式でも使用できます。 私が後でこれらの受け入れテストを受けて、それを私の要件として使用すること、つまり、それらが(TDDを介して)実装する一連のユースケースであることも本当ですか?私は混乱をあまり作りすぎていないといいのですが、それが今私が考えている現在の流れです。 更新 当初の意図は不明確だったので、言い換えます。TDDの使用中にユーザーストーリーをコードに変換するスクラムフローの詳細を知りたい。 開始点は明らかです。ユーザーはニーズ(または製品としてのユーザーの代表)を表面化します。これは、既知の形式で1〜2行の短い説明であり、製品のバックログに追加されます。 春の計画会議がある場合、ユーザーストーリーはバックログから取得され、開発者に割り当てられます。 開発者がコードを作成するには、要件が必要です(特に、要件はテストの派生元であるため、TDDで必要です)。 いつ、誰が、どの形式で要件がコンパイルされますか? 私が頭に浮かんだのは、製品とQAが受け入れテストを介して要件を定義することです(私はFitNesseまたはソートを使用して自動で考えていますが、それは私が考えるコアではありません)同時に2つの目的を果たすのに役立ちます: 彼らは「完了」を適切に定義しています。 それらは、開発者にテストの派生元を提供します。 これらがいつ記述されたかはわかりませんでした(スプリントが選択される前に追加情報が届くか、ストーリーが選択されないため、繰り返しの間に開発者がスタックを待機する可能性があるため、これは無駄になります)。 ..)

3
設計により異なるビット長によるITの制限の例[終了]
休業。この質問は意見に基づいています。現在、回答を受け付けていません。 この質問を改善してみませんか?この投稿を編集して、事実と引用で回答できるように質問を更新してください。 5年前休業。 私は1年生向けにコース「プログラミング入門」を教えています。設計によって選択されたビット単位のデータ型サイズが特定の既知の制限または重要な値につながる興味深い例を見つけたいと思います。 ここではいくつかの例を示します。 Bellテレプリンターは7ビットコード(後でASCIIとして受け入れられる)を使用していたため、電子メッセージの添付ファイルを7ビットデータのみを含むようにエンコードすることがよくありました。 32ビットアドレス空間の従来の制限により、32ビットシステムで使用可能な最大4GbのRAMサイズと、FAT32で最大4Gbのファイルサイズが発生します。 データ型の選択(特にそのバイナリ長)が現代のITの世界にどのように影響したか、他に興味深い例をいくつか知っていますか。 コメントでいくつかの議論の後に追加されました: 制限を克服する方法を教えるつもりはありません。1バイトで-127..0 .. + 127 o 0..255の値を保持できること、2バイトで0..65535の範囲をカバーできることを彼らに知ってもらいたい。上記のbase64エンコーディングなど。基本的なデータ型を学習しているだけなので、これらの型の「大きさ」についての適切なリファレンスを見つけようとしています。

3
プロトタイプとクロージャを使用することで最もよく解決されるプログラミングの一般的な問題は何ですか?
両方の概念を理解している限り、インスタンス化および/またはカプセル化されたクラスのようなブロックを作成するためにそれらを使用する以外に、JavaScriptのクロージャーとプロトタイプをどのように利用できるのかわかりません(これは私にとってアセットよりも回避策のようです) ) 値としての関数や非ブール値の論理評価など、他のJS機能は、恋に落ちるのがはるかに簡単です... プロポタイプの継承とクロージャを使用することで最もよく解決される一般的なプログラミングの問題は何ですか?

8
プログラムを設計するとき、詳細なアーキテクチャ設計を書くべきですか、それとも単に概要を書くべきですか?
タスクのデザインをしているとき、私はこのしつこい気持ちと戦い続けます。それは、一般的なアウトラインであるだけでなく、結局は無視されるというものです。例を挙げましょう。 読み取り/書き込み操作が可能なデバイスのフロントエンドを作成していました。クラス図では、読み取りおよび書き込み機能を提供することは完全に理にかなっています。しかし、実際にそれらを書くことになったとき、コードが1行だけ変更された(読み取りと書き込みの関数呼び出し)文字通り同じ関数であることに気づきました。コードの重複を避けるために、区別するパラメーターを持つdo_io関数を実装しました。オペレーション。さようならオリジナルデザイン。 これはひどく破壊的な変更ではありませんが、頻繁に発生し、プログラムのより重要な部分でも発生する可能性があるため、少なくとも概要の場合よりも、一般的な概要よりも詳細に設計する必要があるかどうか疑問に思わずにはいられません。プログラムのアーキテクチャーになります(明らかに、APIを指定するときは、すべてを詳しく説明する必要があります)。 これは設計の経験不足のせいかもしれませんが、一方で「はるか先の計画をあきらめて、とにかく数日ですべてが変わる」というようなアジャイルな方法論があります。私がどう感じるか。 それでは、設計をどの程度正確に「使用」する必要がありますか
8 design 

3
ビューとコントローラー(Web)を分離する理由
それぞれのアクションとそのビューが対になっているように、それらを同じページに配置できないのはなぜですか?コードアイランドを使用していませんが、上部にコントローラーコードを表示し、下部にコードを表示していますか?このアプローチの問題は何ですか? MVCとは、ASP.NET MVCやRuby on Railsなどのフレームワークを指し、VとCは実際にはUIレイヤーであるという印象を受けています。

4
PHP5は以前のバージョンの言語にどのように対応していますか
Web開発用のPHPを学びたいのですが、次のようなコメントのために取り残されました*: PHPは良いですが、スパゲッティコードを生成します PHPは素晴らしいですが、Pythonは結婚の素材です PHPには、C#やJavaなどの他の言語で使用できるものが不足しています しかし、PHP5については、有望なコメントがいくつかあります。したがって、私の質問は、PHP5は以前のバージョンの言語とどのように連携し、Web開発について学ぶのに今は十分なのかということです。 *コメントは、炎の戦争を扇動しないための参考用です。PHPと他の言語の比較はここでは求められません。PHP5についてだけでなく、以前のバージョンとの比較についてコメントしてください。
8 php 


1
「関数型アルゴリズム設計の真珠」で使用される表記
Richard Birdの「Pearls of Functional Algorithm Design」という本を購入しました。残念ながら、この本には、使用されている表記法を説明するセクションがありません。 アマゾンのページに行き、本の表紙をクリックして中身を覗くと、本の内容を確認できます。 http://www.amazon.com/Pearls-Functional-Algorithm-Design-Richard/dp/0521513383 誰かが私に名前、および/または参照を使用して、使用されている表記法を理解できる場合 そうすれば、アルゴリズムを実際に読んで理解することができます。
8 notation 

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