プログラミングの方法と、プログラミングの方法を学ぶ方法は知っていますが、システムを適切に作成する方法と場所はどこで学びますか?[閉まっている]


11

システムを作成する際に考慮しなければならないことがたくさんあります。たとえば、ユーザーがログインして相互作用し、コンテンツを作成および編集するWebベースのシステムを考えてみましょう。今、私はセキュリティ、バリデーション(私はそれが何を伴うのかを100%確信しているとさえ思わない)、「ユーザーがお互いの足を踏まないことを確認する」(これを言う?)、多くのエラーを防ぐことを考えなければならない予期せぬ状況でデータベースデータが問題にならないようにしていますか?どのように、どこで学ぶべきかわからないこれらすべてのことについて、この種のものに関する本はありますか?私が言ったように、コードを書くことと実際に正しいコードを書くことの間には大きな違いがあるように思えます。私の現在のプログラミング作業は、私が説明したものの多くを欠いているように感じ、後でそれが引き起こす問題を見ることができます。そして、データが存在し、人々がそれを使用しているため、問題を解決するのははるかに困難です。だから誰も私にこのタイプの学習のための本やリソース、またはプログラミングの適切なサブセット(?)を教えてもらえますか?

PS:自由にタグを修正してください。何を言っているのかわかりません。

編集:私が書いた例のいくつかは他のタイプのシステムにも当てはまると思います。私は主にウェブの仕事に携わっているので、他の良い例は知りません。

回答:


10

私の知る限り、プロのプログラマーはこれらのことを3つの主な方法で学習します。

  1. 悪い経験から学ぶ -何か間違ったことに出くわします。あなたはそれを修正します。「ねえ、もう二度とやってはいけない。次回はXをやる」あなたは明らかにその中にいます。
  2. 悪い経験の前に学ぶ-最終的には、ある種の問題が来るのを見るようになります。あなたがそうするとき、あなたはそれを避けようとします。本を読んだり、ウェブを検索したり、実験をしたりするかもしれません。
  3. 経験豊富な同僚から学ぶ -これは非常に簡単ですが、それでも簡単ではありません。秘Theは、同僚がまだ関連のある悪い経験に反応しているかどうかを判断することです。結局のところ、技術は進歩しています。

3つすべてを撮影することをお勧めします。あなたの質問に我慢する賢く経験豊富な同僚のいる場所を見つけてください。たくさんのことを試すことができるように、早くて頻繁に出荷できる場所であることを確認してください。そして、研究と熟考のために時間をかけてください。


#1)については、あなたが学んでいる悪い経験や間違いは必ずしもあなた自身のものである必要はないことを覚えておいてください。ウェブ上で時間を過ごし、プログラマーがどこにいるのかを調べ、犯したまたは遭遇したクレイジーなミスのホラーストーリーを学び、プログラミング中にそれらを頭の後ろに置いてください。
シャドゥール

1
Shadur、同意しますが、悪い経験のいくつかは本当にあなた自身のものである必要があると思います。一部の人々は、完璧なものを作ることができるまで待って、傍観者に座ろうとします。しかし、彼らは本当に自分のスキルを向上させたいなら、そこに着いて作り始める必要があります。
ウィリアムピエトリ

4

Webアプリに関しては、私がこれまで見たどの場所よりも、この回答にまとめられより良い情報があります。

しかし現実には、完全なシステムをうまく構築するために知っておくべきことがたくさんあります。習熟のレベルに到達するために必要な練習の量として10,000時間をサポートする研究があり、情報システムの開発も例外ではありません。


だから、それは異なることで違うと思う?
MetaGuru

たとえば、多くの問題はWebアプリに固有のものであり、多くはより一般的なものです。あなたがカントーに尋ねていることを完全に理解しているかどうかはわかりません。
クエンティン・スターリン

3

ウィリアム・ピエトリの回答はかなり気に入っていますが(+1)、追加する必要があると思います。あなたがシステムによって意味するものがソフトウェアだけで構成されていると仮定することさえ。

しかし、その内容に入る前に、役立つ本を知りません。続くすべてのことは、経験から学びました(つまり、ウィリアムが作成した3つのポイント)。

あなたが話していることは、少なくとも4つの幅広い役割に及びます。小規模から中規模のプロジェクトでは、1人でこれらの役割をすべて満たすこともありますが、大規模なプロジェクトを開始する場合は、これらの役割を少なくともある程度分離する必要があります。誰もが有意義な方法でそれらすべてを熟知することは困難です。

  1. ビジネスアナリスト

    それは顧客と話し、彼らの要求を建築家が理解できる何かに翻訳する人です。基本的に、適切に策定された要件のリスト。これには、明らかな機能要件(このシステムが提供する必要があるもの)が含まれますが、非機能要件(システムが満たす必要がある一般的な特性は何ですか?これには、セキュリティ、信頼性、可用性、復元力、容量、パフォーマンス、堅牢性、ユーザーの観点から他のそのような要件)。

    これは、システムが実行する必要がある最初のパスであり、真剣な思考のまさに始まりです。

  2. システムアーキテクト

    この人は、その中で働くための高レベルの技術的フレームワークを作成します。彼らは、アウトラインマッチプランを提供します。一般的なツール、テクニック、構成。システム全体をより小さなコンポーネントに分解し、相互にどのように適合し、外界にどのように適合するか...

    これにより、多くの点で考慮すべき事項を絞り込むことができます。その段階で、ビジネスアナリストによって書かれた要件に関する問題が頻繁に発見されます。彼らに戻り、彼らが望むものとその表現の理解を改善するために、いくつかの反復のために戻ってください。

  3. システム設計者

    この役割は、すべてを機能させる方法です。これは、一人のショーよりもチームワークの方が多いかもしれません。しかし、システム設計全体を監督する主任設計者がいる可能性があります。この人は詳細を掘り下げ、建築家の見解が実際に構築できるものであることを確認する必要があります。

    システムのアーキテクチャー、さらにはビジネス分析のさらなる洗練を期待してください。

  4. テストマネージャー

    この役割はしばしば忘れられます。しかし、1日の終わりにテストできない場合、ビルドできることをどのように証明できますか?すべての段階の結果をレビューする必要があります。テストの有能な人がビジネス分析、アーキテクチャ、および設計を行います。

それは短い要約です。

それらの人/ギャルは、何を考えなければならないかについて考えるチェーンの工場の人々の一般的な実行です。

大規模な銀行業務や宇宙アプリケーションなどの複雑なプロジェクトで、2つの例を挙げると(数百から数千人日と考えてください)、あらゆる段階でプロジェクトのレビューとサポートを行うために、多くの主題の専門家が呼ばれます。これらの役割には、セキュリティ分析、システムのサイズ設定、容量、パフォーマンス、データベース、クラスタリング、および正確なビジネス領域を含む他の多くのこのような狭い専門分野が含まれます。さまざまな役割は、システムのサイズと複雑さに依存します。

すべてを試して、それをすべて知ってはいけない、と言ってはいけません。ただし、全体像を把握することはできますが、小規模なプロジェクトでは大規模なプロジェクトよりも多くのことを掘り下げることができます。単純に複雑さのレベルにより、より丸みを帯びることができるからです。

システムの設計方法を知りたい場合は、箱の外で考えて質問を開始する必要があります。顧客の立場に十分入って、何がうまくいかないか、何がテストを必要とするかを考えてみてください。次に、実際の顧客と一緒になって、彼らが必要とするシステムの範囲と限界を説明するようにそれらをプッシュします。加えて、私が「顧客」と言うときはいつでも、これにはいくつかの非常に異なる人々が含まれることを理解しなければなりません。設計された目的のために毎日システムを使用する人がいます。オペレーター、テクニカルサポート、レポートなどを必要とするマネージャー、監査人、インフラストラクチャチーム、支払いを行った利害関係者、システムをテストする手段を必要とする品質マネージャーがいます。彼らは一人です 一度に1つずつこれらすべての帽子をかぶるように依頼してください)、彼らに必要なものをすべて尋ねると、システム要件が何であるかを理解するのに良いスタートを切ることができます。そこからアーキテクチャを導き出し、そこから設計を導き出すことができます。

複雑なシステム(ソフトウェアのみ、または最も一般的な意味でのハードウェアとの統合)の場合、上記の4つの役割のそれぞれに1人では足りないだけでなく、システムの定義をプロジェクト管理する必要があります他のフェーズは言うまでもありません。

HPH、ASM。


2

ここで学ぶために、この種のものに関する本はありますか?

「本」ではありません。多くの書籍。

王道はない

私が言ったように、コードを書くことと実際に正しいコードを書くことの間には大きな違いがあるようです

正しい。

あなたは「アーキテクチャ」、大規模なプログラミングについて話している。

ステップ1.多くのコードを読みます。本当にたくさん。やりたいことを考えてください。関連するオープンソースプロジェクトを見つけてください。コードを読んでください。それのすべて。

ステップ2.さらにコードを読む。より多く。

ステップ3.アーキテクチャに関する本を読む。


2
読んで、読んで、読んで。しかし、実際のシステムを実際に実装する際に学習するものと同じではないことを示唆する必要があります。
クエンティン・スターリン

@qes:質問は「どこでシステムを適切に作るかをどこで学べますか?」でした。実際のシステムをひどく構築することでそれを学ぶことはありません。実際、実際のシステムをひどく実装することは、学習の正反対です。
S.Lott

3
私が一番気に入ったCode Completeから:「ソフトウェアエンジニアリングの分野では、過去の成功と失敗の例を非常に限定的に使用しています。建築に興味があるなら、[有名な建築家]の図面を勉強します...いくつかの建物を訪れてください...」。
ジェイコブ

@ S.Lott:悪口を言うことについてだれが言いましたか?
クエンティン・スターリン

@qes:先行技術を読まないで、大規模なプログラムをうまくやる可能性は何ですか?自分のような天才にとっては、いつでもあらゆる規模で優れたプログラムを単純に書くことは可能です。しかし、大規模プログラミングを検討していない他のすべての人にとって、何も読まないで大規模システムを実装しようとすることから始めることは、そこから有用なものを学ぶことができないほど多くの間違いを含む何かを書く道です。あなたの経験は異なるかもしれませんが、私は最初に読むことなく仕事をするほど頭が良くないことを知っています。
-S.ロット

1

たくさんの本を読むために...。

これで問題があることがわかったので、これらの本を読むように指示することにはいくつかのポイントがあります。(実際の作業を行う前に、これらの本について議論する意味はほとんどありません)

プログラムデザイン1,2,3および4のGamma、Helm、JohnsonおよびVlissidesパターン言語によるデザインパターン

しかし、すべてのパターンを使用できる場所に適用しようとしないでください

それも悪いことです。

お役に立てれば。


1

何をするかを学ぶ最良の方法はそれをすることです。フランス語を話す方法を学びたい場合は、フランス語を話し、フランス語を読み、フランス語を書き、フランス語について読み、フランスに行き、フランス人とフランス語で話す必要があります。ピアノの弾き方を知りたい場合は、実際にピアノを弾く必要があります。シンプルな曲を演奏し、ピアノの構造と音楽の構造を学ぶ必要があります。音楽を読む方法と、指を使ってピアノで音楽を表現する方法を学ぶ必要があります。ギターやフルート、サクソフォンができることに対して、音楽がどのような音で、ピアノができる音の種類を学ぶ必要があります。

プログラミングはまったく同じです。データベースの設計方法を知るには、データベースを設計する必要があります。暗号化を理解する場合は、暗号化アルゴリズムと暗号化プロトコルを実装します。複数のユーザーに同時にサービスを提供できるソフトウェアを作成する場合は、ディスクIO、ネットワークIO、およびスレッドの仕組みを理解する必要があります。それがどのように機能するかを理解するために、ファイルの読み取りと書き込み、ネットワークを介したデータの送信、リソースへのアクセスの同期を行うコードを作成します。それにはすべて練習が必要です。

「システム」は、一般的に、単なるものの集まりです。全体を形成するように調整される部分。大きなものを構築するには、たくさんの小さな部品を構築する必要があります。したがって、システムの構築方法を学びたい場合は、システムの構築を開始してください。問題を取り、断片に分割し、各断片を1つずつ実装します。最終的には、統合された「システム」になります。途中で数回は失敗するでしょうが、それでも大丈夫です。あなたが失敗していない場合、それは通常、あなたが十分に努力していないことを意味します。

また、コンピューターサイエンスを勉強するために学校に行くことをお勧めします。それは「練習」の部分ではあまり役に立ちません。あなたは自分でそれをする必要がありますが、それは露出の部分に役立ちます。コンピューターやコンピューターシステムの動作に関連するほとんどすべてのことについて、多くを学びます。これは、自分で学ぶのは困難です。


1
+1、やるだけでは不十分だと思いますが。しばらく経ってから同じコードを再検討するまで、あなたがそれをうまくやったかどうかわからないでしょう。そして、それでも、何かが間違っていることを知っているかもしれませんが、それをどのように改善できるかはわかりません。そのすべてをショートカットする1つの方法は、学習しようとしていることについてより経験豊富な人々から多くのpromtpフィードバックを確実にすることです。はい、「する」ことは非常に重要ですが、学習プロセスをスピードアップするために、あなたが何をするかについてのフィードバックをすることができます。
マルジャンヴェネ
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.