初めての要件と設計が完了したらどこでプログラミングを始めますか? (テストは同じ順序で、ただしコードの前に書かれていると仮定します)。どこからプログラミングを始めますか?
- エントリポイント
- フレームワーク/サポートクラス
- エンティティークラス
- 最初
最も簡単な方法最初
初めての要件と設計が完了したらどこでプログラミングを始めますか? (テストは同じ順序で、ただしコードの前に書かれていると仮定します)。どこからプログラミングを始めますか?
最も簡単な方法最初
この質問への回答を投稿したすべての人が、別の場所から開始するようです。出発点の幅広いバリエーションは、が本当にスタートになるべき場所の完璧な図です。どこでも出発点は理想的です。
さまざまな人々がさまざまな方法で問題に取り組んでいます。しばしば、プロジェクトの成功は、最初のアプローチとは独立しています。考えて時間をかけていろいろな領域を試してみて、まず自分に合ったものを見つけてください。
EDIT:より抽象的なレベルで、this article by Paul Grahamは、プログラミングにLispのスタイル、ボトムアップアプローチに良い洞察力を提供しています。
私は、依存関係チェインの最下位レベルから最高レベルまで作業します。そうすれば、早期にコンパイルしてテストすることができますし、私が行くにつれてそれを構築することができます。
私はデータが入るだろうとのうち、構造(データアクセス層)それに関連するロジック最後に と そして、ビジネスオブジェクツが言ったかそれから私のデータ構造(DBテーブルなどXTD、データ辞書、) で始まります、ユーザーインターフェイスとそれらのプログラムフックをビジネスロジックに接続する
まず、サポートフレームワーククラスを作成してテストする傾向があります。私が見つけなければ、コンパイルとテストをする前にあまりにも多くのコードを書くことになります。また、それらを最初に書くことは、それらを使ってコードにあまりにも不思議に結合されたハーフベークされたものよりも、完全な抽象化をする傾向があることを意味します。サポートするクラスを記述するときに上位レベルのコードを記述していない場合は、誤って循環依存を導入しないようにします。
つまり、私がサポートクラスを書いているときは、少なくとも、それらが上位レベルのコードでどのように使用されるかの例を示すコードスニペットが既に書かれています。
作成する内容によって異なる必要があります。私はWindows Mobileアプリケーションに取り組んでいて、フォームをボトムアップし、クラスやさまざまなデータ抽象化に取り組み、それをGUIと一緒につなげたのは悪夢でした。人々(非開発者)のコードを表示することはできず、40%が完了したことを彼らに確信させるだけで、何らかのGUIを参照する必要があります。私が戻ってきたら、最初にGUIをモックアップします。
しかし、データ駆動型のWebサイトについては、データをどのように見えるか、またそのデータとやりとりする方法がわかっているため、データを操作するためのWebページが必要です。
自然の人間の傾向は、簡単なことは自分よりも簡単だと思っていて、難しいことは難しいと思うので、私は "最も簡単"と "最も難しい"ものに興味がありますさあ!
私はUIを粗くすることから始めます。
デザインや要件がすべて間違っていた(すべての人がサインオフしたとしても)方法についての議論がより迅速になり、多くの無駄な労力が節約されます。
しかし、ほとんどの人はUIが仕事の大部分であると想定しているため、画面がほぼ最終的に見えるときに時間がかかりすぎる理由を理解できないため、少し危険です。
ほとんどの場合、ユーザーインターフェイスから始まります。来るものと出るものが正確に分かれば、他のものを整理するのが簡単だと分かります。
アプリケーションに依存しますが、最初にUIを使うのは、必要のないコードを書く時間を無駄にしないようにするためです。 – erickson
+1:多くのアプリケーションでは、その下にあるすべてのものがユーザーインターフェイスにしか提供されません。最初にUIを構築することは、情報モデルとデータレイヤーの要件を明確にするのに役立ちます。 –
私はちょっとこの答えが好きです。私が勉強しているもののほとんどにUIはないので、私はそれを私の中で言及しなかったが、それは良い点だ。 –
デスクトップ/コマンドラインプログラムを使用して、私は通常テストとコンパイルを早期に行うために、Tedが示唆したことを提案し、依存関係チェイン(ツリー)の先頭(ルート)から開始します。次に、クラスと複雑さをチェーン(ツリー)を段階的に上(上)に追加します。
私は通常、やや異なるアプローチを取るのWebアプリケーションでの作業:
これまでのところ、アプリケーションの最下位レベル(データレイヤー)から開始し、そこから構築することについて一般的な合意に同意します。ビジネスロジックがデータレイヤーの上に構築され、フロントエンドがビジネスロジックなどの上に構築されているので、私にとっては理にかなっています。
しかし、残念ながら、お客様は、あなたが何かをしていることを知るために目に見える変化を見る必要があります。そして、技術マネージャーもこの考え方に陥る傾向にあることは驚きです。
私は各繰り返しでUIに何かが行われるようにしています。つまり、ある意味では、アプリケーションは縦線で作成されています。つまり、いくつかのデータ、いくつかのビジネスロジック、いくつかのUIは、顧客を示しています。繰り返す。
もしあなたがそれをしていたら、彼らはあなたが最初からほぼ完了していると思っていて、それから数週間後にあなたがまだそれに取り組んでいるという本当の気持ちがないのです。あなたは敗北のために勝つことはできません。 –
個人的には、ドメインモデルから始めてください。これは、大部分の場合、要件から直接引き出され、作成する必要がある部分を特定するのに役立ちます。あなたのドメインモデルはあなたのデータモデルを動かすでしょう。そして、その要求はドメインオブジェクトに何をしなければならないかを教えてくれるでしょう。
可能な限り、私はアプリ全体のパスから始めます。スタブで寛大に作業してください。これは、プログラムの全体的なアーキテクチャを明確にするのに役立ちます。
これが完了したら、次に最も難しい部分を作業することを強くお勧めします。 (一番難しい部分は一番危険な部分、別名は最も少ない部分です)
なぜですか?欠落している情報をすべて見つける時間が必要なので、この部分がうまく機能しない場合、他の部分は無駄になります。
再:ハード項目の優先順位対簡単:
私は私が最初に難しいアイテムになると思い何をやろう。このようにすれば、状況が悪くなると、より高度な通知を得ることができます。また、何かが達成不可能であることが判明した場合、依存していてもはや必要でない小さなものの束に時間を無駄にすることはありません。
を開始するのに最適な場所は、私見、データスキーマで、次いでドメインモデルとそのモデル&インターフェイスと、インターフェイス間のすべてのビジネス・ロジックです。
使用するテクノロジと開発のパラダイムに応じて、理想的には大量の要件を表す必要があるため、コーディングの世界にビジネス要件が自然に拡張されます。
実際には、構築しているもの、ソリューションの設計に使用した設計パターン、使用されている関連テクノロジ、相互関係(依存関係)、依存関係などを考慮する必要があります。
制限要因である部分から始めてください。データスキーマなしで適切なドメインモデルを構築できない場合は、まずスキーマを作成してください。
非常に知的なデータベース(すべてのテーブル、すべてのエラーチェックと検証を行うストアドプロシージャに組み込まれた完全性とルール)と、あまり知られていない中間層(すべてがデータを渡します)仕事の大部分と機能は背後にあります....
あなたはかなり単純なデータベース(テーブルとフィールドのみ)と非常にスマートな中間層(すべての論理、検証と完全性チェックが完了しているここに)...機能の大部分は中間にあります...
これは好みの問題です。私は進歩が好きなので、アプリケーションの "最も単純な"部分である "最も簡単な"ものから始めます。私にとっては、これは私にとってコードレベルでプロセス全体を結晶化させるのに役立ちます - 比較的頻繁な速度で場所が落ちるのを見ること。
しかし、私は常にフロントエンドを最後まで残しています(または、他の誰かがそれをやるようにしています - 私が好むでしょう)。
科学と同じくらい芸術です...同じ技術とプロセスで模様を繰り返すのでなければ、すべてのプロジェクトが異なります。その場合は科学に落としてより効率的なプロセスを構成できるように、各プロジェクトから教訓を取り除いてください。
乾杯
私は、フレームワークを書いて、その後、他の部分は一緒に落下させることから始めたいです。
例えば、私は通常、私が必要な機能を持っていれば、私が必要と知っているクラスを作成し、それからインタフェースを作ります。それから周囲の機能を継承します。
私はこのようにするのが好きです。気の流れのような気がするなら、物事をクリックすると非常に満足です。
職人プログラマとしての私のテイク:
Djangoアプリケーションを開発するときは、まずモデルを定義し、ちょうど適切なテンプレートをハックして、 UI上で残りの作業を終了します。これらのすべてのステップは必然的に少しオーバーラップします(ビューのコーディング中にモデルクラスを変更するなど)が、これは一般的なロードマップになります。
私は、より低いレベルで特に必要なものをよりよく定義するため、より高いレベル(アーキテクチャ)の部分から始めたいと考えています。あなたが低いレベルから始めるならば、あなたは通常、より低いレベルが働くと決めたやり方に合うように、より高いレベルを荒廃させることになります。本質的に、あなたはより低いレベルで作業を始めることによって仕事をより困難にし、デザインは理解しにくくなります。より高いレベルのアプリケーションコードは、わかりやすい部分ですから、そこから始めて、それがあなたが望むように正確に機能するようにすることは、私にとっても意味があります。
これは通常、UIから始まり、UIの構築時に機能を追加することを意味します。
編集:作業している上位レベルで何かがうまくいくかわからない場合は、その上のレベルのピースを呼び出すメソッドを作成し、その下位のモジュールに作業を送ります。これは私のコードを簡素化するのに不思議です。
これをコミュニティウィキにすることをお考えください –
なぜコミュニティウィキですか?それはプログラミングについて完全に有効な質問です。 – DeadHead
はい、有効ですが、一般的にはwikiであるはずの投票のような質問です。 – gnovice