ソフトウェア工学

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

5
IOモナドが世界で動作する状態モナドと見なされているという批判
IOHaskellではモナドは、多くの場合、状態は世界でStateモナドとして説明します。したがって、IO aモナド型の値はのようなものと見なされますworldState -> (a, worldState)。 しばらく前に、私はこの見解を批判し、それが正しくない理由をいくつか示した記事(またはブログ/メーリングリストの投稿)を読みました。しかし、記事も理由も思い出せません。誰もが知っていますか? 編集:記事は失われたようですので、ここからさまざまな議論を集めましょう。 私は物事をより面白くするための賞金を始めています。 編集:私が探していた記事は、厄介な部隊への取り組みです:サイモンペイトンジョーンズによるHaskellでのモナド入力/出力、同時実行、例外、および外国語呼び出し。(TacTicsの回答に感謝します。)

4
コンピュータサイエンスを完全に自習するにはどうすればよいですか。[閉まっている]
完全に独学のプログラマーであるため、典型的なCS卒業生に教えられたコンピューターサイエンスコースを自己学習することで自分自身を改善できるといいのですが。 インターネットでさまざまなリソースを見つけるのは簡単です。もちろん、MITのオープンコースウェアがあり、スタンフォード大学や他の大学のCourseraコースもあります。インターネットにはさまざまなオープンリソースが散在しており、繰り返し推奨される優れた書籍もいくつかあります。 私は多くのことを学んでいますが、私の研究は非常に断片化されており、それは本当に私を悩ませています。私は大好きですどこかで、私が従うべき道と私が自分自身に制限するべきスタックを見つけることができたので、私が研究したコンピューターサイエンスの本質的な部分を確信でき、それから私が持っていないものに体系的にアプローチします。 ウィキペディアの問題は、何が必要かを教えてくれないが、完全なリファレンスであることを主張していることです。 MITは、コンピューターサイエンスと電気工学のためのコースウェアを公開しています。また、コースの膨大なリストがあり、個人の興味/要件ごとにどのコースが必須で、どのコースがオプションであるかを教えてくれません。異なる科目を研究すべき順序については言及していません。 私が大好きなのは、このダミーのリストのように、フォローできるリストを作成することです SUBJECTS DONE Introduction to Computer Science * Introduction to Algorithms * Discrete Mathematics Adv. Discrete Mathematics Data structures * Adv. Algorithms ... おわかりのように、コンピューターサイエンスが特定の主題で構成されているかどうかはほとんどわかりません。 たとえ誰かがMITコースウェアの必須コース(+ MIT OCWに存在しない必須科目)を推奨される学習順序で指摘したとしても、それは非常に役立つでしょう。 既に行った投稿を一覧表示します(探しているものが見つかりませんでした) https://softwareengineering.stackexchange.com/questions/49557/computer-science-curriculum-for-non-cs-major-一番上の答えは、cseを勉強する価値がないと言っている https://softwareengineering.stackexchange.com/questions/110345/how-can-a-self-taught-programmer-learn-more-about-computer-science-MIT OCWを指す https://softwareengineering.stackexchange.com/questions/49167/studying-computer-science-what-am-i-getting-myself-into https://softwareengineering.stackexchange.com/questions/19912/overview-of-computer-science-programming

5
コンストラクタから例外をスローする必要がありますか?
PHPのコンストラクターから例外をスローできることは知っていますが、それを行う必要がありますか?たとえば、パラメータの値が期待どおりではない場合。 または、メソッドが呼び出されるまで例外のスローを延期する必要があります。両方の場合の長所と短所は何ですか?

3
JavaがAndroidに選ばれたのはなぜですか?
C ++のようなものではなく、JavaがAndroidに選ばれたのはなぜですか?Javaは非常に多くのメモリを使用すると聞いていますが、モバイルデバイスではメモリの使用量が少ないことが非常に重要だと思います。モバイルデバイスでC ++のような言語の代わりにJavaを使用することに本当の利点はありますか?
46 android  mobile 

9
エンタープライズソフトウェアとは何ですか?
「通常の」ソフトウェアとエンタープライズソフトウェアの違いがわかりません。これらを読んだ後でも... ウィキペディアの「エンタープライズソフトウェア」 Techcrunchの「エンタープライズソフトウェアは再びセクシー」 コーディングホラーに関する「The Great Enterprise Software Swindle」 本当の違いに頭を悩ませることはできません。2つの間に何か違いはありますか?なぜエンタープライズソフトウェアが悪いと言われるのですか?

22
従来のBASICは商用ソフトウェア開発に使用されたことがありますか?その場合、制限はどのように克服されましたか?
私を含む私たちの多くは、自宅のコンピューターで書かれたプログラムでプログラミングの生活を始めました。 10 PRINT "ENTER RADIUS" 20 INPUT R 30 PRINT "CIRCUMFERENCE="; 2 * R * PI 40 PRINT "AGAIN?" 50 INPUT A$ 60 IF A$="Y" THEN GOTO 10 70 END もちろん、行番号ベースのBASICは、最も基本的な方言のような構造の文逃したもので、スパゲッティコードを作成するためのがちだったWHILEすべてのものが、やって、FORと-loopをIF、GOTOとGOSUB。QBASICとVisual Basicが登場した1991年以前に、BASIC方言について話しています。 BASIC方言は、熱望するプログラマーの中で悪いスタイルを促進したかもしれませんが、そのようなBASIC方言で作成されたより大きな商業プロジェクトはありましたか?もしそうなら、彼らはどのようにして明らかに欠点を抱えて対処し、回避しましたか? 「深刻」とは: ゲームではありません(たとえば、Pimaniaなど、一部の商用ゲームがBASICで記述されていることは知っています) フリーウェアではない 些細ではない、つまり、かなり大きい(たとえば:少なくとも1500 LOC) 複数の顧客に販売(社内開発ではない) 「ミッションクリティカル」がプラス
46 history  basic 

16
ゲッターのロジック
私の同僚は、ゲッターとセッターのロジックはできるだけ少なくすべきだと言っています。 しかし、ゲッターとセッターには多くの要素が隠されており、実装の詳細からユーザー/プログラマーを保護できると確信しています。 私がすることの例: public List<Stuff> getStuff() { if (stuff == null || cacheInvalid()) { stuff = getStuffFromDatabase(); } return stuff; } 仕事のやり方の例は、物事を行うように私に言っています(彼らはボブおじさんからの 'Clean Code'を引用しています): public List<Stuff> getStuff() { return stuff; } public void loadStuff() { stuff = getStuffFromDatabase(); } セッター/ゲッターではどのくらいのロジックが適切ですか?データ隠蔽の違反を除いて、空のゲッターとセッターの使用は何ですか?
46 coding 

8
Pythonicコードを効果的に書く方法を学ぶにはどうすればよいですか?
「pythonic」のグーグル検索を行うと、幅広い解釈が明らかになります。ウィキペディアのページは言います: Pythonコミュニティの一般的な新語法はpythonicです。これは、プログラムスタイルに関連した幅広い意味を持つことができます。コードがpythonicであると言うことは、Pythonのイディオムをうまく使用していること、自然である、または言語が流であることを示すことです。同様に、インターフェイスまたは言語機能についてpythonicであると言うことは、Pythonイディオムとうまく機能し、その使用が他の言語とうまく噛み合うと言うことです。 「unpythonic」という用語についても説明します。 対照的に、非Pythonコードの特徴は、PythonでC ++(またはLisp、Perl、Java)コードを記述しようとすることです。つまり、別の言語の形式の慣用的な翻訳ではなく、大まかな転写を提供します。pythonicityの概念は、読みやすさのPythonのミニマリスト哲学と密接に結びついており、「それを行うには複数の方法があります」アプローチを避けています。判読不能なコードまたは理解できないイディオムは、Pythonではありません。 「pythonic」という用語の意味は何ですか?実際にそれを効果的に適用する方法を学ぶにはどうすればよいですか?

10
CS学位のない成功したプログラマーになる方法[終了]
免責事項(回答する前に読んでください): 私が尋ねたい質問に似た質問をいくつか見たので、ここにいくつかの同様の質問があります。 私見彼らは完全に私が求めているものでもなければ、私が望んでいるほど徹底的でもない(私は以下の質問の答えを洗い流すつもりはなく、質問者を信用しない、私はただなりたいもう少し詳しく): CSの学位は、年配のプログラマに利益をもたらしますか? https://softwareengineering.stackexchange.com/questions/80024/importance-of-certifications-for-java-programmer-without-bs-degree https://softwareengineering.stackexchange.com/questions/81591/in-the-absense-of-a-cs-degree-how-can-i-fill-in-the-gaps-so-to-speak 開発職に応募する際のCS学位の重要性は? はっきりさせてください、私は以下を求めていません: 自分でプログラミングをゼロから学ぶ方法(CSの学位なし) 優れたソフトウェア開発者として自分を売り込む方法(CSの学位なし) ソフトウェア開発者として素晴らしい高給の仕事を得る方法(CSの学位なし) 少しのコンテキスト: さて、免責事項がありましたので、ソフトウェア開発者としての私の経験の短い歴史から始めて、質問を具体化します。 まず、私は信じられないほど幸運でした。私はソフトウェア開発について知っていることすべてを本当に学んだいくつかの仕事の機会(2、3の重いバックエンドPHP / MySQLプロジェクト、およびXAML / C#のいくつかのWP7アプリ)を与えられました。私が持っていたほぼすべてのソフトウェア開発の仕事は、私が正当に資格を持っていなかったものでした(そして、雇用主に雇われる前にそれを明確にしました)。当然のことではありませんが、自分に信用を与えたくはありませんが、完璧な謙虚さは謙虚さを欠いていると言えます。 私が経験したほとんどすべての開発ジョブで、雇用主の期待を上回り、貴重な資産であることが証明されました。もちろん例外があります1。しかし、私のポイントは、私はかなり頭が良く、仕事で成功するために知っておくべきことを自分自身に教えることができたということです。仕事ごとに、私はますます引き伸ばされました。 私はワシントン大学のシアトルキャンパスに参加し、現在は4年生で、残り2年で数学の学位を取得しています。私が経験したさまざまな仕事の間(リストが必要な場合は私の履歴書をご覧ください)、フルタイムの学生として学校にも通っています。 ほとんどの開発者は同意すると思うので、実際のコードの作成、実際の2製品の構築、素晴らしい人々との作業、ユーザーの生活にプラスの影響を与えることと比較した入門 プログラミングコースABSOLUTELY PALES を含む一般的な学部課程を勉強します3。 だから...物事が進むにつれて...私は勉強に集中するのではなく、はるかに多くの時間とエネルギーを費やしました。ときどき非常に恐ろしいパフォーマンスをしましたが、ほとんどの場合、成績を維持することができました。 しかし、コンピュータサイエンスプログラム UWではある非常に、非常に、非常に、非常に競争力のあります。 ですから、プログラムに拒否されたのは驚きではありませんでした。二回。皮肉なことに、メールで拒否通知を落胆させるものの、いつも丁寧に受け取っていた30分の時間帯に、SDEとして夏のインターンシップ4を提供するAmazonから電話がありました。 ソフトウェア開発で自分と同じ目標を共有している他の「21歳の男性」を見回すと、自分がどこにいて、何を学んでいるのか、自分が何であるのか、そして何についてできます。もちろん、私よりもはるかに素晴らしい21歳の子供たちがいます。群衆の中で目立つと言うつもりはありません。ただ、私は平均的な仲間の進歩の背後にあるとは思えません。 。 私はソフトウェアの世界で成功する能力に自信を持っています。さらに重要なことは、本当に必要なときに成長し、学び、恥ずかしく謙虚になりたいという自分の能力と欲求に自信を持っていることです。 数学の学位 学位を取得することのみを目的として数学の学位を取得しています。(機会があったので)今中退して仕事を始めるべきだと言う人もいれば、学位を本当に修了すべきだと言う人もいます。どちらのキャンプも育ちがちな理由とはまったく異なる理由で学位を取得することを決心しましたので、その点で何らかの形で私を励まさないでください。「クローズ」という問題を検討してください:) * DEEP BREATH * ...申し訳ありませんが、これは予想よりも長いです。 これは本質的に、私の質問です: どの程度の研究分野、一般知識、および現在不足しているかもしれないCS学位を通じて得た他のスキルを客観的に決定するにはどうすればよいですか? これらのスキルを最も重要な順に並べ替えるにはどうすればよいですか? トップ大学のCS学部生のレベルに匹敵する、またはそれを超えるような方法でこれらの属性を達成するために私の教育を補うための最良の方法は何ですか(今後2年間)? 私がすでに取っている手順は次のとおりです。 開発コミュニティに尋ねる(この投稿) 私と同様のキャリアパスを共有するベテラン開発者とのメンターシップを追求する 短期および長期の「学習」目標と、学習のトピックを概説する後続のシラバスを定義する コードを書き続け、私が情熱を注いでいるプロジェクトに取り組みます ここまで来たら、クッキーに値します:) だから...開発コミュニティ、ベテランの開発者、私と同じボートに乗っている仲間の学生、あなたはどのようなアドバイスがありますか? また...私が求めていないことについて、この投稿の上部にある免責事項に留意してください。 …
46 education 


15
アマチュアが優秀なプログラマーになることは可能ですか?[閉まっている]
プロのフルタイムプログラマは、自分の仕事から継続的に学習することで素晴らしい仕事をすることができます。アマチュアプログラマーはどのようにして優れたプログラマーになるために訓練できますか? **音楽を演奏したり歌ったりするのが好きな人は、それがあなたの趣味であり、あなたが興味を持っているので、それを行うことができます。しかし、プロの歌手になる必要も、生計のために歌う必要もありません。これはプログラマにも当てはまりますか?有名なアマチュアプログラマーはいますか?
46 training 

9
最も直交プログラミング言語は何ですか?[閉まっている]
プログラミング自体とはまったく関係のない特別な言語規則(配列からポインターへの減衰など)について新入生に教えなければならないことに、私は何度もイライラしています。だから私は疑問に思いました: 特別な言語ルールの数が最も少ないプログラミング言語とは何ですか?すべてが第一級であり、迷惑な技術的制限なしで構成できますか?そのような言語は完璧な教育言語ではないでしょうか? モデレーターノート いくつかの説明とコンテキストを提供する長い回答を探しています。言語をリストするだけでなく、言語が質問に答える理由を説明してください。何も説明していない回答は削除されます。詳細については、良い主観、悪い主観を参照してください。

12
リレーショナルデータベースがネストされた形式で情報を返すことをサポートしないのはなぜですか?
ブログを構築していて、投稿やコメントが必要だとします。そこで、自動インクリメント整数「id」列を持つ「posts」テーブルと、外部キー「post_id」を持つ「comments」テーブルの2つのテーブルを作成します。 次に、おそらく最も一般的なクエリを実行します。クエリとは、投稿とそのコメントをすべて取得することです。リレーショナルデータベースはかなり新しいので、私にとって最も明白なアプローチは、次のようなクエリを作成することです。 SELECT id, content, (SELECT * FROM comments WHERE post_id = 7) AS comments FROM posts WHERE id = 7 これにより、必要な投稿のIDとコンテンツ、および配列(JSONで使用するようなネストされた表現)にきちんとパッケージ化されたすべての関連するコメント行が得られます。もちろん、SQLおよびリレーショナルデータベースはこのようには機能せず、最も近い方法は、「投稿」と「コメント」の間の結合を行うことです。これにより、多くの不必要なデータの重複が返されます(同じ投稿情報が繰り返されます)すべての行で)、つまり、データベースをまとめて処理するためと、ORMですべてを解析して元に戻すための両方の処理時間が費やされます。 ORMに投稿のコメントを熱心に読み込むように指示した場合でも、最善の方法は、投稿に対する1つのクエリをディスパッチし、次にすべてのコメントを取得する2番目のクエリをディスパッチしてからクライアント側にまとめることです。また非効率的です。 リレーショナルデータベースは実証済みのテクノロジーである(地獄、私よりも古い)こと、そして何十年にもわたって膨大な量の研究が行われていることを理解しています。そして、それらには本当に正当な理由があると確信しています(そしてSQL標準)は、そのように機能するように設計されていますが、上記で説明したアプローチが不可能な理由はわかりません。私は、レコード間の最も基本的な関係の1つを実装する最も単純で明白な方法であるように思えます。リレーショナルデータベースがこのようなものを提供しないのはなぜですか? (免責事項:私は主にRailsとNoSQLデータストアを使用してwebappを書いていますが、最近Postgresを試しました。実際にそれが大好きです。リレーショナルデータベースを攻撃するつもりはありません。ただ困惑しています。) Railsアプリを最適化する方法や、特定のデータベースでこの問題を回避する方法を尋ねるのではありません。私は直感に反し、無駄に思えるのに、なぜSQL標準がこのように機能するのかを尋ねています。SQLの元の設計者が結果をこのようにしたかったという歴史的な理由がいくつかあるに違いありません。
46 database  sql  rdbms  query 

13
なぜ最新の動的言語よりも重いGUIアプリを構築するのにC ++が好まれているのですか?[閉まっている]
重いGUIコンテンツを含むアプリのほとんどは、通常C ++で開発されています。ほとんどのゲーム/ブラウザはC ++でコーディングされています。 最新の動的言語でより良いGUIアプリを開発することはできませんか?私はjavaが素晴らしい選択ではないことを知っています。しかし、ネイティブにCで構築されているpythonのような言語はどうでしょうか?最新の言語は祖先よりも優れているはずではありませんか?なぜ最新の言語よりも古いC ++を優先する必要があるのですか? また、GUIの処理速度を向上させるために、C ++で責任を負うのは何ですか?一方、他の最新の言語に欠けているのは何ですか?

5
PHPまたはASP.NETを使用する場合 [閉まっている]
私はPHPとASP.NETを使用してWebアプリケーションの開発に幅広く取り組んできましたが、顧客からよく聞かれる質問の1つは、PHP Webサイトとasp.net Webサイトのどちらに進むかです。 したがって、最初に頭に浮かぶのは、次のような質問に答えることです。 PHPはオープンソースであり、ASP.NETはMicrosoft製です。 通常、そのような何かが言われた後、顧客はそこに空白の外観を持っています。明らかに、一方がオープンソースであり、もう一方がオープンソースではないという事実は、実際にそれらをazeしていません。そして、正当な理由で、私が最初にそれを聞いたとき、それは本当に私に多くを語らないからです。 両方で作業して、ウェブサイトの開発に関してはそれぞれに違いがあることを知っています。 私の質問は、ASP.NETとPHPの違いは何ですか 特徴 セキュリティ 拡張性 フレームワーク 平均開発時間 適切な開発プラットフォームで十分な情報に基づいて選択できるように、顧客と比較できるように、事実のリストを編集しようとしています。

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